Name: series-workflowpkc79 Phase: Succeeded StartedAt: 2026-09-07 10:18:15 +0000 UTC FinishedAt: 2026-09-07 14:01:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[0] Phase: Succeeded StartedAt: 2026-09-07 10:18:15 +0000 UTC FinishedAt: 2026-09-07 10:20:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 10:18:15 +0000 UTC FinishedAt: 2026-09-07 10:20:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET" ], "series_id": "a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bond_enslave" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "abcea6f7-092c-48e4-8137-756a0ff617ba" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfZW5zbGF2ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBib25kX2Vuc2xhdmUoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIGJ5IGRlZmVycmluZyB0aGUgaW5jcmVtZW50IG9mIGBib25kLVx1MDAzZXNsYXZlX2NudGAgKGBXUklURV9PTkNFKGJvbmQtXHUwMDNlc2xhdmVfY250LCBib25kLVx1MDAzZXNsYXZlX2NudCAmIzQzOyAxKWApIHVudGlsIGFmdGVyIHBvdGVudGlhbCBlcnJvciBwYXRocyBkdXJpbmcgWERQIGNvbmZpZ3VyYXRpb24gY2hlY2tzLiBUaGlzIHByZXZlbnRzIGBib25kLVx1MDAzZXNsYXZlX2NudGAgZnJvbSBiZWNvbWluZyBkZXN5bmNocm9uaXplZC9pbmNvbnNpc3RlbnQgd2hlbiBlbnNsYXZpbmcgYSBkZXZpY2UgZmFpbHMgaW4gYGJvbmRfZW5zbGF2ZSgpYC5cblxuVGhlIGNoYW5nZSBpcyBzdHJpY3RseSBjb250cm9sLWZsb3cgYW5kIHN0YXRlLWNvdW50ZXIgbWFuYWdlbWVudC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29weV90b191c2VyL2luZm8tbGVhayBwYXRocywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFN0YW5kYXJkIHRlc3Rpbmcgd2l0aCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyBpcyBzdWZmaWNpZW50OyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBib25kX2Vuc2xhdmUoKSBpbiB0aGUgbmV0d29yayBib25kaW5nIGRyaXZlciB0byBkZWZlciBpbmNyZW1lbnRpbmcgdGhlIHNsYXZlIGNvdW50IHVudGlsIGFmdGVyIFhEUCBzZXR1cCBhbmQgdmFsaWRhdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0bGluay9ydG5sIGludGVyZmFjZXMgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhOTY2MmQxYTk3OTY2YmM5MGY2NzhkNDQ1NzBlYTgxZjgxODViODM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMDoxOTozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xuaW5kZXggYTliZmY3NjYzZWVjYS4uMTUxNGE4YmEwODg4ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcbkBAIC0yMjg0LDcgJiM0MzsyMjg0LDYgQEAgaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdFdSSVRFX09OQ0UoYm9uZC1cdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXHUwMDNlc2xhdmVfY250ICYjNDM7IDEpO1xuIFx0bmV0ZGV2X2NvbXB1dGVfbWFzdGVyX3VwcGVyX2ZlYXR1cmVzKGJvbmQtXHUwMDNlZGV2LCB0cnVlKTtcbiBcdGJvbmRfc2V0X2NhcnJpZXIoYm9uZCk7XG4gXG5AQCAtMjMzMiw2ICYjNDM7MjMzMSw5IEBAIGludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxuIFx0XHRcdGJwZl9wcm9nX2luYyhib25kLVx1MDAzZXhkcF9wcm9nKTtcbiBcdH1cbiBcbiYjNDM7XHQvKiBJbmNyZWFzZSB0aGUgc2xhdmUgY291bnQgYmVmb3JlIHJlYnVpbGRpbmcgdGhlIHNsYXZlIGFycmF5cy4gKi9cbiYjNDM7XHRXUklURV9PTkNFKGJvbmQtXHUwMDNlc2xhdmVfY250LCBib25kLVx1MDAzZXNsYXZlX2NudCAmIzQzOyAxKTtcbiYjNDM7XG4gXHQvKiBicm9hZGNhc3QgbW9kZSB1c2VzIHRoZSBhbGxfc2xhdmVzIHRvIGxvb3AgdGhyb3VnaCBzbGF2ZXMuICovXG4gXHRpZiAoYm9uZF9tb2RlX2Nhbl91c2VfeG1pdF9oYXNoKGJvbmQpIHx8XG4gXHQgICAgQk9ORF9NT0RFKGJvbmQpID09IEJPTkRfTU9ERV9CUk9BRENBU1QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9uZF9lbnNsYXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJvbmRfZW5zbGF2ZSgpIGluIHRoZSBuZXR3b3JrIGJvbmRpbmcgZHJpdmVyIHRvIGRlZmVyIGluY3JlbWVudGluZyB0aGUgc2xhdmUgY291bnQgdW50aWwgYWZ0ZXIgWERQIHNldHVwIGFuZCB2YWxpZGF0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3J0bmwgaW50ZXJmYWNlcyBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE5NjYyZDFhOTc5NjZiYzkwZjY3OGQ0NDU3MGVhODFmODE4NWI4MzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDEwOjE5OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggYTliZmY3NjYzZWVjYS4uMTUxNGE4YmEwODg4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC0yMjg0LDcgJiM0MzsyMjg0LDYgQEAgaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsCiAJCX0KIAl9CiAKLQlXUklURV9PTkNFKGJvbmQtJmd0O3NsYXZlX2NudCwgYm9uZC0mZ3Q7c2xhdmVfY250ICYjNDM7IDEpOwogCW5ldGRldl9jb21wdXRlX21hc3Rlcl91cHBlcl9mZWF0dXJlcyhib25kLSZndDtkZXYsIHRydWUpOwogCWJvbmRfc2V0X2NhcnJpZXIoYm9uZCk7CiAKQEAgLTIzMzIsNiAmIzQzOzIzMzEsOSBAQCBpbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldiwKIAkJCWJwZl9wcm9nX2luYyhib25kLSZndDt4ZHBfcHJvZyk7CiAJfQogCiYjNDM7CS8qIEluY3JlYXNlIHRoZSBzbGF2ZSBjb3VudCBiZWZvcmUgcmVidWlsZGluZyB0aGUgc2xhdmUgYXJyYXlzLiAqLwomIzQzOwlXUklURV9PTkNFKGJvbmQtJmd0O3NsYXZlX2NudCwgYm9uZC0mZ3Q7c2xhdmVfY250ICYjNDM7IDEpOwomIzQzOwogCS8qIGJyb2FkY2FzdCBtb2RlIHVzZXMgdGhlIGFsbF9zbGF2ZXMgdG8gbG9vcCB0aHJvdWdoIHNsYXZlcy4gKi8KIAlpZiAoYm9uZF9tb2RlX2Nhbl91c2VfeG1pdF9oYXNoKGJvbmQpIHx8CiAJICAgIEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfQlJPQURDQVNUKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDI1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCb25kaW5nIERyaXZlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBjaGFuZ2VzLiBJJiMzOTtsbCBoZWFkIHN0cmFpZ2h0IGZvciBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AgYW5kIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcHVsbCB1cCB0aGUgcGF0Y2ggYW5kIGl0cyBzdXJyb3VuZGluZyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgJiMzOTt3aHkmIzM5OyBiZWhpbmQgdGhlICYjMzk7d2hhdCYjMzk7IGFzIHF1aWNrbHkgYXMgcG9zc2libGUuIFRpbWUgdG8gc2VlIHByZWNpc2VseSB3aGF0IGdvdCBhbHRlcmVkIHdpdGhpbiBgYm9uZF9tYWluLmNgLiBVbmRlcnN0YW5kaW5nIHRoZSBjb2RlIHRoYXQgd2FzIGNoYW5nZWQgd2lsbCBnaXZlIHRoZSBtb3N0IHJlbGV2YW50IGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI3MDpcdFx0XHRcdFx0aWYgKGJvbmRfZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfUFJPTUlTQylcbjIyNzE6XHRcdFx0XHRcdFx0ZGV2X3NldF9wcm9taXNjdWl0eShzbGF2ZV9kZXYsIC0xKTtcbjIyNzI6XHRcdFx0XHRcdGdvdG8gZXJyX3N5c2ZzX2RlbDtcbjIyNzM6XHRcdFx0XHR9XG4yMjc0Olx0XHRcdH1cbjIyNzU6XHRcbjIyNzY6XHRcdFx0aWYgKGJvbmRfZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApIHtcbjIyNzc6XHRcdFx0XHRuZXRpZl9hZGRyX2xvY2tfYmgoYm9uZF9kZXYpO1xuMjI3ODpcdFx0XHRcdGRldl9tY19zeW5jX211bHRpcGxlKHNsYXZlX2RldiwgYm9uZF9kZXYpO1xuMjI3OTpcdFx0XHRcdGRldl91Y19zeW5jX211bHRpcGxlKHNsYXZlX2RldiwgYm9uZF9kZXYpO1xuMjI4MDpcdFx0XHRcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGJvbmRfZGV2KTtcbjIyODE6XHRcbjIyODI6XHRcdFx0XHRpZiAoQk9ORF9NT0RFKGJvbmQpID09IEJPTkRfTU9ERV84MDIzQUQpXG4yMjgzOlx0XHRcdFx0XHRkZXZfbWNfYWRkKHNsYXZlX2RldiwgbGFjcGR1X21jYXN0X2FkZHIpO1xuMjI4NDpcdFx0XHR9XG4yMjg1Olx0XHR9XG4yMjg2Olx0XG4yMjg3Olx0XHRuZXRkZXZfY29tcHV0ZV9tYXN0ZXJfdXBwZXJfZmVhdHVyZXMoYm9uZC1cdTAwM2VkZXYsIHRydWUpO1xuMjI4ODpcdFx0Ym9uZF9zZXRfY2Fycmllcihib25kKTtcbjIyODk6XHRcbjIyOTA6XHRcdC8qIE5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKCksIHdoaWNoIHdpbGxcbjIyOTE6XHRcdCAqIHJlbW92ZSB0aGUgbWFkZHJzIGlmIHRoZSBzbGF2ZSBpcyBzZWxlY3RlZCBhcyBhY3RpdmUgc2xhdmUuXG4yMjkyOlx0XHQgKi9cbjIyOTM6XHRcdGJvbmRfc2xhdmVfbnNfbWFkZHJzX2FkZChib25kLCBuZXdfc2xhdmUpO1xuMjI5NDpcdFxuMjI5NTpcdFx0aWYgKGJvbmRfdXNlc19wcmltYXJ5KGJvbmQpKSB7XG4yMjk2Olx0XHRcdGJsb2NrX25ldHBvbGxfdHgoKTtcbjIyOTc6XHRcdFx0Ym9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKGJvbmQpO1xuMjI5ODpcdFx0XHR1bmJsb2NrX25ldHBvbGxfdHgoKTtcbjIyOTk6XHRcdH1cbjIzMDA6XHRcbjIzMDE6XHRcdGlmICghc2xhdmVfZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2JwZiB8fFxuMjMwMjpcdFx0ICAgICFzbGF2ZV9kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9feGRwX3htaXQpIHtcbjIzMDM6XHRcdFx0aWYgKGJvbmQtXHUwMDNleGRwX3Byb2cpIHtcbjIzMDQ6XHRcdFx0XHRTTEFWRV9OTF9FUlIoYm9uZF9kZXYsIHNsYXZlX2RldiwgZXh0YWNrLFxuMjMwNTpcdFx0XHRcdFx0ICAgICBcJiMzNDtTbGF2ZSBkb2VzIG5vdCBzdXBwb3J0IFhEUFwmIzM0Oyk7XG4yMzA2Olx0XHRcdFx0cmVzID0gLUVPUE5PVFNVUFA7XG4yMzA3Olx0XHRcdFx0Z290byBlcnJfc3lzZnNfZGVsO1xuMjMwODpcdFx0XHR9XG4yMzA5Olx0XHR9IGVsc2UgaWYgKGJvbmQtXHUwMDNleGRwX3Byb2cpIHtcbjIzMTA6XHRcdFx0c3RydWN0IG5ldGRldl9icGYgeGRwID0ge1xuMjMxMTpcdFx0XHRcdC5jb21tYW5kID0gWERQX1NFVFVQX1BST0csXG4yMzEyOlx0XHRcdFx0LmZsYWdzICAgPSAwLFxuMjMxMzpcdFx0XHRcdC5wcm9nICAgID0gYm9uZC1cdTAwM2V4ZHBfcHJvZyxcbjIzMTQ6XHRcdFx0XHQuZXh0YWNrICA9IGV4dGFjayxcbjIzMTU6XHRcdFx0fTtcbjIzMTY6XHRcbjIzMTc6XHRcdFx0aWYgKGRldl94ZHBfcHJvZ19jb3VudChzbGF2ZV9kZXYpIFx1MDAzZSAwKSB7XG4yMzE4Olx0XHRcdFx0U0xBVkVfTkxfRVJSKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIGV4dGFjayxcbjIzMTk6XHRcdFx0XHRcdCAgICAgXCYjMzQ7U2xhdmUgaGFzIFhEUCBwcm9ncmFtIGxvYWRlZCwgcGxlYXNlIHVubG9hZCBiZWZvcmUgZW5zbGF2aW5nXCYjMzQ7KTtcbjIzMjA6XHRcdFx0XHRyZXMgPSAtRU9QTk9UU1VQUDtcbjIzMjE6XHRcdFx0XHRnb3RvIGVycl9zeXNmc19kZWw7XG4yMzIyOlx0XHRcdH1cbjIzMjM6XHRcbjIzMjQ6XHRcdFx0cmVzID0gZGV2X3hkcF9wcm9wYWdhdGUoc2xhdmVfZGV2LCBcdTAwMjZ4ZHApO1xuMjMyNTpcdFx0XHRpZiAocmVzIFx1MDAzYyAwKSB7XG4yMzI2Olx0XHRcdFx0LyogbmRvX2JwZigpIHNldHMgZXh0YWNrIGVycm9yIG1lc3NhZ2UgKi9cbjIzMjc6XHRcdFx0XHRzbGF2ZV9kYmcoYm9uZF9kZXYsIHNsYXZlX2RldiwgXCYjMzQ7RXJyb3IgJWQgY2FsbGluZyBuZG9fYnBmXFxuXCYjMzQ7LCByZXMpO1xuMjMyODpcdFx0XHRcdGdvdG8gZXJyX3N5c2ZzX2RlbDtcbjIzMjk6XHRcdFx0fVxuMjMzMDpcdFx0XHRpZiAoYm9uZC1cdTAwM2V4ZHBfcHJvZylcbjIzMzE6XHRcdFx0XHRicGZfcHJvZ19pbmMoYm9uZC1cdTAwM2V4ZHBfcHJvZyk7XG4yMzMyOlx0XHR9XG4yMzMzOlx0XG4yMzM0Olx0XHQvKiBJbmNyZWFzZSB0aGUgc2xhdmUgY291bnQgYmVmb3JlIHJlYnVpbGRpbmcgdGhlIHNsYXZlIGFycmF5cy4gKi9cbjIzMzU6XHRcdFdSSVRFX09OQ0UoYm9uZC1cdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXHUwMDNlc2xhdmVfY250ICYjNDM7IDEpO1xuMjMzNjpcdFxuMjMzNzpcdFx0LyogYnJvYWRjYXN0IG1vZGUgdXNlcyB0aGUgYWxsX3NsYXZlcyB0byBsb29wIHRocm91Z2ggc2xhdmVzLiAqL1xuMjMzODpcdFx0aWYgKGJvbmRfbW9kZV9jYW5fdXNlX3htaXRfaGFzaChib25kKSB8fFxuMjMzOTpcdFx0ICAgIEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfQlJPQURDQVNUKVxuMjM0MDpcdFx0XHRib25kX3VwZGF0ZV9zbGF2ZV9hcnIoYm9uZCwgTlVMTCk7XG4yMzQxOlx0XG4yMzQyOlx0XHRib25kX3hkcF9zZXRfZmVhdHVyZXMoYm9uZF9kZXYpO1xuMjM0MzpcdFxuMjM0NDpcdFx0c2xhdmVfaW5mbyhib25kX2Rldiwgc2xhdmVfZGV2LCBcJiMzNDtFbnNsYXZpbmcgYXMgJXMgaW50ZXJmYWNlIHdpdGggJXMgbGlua1xcblwmIzM0OyxcbjIzNDU6XHRcdFx0ICAgYm9uZF9pc19hY3RpdmVfc2xhdmUobmV3X3NsYXZlKSA/IFwmIzM0O2FuIGFjdGl2ZVwmIzM0OyA6IFwmIzM0O2EgYmFja3VwXCYjMzQ7LFxuMjM0NjpcdFx0XHQgICBuZXdfc2xhdmUtXHUwMDNlbGluayAhPSBCT05EX0xJTktfRE9XTiA/IFwmIzM0O2FuIHVwXCYjMzQ7IDogXCYjMzQ7YSBkb3duXCYjMzQ7KTtcbjIzNDc6XHRcbjIzNDg6XHRcdC8qIGVuc2xhdmUgaXMgc3VjY2Vzc2Z1bCAqL1xuMjM0OTpcdFx0Ym9uZF9xdWV1ZV9zbGF2ZV9ldmVudChuZXdfc2xhdmUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MDAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRml4aW5nIGEgUmFjZSBDb25kaXRpb24gaW4gdGhlIEJvbmRpbmcgRHJpdmVyKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYm9uZF9lbnNsYXZlYCBmdW5jdGlvbiB3aXRoaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRyZXNzaW5nIGEgYnVnLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBleGFjdGx5IHdhcyBiZWluZyBmaXhlZC4gUmlnaHQsIGdvdCBpdC4gTG9va2luZyBhdCBsaW5lcyAyMzAwLTIzMzAsIHRoZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBYRFAgKGVYcHJlc3MgRGF0YSBQYXRoKSBzZXR1cCBpbnRlcmFjdHMgd2l0aCB0aGUgYm9uZGluZyBwcm9jZXNzLgoKQmVmb3JlLCB0aGVyZSB3YXMgdGhpcyBjcml0aWNhbCBzZXF1ZW5jZTogYFdSSVRFX09OQ0UoYm9uZC0mZ3Q7c2xhdmVfY250LCBib25kLSZndDtzbGF2ZV9jbnQgJiM0MzsgMSk7YCB3YXMgaGFwcGVuaW5nICpiZWZvcmUqIGNydWNpYWwgY2hlY2tzIOKAkyBzcGVjaWZpY2FsbHksIHdoZXRoZXIgWERQIHNldHVwIHdhcyBzdWNjZXNzZnVsIG9yIGlmIHRoZSBzbGF2ZSBpbnRlcmZhY2UgZXZlbiBzdXBwb3J0ZWQgWERQLiBJZiBYRFAgc2V0dXAgZmFpbGVkIG9yIHRoZSBzbGF2ZSBkaWRuJiMzOTt0IHN1cHBvcnQgaXQsIHRoZSBjb2RlIHdvdWxkIGp1bXAgdG8gYGVycl9zeXNmc19kZWxgLiBUaGUgcHJvYmxlbT8gYGJvbmQtJmd0O3NsYXZlX2NudGAgd291bGQgYWxyZWFkeSBiZSBpbmNyZW1lbnRlZCBldmVuIHRob3VnaCB0aGUgc2xhdmUgd2FzbiYjMzk7dCBhY3R1YWxseSBwcm9wZXJseSBlbnNsYXZlZC4gVGhpcyBjcmVhdGVkIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGFuZCBkYXRhIGNvcnJ1cHRpb24uIElmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0aGUgc2V0dXAsIGBib25kLSZndDtzbGF2ZV9jbnRgIG1pZ2h0IGJlIGxlZnQgb3V0IG9mIHN5bmMsIG9yIHRoZSBhcnJheSBgYm9uZF9zbGF2ZV9hcnJgIHdvdWxkIGJlIGNvcnJ1cHRlZC4KClRoZSBmaXggaXMgc3RyYWlnaHRmb3J3YXJkLCBidXQgY3JpdGljYWwuIE1vdmluZyB0aGUgYFdSSVRFX09OQ0VgIG9wZXJhdGlvbiAqYWZ0ZXIqIHRoZSBYRFAgY2hlY2tzIGVuc3VyZXMgdGhhdCBgYm9uZC0mZ3Q7c2xhdmVfY250YCBpcyBvbmx5IGluY3JlbWVudGVkIGlmIHRoZSBzbGF2ZSBpcyBzdWNjZXNzZnVsbHkgYWRkZWQuIFRoaXMgc2hvdWxkIHJlc29sdmUgdGhlIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgYW5kIHByZXZlbnQgcG90ZW50aWFsIGNyYXNoZXMgb3IgaW5jb3JyZWN0IGJlaGF2aW9yIGluIGBib25kX3VwZGF0ZV9zbGF2ZV9hcnJgLCBvciBvdGhlciByZWxhdGVkIHByb2Nlc3Nlcy4KCk5vdywgbGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZvciB0aGUgYm9uZGluZyBkcml2ZXIsIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBwcm9wZXJseSBpbnRlZ3JhdGVkLiBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvbmV0L2JvbmRpbmdgIGFuZCBsb2NhdGUgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQk9ORElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjYzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKktjb25maWcgTG9jYXRpb24gSHVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gY29uZmlndXJlIHNvbWV0aGluZyByZWxhdGVkIHRvIG5ldHdvcmtpbmcsIHByb2JhYmx5IGEgZHJpdmVyLiBHaXZlbiB0aGUgc2NvcGUgb2YgdGhpcyBwcm9qZWN0LCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGdvaW5nIHRvIGludm9sdmUgYSBLY29uZmlnIGZpbGUuIFdoZXJlIHdvdWxkIHRoYXQgbGl2ZT8gVGhpbmtpbmcgbG9naWNhbGx5LCB0aGUgbW9zdCBsaWtlbHkgcGxhY2VzIGFyZSB0aGUgb2J2aW91czogYGRyaXZlcnMvbmV0L2AgYW5kLCBwZXJoYXBzIG1vcmUgc3BlY2lmaWNhbGx5LCBgZHJpdmVycy9uZXQvYm9uZGluZy9gLiBUaGF0IGJvbmRpbmcgZGlyZWN0b3J5IGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBsaW5rIGFnZ3JlZ2F0aW9uLCBhbmQgdGhhdCBzZWVtcyB0byBiZSByZWxldmFudC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgY29udmVudGlvbiwgc28gdGhvc2UgYXJlIHRoZSBmaXJzdCBwbGFjZXMgSSYjMzk7bGwgc3RhcnQgZGlnZ2luZy4gSSYjMzk7bGwgY2hlY2sgdGhvc2UgZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Qk9ORElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zOT1pZiBORVRfQ09SRVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDE6Y29uZmlnIEJPTkRJTkdcbmRyaXZlcnMvbmV0L0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtCb25kaW5nIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqS2NvbmZpZyBEaXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHNvIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIHRoYXQgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlIGlzIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGluIGFyb3VuZCBsaW5lIDQxLCBhcyB0aGF0JiMzOTtzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZXhwbG9yaW5nIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlc2UgZmlsZXMuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBhdmFpbGFibGUgbmV0d29yayBkcml2ZXJzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgdGhlIGFyZWEgcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBZb3UgY2FuIHNheSBOIGhlcmUgaWYgeW91IGRvIG5vdCBpbnRlbmQgdG8gdXNlIGFueSBvZiB0aGVcbiAgMzc6XHRcdCAgbmV0d29ya2luZyBjb3JlIGRyaXZlcnMgKGkuZS4gVkxBTiwgYnJpZGdpbmcsIGJvbmRpbmcsIGV0Yy4pXG4gIDM4Olx0XG4gIDM5Olx0aWYgTkVUX0NPUkVcbiAgNDA6XHRcbiAgNDE6XHRjb25maWcgQk9ORElOR1xuICA0MjpcdFx0dHJpc3RhdGUgXCYjMzQ7Qm9uZGluZyBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDQ0Olx0XHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cbiAgNDU6XHRcdGhlbHBcbiAgNDY6XHRcdCAgU2F5ICYjMzk7WSYjMzk7IG9yICYjMzk7TSYjMzk7IGlmIHlvdSB3aXNoIHRvIGJlIGFibGUgdG8gJiMzOTtib25kJiMzOTsgbXVsdGlwbGUgRXRoZXJuZXRcbiAgNDc6XHRcdCAgQ2hhbm5lbHMgdG9nZXRoZXIuIFRoaXMgaXMgY2FsbGVkICYjMzk7RXRoZXJjaGFubmVsJiMzOTsgYnkgQ2lzY28sXG4gIDQ4Olx0XHQgICYjMzk7VHJ1bmtpbmcmIzM5OyBieSBTdW4sIDgwMi4zYWQgYnkgdGhlIElFRUUsIGFuZCAmIzM5O0JvbmRpbmcmIzM5OyBpbiBMaW51eC5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgVGhlIGRyaXZlciBzdXBwb3J0cyBtdWx0aXBsZSBib25kaW5nIG1vZGVzIHRvIGFsbG93IGZvciBib3RoIGhpZ2hcbiAgNTE6XHRcdCAgcGVyZm9ybWFuY2UgYW5kIGhpZ2ggYXZhaWxhYmlsaXR5IG9wZXJhdGlvbi5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgUmVmZXIgdG8gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy5yc3RcdTAwM2UgZm9yIG1vcmVcbiAgNTQ6XHRcdCAgaW5mb3JtYXRpb24uXG4gIDU1Olx0XG4gIDU2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNTc6XHRcdCAgd2lsbCBiZSBjYWxsZWQgYm9uZGluZy5cbiAgNTg6XHRcbiAgNTk6XHRjb25maWcgRFVNTVlcbiAgNjA6XHRcdHRyaXN0YXRlIFwmIzM0O0R1bW15IG5ldCBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuICA2MTpcdFx0aGVscFxuICA2MjpcdFx0ICBUaGlzIGlzIGVzc2VudGlhbGx5IGEgYml0LWJ1Y2tldCBkZXZpY2UgKGkuZS4gdHJhZmZpYyB5b3Ugc2VuZCB0b1xuICA2MzpcdFx0ICB0aGlzIGRldmljZSBpcyBjb25zaWduZWQgaW50byBvYmxpdmlvbikgd2l0aCBhIGNvbmZpZ3VyYWJsZSBJUFxuICA2NDpcdFx0ICBhZGRyZXNzLiBJdCBpcyBtb3N0IGNvbW1vbmx5IHVzZWQgaW4gb3JkZXIgdG8gbWFrZSB5b3VyIGN1cnJlbnRseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTcxCgkJCQkJCQlvdXRwdXQ6IDk1CgkJCQkJCQl0aG91Z2h0czogODM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXR3b3JrIEJvbmRpbmcgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYSB3b3J0aHdoaWxlIHBhdGNoIHRvIGFuYWx5emUuIFRoZSBgYm9uZF9lbnNsYXZlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyIChgYm9uZF9tYWluLmNgKSBpcyBjbGVhcmx5IHRoZSB0YXJnZXQsIGFuZCB0aGF0JiMzOTtzIHRoZSBvbmx5IGZ1bmN0aW9uIG1vZGlmaWVkIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBkaWZmLiBJdCYjMzk7cyBhbHNvIHdvcnRoIG5vdGluZyB0aGF0IHRoZSBib25kaW5nIGRyaXZlciBpcyBhIHN0YW5kYXJkIG5ldGRldiBkcml2ZXIsIHNvIGl0JiMzOTtzIGEga25vd24gcXVhbnRpdHkuIEl0IGNhbiBiZSBjcmVhdGVkIGFuZCBtYW5pcHVsYXRlZCB0aHJvdWdoIHN0YW5kYXJkIGludGVyZmFjZXMgbGlrZSBgcnRubGAsIGBuZXRsaW5rYCwgYGlvY3RsYCwgYW5kIGBzeXNmc2Agd2hpY2ggaXMgdXNlZnVsIGluIHRlc3RpbmcuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpdCYjMzk7cyByZWFkaWx5IHJlYWNoYWJsZSB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCB3aGljaCBzaW1wbGlmaWVzIGZ1enppbmcgYW5kIGRlYnVnZ2luZy4gU3l6a2FsbGVyIGFjdGl2ZWx5IHRhcmdldHMgYG5ldGxpbmtgIHJlbGF0ZWQgdG8gYm9uZGluZywgbWFraW5nIHRoaXMgcGFydGljdWxhcmx5IHJlbGV2YW50LgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIGEgY2hhbmdlIGluIHRoZSBzdGF0ZSB0cmFja2luZyBvZiBgYm9uZC0mZ3Q7c2xhdmVfY250YCB3aXRoaW4gYGJvbmRfZW5zbGF2ZWAuIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSB0aW1pbmcgaXNzdWUgd2l0aCB0aGUgaW5jcmVtZW50IG9mIHRoZSBzbGF2ZSBjb3VudC4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGNvbnNpc3RlbmN5IHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIFRoZSBwcmV2aW91cyBwbGFjZW1lbnQgb2YgYFdSSVRFX09OQ0UoYm9uZC0mZ3Q7c2xhdmVfY250LCBib25kLSZndDtzbGF2ZV9jbnQgJiM0MzsgMSk7YCBtaWdodCBoYXZlIGNhdXNlZCBpc3N1ZXMgaWYgc29tZSBzdWJzZXF1ZW50IHNldHVwIG9yIFhEUCBjaGVja3MgZmFpbGVkLiBCeSBtb3ZpbmcgaXQsIHRoZSBjb3VudCBpcyBpbmNyZW1lbnRlZCAqYWZ0ZXIqIHRob3NlIGNoZWNrcyB3aGljaCB3b3VsZCBtaXRpZ2F0ZSBpbmNvbnNpc3RlbmNpZXMuCgpJJiMzOTt2ZSB2ZXJpZmllZCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnM6IGBCT05ESU5HYCBhbmQgYElORVRgLCBzbyB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4gTXkgZm9jdXMgc3ltYm9scyBhcmUgZGVmaW5pdGVseSBjZW50ZXJlZCBvbiBgYm9uZF9lbnNsYXZlYCB3aGljaCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24uIEkgZG91YmxlLWNoZWNrZWQgdGhlIGRpZmYgYW5kIHZlcmlmaWVkIHRoYXQgb25seSB0aGUgYGJvbmRfbWFpbi5jYCBmaWxlIHdhcyB0b3VjaGVkIGFuZCBvbmx5IGBib25kX2Vuc2xhdmVgIHdhcyBtb2RpZmllZC4KCkJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgaXQmIzM5O3MgY2xlYXIgdGhpcyBwYXRjaCBmaXhlcyBhIGNyaXRpY2FsIHRpbWluZyBpc3N1ZSB3aXRoaW4gYSByZWxhdGl2ZWx5IGFjY2Vzc2libGUgYW5kIGFjdGl2ZWx5IGZ1enplZCBhcmVhIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIGFuZCBmdXJ0aGVyIGludmVzdGlnYXRpb24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2Vuc2xhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYm9uZF9lbnNsYXZlKCkgaW4gdGhlIG5ldHdvcmsgYm9uZGluZyBkcml2ZXIgdG8gZGVmZXIgaW5jcmVtZW50aW5nIHRoZSBzbGF2ZSBjb3VudCB1bnRpbCBhZnRlciBYRFAgc2V0dXAgYW5kIHZhbGlkYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldGxpbmsvcnRubCBpbnRlcmZhY2VzIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2Vuc2xhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYm9uZF9lbnNsYXZlKCkgaW4gdGhlIG5ldHdvcmsgYm9uZGluZyBkcml2ZXIgdG8gZGVmZXIgaW5jcmVtZW50aW5nIHRoZSBzbGF2ZSBjb3VudCB1bnRpbCBhZnRlciBYRFAgc2V0dXAgYW5kIHZhbGlkYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldGxpbmsvcnRubCBpbnRlcmZhY2VzIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJvbmRfZW5zbGF2ZSgpYCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AgYnkgZGVmZXJyaW5nIHRoZSBpbmNyZW1lbnQgb2YgYGJvbmQtXHUwMDNlc2xhdmVfY250YCAoYFdSSVRFX09OQ0UoYm9uZC1cdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXHUwMDNlc2xhdmVfY250ICYjNDM7IDEpYCkgdW50aWwgYWZ0ZXIgcG90ZW50aWFsIGVycm9yIHBhdGhzIGR1cmluZyBYRFAgY29uZmlndXJhdGlvbiBjaGVja3MuIFRoaXMgcHJldmVudHMgYGJvbmQtXHUwMDNlc2xhdmVfY250YCBmcm9tIGJlY29taW5nIGRlc3luY2hyb25pemVkL2luY29uc2lzdGVudCB3aGVuIGVuc2xhdmluZyBhIGRldmljZSBmYWlscyBpbiBgYm9uZF9lbnNsYXZlKClgLlxuXG5UaGUgY2hhbmdlIGlzIHN0cmljdGx5IGNvbnRyb2wtZmxvdyBhbmQgc3RhdGUtY291bnRlciBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb3B5X3RvX3VzZXIvaW5mby1sZWFrIHBhdGhzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGlzIHN1ZmZpY2llbnQ7IHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOTY2MmQxYTk3OTY2YmM5MGY2NzhkNDQ1NzBlYTgxZjgxODViODM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxMDoxOTozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IGE5YmZmNzY2M2VlY2EuLjE1MTRhOGJhMDg4OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMjI4NCw3ICYjNDM7MjI4NCw2IEBAIGludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LAogCQl9CiAJfQogCi0JV1JJVEVfT05DRShib25kLSZndDtzbGF2ZV9jbnQsIGJvbmQtJmd0O3NsYXZlX2NudCAmIzQzOyAxKTsKIAluZXRkZXZfY29tcHV0ZV9tYXN0ZXJfdXBwZXJfZmVhdHVyZXMoYm9uZC0mZ3Q7ZGV2LCB0cnVlKTsKIAlib25kX3NldF9jYXJyaWVyKGJvbmQpOwogCkBAIC0yMzMyLDYgJiM0MzsyMzMxLDkgQEAgaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsCiAJCQlicGZfcHJvZ19pbmMoYm9uZC0mZ3Q7eGRwX3Byb2cpOwogCX0KIAomIzQzOwkvKiBJbmNyZWFzZSB0aGUgc2xhdmUgY291bnQgYmVmb3JlIHJlYnVpbGRpbmcgdGhlIHNsYXZlIGFycmF5cy4gKi8KJiM0MzsJV1JJVEVfT05DRShib25kLSZndDtzbGF2ZV9jbnQsIGJvbmQtJmd0O3NsYXZlX2NudCAmIzQzOyAxKTsKJiM0MzsKIAkvKiBicm9hZGNhc3QgbW9kZSB1c2VzIHRoZSBhbGxfc2xhdmVzIHRvIGxvb3AgdGhyb3VnaCBzbGF2ZXMuICovCiAJaWYgKGJvbmRfbW9kZV9jYW5fdXNlX3htaXRfaGFzaChib25kKSB8fAogCSAgICBCT05EX01PREUoYm9uZCkgPT0gQk9ORF9NT0RFX0JST0FEQ0FTVCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBCb25kaW5nIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIHRvIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKRmlyc3QsIEkgc2VlIGEgc21hbGwgZGlmZiwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBzaWduLiBJdCBsb29rcyBsaWtlIGEgbWlub3IgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgYGJvbmRfZW5zbGF2ZWAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlIGluY3JlbWVudGVkIGBib25kLSZndDtzbGF2ZV9jbnRgIGJlZm9yZSBgbmV0ZGV2X2NvbXB1dGVfbWFzdGVyX3VwcGVyX2ZlYXR1cmVzYCBhbmQgYGJvbmRfc2V0X2NhcnJpZXJgLiBUaGUgcGF0Y2ggbW92ZXMgdGhlIGBXUklURV9PTkNFYCBjYWxsIHRoYXQgaW5jcmVtZW50cyBgYm9uZC0mZ3Q7c2xhdmVfY250YCAqYWZ0ZXIqIHRob3NlIGNhbGxzLCBidXQgYmVmb3JlIHRoZSBzbGF2ZSBhcnJheSByZWJ1aWxkLiBIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoLgoKVGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhlIGRpZmYsIGFyb3VuZCBsaW5lcyAyMjgwLTIzNTAsIHNlZW1zIHRvIGRlYWwgd2l0aCBhZGRpbmcgYSBzbGF2ZSBuZXR3b3JrIGRldmljZSB0byBhIGJvbmRpbmcgaW50ZXJmYWNlLiBUaGUgYGJvbmRfZW5zbGF2ZWAgZnVuY3Rpb24gYXBwZWFycyB0byBiZSBjZW50cmFsIHRvIHRoaXMgcHJvY2Vzcy4gVGhlIGNvZGUmIzM5O3MgY29tbWVudCBtZW50aW9ucyBicm9hZGNhc3QgbW9kZSB1c2luZyBgYWxsX3NsYXZlc2AgdG8gbG9vcCB0aHJvdWdoIHNsYXZlcywgc28gbWF5YmUgdGhlcmUmIzM5O3MgYSByZWFzb24gZm9yIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZGVwZW5kZW5jaWVzIGhlcmUuCgpTbywgdGhlIGtleSBxdWVzdGlvbnMgYXJlOiBEb2VzIHRoaXMgcmVvcmRlcmluZyBpbnRyb2R1Y2UgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gcmVsYXRlZCB0byBgYm9uZC0mZ3Q7c2xhdmVfY250YCBvciB0aGUgc2xhdmUgYXJyYXlzLCBldmVuIHRyYW5zaWVudGx5PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIG90aGVyIHRocmVhZHMgYWNjZXNzIGBib25kLSZndDtzbGF2ZV9jbnRgIHdoaWxlIHRoZSBhcnJheXMgYXJlIGJlaW5nIHJlYnVpbHQ/IFNwZWNpZmljYWxseSwgZG9lcyB0aGUgdGltaW5nIG9mIHRoZSBpbmNyZW1lbnQgb2YgYGJvbmQtJmd0O3NsYXZlX2NudGAgYWZmZWN0IGFueSBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYnkgYG5ldGRldl9jb21wdXRlX21hc3Rlcl91cHBlcl9mZWF0dXJlc2AsIGBib25kX3NldF9jYXJyaWVyYCwgb3IgdGhlIGFycmF5IHJlYnVpbGQsIGV2ZW4gdGVtcG9yYXJpbHk/IERvZXMgdGhlIG5ldyBvcmRlciBpbnRyb2R1Y2UgYSB3aW5kb3cgd2hlcmUgYW4gaW5hY2N1cmF0ZSBzbGF2ZSBjb3VudCBjb3VsZCBjYXVzZSBpc3N1ZXM/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZXMgd2l0aCBvdGhlciB0aHJlYWRzIHRoYXQgbWF5IGJlIGFjY2Vzc2luZyB0aGUgYm9uZCBzdHJ1Y3R1cmUgY29uY3VycmVudGx5PwoKSSB0aGluayBJJiMzOTtsbCB3YW50IHRvIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGlzIGFyZWEsIGNvbnNpZGVyaW5nIGhvdyBhbmQgd2hlbiBgYm9uZC0mZ3Q7c2xhdmVfY250YCBpcyBhY2Nlc3NlZCwgYW5kIGlmIHRoZSBjb3VudCBiZWluZyB3cm9uZyBmb3IgYSBzaG9ydCBwZXJpb2QgY2F1c2VzIGFueSBwcm9ibGVtcy4gRGVwZW5kaW5nIG9uIHRoZSBhbnN3ZXIsIGEgZnV6emluZyBzZXNzaW9uIG1pZ2h0IGJlIG92ZXJraWxsLCBvciB0aGlzIGNoYW5nZSBjb3VsZCBiZSBhIHJpc2t5IHJlZmFjdG9yLiBUaGlzIG1pZ2h0IGJlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGEgY2FyZWZ1bCBjb2RlIHJldmlldyB3aXRoIGFuIGV5ZSB0b3dhcmRzIGNvbmN1cnJlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyNzA6XHRcdFx0XHRcdGlmIChib25kX2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1BST01JU0MpXG4yMjcxOlx0XHRcdFx0XHRcdGRldl9zZXRfcHJvbWlzY3VpdHkoc2xhdmVfZGV2LCAtMSk7XG4yMjcyOlx0XHRcdFx0XHRnb3RvIGVycl9zeXNmc19kZWw7XG4yMjczOlx0XHRcdFx0fVxuMjI3NDpcdFx0XHR9XG4yMjc1Olx0XG4yMjc2Olx0XHRcdGlmIChib25kX2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSB7XG4yMjc3Olx0XHRcdFx0bmV0aWZfYWRkcl9sb2NrX2JoKGJvbmRfZGV2KTtcbjIyNzg6XHRcdFx0XHRkZXZfbWNfc3luY19tdWx0aXBsZShzbGF2ZV9kZXYsIGJvbmRfZGV2KTtcbjIyNzk6XHRcdFx0XHRkZXZfdWNfc3luY19tdWx0aXBsZShzbGF2ZV9kZXYsIGJvbmRfZGV2KTtcbjIyODA6XHRcdFx0XHRuZXRpZl9hZGRyX3VubG9ja19iaChib25kX2Rldik7XG4yMjgxOlx0XG4yMjgyOlx0XHRcdFx0aWYgKEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfODAyM0FEKVxuMjI4MzpcdFx0XHRcdFx0ZGV2X21jX2FkZChzbGF2ZV9kZXYsIGxhY3BkdV9tY2FzdF9hZGRyKTtcbjIyODQ6XHRcdFx0fVxuMjI4NTpcdFx0fVxuMjI4NjpcdFxuMjI4NzpcdFx0bmV0ZGV2X2NvbXB1dGVfbWFzdGVyX3VwcGVyX2ZlYXR1cmVzKGJvbmQtXHUwMDNlZGV2LCB0cnVlKTtcbjIyODg6XHRcdGJvbmRfc2V0X2NhcnJpZXIoYm9uZCk7XG4yMjg5Olx0XG4yMjkwOlx0XHQvKiBOZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIGJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZSgpLCB3aGljaCB3aWxsXG4yMjkxOlx0XHQgKiByZW1vdmUgdGhlIG1hZGRycyBpZiB0aGUgc2xhdmUgaXMgc2VsZWN0ZWQgYXMgYWN0aXZlIHNsYXZlLlxuMjI5MjpcdFx0ICovXG4yMjkzOlx0XHRib25kX3NsYXZlX25zX21hZGRyc19hZGQoYm9uZCwgbmV3X3NsYXZlKTtcbjIyOTQ6XHRcbjIyOTU6XHRcdGlmIChib25kX3VzZXNfcHJpbWFyeShib25kKSkge1xuMjI5NjpcdFx0XHRibG9ja19uZXRwb2xsX3R4KCk7XG4yMjk3Olx0XHRcdGJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZShib25kKTtcbjIyOTg6XHRcdFx0dW5ibG9ja19uZXRwb2xsX3R4KCk7XG4yMjk5Olx0XHR9XG4yMzAwOlx0XG4yMzAxOlx0XHRpZiAoIXNsYXZlX2Rldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19icGYgfHxcbjIzMDI6XHRcdCAgICAhc2xhdmVfZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3hkcF94bWl0KSB7XG4yMzAzOlx0XHRcdGlmIChib25kLVx1MDAzZXhkcF9wcm9nKSB7XG4yMzA0Olx0XHRcdFx0U0xBVkVfTkxfRVJSKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIGV4dGFjayxcbjIzMDU6XHRcdFx0XHRcdCAgICAgXCYjMzQ7U2xhdmUgZG9lcyBub3Qgc3VwcG9ydCBYRFBcJiMzNDspO1xuMjMwNjpcdFx0XHRcdHJlcyA9IC1FT1BOT1RTVVBQO1xuMjMwNzpcdFx0XHRcdGdvdG8gZXJyX3N5c2ZzX2RlbDtcbjIzMDg6XHRcdFx0fVxuMjMwOTpcdFx0fSBlbHNlIGlmIChib25kLVx1MDAzZXhkcF9wcm9nKSB7XG4yMzEwOlx0XHRcdHN0cnVjdCBuZXRkZXZfYnBmIHhkcCA9IHtcbjIzMTE6XHRcdFx0XHQuY29tbWFuZCA9IFhEUF9TRVRVUF9QUk9HLFxuMjMxMjpcdFx0XHRcdC5mbGFncyAgID0gMCxcbjIzMTM6XHRcdFx0XHQucHJvZyAgICA9IGJvbmQtXHUwMDNleGRwX3Byb2csXG4yMzE0Olx0XHRcdFx0LmV4dGFjayAgPSBleHRhY2ssXG4yMzE1Olx0XHRcdH07XG4yMzE2Olx0XG4yMzE3Olx0XHRcdGlmIChkZXZfeGRwX3Byb2dfY291bnQoc2xhdmVfZGV2KSBcdTAwM2UgMCkge1xuMjMxODpcdFx0XHRcdFNMQVZFX05MX0VSUihib25kX2Rldiwgc2xhdmVfZGV2LCBleHRhY2ssXG4yMzE5Olx0XHRcdFx0XHQgICAgIFwmIzM0O1NsYXZlIGhhcyBYRFAgcHJvZ3JhbSBsb2FkZWQsIHBsZWFzZSB1bmxvYWQgYmVmb3JlIGVuc2xhdmluZ1wmIzM0Oyk7XG4yMzIwOlx0XHRcdFx0cmVzID0gLUVPUE5PVFNVUFA7XG4yMzIxOlx0XHRcdFx0Z290byBlcnJfc3lzZnNfZGVsO1xuMjMyMjpcdFx0XHR9XG4yMzIzOlx0XG4yMzI0Olx0XHRcdHJlcyA9IGRldl94ZHBfcHJvcGFnYXRlKHNsYXZlX2RldiwgXHUwMDI2eGRwKTtcbjIzMjU6XHRcdFx0aWYgKHJlcyBcdTAwM2MgMCkge1xuMjMyNjpcdFx0XHRcdC8qIG5kb19icGYoKSBzZXRzIGV4dGFjayBlcnJvciBtZXNzYWdlICovXG4yMzI3Olx0XHRcdFx0c2xhdmVfZGJnKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIFwmIzM0O0Vycm9yICVkIGNhbGxpbmcgbmRvX2JwZlxcblwmIzM0OywgcmVzKTtcbjIzMjg6XHRcdFx0XHRnb3RvIGVycl9zeXNmc19kZWw7XG4yMzI5Olx0XHRcdH1cbjIzMzA6XHRcdFx0aWYgKGJvbmQtXHUwMDNleGRwX3Byb2cpXG4yMzMxOlx0XHRcdFx0YnBmX3Byb2dfaW5jKGJvbmQtXHUwMDNleGRwX3Byb2cpO1xuMjMzMjpcdFx0fVxuMjMzMzpcdFxuMjMzNDpcdFx0LyogSW5jcmVhc2UgdGhlIHNsYXZlIGNvdW50IGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBzbGF2ZSBhcnJheXMuICovXG4yMzM1Olx0XHRXUklURV9PTkNFKGJvbmQtXHUwMDNlc2xhdmVfY250LCBib25kLVx1MDAzZXNsYXZlX2NudCAmIzQzOyAxKTtcbjIzMzY6XHRcbjIzMzc6XHRcdC8qIGJyb2FkY2FzdCBtb2RlIHVzZXMgdGhlIGFsbF9zbGF2ZXMgdG8gbG9vcCB0aHJvdWdoIHNsYXZlcy4gKi9cbjIzMzg6XHRcdGlmIChib25kX21vZGVfY2FuX3VzZV94bWl0X2hhc2goYm9uZCkgfHxcbjIzMzk6XHRcdCAgICBCT05EX01PREUoYm9uZCkgPT0gQk9ORF9NT0RFX0JST0FEQ0FTVClcbjIzNDA6XHRcdFx0Ym9uZF91cGRhdGVfc2xhdmVfYXJyKGJvbmQsIE5VTEwpO1xuMjM0MTpcdFxuMjM0MjpcdFx0Ym9uZF94ZHBfc2V0X2ZlYXR1cmVzKGJvbmRfZGV2KTtcbjIzNDM6XHRcbjIzNDQ6XHRcdHNsYXZlX2luZm8oYm9uZF9kZXYsIHNsYXZlX2RldiwgXCYjMzQ7RW5zbGF2aW5nIGFzICVzIGludGVyZmFjZSB3aXRoICVzIGxpbmtcXG5cJiMzNDssXG4yMzQ1Olx0XHRcdCAgIGJvbmRfaXNfYWN0aXZlX3NsYXZlKG5ld19zbGF2ZSkgPyBcJiMzNDthbiBhY3RpdmVcJiMzNDsgOiBcJiMzNDthIGJhY2t1cFwmIzM0OyxcbjIzNDY6XHRcdFx0ICAgbmV3X3NsYXZlLVx1MDAzZWxpbmsgIT0gQk9ORF9MSU5LX0RPV04gPyBcJiMzNDthbiB1cFwmIzM0OyA6IFwmIzM0O2EgZG93blwmIzM0Oyk7XG4yMzQ3Olx0XG4yMzQ4Olx0XHQvKiBlbnNsYXZlIGlzIHN1Y2Nlc3NmdWwgKi9cbjIzNDk6XHRcdGJvbmRfcXVldWVfc2xhdmVfZXZlbnQobmV3X3NsYXZlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU2NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBZGRyZXNzaW5nIGEgU3VidGxlIEJvbmQgRW5zbGF2ZW1lbnQgQnVnKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBib25kX2Vuc2xhdmVgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBpbmNvbnNpc3RlbmN5IGluIGhvdyBgYm9uZC0mZ3Q7c2xhdmVfY250YCBpcyBpbmNyZW1lbnRlZC4gUHJldmlvdXNseSwgdGhhdCBgV1JJVEVfT05DRWAgY2FsbCB0byBpbmNyZW1lbnQgdGhlIGNvdW50ZXIgd2FzIGhhcHBlbmluZyAqYmVmb3JlKiB0aGUgWERQIGNoZWNrcyBhbmQgKmJlZm9yZSogd2UgY291bGQganVtcCB0byBgZXJyX3N5c2ZzX2RlbGAuIEVzc2VudGlhbGx5LCBpZiBzb21ldGhpbmcgd2VudCB3cm9uZyBhdCBsaW5lcyAyMzA3LCAyMzIxLCBvciAyMzI4IOKAkyB3ZSBoaXQgYW4gZXJyb3Ig4oCTIGBzbGF2ZV9jbnRgIHdvdWxkIGJlIGluY3JlbWVudGVkLCBidXQgdGhlIGFjdHVhbCBlbnNsYXZlbWVudCBuZXZlciBoYXBwZW5lZC4gVGhpcyBjb3VsZCBsZWF2ZSB0aGUgY291bnQgb3V0IG9mIHN5bmMgZHVyaW5nIHRoZSBjbGVhbnVwIHByb2Nlc3MuCgpUaGUgZml4PyBNb3ZpbmcgdGhhdCBgV1JJVEVfT05DRWAgaW5jcmVtZW50IGRvd24gKmFmdGVyKiBYRFAgcHJvcGFnYXRpb24gYW5kIGp1c3QgYmVmb3JlIHRoZSBjYWxsIHRvIGBib25kX3VwZGF0ZV9zbGF2ZV9hcnIoKWAuIFRoaXMgd2F5LCB3ZSBvbmx5IGluY3JlbWVudCB0aGUgY291bnRlciBpZiB0aGUgWERQIHNldHVwIGlzIHN1Y2Nlc3NmdWwuIEl0IHNlZW1zIGxpa2UgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCB0byBwcmV2ZW50IHRoZSBwcmVtYXR1cmUgaW5jcmVtZW50IG9mIGBib25kLSZndDtzbGF2ZV9jbnRgIGlmIGBib25kX2Vuc2xhdmUoKWAgZmFpbHMgZHVyaW5nIFhEUCBzZXR1cC4KCk5vdywgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgYGVycl9zeXNmc19kZWxgIGNvZGUgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjM1MDpcdFx0cmV0dXJuIDA7XG4yMzUxOlx0XG4yMzUyOlx0LyogVW5kbyBzdGFnZXMgb24gZXJyb3IgKi9cbjIzNTM6XHRlcnJfc3lzZnNfZGVsOlxuMjM1NDpcdFx0Ym9uZF9zeXNmc19zbGF2ZV9kZWwobmV3X3NsYXZlKTtcbjIzNTU6XHRcbjIzNTY6XHRlcnJfdXBwZXJfdW5saW5rOlxuMjM1NzpcdFx0Ym9uZF91cHBlcl9kZXZfdW5saW5rKGJvbmQsIG5ld19zbGF2ZSk7XG4yMzU4Olx0XG4yMzU5Olx0ZXJyX3VucmVnaXN0ZXI6XG4yMzYwOlx0XHRuZXRkZXZfcnhfaGFuZGxlcl91bnJlZ2lzdGVyKHNsYXZlX2Rldik7XG4yMzYxOlx0XG4yMzYyOlx0ZXJyX2RldGFjaDpcbjIzNjM6XHRcdHZsYW5fdmlkc19kZWxfYnlfZGV2KHNsYXZlX2RldiwgYm9uZF9kZXYpO1xuMjM2NDpcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVx1MDAzZXByaW1hcnlfc2xhdmUpID09IG5ld19zbGF2ZSlcbjIzNjU6XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihib25kLVx1MDAzZXByaW1hcnlfc2xhdmUsIE5VTEwpO1xuMjM2NjpcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKSA9PSBuZXdfc2xhdmUpIHtcbjIzNjc6XHRcdFx0YmxvY2tfbmV0cG9sbF90eCgpO1xuMjM2ODpcdFx0XHRib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUoYm9uZCwgTlVMTCk7XG4yMzY5Olx0XHRcdGJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZShib25kKTtcbjIzNzA6XHRcdFx0dW5ibG9ja19uZXRwb2xsX3R4KCk7XG4yMzcxOlx0XHR9XG4yMzcyOlx0XHQvKiBlaXRoZXIgcHJpbWFyeV9zbGF2ZSBvciBjdXJyX2FjdGl2ZV9zbGF2ZSBtaWdodCYjMzk7dmUgY2hhbmdlZCAqL1xuMjM3MzpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4yMzc0Olx0XHRzbGF2ZV9kaXNhYmxlX25ldHBvbGwobmV3X3NsYXZlKTtcbjIzNzU6XHRcbjIzNzY6XHRlcnJfY2xvc2U6XG4yMzc3Olx0XHRpZiAoIW5ldGlmX2lzX2JvbmRfbWFzdGVyKHNsYXZlX2RldikpXG4yMzc4Olx0XHRcdHNsYXZlX2Rldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNj0gfklGRl9CT05ESU5HO1xuMjM3OTpcdFx0ZGV2X2Nsb3NlKHNsYXZlX2Rldik7XG4yMzgwOlx0XG4yMzgxOlx0ZXJyX3Jlc3RvcmVfbWFjOlxuMjM4MjpcdFx0c2xhdmVfZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2PSB+SUZGX05PX0FERFJDT05GO1xuMjM4MzpcdFx0aWYgKCFib25kLVx1MDAzZXBhcmFtcy5mYWlsX292ZXJfbWFjIHx8XG4yMzg0Olx0XHQgICAgQk9ORF9NT0RFKGJvbmQpICE9IEJPTkRfTU9ERV9BQ1RJVkVCQUNLVVApIHtcbjIzODU6XHRcdFx0LyogWFhYIFRPRE8gLSBmb20gZm9sbG93IG1vZGUgbmVlZHMgdG8gY2hhbmdlIG1hc3RlciYjMzk7c1xuMjM4NjpcdFx0XHQgKiBNQUMgaWYgdGhpcyBzbGF2ZSYjMzk7cyBNQUMgaXMgaW4gdXNlIGJ5IHRoZSBib25kLCBvciBhdFxuMjM4NzpcdFx0XHQgKiBsZWFzdCBwcmludCBhIHdhcm5pbmcuXG4yMzg4Olx0XHRcdCAqL1xuMjM4OTpcdFx0XHRib25kX2h3X2FkZHJfY29weShzcy5fX2RhdGEsIG5ld19zbGF2ZS1cdTAwM2VwZXJtX2h3YWRkcixcbjIzOTA6XHRcdFx0XHRcdCAgbmV3X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VhZGRyX2xlbik7XG4yMzkxOlx0XHRcdHNzLnNzX2ZhbWlseSA9IHNsYXZlX2Rldi1cdTAwM2V0eXBlO1xuMjM5MjpcdFx0XHRkZXZfc2V0X21hY19hZGRyZXNzKHNsYXZlX2RldiwgXHUwMDI2c3MsIE5VTEwpO1xuMjM5MzpcdFx0fVxuMjM5NDpcdFxuMjM5NTpcdGVycl9yZXN0b3JlX210dTpcbjIzOTY6XHRcdGRldl9zZXRfbXR1KHNsYXZlX2RldiwgbmV3X3NsYXZlLVx1MDAzZW9yaWdpbmFsX210dSk7XG4yMzk3Olx0XG4yMzk4Olx0ZXJyX2ZyZWU6XG4yMzk5Olx0XHRrb2JqZWN0X3B1dChcdTAwMjZuZXdfc2xhdmUtXHUwMDNla29iaik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MTIKCQkJCQkJCW91dHB1dDogMjAyCgkJCQkJCQl0aG91Z2h0czogNTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgYm9uZF9lbnNsYXZlKClgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgc3BvdC1vbjogdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgc3VidGxlIGJ1dCBzaWduaWZpY2FudCBsb2dpYyBlcnJvci4gYGVycl9zeXNmc19kZWxgIGFuZCBzdWJzZXF1ZW50IGNsZWFudXAgYWN0aW9ucyBkaWRuJiMzOTt0IGRlY3JlbWVudCBgYm9uZC0mZ3Q7c2xhdmVfY250YC4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBYRFAgc2V0dXAgaW4gYGJvbmRfZW5zbGF2ZSgpYCBmYWlsZWQsIHRoZSBgYm9uZC0mZ3Q7c2xhdmVfY250YCB3YXMgbGVmdCBwZXJtYW5lbnRseSBpbmNyZW1lbnRlZCwgbGVhZGluZyB0byBhbiBpbmNvbnNpc3RlbnQgY291bnRlciDigJMgYSBjbGFzc2ljIHN0YXRlIGJ1Zy4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIGV4cG9zZSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgYWJzb2x1dGVseSBub3QuIEkmIzM5O3ZlIGNhcmVmdWxseSBzY3J1dGluaXplZCB0aGUgY29kZS4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQuIENydWNpYWxseSwgbm8gYGNvcHlfdG9fdXNlcmAgY2FsbHMgb3IgaW5mb3JtYXRpb24gbGVhayBwYXRocyBhcmUgdG91Y2hlZCB0byBwb3RlbnRpYWxseSBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLiBGdXJ0aGVybW9yZSwgbm8gZXhpc3RpbmcgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkLiBUaGlzIHBhdGNoIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nLCBtb3ZpbmcgdGhlIGBXUklURV9PTkNFKGJvbmQtJmd0O3NsYXZlX2NudCwgLi4uKWAgbGluZSAqYWZ0ZXIqIHRoZSBmYWlsdXJlIHBvaW50cyBpbiBgYm9uZF9lbnNsYXZlKClgLgoKTmV4dCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBuZWVkIGZvciBLTVNBTi4gSSBrbm93IHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTjsgS0FTQU4gZGVhbHMgd2l0aCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIFVBRiwgZXRjLikgYW5kIGxvY2tkZXAgaGFuZGxlcyBsb2NraW5nIGlzc3Vlcy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gU2luY2UgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucywgYE5lZWRzS01TQU5gIGlzIGNsZWFybHkgZmFsc2UuCgpUbyByZWluZm9yY2UgdGhpcywgSSByZS1leGFtaW5lZCB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYE5lZWRzS01TQU49dHJ1ZWAuIE5vbmUgb2YgdGhvc2UgY29uZGl0aW9ucyBhcmUgbWV0OiB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW52b2x2ZSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIGRvZXNuJiMzOTt0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lc24mIzM5O3QgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCwgYW5kIGl0IGRvZXNuJiMzOTt0IG1hbmlwdWxhdGUgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYmVpbmcgYWNjZXNzZWQuCgpDb252ZXJzZWx5LCB0aGUgY3JpdGVyaWEgZm9yIGBOZWVkc0tNU0FOPWZhbHNlYCBhcmUgcGVyZmVjdGx5IHNhdGlzZmllZC4gVGhlIGNvZGUgY2hhbmdlcyBtYWlubHkgYWRkcmVzcyB0aGUgY291bnRlciBpc3N1ZSBhbmQgdGhleSBkbyBub3QgaW50cm9kdWNlIHJpc2tzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcy4gQWxsIHRvdWNoZWQgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgYmVmb3JlIGFueSByZWFkIG9yIGNvcHkgb3BlcmF0aW9uLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAgaXMgdGhlIGRlZmluaXRpdmUgY29uY2x1c2lvbi4gSSYjMzk7bSByZWFkeSB0byBkb2N1bWVudCB0aGUgcmVhc29uaW5nIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBib25kX2Vuc2xhdmUoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIGJ5IGRlZmVycmluZyB0aGUgaW5jcmVtZW50IG9mIGBib25kLVx1MDAzZXNsYXZlX2NudGAgKGBXUklURV9PTkNFKGJvbmQtXHUwMDNlc2xhdmVfY250LCBib25kLVx1MDAzZXNsYXZlX2NudCAmIzQzOyAxKWApIHVudGlsIGFmdGVyIHBvdGVudGlhbCBlcnJvciBwYXRocyBkdXJpbmcgWERQIGNvbmZpZ3VyYXRpb24gY2hlY2tzLiBUaGlzIHByZXZlbnRzIGBib25kLVx1MDAzZXNsYXZlX2NudGAgZnJvbSBiZWNvbWluZyBkZXN5bmNocm9uaXplZC9pbmNvbnNpc3RlbnQgd2hlbiBlbnNsYXZpbmcgYSBkZXZpY2UgZmFpbHMgaW4gYGJvbmRfZW5zbGF2ZSgpYC5cblxuVGhlIGNoYW5nZSBpcyBzdHJpY3RseSBjb250cm9sLWZsb3cgYW5kIHN0YXRlLWNvdW50ZXIgbWFuYWdlbWVudC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29weV90b191c2VyL2luZm8tbGVhayBwYXRocywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFN0YW5kYXJkIHRlc3Rpbmcgd2l0aCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyBpcyBzdWZmaWNpZW50OyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJvbmRfZW5zbGF2ZSgpYCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AgYnkgZGVmZXJyaW5nIHRoZSBpbmNyZW1lbnQgb2YgYGJvbmQtXHUwMDNlc2xhdmVfY250YCAoYFdSSVRFX09OQ0UoYm9uZC1cdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXHUwMDNlc2xhdmVfY250ICYjNDM7IDEpYCkgdW50aWwgYWZ0ZXIgcG90ZW50aWFsIGVycm9yIHBhdGhzIGR1cmluZyBYRFAgY29uZmlndXJhdGlvbiBjaGVja3MuIFRoaXMgcHJldmVudHMgYGJvbmQtXHUwMDNlc2xhdmVfY250YCBmcm9tIGJlY29taW5nIGRlc3luY2hyb25pemVkL2luY29uc2lzdGVudCB3aGVuIGVuc2xhdmluZyBhIGRldmljZSBmYWlscyBpbiBgYm9uZF9lbnNsYXZlKClgLlxuXG5UaGUgY2hhbmdlIGlzIHN0cmljdGx5IGNvbnRyb2wtZmxvdyBhbmQgc3RhdGUtY291bnRlciBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb3B5X3RvX3VzZXIvaW5mby1sZWFrIHBhdGhzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGlzIHN1ZmZpY2llbnQ7IHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjE5OjM2LjU2ODQ1MjczMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTgxMTcwNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2Vuc2xhdmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBib25kX2Vuc2xhdmUoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIGJ5IGRlZmVycmluZyB0aGUgaW5jcmVtZW50IG9mIGBib25kLVxcdTAwM2VzbGF2ZV9jbnRgIChgV1JJVEVfT05DRShib25kLVxcdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXFx1MDAzZXNsYXZlX2NudCArIDEpYCkgdW50aWwgYWZ0ZXIgcG90ZW50aWFsIGVycm9yIHBhdGhzIGR1cmluZyBYRFAgY29uZmlndXJhdGlvbiBjaGVja3MuIFRoaXMgcHJldmVudHMgYGJvbmQtXFx1MDAzZXNsYXZlX2NudGAgZnJvbSBiZWNvbWluZyBkZXN5bmNocm9uaXplZC9pbmNvbnNpc3RlbnQgd2hlbiBlbnNsYXZpbmcgYSBkZXZpY2UgZmFpbHMgaW4gYGJvbmRfZW5zbGF2ZSgpYC5cXG5cXG5UaGUgY2hhbmdlIGlzIHN0cmljdGx5IGNvbnRyb2wtZmxvdyBhbmQgc3RhdGUtY291bnRlciBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb3B5X3RvX3VzZXIvaW5mby1sZWFrIHBhdGhzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGlzIHN1ZmZpY2llbnQ7IHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYm9uZF9lbnNsYXZlKCkgaW4gdGhlIG5ldHdvcmsgYm9uZGluZyBkcml2ZXIgdG8gZGVmZXIgaW5jcmVtZW50aW5nIHRoZSBzbGF2ZSBjb3VudCB1bnRpbCBhZnRlciBYRFAgc2V0dXAgYW5kIHZhbGlkYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldGxpbmsvcnRubCBpbnRlcmZhY2VzIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDoxOTozNi41Njg0NTcxMzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDk2MjA0MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhOTY2MmQxYTk3OTY2YmM5MGY2NzhkNDQ1NzBlYTgxZjgxODViODM5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTA6MTk6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcXG5pbmRleCBhOWJmZjc2NjNlZWNhLi4xNTE0YThiYTA4ODhkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXFxuQEAgLTIyODQsNyArMjI4NCw2IEBAIGludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdFdSSVRFX09OQ0UoYm9uZC1cXHUwMDNlc2xhdmVfY250LCBib25kLVxcdTAwM2VzbGF2ZV9jbnQgKyAxKTtcXG4gXFx0bmV0ZGV2X2NvbXB1dGVfbWFzdGVyX3VwcGVyX2ZlYXR1cmVzKGJvbmQtXFx1MDAzZWRldiwgdHJ1ZSk7XFxuIFxcdGJvbmRfc2V0X2NhcnJpZXIoYm9uZCk7XFxuIFxcbkBAIC0yMzMyLDYgKzIzMzEsOSBAQCBpbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldixcXG4gXFx0XFx0XFx0YnBmX3Byb2dfaW5jKGJvbmQtXFx1MDAzZXhkcF9wcm9nKTtcXG4gXFx0fVxcbiBcXG4rXFx0LyogSW5jcmVhc2UgdGhlIHNsYXZlIGNvdW50IGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBzbGF2ZSBhcnJheXMuICovXFxuK1xcdFdSSVRFX09OQ0UoYm9uZC1cXHUwMDNlc2xhdmVfY250LCBib25kLVxcdTAwM2VzbGF2ZV9jbnQgKyAxKTtcXG4rXFxuIFxcdC8qIGJyb2FkY2FzdCBtb2RlIHVzZXMgdGhlIGFsbF9zbGF2ZXMgdG8gbG9vcCB0aHJvdWdoIHNsYXZlcy4gKi9cXG4gXFx0aWYgKGJvbmRfbW9kZV9jYW5fdXNlX3htaXRfaGFzaChib25kKSB8fFxcbiBcXHQgICAgQk9ORF9NT0RFKGJvbmQpID09IEJPTkRfTU9ERV9CUk9BRENBU1QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjE5OjM3Ljg3ODc2NjA3MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc3NTcyNzcxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJvbmRfZW5zbGF2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJvbmRfZW5zbGF2ZSgpIGluIHRoZSBuZXR3b3JrIGJvbmRpbmcgZHJpdmVyIHRvIGRlZmVyIGluY3JlbWVudGluZyB0aGUgc2xhdmUgY291bnQgdW50aWwgYWZ0ZXIgWERQIHNldHVwIGFuZCB2YWxpZGF0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3J0bmwgaW50ZXJmYWNlcyBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOTY2MmQxYTk3OTY2YmM5MGY2NzhkNDQ1NzBlYTgxZjgxODViODM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMDoxOTozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG5pbmRleCBhOWJmZjc2NjNlZWNhLi4xNTE0YThiYTA4ODhkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xuQEAgLTIyODQsNyArMjI4NCw2IEBAIGludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRXUklURV9PTkNFKGJvbmQtXHUwMDNlc2xhdmVfY250LCBib25kLVx1MDAzZXNsYXZlX2NudCArIDEpO1xuIFx0bmV0ZGV2X2NvbXB1dGVfbWFzdGVyX3VwcGVyX2ZlYXR1cmVzKGJvbmQtXHUwMDNlZGV2LCB0cnVlKTtcbiBcdGJvbmRfc2V0X2NhcnJpZXIoYm9uZCk7XG4gXG5AQCAtMjMzMiw2ICsyMzMxLDkgQEAgaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXG4gXHRcdFx0YnBmX3Byb2dfaW5jKGJvbmQtXHUwMDNleGRwX3Byb2cpO1xuIFx0fVxuIFxuK1x0LyogSW5jcmVhc2UgdGhlIHNsYXZlIGNvdW50IGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBzbGF2ZSBhcnJheXMuICovXG4rXHRXUklURV9PTkNFKGJvbmQtXHUwMDNlc2xhdmVfY250LCBib25kLVx1MDAzZXNsYXZlX2NudCArIDEpO1xuK1xuIFx0LyogYnJvYWRjYXN0IG1vZGUgdXNlcyB0aGUgYWxsX3NsYXZlcyB0byBsb29wIHRocm91Z2ggc2xhdmVzLiAqL1xuIFx0aWYgKGJvbmRfbW9kZV9jYW5fdXNlX3htaXRfaGFzaChib25kKSB8fFxuIFx0ICAgIEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfQlJPQURDQVNUKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MTk6MzcuODc4NzY3ODExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njk1ODQwNDU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJvbmRpbmcgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBjaGFuZ2VzLiBJJ2xsIGhlYWQgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCBhbmQgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBwdWxsIHVwIHRoZSBwYXRjaCBhbmQgaXRzIHN1cnJvdW5kaW5nIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAnd2h5JyBiZWhpbmQgdGhlICd3aGF0JyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLiBUaW1lIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCBnb3QgYWx0ZXJlZCB3aXRoaW4gYGJvbmRfbWFpbi5jYC4gVW5kZXJzdGFuZGluZyB0aGUgY29kZSB0aGF0IHdhcyBjaGFuZ2VkIHdpbGwgZ2l2ZSB0aGUgbW9zdCByZWxldmFudCBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MTk6NDQuODM3MTc2MDE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI3MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI3MDpcXHRcXHRcXHRcXHRcXHRpZiAoYm9uZF9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1BST01JU0MpXFxuMjI3MTpcXHRcXHRcXHRcXHRcXHRcXHRkZXZfc2V0X3Byb21pc2N1aXR5KHNsYXZlX2RldiwgLTEpO1xcbjIyNzI6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJfc3lzZnNfZGVsO1xcbjIyNzM6XFx0XFx0XFx0XFx0fVxcbjIyNzQ6XFx0XFx0XFx0fVxcbjIyNzU6XFx0XFxuMjI3NjpcXHRcXHRcXHRpZiAoYm9uZF9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB7XFxuMjI3NzpcXHRcXHRcXHRcXHRuZXRpZl9hZGRyX2xvY2tfYmgoYm9uZF9kZXYpO1xcbjIyNzg6XFx0XFx0XFx0XFx0ZGV2X21jX3N5bmNfbXVsdGlwbGUoc2xhdmVfZGV2LCBib25kX2Rldik7XFxuMjI3OTpcXHRcXHRcXHRcXHRkZXZfdWNfc3luY19tdWx0aXBsZShzbGF2ZV9kZXYsIGJvbmRfZGV2KTtcXG4yMjgwOlxcdFxcdFxcdFxcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGJvbmRfZGV2KTtcXG4yMjgxOlxcdFxcbjIyODI6XFx0XFx0XFx0XFx0aWYgKEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfODAyM0FEKVxcbjIyODM6XFx0XFx0XFx0XFx0XFx0ZGV2X21jX2FkZChzbGF2ZV9kZXYsIGxhY3BkdV9tY2FzdF9hZGRyKTtcXG4yMjg0OlxcdFxcdFxcdH1cXG4yMjg1OlxcdFxcdH1cXG4yMjg2OlxcdFxcbjIyODc6XFx0XFx0bmV0ZGV2X2NvbXB1dGVfbWFzdGVyX3VwcGVyX2ZlYXR1cmVzKGJvbmQtXFx1MDAzZWRldiwgdHJ1ZSk7XFxuMjI4ODpcXHRcXHRib25kX3NldF9jYXJyaWVyKGJvbmQpO1xcbjIyODk6XFx0XFxuMjI5MDpcXHRcXHQvKiBOZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIGJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZSgpLCB3aGljaCB3aWxsXFxuMjI5MTpcXHRcXHQgKiByZW1vdmUgdGhlIG1hZGRycyBpZiB0aGUgc2xhdmUgaXMgc2VsZWN0ZWQgYXMgYWN0aXZlIHNsYXZlLlxcbjIyOTI6XFx0XFx0ICovXFxuMjI5MzpcXHRcXHRib25kX3NsYXZlX25zX21hZGRyc19hZGQoYm9uZCwgbmV3X3NsYXZlKTtcXG4yMjk0OlxcdFxcbjIyOTU6XFx0XFx0aWYgKGJvbmRfdXNlc19wcmltYXJ5KGJvbmQpKSB7XFxuMjI5NjpcXHRcXHRcXHRibG9ja19uZXRwb2xsX3R4KCk7XFxuMjI5NzpcXHRcXHRcXHRib25kX3NlbGVjdF9hY3RpdmVfc2xhdmUoYm9uZCk7XFxuMjI5ODpcXHRcXHRcXHR1bmJsb2NrX25ldHBvbGxfdHgoKTtcXG4yMjk5OlxcdFxcdH1cXG4yMzAwOlxcdFxcbjIzMDE6XFx0XFx0aWYgKCFzbGF2ZV9kZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19icGYgfHxcXG4yMzAyOlxcdFxcdCAgICAhc2xhdmVfZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9feGRwX3htaXQpIHtcXG4yMzAzOlxcdFxcdFxcdGlmIChib25kLVxcdTAwM2V4ZHBfcHJvZykge1xcbjIzMDQ6XFx0XFx0XFx0XFx0U0xBVkVfTkxfRVJSKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIGV4dGFjayxcXG4yMzA1OlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIlNsYXZlIGRvZXMgbm90IHN1cHBvcnQgWERQXFxcIik7XFxuMjMwNjpcXHRcXHRcXHRcXHRyZXMgPSAtRU9QTk9UU1VQUDtcXG4yMzA3OlxcdFxcdFxcdFxcdGdvdG8gZXJyX3N5c2ZzX2RlbDtcXG4yMzA4OlxcdFxcdFxcdH1cXG4yMzA5OlxcdFxcdH0gZWxzZSBpZiAoYm9uZC1cXHUwMDNleGRwX3Byb2cpIHtcXG4yMzEwOlxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfYnBmIHhkcCA9IHtcXG4yMzExOlxcdFxcdFxcdFxcdC5jb21tYW5kID0gWERQX1NFVFVQX1BST0csXFxuMjMxMjpcXHRcXHRcXHRcXHQuZmxhZ3MgICA9IDAsXFxuMjMxMzpcXHRcXHRcXHRcXHQucHJvZyAgICA9IGJvbmQtXFx1MDAzZXhkcF9wcm9nLFxcbjIzMTQ6XFx0XFx0XFx0XFx0LmV4dGFjayAgPSBleHRhY2ssXFxuMjMxNTpcXHRcXHRcXHR9O1xcbjIzMTY6XFx0XFxuMjMxNzpcXHRcXHRcXHRpZiAoZGV2X3hkcF9wcm9nX2NvdW50KHNsYXZlX2RldikgXFx1MDAzZSAwKSB7XFxuMjMxODpcXHRcXHRcXHRcXHRTTEFWRV9OTF9FUlIoYm9uZF9kZXYsIHNsYXZlX2RldiwgZXh0YWNrLFxcbjIzMTk6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiU2xhdmUgaGFzIFhEUCBwcm9ncmFtIGxvYWRlZCwgcGxlYXNlIHVubG9hZCBiZWZvcmUgZW5zbGF2aW5nXFxcIik7XFxuMjMyMDpcXHRcXHRcXHRcXHRyZXMgPSAtRU9QTk9UU1VQUDtcXG4yMzIxOlxcdFxcdFxcdFxcdGdvdG8gZXJyX3N5c2ZzX2RlbDtcXG4yMzIyOlxcdFxcdFxcdH1cXG4yMzIzOlxcdFxcbjIzMjQ6XFx0XFx0XFx0cmVzID0gZGV2X3hkcF9wcm9wYWdhdGUoc2xhdmVfZGV2LCBcXHUwMDI2eGRwKTtcXG4yMzI1OlxcdFxcdFxcdGlmIChyZXMgXFx1MDAzYyAwKSB7XFxuMjMyNjpcXHRcXHRcXHRcXHQvKiBuZG9fYnBmKCkgc2V0cyBleHRhY2sgZXJyb3IgbWVzc2FnZSAqL1xcbjIzMjc6XFx0XFx0XFx0XFx0c2xhdmVfZGJnKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIFxcXCJFcnJvciAlZCBjYWxsaW5nIG5kb19icGZcXFxcblxcXCIsIHJlcyk7XFxuMjMyODpcXHRcXHRcXHRcXHRnb3RvIGVycl9zeXNmc19kZWw7XFxuMjMyOTpcXHRcXHRcXHR9XFxuMjMzMDpcXHRcXHRcXHRpZiAoYm9uZC1cXHUwMDNleGRwX3Byb2cpXFxuMjMzMTpcXHRcXHRcXHRcXHRicGZfcHJvZ19pbmMoYm9uZC1cXHUwMDNleGRwX3Byb2cpO1xcbjIzMzI6XFx0XFx0fVxcbjIzMzM6XFx0XFxuMjMzNDpcXHRcXHQvKiBJbmNyZWFzZSB0aGUgc2xhdmUgY291bnQgYmVmb3JlIHJlYnVpbGRpbmcgdGhlIHNsYXZlIGFycmF5cy4gKi9cXG4yMzM1OlxcdFxcdFdSSVRFX09OQ0UoYm9uZC1cXHUwMDNlc2xhdmVfY250LCBib25kLVxcdTAwM2VzbGF2ZV9jbnQgKyAxKTtcXG4yMzM2OlxcdFxcbjIzMzc6XFx0XFx0LyogYnJvYWRjYXN0IG1vZGUgdXNlcyB0aGUgYWxsX3NsYXZlcyB0byBsb29wIHRocm91Z2ggc2xhdmVzLiAqL1xcbjIzMzg6XFx0XFx0aWYgKGJvbmRfbW9kZV9jYW5fdXNlX3htaXRfaGFzaChib25kKSB8fFxcbjIzMzk6XFx0XFx0ICAgIEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfQlJPQURDQVNUKVxcbjIzNDA6XFx0XFx0XFx0Ym9uZF91cGRhdGVfc2xhdmVfYXJyKGJvbmQsIE5VTEwpO1xcbjIzNDE6XFx0XFxuMjM0MjpcXHRcXHRib25kX3hkcF9zZXRfZmVhdHVyZXMoYm9uZF9kZXYpO1xcbjIzNDM6XFx0XFxuMjM0NDpcXHRcXHRzbGF2ZV9pbmZvKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIFxcXCJFbnNsYXZpbmcgYXMgJXMgaW50ZXJmYWNlIHdpdGggJXMgbGlua1xcXFxuXFxcIixcXG4yMzQ1OlxcdFxcdFxcdCAgIGJvbmRfaXNfYWN0aXZlX3NsYXZlKG5ld19zbGF2ZSkgPyBcXFwiYW4gYWN0aXZlXFxcIiA6IFxcXCJhIGJhY2t1cFxcXCIsXFxuMjM0NjpcXHRcXHRcXHQgICBuZXdfc2xhdmUtXFx1MDAzZWxpbmsgIT0gQk9ORF9MSU5LX0RPV04gPyBcXFwiYW4gdXBcXFwiIDogXFxcImEgZG93blxcXCIpO1xcbjIzNDc6XFx0XFxuMjM0ODpcXHRcXHQvKiBlbnNsYXZlIGlzIHN1Y2Nlc3NmdWwgKi9cXG4yMzQ5OlxcdFxcdGJvbmRfcXVldWVfc2xhdmVfZXZlbnQobmV3X3NsYXZlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MTk6NDQuODM3NDEyMjA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzkwMjUwMTc0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaXhpbmcgYSBSYWNlIENvbmRpdGlvbiBpbiB0aGUgQm9uZGluZyBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYm9uZF9lbnNsYXZlYCBmdW5jdGlvbiB3aXRoaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGFkZHJlc3NpbmcgYSBidWcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGV4YWN0bHkgd2FzIGJlaW5nIGZpeGVkLiBSaWdodCwgZ290IGl0LiBMb29raW5nIGF0IGxpbmVzIDIzMDAtMjMzMCwgdGhlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhlIFhEUCAoZVhwcmVzcyBEYXRhIFBhdGgpIHNldHVwIGludGVyYWN0cyB3aXRoIHRoZSBib25kaW5nIHByb2Nlc3MuXG5cbkJlZm9yZSwgdGhlcmUgd2FzIHRoaXMgY3JpdGljYWwgc2VxdWVuY2U6IGBXUklURV9PTkNFKGJvbmQtXHUwMDNlc2xhdmVfY250LCBib25kLVx1MDAzZXNsYXZlX2NudCArIDEpO2Agd2FzIGhhcHBlbmluZyAqYmVmb3JlKiBjcnVjaWFsIGNoZWNrcyDigJMgc3BlY2lmaWNhbGx5LCB3aGV0aGVyIFhEUCBzZXR1cCB3YXMgc3VjY2Vzc2Z1bCBvciBpZiB0aGUgc2xhdmUgaW50ZXJmYWNlIGV2ZW4gc3VwcG9ydGVkIFhEUC4gSWYgWERQIHNldHVwIGZhaWxlZCBvciB0aGUgc2xhdmUgZGlkbid0IHN1cHBvcnQgaXQsIHRoZSBjb2RlIHdvdWxkIGp1bXAgdG8gYGVycl9zeXNmc19kZWxgLiBUaGUgcHJvYmxlbT8gYGJvbmQtXHUwMDNlc2xhdmVfY250YCB3b3VsZCBhbHJlYWR5IGJlIGluY3JlbWVudGVkIGV2ZW4gdGhvdWdoIHRoZSBzbGF2ZSB3YXNuJ3QgYWN0dWFsbHkgcHJvcGVybHkgZW5zbGF2ZWQuIFRoaXMgY3JlYXRlZCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBhbmQgZGF0YSBjb3JydXB0aW9uLiBJZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIHNldHVwLCBgYm9uZC1cdTAwM2VzbGF2ZV9jbnRgIG1pZ2h0IGJlIGxlZnQgb3V0IG9mIHN5bmMsIG9yIHRoZSBhcnJheSBgYm9uZF9zbGF2ZV9hcnJgIHdvdWxkIGJlIGNvcnJ1cHRlZC5cblxuVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBjcml0aWNhbC4gTW92aW5nIHRoZSBgV1JJVEVfT05DRWAgb3BlcmF0aW9uICphZnRlciogdGhlIFhEUCBjaGVja3MgZW5zdXJlcyB0aGF0IGBib25kLVx1MDAzZXNsYXZlX2NudGAgaXMgb25seSBpbmNyZW1lbnRlZCBpZiB0aGUgc2xhdmUgaXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLiBUaGlzIHNob3VsZCByZXNvbHZlIHRoZSBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBjcmFzaGVzIG9yIGluY29ycmVjdCBiZWhhdmlvciBpbiBgYm9uZF91cGRhdGVfc2xhdmVfYXJyYCwgb3Igb3RoZXIgcmVsYXRlZCBwcm9jZXNzZXMuXG5cbk5vdywgbGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZm9yIHRoZSBib25kaW5nIGRyaXZlciwgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGlzIHByb3Blcmx5IGludGVncmF0ZWQuIEknbGwgaGVhZCBvdmVyIHRvIGBkcml2ZXJzL25ldC9ib25kaW5nYCBhbmQgbG9jYXRlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjAwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MTk6NDguNzM5OTE3MDA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjE5ODExLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQk9ORElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MTk6NDguODAwMTQ2NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDU0NzEwODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqS2NvbmZpZyBMb2NhdGlvbiBIdW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIGNvbmZpZ3VyZSBzb21ldGhpbmcgcmVsYXRlZCB0byBuZXR3b3JraW5nLCBwcm9iYWJseSBhIGRyaXZlci4gR2l2ZW4gdGhlIHNjb3BlIG9mIHRoaXMgcHJvamVjdCwgSSdtIHByZXR0eSBzdXJlIGl0J3MgZ29pbmcgdG8gaW52b2x2ZSBhIEtjb25maWcgZmlsZS4gV2hlcmUgd291bGQgdGhhdCBsaXZlPyBUaGlua2luZyBsb2dpY2FsbHksIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgYXJlIHRoZSBvYnZpb3VzOiBgZHJpdmVycy9uZXQvYCBhbmQsIHBlcmhhcHMgbW9yZSBzcGVjaWZpY2FsbHksIGBkcml2ZXJzL25ldC9ib25kaW5nL2AuIFRoYXQgYm9uZGluZyBkaXJlY3RvcnkgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gbGluayBhZ2dyZWdhdGlvbiwgYW5kIHRoYXQgc2VlbXMgdG8gYmUgcmVsZXZhbnQuIEl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgY29udmVudGlvbiwgc28gdGhvc2UgYXJlIHRoZSBmaXJzdCBwbGFjZXMgSSdsbCBzdGFydCBkaWdnaW5nLiBJJ2xsIGNoZWNrIHRob3NlIGZpcnN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjYzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MTk6NTEuMjU0ODU5NjM0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDE1MzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJPTkRJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQxOmNvbmZpZyBCT05ESU5HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiQm9uZGluZyBkcml2ZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MTk6NTEuMzA2MjgwMzQ2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODQzODU3OTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHNvIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgdGhhdCB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUgaXMgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0LiBJJ20gZ29pbmcgdG8ganVtcCBpbiBhcm91bmQgbGluZSA0MSwgYXMgdGhhdCdzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZXhwbG9yaW5nIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlc2UgZmlsZXMuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBhdmFpbGFibGUgbmV0d29yayBkcml2ZXJzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgdGhlIGFyZWEgcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUzOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjE5OjU5Ljc0NDg2MzY5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIFlvdSBjYW4gc2F5IE4gaGVyZSBpZiB5b3UgZG8gbm90IGludGVuZCB0byB1c2UgYW55IG9mIHRoZVxcbiAgMzc6XFx0XFx0ICBuZXR3b3JraW5nIGNvcmUgZHJpdmVycyAoaS5lLiBWTEFOLCBicmlkZ2luZywgYm9uZGluZywgZXRjLilcXG4gIDM4OlxcdFxcbiAgMzk6XFx0aWYgTkVUX0NPUkVcXG4gIDQwOlxcdFxcbiAgNDE6XFx0Y29uZmlnIEJPTkRJTkdcXG4gIDQyOlxcdFxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbiAgNDM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cXG4gIDQ1OlxcdFxcdGhlbHBcXG4gIDQ2OlxcdFxcdCAgU2F5ICdZJyBvciAnTScgaWYgeW91IHdpc2ggdG8gYmUgYWJsZSB0byAnYm9uZCcgbXVsdGlwbGUgRXRoZXJuZXRcXG4gIDQ3OlxcdFxcdCAgQ2hhbm5lbHMgdG9nZXRoZXIuIFRoaXMgaXMgY2FsbGVkICdFdGhlcmNoYW5uZWwnIGJ5IENpc2NvLFxcbiAgNDg6XFx0XFx0ICAnVHJ1bmtpbmcnIGJ5IFN1biwgODAyLjNhZCBieSB0aGUgSUVFRSwgYW5kICdCb25kaW5nJyBpbiBMaW51eC5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBUaGUgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGJvbmRpbmcgbW9kZXMgdG8gYWxsb3cgZm9yIGJvdGggaGlnaFxcbiAgNTE6XFx0XFx0ICBwZXJmb3JtYW5jZSBhbmQgaGlnaCBhdmFpbGFiaWxpdHkgb3BlcmF0aW9uLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIFJlZmVyIHRvIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnJzdFxcdTAwM2UgZm9yIG1vcmVcXG4gIDU0OlxcdFxcdCAgaW5mb3JtYXRpb24uXFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNTc6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBib25kaW5nLlxcbiAgNTg6XFx0XFxuICA1OTpcXHRjb25maWcgRFVNTVlcXG4gIDYwOlxcdFxcdHRyaXN0YXRlIFxcXCJEdW1teSBuZXQgZHJpdmVyIHN1cHBvcnRcXFwiXFxuICA2MTpcXHRcXHRoZWxwXFxuICA2MjpcXHRcXHQgIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBiaXQtYnVja2V0IGRldmljZSAoaS5lLiB0cmFmZmljIHlvdSBzZW5kIHRvXFxuICA2MzpcXHRcXHQgIHRoaXMgZGV2aWNlIGlzIGNvbnNpZ25lZCBpbnRvIG9ibGl2aW9uKSB3aXRoIGEgY29uZmlndXJhYmxlIElQXFxuICA2NDpcXHRcXHQgIGFkZHJlc3MuIEl0IGlzIG1vc3QgY29tbW9ubHkgdXNlZCBpbiBvcmRlciB0byBtYWtlIHlvdXIgY3VycmVudGx5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjE5OjU5Ljc0NDk2NzMzNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODA2MjY4NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBOZXR3b3JrIEJvbmRpbmcgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgd29ydGh3aGlsZSBwYXRjaCB0byBhbmFseXplLiBUaGUgYGJvbmRfZW5zbGF2ZWAgZnVuY3Rpb24gd2l0aGluIHRoZSBib25kaW5nIGRyaXZlciAoYGJvbmRfbWFpbi5jYCkgaXMgY2xlYXJseSB0aGUgdGFyZ2V0LCBhbmQgdGhhdCdzIHRoZSBvbmx5IGZ1bmN0aW9uIG1vZGlmaWVkIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBkaWZmLiBJdCdzIGFsc28gd29ydGggbm90aW5nIHRoYXQgdGhlIGJvbmRpbmcgZHJpdmVyIGlzIGEgc3RhbmRhcmQgbmV0ZGV2IGRyaXZlciwgc28gaXQncyBhIGtub3duIHF1YW50aXR5LiBJdCBjYW4gYmUgY3JlYXRlZCBhbmQgbWFuaXB1bGF0ZWQgdGhyb3VnaCBzdGFuZGFyZCBpbnRlcmZhY2VzIGxpa2UgYHJ0bmxgLCBgbmV0bGlua2AsIGBpb2N0bGAsIGFuZCBgc3lzZnNgIHdoaWNoIGlzIHVzZWZ1bCBpbiB0ZXN0aW5nLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgaXQncyByZWFkaWx5IHJlYWNoYWJsZSB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCB3aGljaCBzaW1wbGlmaWVzIGZ1enppbmcgYW5kIGRlYnVnZ2luZy4gU3l6a2FsbGVyIGFjdGl2ZWx5IHRhcmdldHMgYG5ldGxpbmtgIHJlbGF0ZWQgdG8gYm9uZGluZywgbWFraW5nIHRoaXMgcGFydGljdWxhcmx5IHJlbGV2YW50LlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgYSBjaGFuZ2UgaW4gdGhlIHN0YXRlIHRyYWNraW5nIG9mIGBib25kLVx1MDAzZXNsYXZlX2NudGAgd2l0aGluIGBib25kX2Vuc2xhdmVgLiBJdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSB0aW1pbmcgaXNzdWUgd2l0aCB0aGUgaW5jcmVtZW50IG9mIHRoZSBzbGF2ZSBjb3VudC4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGNvbnNpc3RlbmN5IHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIFRoZSBwcmV2aW91cyBwbGFjZW1lbnQgb2YgYFdSSVRFX09OQ0UoYm9uZC1cdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXHUwMDNlc2xhdmVfY250ICsgMSk7YCBtaWdodCBoYXZlIGNhdXNlZCBpc3N1ZXMgaWYgc29tZSBzdWJzZXF1ZW50IHNldHVwIG9yIFhEUCBjaGVja3MgZmFpbGVkLiBCeSBtb3ZpbmcgaXQsIHRoZSBjb3VudCBpcyBpbmNyZW1lbnRlZCAqYWZ0ZXIqIHRob3NlIGNoZWNrcyB3aGljaCB3b3VsZCBtaXRpZ2F0ZSBpbmNvbnNpc3RlbmNpZXMuXG5cbkkndmUgdmVyaWZpZWQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zOiBgQk9ORElOR2AgYW5kIGBJTkVUYCwgc28gd2UncmUgZ29vZCB0aGVyZS4gTXkgZm9jdXMgc3ltYm9scyBhcmUgZGVmaW5pdGVseSBjZW50ZXJlZCBvbiBgYm9uZF9lbnNsYXZlYCB3aGljaCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24uIEkgZG91YmxlLWNoZWNrZWQgdGhlIGRpZmYgYW5kIHZlcmlmaWVkIHRoYXQgb25seSB0aGUgYGJvbmRfbWFpbi5jYCBmaWxlIHdhcyB0b3VjaGVkIGFuZCBvbmx5IGBib25kX2Vuc2xhdmVgIHdhcyBtb2RpZmllZC5cblxuQmFzZWQgb24gdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBpdCdzIGNsZWFyIHRoaXMgcGF0Y2ggZml4ZXMgYSBjcml0aWNhbCB0aW1pbmcgaXNzdWUgd2l0aGluIGEgcmVsYXRpdmVseSBhY2Nlc3NpYmxlIGFuZCBhY3RpdmVseSBmdXp6ZWQgYXJlYSBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBhbmQgZnVydGhlciBpbnZlc3RpZ2F0aW9uIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTcxLCJPdXRwdXRUb2tlbnMiOjk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MjA6MDUuNTUxMjM4NTM4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ4MDE4NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2Vuc2xhdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBib25kX2Vuc2xhdmUoKSBpbiB0aGUgbmV0d29yayBib25kaW5nIGRyaXZlciB0byBkZWZlciBpbmNyZW1lbnRpbmcgdGhlIHNsYXZlIGNvdW50IHVudGlsIGFmdGVyIFhEUCBzZXR1cCBhbmQgdmFsaWRhdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0bGluay9ydG5sIGludGVyZmFjZXMgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJvbmRfZW5zbGF2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJvbmRfZW5zbGF2ZSgpIGluIHRoZSBuZXR3b3JrIGJvbmRpbmcgZHJpdmVyIHRvIGRlZmVyIGluY3JlbWVudGluZyB0aGUgc2xhdmUgY291bnQgdW50aWwgYWZ0ZXIgWERQIHNldHVwIGFuZCB2YWxpZGF0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3J0bmwgaW50ZXJmYWNlcyBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MjA6MDUuNjM2MDQ3NTg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTExMzU2NzM5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjIwOjA1LjYzNjU0NzY2NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE1MTEzMDYzMTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYm9uZF9lbnNsYXZlKClgIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCBieSBkZWZlcnJpbmcgdGhlIGluY3JlbWVudCBvZiBgYm9uZC1cXHUwMDNlc2xhdmVfY250YCAoYFdSSVRFX09OQ0UoYm9uZC1cXHUwMDNlc2xhdmVfY250LCBib25kLVxcdTAwM2VzbGF2ZV9jbnQgKyAxKWApIHVudGlsIGFmdGVyIHBvdGVudGlhbCBlcnJvciBwYXRocyBkdXJpbmcgWERQIGNvbmZpZ3VyYXRpb24gY2hlY2tzLiBUaGlzIHByZXZlbnRzIGBib25kLVxcdTAwM2VzbGF2ZV9jbnRgIGZyb20gYmVjb21pbmcgZGVzeW5jaHJvbml6ZWQvaW5jb25zaXN0ZW50IHdoZW4gZW5zbGF2aW5nIGEgZGV2aWNlIGZhaWxzIGluIGBib25kX2Vuc2xhdmUoKWAuXFxuXFxuVGhlIGNoYW5nZSBpcyBzdHJpY3RseSBjb250cm9sLWZsb3cgYW5kIHN0YXRlLWNvdW50ZXIgbWFuYWdlbWVudC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29weV90b191c2VyL2luZm8tbGVhayBwYXRocywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFN0YW5kYXJkIHRlc3Rpbmcgd2l0aCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyBpcyBzdWZmaWNpZW50OyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE5NjYyZDFhOTc5NjZiYzkwZjY3OGQ0NDU3MGVhODFmODE4NWI4MzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDEwOjE5OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcbmluZGV4IGE5YmZmNzY2M2VlY2EuLjE1MTRhOGJhMDg4OGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG5AQCAtMjI4NCw3ICsyMjg0LDYgQEAgaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdFdSSVRFX09OQ0UoYm9uZC1cdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXHUwMDNlc2xhdmVfY250ICsgMSk7XG4gXHRuZXRkZXZfY29tcHV0ZV9tYXN0ZXJfdXBwZXJfZmVhdHVyZXMoYm9uZC1cdTAwM2VkZXYsIHRydWUpO1xuIFx0Ym9uZF9zZXRfY2Fycmllcihib25kKTtcbiBcbkBAIC0yMzMyLDYgKzIzMzEsOSBAQCBpbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldixcbiBcdFx0XHRicGZfcHJvZ19pbmMoYm9uZC1cdTAwM2V4ZHBfcHJvZyk7XG4gXHR9XG4gXG4rXHQvKiBJbmNyZWFzZSB0aGUgc2xhdmUgY291bnQgYmVmb3JlIHJlYnVpbGRpbmcgdGhlIHNsYXZlIGFycmF5cy4gKi9cbitcdFdSSVRFX09OQ0UoYm9uZC1cdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXHUwMDNlc2xhdmVfY250ICsgMSk7XG4rXG4gXHQvKiBicm9hZGNhc3QgbW9kZSB1c2VzIHRoZSBhbGxfc2xhdmVzIHRvIGxvb3AgdGhyb3VnaCBzbGF2ZXMuICovXG4gXHRpZiAoYm9uZF9tb2RlX2Nhbl91c2VfeG1pdF9oYXNoKGJvbmQpIHx8XG4gXHQgICAgQk9ORF9NT0RFKGJvbmQpID09IEJPTkRfTU9ERV9CUk9BRENBU1QpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDoyMDowNS42MzY1NDk3NTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU4NTA0NzY5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIEJvbmRpbmcgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIHRvIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5GaXJzdCwgSSBzZWUgYSBzbWFsbCBkaWZmLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHNpZ24uIEl0IGxvb2tzIGxpa2UgYSBtaW5vciBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBgYm9uZF9lbnNsYXZlYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgaW5jcmVtZW50ZWQgYGJvbmQtXHUwMDNlc2xhdmVfY250YCBiZWZvcmUgYG5ldGRldl9jb21wdXRlX21hc3Rlcl91cHBlcl9mZWF0dXJlc2AgYW5kIGBib25kX3NldF9jYXJyaWVyYC4gVGhlIHBhdGNoIG1vdmVzIHRoZSBgV1JJVEVfT05DRWAgY2FsbCB0aGF0IGluY3JlbWVudHMgYGJvbmQtXHUwMDNlc2xhdmVfY250YCAqYWZ0ZXIqIHRob3NlIGNhbGxzLCBidXQgYmVmb3JlIHRoZSBzbGF2ZSBhcnJheSByZWJ1aWxkLiBIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEknbGwgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guXG5cblRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoZSBkaWZmLCBhcm91bmQgbGluZXMgMjI4MC0yMzUwLCBzZWVtcyB0byBkZWFsIHdpdGggYWRkaW5nIGEgc2xhdmUgbmV0d29yayBkZXZpY2UgdG8gYSBib25kaW5nIGludGVyZmFjZS4gVGhlIGBib25kX2Vuc2xhdmVgIGZ1bmN0aW9uIGFwcGVhcnMgdG8gYmUgY2VudHJhbCB0byB0aGlzIHByb2Nlc3MuIFRoZSBjb2RlJ3MgY29tbWVudCBtZW50aW9ucyBicm9hZGNhc3QgbW9kZSB1c2luZyBgYWxsX3NsYXZlc2AgdG8gbG9vcCB0aHJvdWdoIHNsYXZlcywgc28gbWF5YmUgdGhlcmUncyBhIHJlYXNvbiBmb3IgdGhpcyBjaGFuZ2UuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGRlcGVuZGVuY2llcyBoZXJlLlxuXG5TbywgdGhlIGtleSBxdWVzdGlvbnMgYXJlOiBEb2VzIHRoaXMgcmVvcmRlcmluZyBpbnRyb2R1Y2UgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gcmVsYXRlZCB0byBgYm9uZC1cdTAwM2VzbGF2ZV9jbnRgIG9yIHRoZSBzbGF2ZSBhcnJheXMsIGV2ZW4gdHJhbnNpZW50bHk/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgaWYgb3RoZXIgdGhyZWFkcyBhY2Nlc3MgYGJvbmQtXHUwMDNlc2xhdmVfY250YCB3aGlsZSB0aGUgYXJyYXlzIGFyZSBiZWluZyByZWJ1aWx0PyBTcGVjaWZpY2FsbHksIGRvZXMgdGhlIHRpbWluZyBvZiB0aGUgaW5jcmVtZW50IG9mIGBib25kLVx1MDAzZXNsYXZlX2NudGAgYWZmZWN0IGFueSBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYnkgYG5ldGRldl9jb21wdXRlX21hc3Rlcl91cHBlcl9mZWF0dXJlc2AsIGBib25kX3NldF9jYXJyaWVyYCwgb3IgdGhlIGFycmF5IHJlYnVpbGQsIGV2ZW4gdGVtcG9yYXJpbHk/IERvZXMgdGhlIG5ldyBvcmRlciBpbnRyb2R1Y2UgYSB3aW5kb3cgd2hlcmUgYW4gaW5hY2N1cmF0ZSBzbGF2ZSBjb3VudCBjb3VsZCBjYXVzZSBpc3N1ZXM/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZXMgd2l0aCBvdGhlciB0aHJlYWRzIHRoYXQgbWF5IGJlIGFjY2Vzc2luZyB0aGUgYm9uZCBzdHJ1Y3R1cmUgY29uY3VycmVudGx5P1xuXG5JIHRoaW5rIEknbGwgd2FudCB0byBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhpcyBhcmVhLCBjb25zaWRlcmluZyBob3cgYW5kIHdoZW4gYGJvbmQtXHUwMDNlc2xhdmVfY250YCBpcyBhY2Nlc3NlZCwgYW5kIGlmIHRoZSBjb3VudCBiZWluZyB3cm9uZyBmb3IgYSBzaG9ydCBwZXJpb2QgY2F1c2VzIGFueSBwcm9ibGVtcy4gRGVwZW5kaW5nIG9uIHRoZSBhbnN3ZXIsIGEgZnV6emluZyBzZXNzaW9uIG1pZ2h0IGJlIG92ZXJraWxsLCBvciB0aGlzIGNoYW5nZSBjb3VsZCBiZSBhIHJpc2t5IHJlZmFjdG9yLiBUaGlzIG1pZ2h0IGJlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGEgY2FyZWZ1bCBjb2RlIHJldmlldyB3aXRoIGFuIGV5ZSB0b3dhcmRzIGNvbmN1cnJlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjM3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MjA6MTAuMjIxNjAwMTM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNzA6XFx0XFx0XFx0XFx0XFx0aWYgKGJvbmRfZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9QUk9NSVNDKVxcbjIyNzE6XFx0XFx0XFx0XFx0XFx0XFx0ZGV2X3NldF9wcm9taXNjdWl0eShzbGF2ZV9kZXYsIC0xKTtcXG4yMjcyOlxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyX3N5c2ZzX2RlbDtcXG4yMjczOlxcdFxcdFxcdFxcdH1cXG4yMjc0OlxcdFxcdFxcdH1cXG4yMjc1OlxcdFxcbjIyNzY6XFx0XFx0XFx0aWYgKGJvbmRfZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCkge1xcbjIyNzc6XFx0XFx0XFx0XFx0bmV0aWZfYWRkcl9sb2NrX2JoKGJvbmRfZGV2KTtcXG4yMjc4OlxcdFxcdFxcdFxcdGRldl9tY19zeW5jX211bHRpcGxlKHNsYXZlX2RldiwgYm9uZF9kZXYpO1xcbjIyNzk6XFx0XFx0XFx0XFx0ZGV2X3VjX3N5bmNfbXVsdGlwbGUoc2xhdmVfZGV2LCBib25kX2Rldik7XFxuMjI4MDpcXHRcXHRcXHRcXHRuZXRpZl9hZGRyX3VubG9ja19iaChib25kX2Rldik7XFxuMjI4MTpcXHRcXG4yMjgyOlxcdFxcdFxcdFxcdGlmIChCT05EX01PREUoYm9uZCkgPT0gQk9ORF9NT0RFXzgwMjNBRClcXG4yMjgzOlxcdFxcdFxcdFxcdFxcdGRldl9tY19hZGQoc2xhdmVfZGV2LCBsYWNwZHVfbWNhc3RfYWRkcik7XFxuMjI4NDpcXHRcXHRcXHR9XFxuMjI4NTpcXHRcXHR9XFxuMjI4NjpcXHRcXG4yMjg3OlxcdFxcdG5ldGRldl9jb21wdXRlX21hc3Rlcl91cHBlcl9mZWF0dXJlcyhib25kLVxcdTAwM2VkZXYsIHRydWUpO1xcbjIyODg6XFx0XFx0Ym9uZF9zZXRfY2Fycmllcihib25kKTtcXG4yMjg5OlxcdFxcbjIyOTA6XFx0XFx0LyogTmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSBib25kX3NlbGVjdF9hY3RpdmVfc2xhdmUoKSwgd2hpY2ggd2lsbFxcbjIyOTE6XFx0XFx0ICogcmVtb3ZlIHRoZSBtYWRkcnMgaWYgdGhlIHNsYXZlIGlzIHNlbGVjdGVkIGFzIGFjdGl2ZSBzbGF2ZS5cXG4yMjkyOlxcdFxcdCAqL1xcbjIyOTM6XFx0XFx0Ym9uZF9zbGF2ZV9uc19tYWRkcnNfYWRkKGJvbmQsIG5ld19zbGF2ZSk7XFxuMjI5NDpcXHRcXG4yMjk1OlxcdFxcdGlmIChib25kX3VzZXNfcHJpbWFyeShib25kKSkge1xcbjIyOTY6XFx0XFx0XFx0YmxvY2tfbmV0cG9sbF90eCgpO1xcbjIyOTc6XFx0XFx0XFx0Ym9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKGJvbmQpO1xcbjIyOTg6XFx0XFx0XFx0dW5ibG9ja19uZXRwb2xsX3R4KCk7XFxuMjI5OTpcXHRcXHR9XFxuMjMwMDpcXHRcXG4yMzAxOlxcdFxcdGlmICghc2xhdmVfZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fYnBmIHx8XFxuMjMwMjpcXHRcXHQgICAgIXNsYXZlX2Rldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3hkcF94bWl0KSB7XFxuMjMwMzpcXHRcXHRcXHRpZiAoYm9uZC1cXHUwMDNleGRwX3Byb2cpIHtcXG4yMzA0OlxcdFxcdFxcdFxcdFNMQVZFX05MX0VSUihib25kX2Rldiwgc2xhdmVfZGV2LCBleHRhY2ssXFxuMjMwNTpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJTbGF2ZSBkb2VzIG5vdCBzdXBwb3J0IFhEUFxcXCIpO1xcbjIzMDY6XFx0XFx0XFx0XFx0cmVzID0gLUVPUE5PVFNVUFA7XFxuMjMwNzpcXHRcXHRcXHRcXHRnb3RvIGVycl9zeXNmc19kZWw7XFxuMjMwODpcXHRcXHRcXHR9XFxuMjMwOTpcXHRcXHR9IGVsc2UgaWYgKGJvbmQtXFx1MDAzZXhkcF9wcm9nKSB7XFxuMjMxMDpcXHRcXHRcXHRzdHJ1Y3QgbmV0ZGV2X2JwZiB4ZHAgPSB7XFxuMjMxMTpcXHRcXHRcXHRcXHQuY29tbWFuZCA9IFhEUF9TRVRVUF9QUk9HLFxcbjIzMTI6XFx0XFx0XFx0XFx0LmZsYWdzICAgPSAwLFxcbjIzMTM6XFx0XFx0XFx0XFx0LnByb2cgICAgPSBib25kLVxcdTAwM2V4ZHBfcHJvZyxcXG4yMzE0OlxcdFxcdFxcdFxcdC5leHRhY2sgID0gZXh0YWNrLFxcbjIzMTU6XFx0XFx0XFx0fTtcXG4yMzE2OlxcdFxcbjIzMTc6XFx0XFx0XFx0aWYgKGRldl94ZHBfcHJvZ19jb3VudChzbGF2ZV9kZXYpIFxcdTAwM2UgMCkge1xcbjIzMTg6XFx0XFx0XFx0XFx0U0xBVkVfTkxfRVJSKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIGV4dGFjayxcXG4yMzE5OlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIlNsYXZlIGhhcyBYRFAgcHJvZ3JhbSBsb2FkZWQsIHBsZWFzZSB1bmxvYWQgYmVmb3JlIGVuc2xhdmluZ1xcXCIpO1xcbjIzMjA6XFx0XFx0XFx0XFx0cmVzID0gLUVPUE5PVFNVUFA7XFxuMjMyMTpcXHRcXHRcXHRcXHRnb3RvIGVycl9zeXNmc19kZWw7XFxuMjMyMjpcXHRcXHRcXHR9XFxuMjMyMzpcXHRcXG4yMzI0OlxcdFxcdFxcdHJlcyA9IGRldl94ZHBfcHJvcGFnYXRlKHNsYXZlX2RldiwgXFx1MDAyNnhkcCk7XFxuMjMyNTpcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2MgMCkge1xcbjIzMjY6XFx0XFx0XFx0XFx0LyogbmRvX2JwZigpIHNldHMgZXh0YWNrIGVycm9yIG1lc3NhZ2UgKi9cXG4yMzI3OlxcdFxcdFxcdFxcdHNsYXZlX2RiZyhib25kX2Rldiwgc2xhdmVfZGV2LCBcXFwiRXJyb3IgJWQgY2FsbGluZyBuZG9fYnBmXFxcXG5cXFwiLCByZXMpO1xcbjIzMjg6XFx0XFx0XFx0XFx0Z290byBlcnJfc3lzZnNfZGVsO1xcbjIzMjk6XFx0XFx0XFx0fVxcbjIzMzA6XFx0XFx0XFx0aWYgKGJvbmQtXFx1MDAzZXhkcF9wcm9nKVxcbjIzMzE6XFx0XFx0XFx0XFx0YnBmX3Byb2dfaW5jKGJvbmQtXFx1MDAzZXhkcF9wcm9nKTtcXG4yMzMyOlxcdFxcdH1cXG4yMzMzOlxcdFxcbjIzMzQ6XFx0XFx0LyogSW5jcmVhc2UgdGhlIHNsYXZlIGNvdW50IGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBzbGF2ZSBhcnJheXMuICovXFxuMjMzNTpcXHRcXHRXUklURV9PTkNFKGJvbmQtXFx1MDAzZXNsYXZlX2NudCwgYm9uZC1cXHUwMDNlc2xhdmVfY250ICsgMSk7XFxuMjMzNjpcXHRcXG4yMzM3OlxcdFxcdC8qIGJyb2FkY2FzdCBtb2RlIHVzZXMgdGhlIGFsbF9zbGF2ZXMgdG8gbG9vcCB0aHJvdWdoIHNsYXZlcy4gKi9cXG4yMzM4OlxcdFxcdGlmIChib25kX21vZGVfY2FuX3VzZV94bWl0X2hhc2goYm9uZCkgfHxcXG4yMzM5OlxcdFxcdCAgICBCT05EX01PREUoYm9uZCkgPT0gQk9ORF9NT0RFX0JST0FEQ0FTVClcXG4yMzQwOlxcdFxcdFxcdGJvbmRfdXBkYXRlX3NsYXZlX2Fycihib25kLCBOVUxMKTtcXG4yMzQxOlxcdFxcbjIzNDI6XFx0XFx0Ym9uZF94ZHBfc2V0X2ZlYXR1cmVzKGJvbmRfZGV2KTtcXG4yMzQzOlxcdFxcbjIzNDQ6XFx0XFx0c2xhdmVfaW5mbyhib25kX2Rldiwgc2xhdmVfZGV2LCBcXFwiRW5zbGF2aW5nIGFzICVzIGludGVyZmFjZSB3aXRoICVzIGxpbmtcXFxcblxcXCIsXFxuMjM0NTpcXHRcXHRcXHQgICBib25kX2lzX2FjdGl2ZV9zbGF2ZShuZXdfc2xhdmUpID8gXFxcImFuIGFjdGl2ZVxcXCIgOiBcXFwiYSBiYWNrdXBcXFwiLFxcbjIzNDY6XFx0XFx0XFx0ICAgbmV3X3NsYXZlLVxcdTAwM2VsaW5rICE9IEJPTkRfTElOS19ET1dOID8gXFxcImFuIHVwXFxcIiA6IFxcXCJhIGRvd25cXFwiKTtcXG4yMzQ3OlxcdFxcbjIzNDg6XFx0XFx0LyogZW5zbGF2ZSBpcyBzdWNjZXNzZnVsICovXFxuMjM0OTpcXHRcXHRib25kX3F1ZXVlX3NsYXZlX2V2ZW50KG5ld19zbGF2ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjIwOjEwLjIyMjA3MjQ2NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzU4NTMyMjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFkZHJlc3NpbmcgYSBTdWJ0bGUgQm9uZCBFbnNsYXZlbWVudCBCdWcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBib25kX2Vuc2xhdmVgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGVyZSdzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGluY29uc2lzdGVuY3kgaW4gaG93IGBib25kLVx1MDAzZXNsYXZlX2NudGAgaXMgaW5jcmVtZW50ZWQuIFByZXZpb3VzbHksIHRoYXQgYFdSSVRFX09OQ0VgIGNhbGwgdG8gaW5jcmVtZW50IHRoZSBjb3VudGVyIHdhcyBoYXBwZW5pbmcgKmJlZm9yZSogdGhlIFhEUCBjaGVja3MgYW5kICpiZWZvcmUqIHdlIGNvdWxkIGp1bXAgdG8gYGVycl9zeXNmc19kZWxgLiBFc3NlbnRpYWxseSwgaWYgc29tZXRoaW5nIHdlbnQgd3JvbmcgYXQgbGluZXMgMjMwNywgMjMyMSwgb3IgMjMyOCDigJMgd2UgaGl0IGFuIGVycm9yIOKAkyBgc2xhdmVfY250YCB3b3VsZCBiZSBpbmNyZW1lbnRlZCwgYnV0IHRoZSBhY3R1YWwgZW5zbGF2ZW1lbnQgbmV2ZXIgaGFwcGVuZWQuIFRoaXMgY291bGQgbGVhdmUgdGhlIGNvdW50IG91dCBvZiBzeW5jIGR1cmluZyB0aGUgY2xlYW51cCBwcm9jZXNzLlxuXG5UaGUgZml4PyBNb3ZpbmcgdGhhdCBgV1JJVEVfT05DRWAgaW5jcmVtZW50IGRvd24gKmFmdGVyKiBYRFAgcHJvcGFnYXRpb24gYW5kIGp1c3QgYmVmb3JlIHRoZSBjYWxsIHRvIGBib25kX3VwZGF0ZV9zbGF2ZV9hcnIoKWAuIFRoaXMgd2F5LCB3ZSBvbmx5IGluY3JlbWVudCB0aGUgY291bnRlciBpZiB0aGUgWERQIHNldHVwIGlzIHN1Y2Nlc3NmdWwuIEl0IHNlZW1zIGxpa2UgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCB0byBwcmV2ZW50IHRoZSBwcmVtYXR1cmUgaW5jcmVtZW50IG9mIGBib25kLVx1MDAzZXNsYXZlX2NudGAgaWYgYGJvbmRfZW5zbGF2ZSgpYCBmYWlscyBkdXJpbmcgWERQIHNldHVwLlxuXG5Ob3csIEknbGwgcXVpY2tseSBjaGVjayB0aGUgYGVycl9zeXNmc19kZWxgIGNvZGUgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDoyMDoxMi45ODA2MDcyOTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM1MDpcXHRcXHRyZXR1cm4gMDtcXG4yMzUxOlxcdFxcbjIzNTI6XFx0LyogVW5kbyBzdGFnZXMgb24gZXJyb3IgKi9cXG4yMzUzOlxcdGVycl9zeXNmc19kZWw6XFxuMjM1NDpcXHRcXHRib25kX3N5c2ZzX3NsYXZlX2RlbChuZXdfc2xhdmUpO1xcbjIzNTU6XFx0XFxuMjM1NjpcXHRlcnJfdXBwZXJfdW5saW5rOlxcbjIzNTc6XFx0XFx0Ym9uZF91cHBlcl9kZXZfdW5saW5rKGJvbmQsIG5ld19zbGF2ZSk7XFxuMjM1ODpcXHRcXG4yMzU5OlxcdGVycl91bnJlZ2lzdGVyOlxcbjIzNjA6XFx0XFx0bmV0ZGV2X3J4X2hhbmRsZXJfdW5yZWdpc3RlcihzbGF2ZV9kZXYpO1xcbjIzNjE6XFx0XFxuMjM2MjpcXHRlcnJfZGV0YWNoOlxcbjIzNjM6XFx0XFx0dmxhbl92aWRzX2RlbF9ieV9kZXYoc2xhdmVfZGV2LCBib25kX2Rldik7XFxuMjM2NDpcXHRcXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGJvbmQtXFx1MDAzZXByaW1hcnlfc2xhdmUpID09IG5ld19zbGF2ZSlcXG4yMzY1OlxcdFxcdFxcdFJDVV9JTklUX1BPSU5URVIoYm9uZC1cXHUwMDNlcHJpbWFyeV9zbGF2ZSwgTlVMTCk7XFxuMjM2NjpcXHRcXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGJvbmQtXFx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKSA9PSBuZXdfc2xhdmUpIHtcXG4yMzY3OlxcdFxcdFxcdGJsb2NrX25ldHBvbGxfdHgoKTtcXG4yMzY4OlxcdFxcdFxcdGJvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZShib25kLCBOVUxMKTtcXG4yMzY5OlxcdFxcdFxcdGJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZShib25kKTtcXG4yMzcwOlxcdFxcdFxcdHVuYmxvY2tfbmV0cG9sbF90eCgpO1xcbjIzNzE6XFx0XFx0fVxcbjIzNzI6XFx0XFx0LyogZWl0aGVyIHByaW1hcnlfc2xhdmUgb3IgY3Vycl9hY3RpdmVfc2xhdmUgbWlnaHQndmUgY2hhbmdlZCAqL1xcbjIzNzM6XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuMjM3NDpcXHRcXHRzbGF2ZV9kaXNhYmxlX25ldHBvbGwobmV3X3NsYXZlKTtcXG4yMzc1OlxcdFxcbjIzNzY6XFx0ZXJyX2Nsb3NlOlxcbjIzNzc6XFx0XFx0aWYgKCFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKVxcbjIzNzg6XFx0XFx0XFx0c2xhdmVfZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjY9IH5JRkZfQk9ORElORztcXG4yMzc5OlxcdFxcdGRldl9jbG9zZShzbGF2ZV9kZXYpO1xcbjIzODA6XFx0XFxuMjM4MTpcXHRlcnJfcmVzdG9yZV9tYWM6XFxuMjM4MjpcXHRcXHRzbGF2ZV9kZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNj0gfklGRl9OT19BRERSQ09ORjtcXG4yMzgzOlxcdFxcdGlmICghYm9uZC1cXHUwMDNlcGFyYW1zLmZhaWxfb3Zlcl9tYWMgfHxcXG4yMzg0OlxcdFxcdCAgICBCT05EX01PREUoYm9uZCkgIT0gQk9ORF9NT0RFX0FDVElWRUJBQ0tVUCkge1xcbjIzODU6XFx0XFx0XFx0LyogWFhYIFRPRE8gLSBmb20gZm9sbG93IG1vZGUgbmVlZHMgdG8gY2hhbmdlIG1hc3RlcidzXFxuMjM4NjpcXHRcXHRcXHQgKiBNQUMgaWYgdGhpcyBzbGF2ZSdzIE1BQyBpcyBpbiB1c2UgYnkgdGhlIGJvbmQsIG9yIGF0XFxuMjM4NzpcXHRcXHRcXHQgKiBsZWFzdCBwcmludCBhIHdhcm5pbmcuXFxuMjM4ODpcXHRcXHRcXHQgKi9cXG4yMzg5OlxcdFxcdFxcdGJvbmRfaHdfYWRkcl9jb3B5KHNzLl9fZGF0YSwgbmV3X3NsYXZlLVxcdTAwM2VwZXJtX2h3YWRkcixcXG4yMzkwOlxcdFxcdFxcdFxcdFxcdCAgbmV3X3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWFkZHJfbGVuKTtcXG4yMzkxOlxcdFxcdFxcdHNzLnNzX2ZhbWlseSA9IHNsYXZlX2Rldi1cXHUwMDNldHlwZTtcXG4yMzkyOlxcdFxcdFxcdGRldl9zZXRfbWFjX2FkZHJlc3Moc2xhdmVfZGV2LCBcXHUwMDI2c3MsIE5VTEwpO1xcbjIzOTM6XFx0XFx0fVxcbjIzOTQ6XFx0XFxuMjM5NTpcXHRlcnJfcmVzdG9yZV9tdHU6XFxuMjM5NjpcXHRcXHRkZXZfc2V0X210dShzbGF2ZV9kZXYsIG5ld19zbGF2ZS1cXHUwMDNlb3JpZ2luYWxfbXR1KTtcXG4yMzk3OlxcdFxcbjIzOTg6XFx0ZXJyX2ZyZWU6XFxuMjM5OTpcXHRcXHRrb2JqZWN0X3B1dChcXHUwMDI2bmV3X3NsYXZlLVxcdTAwM2Vrb2JqKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MjA6MTIuOTgwOTgwMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NzY4NjExMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgYm9uZF9lbnNsYXZlKClgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHNwb3Qtb246IHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgbG9naWMgZXJyb3IuIGBlcnJfc3lzZnNfZGVsYCBhbmQgc3Vic2VxdWVudCBjbGVhbnVwIGFjdGlvbnMgZGlkbid0IGRlY3JlbWVudCBgYm9uZC1cdTAwM2VzbGF2ZV9jbnRgLiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIFhEUCBzZXR1cCBpbiBgYm9uZF9lbnNsYXZlKClgIGZhaWxlZCwgdGhlIGBib25kLVx1MDAzZXNsYXZlX2NudGAgd2FzIGxlZnQgcGVybWFuZW50bHkgaW5jcmVtZW50ZWQsIGxlYWRpbmcgdG8gYW4gaW5jb25zaXN0ZW50IGNvdW50ZXIg4oCTIGEgY2xhc3NpYyBzdGF0ZSBidWcuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIGV4cG9zZSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgYWJzb2x1dGVseSBub3QuIEkndmUgY2FyZWZ1bGx5IHNjcnV0aW5pemVkIHRoZSBjb2RlLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgYnVmZmVycyBhcmUgaW50cm9kdWNlZC4gQ3J1Y2lhbGx5LCBubyBgY29weV90b191c2VyYCBjYWxscyBvciBpbmZvcm1hdGlvbiBsZWFrIHBhdGhzIGFyZSB0b3VjaGVkIHRvIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIEZ1cnRoZXJtb3JlLCBubyBleGlzdGluZyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQuIFRoaXMgcGF0Y2ggaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcsIG1vdmluZyB0aGUgYFdSSVRFX09OQ0UoYm9uZC1cdTAwM2VzbGF2ZV9jbnQsIC4uLilgIGxpbmUgKmFmdGVyKiB0aGUgZmFpbHVyZSBwb2ludHMgaW4gYGJvbmRfZW5zbGF2ZSgpYC5cblxuTmV4dCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBuZWVkIGZvciBLTVNBTi4gSSBrbm93IHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTjsgS0FTQU4gZGVhbHMgd2l0aCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIFVBRiwgZXRjLikgYW5kIGxvY2tkZXAgaGFuZGxlcyBsb2NraW5nIGlzc3Vlcy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gU2luY2UgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLCBgTmVlZHNLTVNBTmAgaXMgY2xlYXJseSBmYWxzZS5cblxuVG8gcmVpbmZvcmNlIHRoaXMsIEkgcmUtZXhhbWluZWQgdGhlIGNyaXRlcmlhIGZvciBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgLiBOb25lIG9mIHRob3NlIGNvbmRpdGlvbnMgYXJlIG1ldDogdGhlIHBhdGNoIGRvZXNuJ3QgaW52b2x2ZSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIGRvZXNuJ3QgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2Vzbid0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQsIGFuZCBpdCBkb2Vzbid0IG1hbmlwdWxhdGUgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYmVpbmcgYWNjZXNzZWQuXG5cbkNvbnZlcnNlbHksIHRoZSBjcml0ZXJpYSBmb3IgYE5lZWRzS01TQU49ZmFsc2VgIGFyZSBwZXJmZWN0bHkgc2F0aXNmaWVkLiBUaGUgY29kZSBjaGFuZ2VzIG1haW5seSBhZGRyZXNzIHRoZSBjb3VudGVyIGlzc3VlIGFuZCB0aGV5IGRvIG5vdCBpbnRyb2R1Y2Ugcmlza3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBBbGwgdG91Y2hlZCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIG9yIHplcm9lZCBiZWZvcmUgYW55IHJlYWQgb3IgY29weSBvcGVyYXRpb24uXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU49ZmFsc2VgIGlzIHRoZSBkZWZpbml0aXZlIGNvbmNsdXNpb24uIEknbSByZWFkeSB0byBkb2N1bWVudCB0aGUgcmVhc29uaW5nIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MTIsIk91dHB1dFRva2VucyI6MjAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MjA6MjAuNzQ5NTk0OTk4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYm9uZF9lbnNsYXZlKClgIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCBieSBkZWZlcnJpbmcgdGhlIGluY3JlbWVudCBvZiBgYm9uZC1cXHUwMDNlc2xhdmVfY250YCAoYFdSSVRFX09OQ0UoYm9uZC1cXHUwMDNlc2xhdmVfY250LCBib25kLVxcdTAwM2VzbGF2ZV9jbnQgKyAxKWApIHVudGlsIGFmdGVyIHBvdGVudGlhbCBlcnJvciBwYXRocyBkdXJpbmcgWERQIGNvbmZpZ3VyYXRpb24gY2hlY2tzLiBUaGlzIHByZXZlbnRzIGBib25kLVxcdTAwM2VzbGF2ZV9jbnRgIGZyb20gYmVjb21pbmcgZGVzeW5jaHJvbml6ZWQvaW5jb25zaXN0ZW50IHdoZW4gZW5zbGF2aW5nIGEgZGV2aWNlIGZhaWxzIGluIGBib25kX2Vuc2xhdmUoKWAuXFxuXFxuVGhlIGNoYW5nZSBpcyBzdHJpY3RseSBjb250cm9sLWZsb3cgYW5kIHN0YXRlLWNvdW50ZXIgbWFuYWdlbWVudC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29weV90b191c2VyL2luZm8tbGVhayBwYXRocywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFN0YW5kYXJkIHRlc3Rpbmcgd2l0aCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyBpcyBzdWZmaWNpZW50OyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBib25kX2Vuc2xhdmUoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIGJ5IGRlZmVycmluZyB0aGUgaW5jcmVtZW50IG9mIGBib25kLVxcdTAwM2VzbGF2ZV9jbnRgIChgV1JJVEVfT05DRShib25kLVxcdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXFx1MDAzZXNsYXZlX2NudCArIDEpYCkgdW50aWwgYWZ0ZXIgcG90ZW50aWFsIGVycm9yIHBhdGhzIGR1cmluZyBYRFAgY29uZmlndXJhdGlvbiBjaGVja3MuIFRoaXMgcHJldmVudHMgYGJvbmQtXFx1MDAzZXNsYXZlX2NudGAgZnJvbSBiZWNvbWluZyBkZXN5bmNocm9uaXplZC9pbmNvbnNpc3RlbnQgd2hlbiBlbnNsYXZpbmcgYSBkZXZpY2UgZmFpbHMgaW4gYGJvbmRfZW5zbGF2ZSgpYC5cXG5cXG5UaGUgY2hhbmdlIGlzIHN0cmljdGx5IGNvbnRyb2wtZmxvdyBhbmQgc3RhdGUtY291bnRlciBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb3B5X3RvX3VzZXIvaW5mby1sZWFrIHBhdGhzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGlzIHN1ZmZpY2llbnQ7IHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowpkc79[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 10:18:15 +0000 UTC FinishedAt: 2026-09-07 10:20:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET" ], "series_id": "a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bond_enslave" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "abcea6f7-092c-48e4-8137-756a0ff617ba" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfZW5zbGF2ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBib25kX2Vuc2xhdmUoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIGJ5IGRlZmVycmluZyB0aGUgaW5jcmVtZW50IG9mIGBib25kLVx1MDAzZXNsYXZlX2NudGAgKGBXUklURV9PTkNFKGJvbmQtXHUwMDNlc2xhdmVfY250LCBib25kLVx1MDAzZXNsYXZlX2NudCAmIzQzOyAxKWApIHVudGlsIGFmdGVyIHBvdGVudGlhbCBlcnJvciBwYXRocyBkdXJpbmcgWERQIGNvbmZpZ3VyYXRpb24gY2hlY2tzLiBUaGlzIHByZXZlbnRzIGBib25kLVx1MDAzZXNsYXZlX2NudGAgZnJvbSBiZWNvbWluZyBkZXN5bmNocm9uaXplZC9pbmNvbnNpc3RlbnQgd2hlbiBlbnNsYXZpbmcgYSBkZXZpY2UgZmFpbHMgaW4gYGJvbmRfZW5zbGF2ZSgpYC5cblxuVGhlIGNoYW5nZSBpcyBzdHJpY3RseSBjb250cm9sLWZsb3cgYW5kIHN0YXRlLWNvdW50ZXIgbWFuYWdlbWVudC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29weV90b191c2VyL2luZm8tbGVhayBwYXRocywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFN0YW5kYXJkIHRlc3Rpbmcgd2l0aCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyBpcyBzdWZmaWNpZW50OyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBib25kX2Vuc2xhdmUoKSBpbiB0aGUgbmV0d29yayBib25kaW5nIGRyaXZlciB0byBkZWZlciBpbmNyZW1lbnRpbmcgdGhlIHNsYXZlIGNvdW50IHVudGlsIGFmdGVyIFhEUCBzZXR1cCBhbmQgdmFsaWRhdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0bGluay9ydG5sIGludGVyZmFjZXMgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhOTY2MmQxYTk3OTY2YmM5MGY2NzhkNDQ1NzBlYTgxZjgxODViODM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMDoxOTozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xuaW5kZXggYTliZmY3NjYzZWVjYS4uMTUxNGE4YmEwODg4ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcbkBAIC0yMjg0LDcgJiM0MzsyMjg0LDYgQEAgaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdFdSSVRFX09OQ0UoYm9uZC1cdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXHUwMDNlc2xhdmVfY250ICYjNDM7IDEpO1xuIFx0bmV0ZGV2X2NvbXB1dGVfbWFzdGVyX3VwcGVyX2ZlYXR1cmVzKGJvbmQtXHUwMDNlZGV2LCB0cnVlKTtcbiBcdGJvbmRfc2V0X2NhcnJpZXIoYm9uZCk7XG4gXG5AQCAtMjMzMiw2ICYjNDM7MjMzMSw5IEBAIGludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxuIFx0XHRcdGJwZl9wcm9nX2luYyhib25kLVx1MDAzZXhkcF9wcm9nKTtcbiBcdH1cbiBcbiYjNDM7XHQvKiBJbmNyZWFzZSB0aGUgc2xhdmUgY291bnQgYmVmb3JlIHJlYnVpbGRpbmcgdGhlIHNsYXZlIGFycmF5cy4gKi9cbiYjNDM7XHRXUklURV9PTkNFKGJvbmQtXHUwMDNlc2xhdmVfY250LCBib25kLVx1MDAzZXNsYXZlX2NudCAmIzQzOyAxKTtcbiYjNDM7XG4gXHQvKiBicm9hZGNhc3QgbW9kZSB1c2VzIHRoZSBhbGxfc2xhdmVzIHRvIGxvb3AgdGhyb3VnaCBzbGF2ZXMuICovXG4gXHRpZiAoYm9uZF9tb2RlX2Nhbl91c2VfeG1pdF9oYXNoKGJvbmQpIHx8XG4gXHQgICAgQk9ORF9NT0RFKGJvbmQpID09IEJPTkRfTU9ERV9CUk9BRENBU1QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9uZF9lbnNsYXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJvbmRfZW5zbGF2ZSgpIGluIHRoZSBuZXR3b3JrIGJvbmRpbmcgZHJpdmVyIHRvIGRlZmVyIGluY3JlbWVudGluZyB0aGUgc2xhdmUgY291bnQgdW50aWwgYWZ0ZXIgWERQIHNldHVwIGFuZCB2YWxpZGF0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3J0bmwgaW50ZXJmYWNlcyBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE5NjYyZDFhOTc5NjZiYzkwZjY3OGQ0NDU3MGVhODFmODE4NWI4MzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDEwOjE5OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggYTliZmY3NjYzZWVjYS4uMTUxNGE4YmEwODg4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC0yMjg0LDcgJiM0MzsyMjg0LDYgQEAgaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsCiAJCX0KIAl9CiAKLQlXUklURV9PTkNFKGJvbmQtJmd0O3NsYXZlX2NudCwgYm9uZC0mZ3Q7c2xhdmVfY250ICYjNDM7IDEpOwogCW5ldGRldl9jb21wdXRlX21hc3Rlcl91cHBlcl9mZWF0dXJlcyhib25kLSZndDtkZXYsIHRydWUpOwogCWJvbmRfc2V0X2NhcnJpZXIoYm9uZCk7CiAKQEAgLTIzMzIsNiAmIzQzOzIzMzEsOSBAQCBpbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldiwKIAkJCWJwZl9wcm9nX2luYyhib25kLSZndDt4ZHBfcHJvZyk7CiAJfQogCiYjNDM7CS8qIEluY3JlYXNlIHRoZSBzbGF2ZSBjb3VudCBiZWZvcmUgcmVidWlsZGluZyB0aGUgc2xhdmUgYXJyYXlzLiAqLwomIzQzOwlXUklURV9PTkNFKGJvbmQtJmd0O3NsYXZlX2NudCwgYm9uZC0mZ3Q7c2xhdmVfY250ICYjNDM7IDEpOwomIzQzOwogCS8qIGJyb2FkY2FzdCBtb2RlIHVzZXMgdGhlIGFsbF9zbGF2ZXMgdG8gbG9vcCB0aHJvdWdoIHNsYXZlcy4gKi8KIAlpZiAoYm9uZF9tb2RlX2Nhbl91c2VfeG1pdF9oYXNoKGJvbmQpIHx8CiAJICAgIEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfQlJPQURDQVNUKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDI1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCb25kaW5nIERyaXZlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBjaGFuZ2VzLiBJJiMzOTtsbCBoZWFkIHN0cmFpZ2h0IGZvciBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AgYW5kIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcHVsbCB1cCB0aGUgcGF0Y2ggYW5kIGl0cyBzdXJyb3VuZGluZyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgJiMzOTt3aHkmIzM5OyBiZWhpbmQgdGhlICYjMzk7d2hhdCYjMzk7IGFzIHF1aWNrbHkgYXMgcG9zc2libGUuIFRpbWUgdG8gc2VlIHByZWNpc2VseSB3aGF0IGdvdCBhbHRlcmVkIHdpdGhpbiBgYm9uZF9tYWluLmNgLiBVbmRlcnN0YW5kaW5nIHRoZSBjb2RlIHRoYXQgd2FzIGNoYW5nZWQgd2lsbCBnaXZlIHRoZSBtb3N0IHJlbGV2YW50IGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI3MDpcdFx0XHRcdFx0aWYgKGJvbmRfZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfUFJPTUlTQylcbjIyNzE6XHRcdFx0XHRcdFx0ZGV2X3NldF9wcm9taXNjdWl0eShzbGF2ZV9kZXYsIC0xKTtcbjIyNzI6XHRcdFx0XHRcdGdvdG8gZXJyX3N5c2ZzX2RlbDtcbjIyNzM6XHRcdFx0XHR9XG4yMjc0Olx0XHRcdH1cbjIyNzU6XHRcbjIyNzY6XHRcdFx0aWYgKGJvbmRfZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApIHtcbjIyNzc6XHRcdFx0XHRuZXRpZl9hZGRyX2xvY2tfYmgoYm9uZF9kZXYpO1xuMjI3ODpcdFx0XHRcdGRldl9tY19zeW5jX211bHRpcGxlKHNsYXZlX2RldiwgYm9uZF9kZXYpO1xuMjI3OTpcdFx0XHRcdGRldl91Y19zeW5jX211bHRpcGxlKHNsYXZlX2RldiwgYm9uZF9kZXYpO1xuMjI4MDpcdFx0XHRcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGJvbmRfZGV2KTtcbjIyODE6XHRcbjIyODI6XHRcdFx0XHRpZiAoQk9ORF9NT0RFKGJvbmQpID09IEJPTkRfTU9ERV84MDIzQUQpXG4yMjgzOlx0XHRcdFx0XHRkZXZfbWNfYWRkKHNsYXZlX2RldiwgbGFjcGR1X21jYXN0X2FkZHIpO1xuMjI4NDpcdFx0XHR9XG4yMjg1Olx0XHR9XG4yMjg2Olx0XG4yMjg3Olx0XHRuZXRkZXZfY29tcHV0ZV9tYXN0ZXJfdXBwZXJfZmVhdHVyZXMoYm9uZC1cdTAwM2VkZXYsIHRydWUpO1xuMjI4ODpcdFx0Ym9uZF9zZXRfY2Fycmllcihib25kKTtcbjIyODk6XHRcbjIyOTA6XHRcdC8qIE5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKCksIHdoaWNoIHdpbGxcbjIyOTE6XHRcdCAqIHJlbW92ZSB0aGUgbWFkZHJzIGlmIHRoZSBzbGF2ZSBpcyBzZWxlY3RlZCBhcyBhY3RpdmUgc2xhdmUuXG4yMjkyOlx0XHQgKi9cbjIyOTM6XHRcdGJvbmRfc2xhdmVfbnNfbWFkZHJzX2FkZChib25kLCBuZXdfc2xhdmUpO1xuMjI5NDpcdFxuMjI5NTpcdFx0aWYgKGJvbmRfdXNlc19wcmltYXJ5KGJvbmQpKSB7XG4yMjk2Olx0XHRcdGJsb2NrX25ldHBvbGxfdHgoKTtcbjIyOTc6XHRcdFx0Ym9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKGJvbmQpO1xuMjI5ODpcdFx0XHR1bmJsb2NrX25ldHBvbGxfdHgoKTtcbjIyOTk6XHRcdH1cbjIzMDA6XHRcbjIzMDE6XHRcdGlmICghc2xhdmVfZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2JwZiB8fFxuMjMwMjpcdFx0ICAgICFzbGF2ZV9kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9feGRwX3htaXQpIHtcbjIzMDM6XHRcdFx0aWYgKGJvbmQtXHUwMDNleGRwX3Byb2cpIHtcbjIzMDQ6XHRcdFx0XHRTTEFWRV9OTF9FUlIoYm9uZF9kZXYsIHNsYXZlX2RldiwgZXh0YWNrLFxuMjMwNTpcdFx0XHRcdFx0ICAgICBcJiMzNDtTbGF2ZSBkb2VzIG5vdCBzdXBwb3J0IFhEUFwmIzM0Oyk7XG4yMzA2Olx0XHRcdFx0cmVzID0gLUVPUE5PVFNVUFA7XG4yMzA3Olx0XHRcdFx0Z290byBlcnJfc3lzZnNfZGVsO1xuMjMwODpcdFx0XHR9XG4yMzA5Olx0XHR9IGVsc2UgaWYgKGJvbmQtXHUwMDNleGRwX3Byb2cpIHtcbjIzMTA6XHRcdFx0c3RydWN0IG5ldGRldl9icGYgeGRwID0ge1xuMjMxMTpcdFx0XHRcdC5jb21tYW5kID0gWERQX1NFVFVQX1BST0csXG4yMzEyOlx0XHRcdFx0LmZsYWdzICAgPSAwLFxuMjMxMzpcdFx0XHRcdC5wcm9nICAgID0gYm9uZC1cdTAwM2V4ZHBfcHJvZyxcbjIzMTQ6XHRcdFx0XHQuZXh0YWNrICA9IGV4dGFjayxcbjIzMTU6XHRcdFx0fTtcbjIzMTY6XHRcbjIzMTc6XHRcdFx0aWYgKGRldl94ZHBfcHJvZ19jb3VudChzbGF2ZV9kZXYpIFx1MDAzZSAwKSB7XG4yMzE4Olx0XHRcdFx0U0xBVkVfTkxfRVJSKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIGV4dGFjayxcbjIzMTk6XHRcdFx0XHRcdCAgICAgXCYjMzQ7U2xhdmUgaGFzIFhEUCBwcm9ncmFtIGxvYWRlZCwgcGxlYXNlIHVubG9hZCBiZWZvcmUgZW5zbGF2aW5nXCYjMzQ7KTtcbjIzMjA6XHRcdFx0XHRyZXMgPSAtRU9QTk9UU1VQUDtcbjIzMjE6XHRcdFx0XHRnb3RvIGVycl9zeXNmc19kZWw7XG4yMzIyOlx0XHRcdH1cbjIzMjM6XHRcbjIzMjQ6XHRcdFx0cmVzID0gZGV2X3hkcF9wcm9wYWdhdGUoc2xhdmVfZGV2LCBcdTAwMjZ4ZHApO1xuMjMyNTpcdFx0XHRpZiAocmVzIFx1MDAzYyAwKSB7XG4yMzI2Olx0XHRcdFx0LyogbmRvX2JwZigpIHNldHMgZXh0YWNrIGVycm9yIG1lc3NhZ2UgKi9cbjIzMjc6XHRcdFx0XHRzbGF2ZV9kYmcoYm9uZF9kZXYsIHNsYXZlX2RldiwgXCYjMzQ7RXJyb3IgJWQgY2FsbGluZyBuZG9fYnBmXFxuXCYjMzQ7LCByZXMpO1xuMjMyODpcdFx0XHRcdGdvdG8gZXJyX3N5c2ZzX2RlbDtcbjIzMjk6XHRcdFx0fVxuMjMzMDpcdFx0XHRpZiAoYm9uZC1cdTAwM2V4ZHBfcHJvZylcbjIzMzE6XHRcdFx0XHRicGZfcHJvZ19pbmMoYm9uZC1cdTAwM2V4ZHBfcHJvZyk7XG4yMzMyOlx0XHR9XG4yMzMzOlx0XG4yMzM0Olx0XHQvKiBJbmNyZWFzZSB0aGUgc2xhdmUgY291bnQgYmVmb3JlIHJlYnVpbGRpbmcgdGhlIHNsYXZlIGFycmF5cy4gKi9cbjIzMzU6XHRcdFdSSVRFX09OQ0UoYm9uZC1cdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXHUwMDNlc2xhdmVfY250ICYjNDM7IDEpO1xuMjMzNjpcdFxuMjMzNzpcdFx0LyogYnJvYWRjYXN0IG1vZGUgdXNlcyB0aGUgYWxsX3NsYXZlcyB0byBsb29wIHRocm91Z2ggc2xhdmVzLiAqL1xuMjMzODpcdFx0aWYgKGJvbmRfbW9kZV9jYW5fdXNlX3htaXRfaGFzaChib25kKSB8fFxuMjMzOTpcdFx0ICAgIEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfQlJPQURDQVNUKVxuMjM0MDpcdFx0XHRib25kX3VwZGF0ZV9zbGF2ZV9hcnIoYm9uZCwgTlVMTCk7XG4yMzQxOlx0XG4yMzQyOlx0XHRib25kX3hkcF9zZXRfZmVhdHVyZXMoYm9uZF9kZXYpO1xuMjM0MzpcdFxuMjM0NDpcdFx0c2xhdmVfaW5mbyhib25kX2Rldiwgc2xhdmVfZGV2LCBcJiMzNDtFbnNsYXZpbmcgYXMgJXMgaW50ZXJmYWNlIHdpdGggJXMgbGlua1xcblwmIzM0OyxcbjIzNDU6XHRcdFx0ICAgYm9uZF9pc19hY3RpdmVfc2xhdmUobmV3X3NsYXZlKSA/IFwmIzM0O2FuIGFjdGl2ZVwmIzM0OyA6IFwmIzM0O2EgYmFja3VwXCYjMzQ7LFxuMjM0NjpcdFx0XHQgICBuZXdfc2xhdmUtXHUwMDNlbGluayAhPSBCT05EX0xJTktfRE9XTiA/IFwmIzM0O2FuIHVwXCYjMzQ7IDogXCYjMzQ7YSBkb3duXCYjMzQ7KTtcbjIzNDc6XHRcbjIzNDg6XHRcdC8qIGVuc2xhdmUgaXMgc3VjY2Vzc2Z1bCAqL1xuMjM0OTpcdFx0Ym9uZF9xdWV1ZV9zbGF2ZV9ldmVudChuZXdfc2xhdmUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MDAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRml4aW5nIGEgUmFjZSBDb25kaXRpb24gaW4gdGhlIEJvbmRpbmcgRHJpdmVyKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYm9uZF9lbnNsYXZlYCBmdW5jdGlvbiB3aXRoaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRyZXNzaW5nIGEgYnVnLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBleGFjdGx5IHdhcyBiZWluZyBmaXhlZC4gUmlnaHQsIGdvdCBpdC4gTG9va2luZyBhdCBsaW5lcyAyMzAwLTIzMzAsIHRoZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBYRFAgKGVYcHJlc3MgRGF0YSBQYXRoKSBzZXR1cCBpbnRlcmFjdHMgd2l0aCB0aGUgYm9uZGluZyBwcm9jZXNzLgoKQmVmb3JlLCB0aGVyZSB3YXMgdGhpcyBjcml0aWNhbCBzZXF1ZW5jZTogYFdSSVRFX09OQ0UoYm9uZC0mZ3Q7c2xhdmVfY250LCBib25kLSZndDtzbGF2ZV9jbnQgJiM0MzsgMSk7YCB3YXMgaGFwcGVuaW5nICpiZWZvcmUqIGNydWNpYWwgY2hlY2tzIOKAkyBzcGVjaWZpY2FsbHksIHdoZXRoZXIgWERQIHNldHVwIHdhcyBzdWNjZXNzZnVsIG9yIGlmIHRoZSBzbGF2ZSBpbnRlcmZhY2UgZXZlbiBzdXBwb3J0ZWQgWERQLiBJZiBYRFAgc2V0dXAgZmFpbGVkIG9yIHRoZSBzbGF2ZSBkaWRuJiMzOTt0IHN1cHBvcnQgaXQsIHRoZSBjb2RlIHdvdWxkIGp1bXAgdG8gYGVycl9zeXNmc19kZWxgLiBUaGUgcHJvYmxlbT8gYGJvbmQtJmd0O3NsYXZlX2NudGAgd291bGQgYWxyZWFkeSBiZSBpbmNyZW1lbnRlZCBldmVuIHRob3VnaCB0aGUgc2xhdmUgd2FzbiYjMzk7dCBhY3R1YWxseSBwcm9wZXJseSBlbnNsYXZlZC4gVGhpcyBjcmVhdGVkIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGFuZCBkYXRhIGNvcnJ1cHRpb24uIElmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0aGUgc2V0dXAsIGBib25kLSZndDtzbGF2ZV9jbnRgIG1pZ2h0IGJlIGxlZnQgb3V0IG9mIHN5bmMsIG9yIHRoZSBhcnJheSBgYm9uZF9zbGF2ZV9hcnJgIHdvdWxkIGJlIGNvcnJ1cHRlZC4KClRoZSBmaXggaXMgc3RyYWlnaHRmb3J3YXJkLCBidXQgY3JpdGljYWwuIE1vdmluZyB0aGUgYFdSSVRFX09OQ0VgIG9wZXJhdGlvbiAqYWZ0ZXIqIHRoZSBYRFAgY2hlY2tzIGVuc3VyZXMgdGhhdCBgYm9uZC0mZ3Q7c2xhdmVfY250YCBpcyBvbmx5IGluY3JlbWVudGVkIGlmIHRoZSBzbGF2ZSBpcyBzdWNjZXNzZnVsbHkgYWRkZWQuIFRoaXMgc2hvdWxkIHJlc29sdmUgdGhlIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgYW5kIHByZXZlbnQgcG90ZW50aWFsIGNyYXNoZXMgb3IgaW5jb3JyZWN0IGJlaGF2aW9yIGluIGBib25kX3VwZGF0ZV9zbGF2ZV9hcnJgLCBvciBvdGhlciByZWxhdGVkIHByb2Nlc3Nlcy4KCk5vdywgbGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZvciB0aGUgYm9uZGluZyBkcml2ZXIsIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBwcm9wZXJseSBpbnRlZ3JhdGVkLiBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvbmV0L2JvbmRpbmdgIGFuZCBsb2NhdGUgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQk9ORElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjYzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKktjb25maWcgTG9jYXRpb24gSHVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gY29uZmlndXJlIHNvbWV0aGluZyByZWxhdGVkIHRvIG5ldHdvcmtpbmcsIHByb2JhYmx5IGEgZHJpdmVyLiBHaXZlbiB0aGUgc2NvcGUgb2YgdGhpcyBwcm9qZWN0LCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGdvaW5nIHRvIGludm9sdmUgYSBLY29uZmlnIGZpbGUuIFdoZXJlIHdvdWxkIHRoYXQgbGl2ZT8gVGhpbmtpbmcgbG9naWNhbGx5LCB0aGUgbW9zdCBsaWtlbHkgcGxhY2VzIGFyZSB0aGUgb2J2aW91czogYGRyaXZlcnMvbmV0L2AgYW5kLCBwZXJoYXBzIG1vcmUgc3BlY2lmaWNhbGx5LCBgZHJpdmVycy9uZXQvYm9uZGluZy9gLiBUaGF0IGJvbmRpbmcgZGlyZWN0b3J5IGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBsaW5rIGFnZ3JlZ2F0aW9uLCBhbmQgdGhhdCBzZWVtcyB0byBiZSByZWxldmFudC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgY29udmVudGlvbiwgc28gdGhvc2UgYXJlIHRoZSBmaXJzdCBwbGFjZXMgSSYjMzk7bGwgc3RhcnQgZGlnZ2luZy4gSSYjMzk7bGwgY2hlY2sgdGhvc2UgZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Qk9ORElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zOT1pZiBORVRfQ09SRVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDE6Y29uZmlnIEJPTkRJTkdcbmRyaXZlcnMvbmV0L0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtCb25kaW5nIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqS2NvbmZpZyBEaXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHNvIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIHRoYXQgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlIGlzIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGluIGFyb3VuZCBsaW5lIDQxLCBhcyB0aGF0JiMzOTtzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZXhwbG9yaW5nIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlc2UgZmlsZXMuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBhdmFpbGFibGUgbmV0d29yayBkcml2ZXJzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgdGhlIGFyZWEgcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBZb3UgY2FuIHNheSBOIGhlcmUgaWYgeW91IGRvIG5vdCBpbnRlbmQgdG8gdXNlIGFueSBvZiB0aGVcbiAgMzc6XHRcdCAgbmV0d29ya2luZyBjb3JlIGRyaXZlcnMgKGkuZS4gVkxBTiwgYnJpZGdpbmcsIGJvbmRpbmcsIGV0Yy4pXG4gIDM4Olx0XG4gIDM5Olx0aWYgTkVUX0NPUkVcbiAgNDA6XHRcbiAgNDE6XHRjb25maWcgQk9ORElOR1xuICA0MjpcdFx0dHJpc3RhdGUgXCYjMzQ7Qm9uZGluZyBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDQ0Olx0XHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cbiAgNDU6XHRcdGhlbHBcbiAgNDY6XHRcdCAgU2F5ICYjMzk7WSYjMzk7IG9yICYjMzk7TSYjMzk7IGlmIHlvdSB3aXNoIHRvIGJlIGFibGUgdG8gJiMzOTtib25kJiMzOTsgbXVsdGlwbGUgRXRoZXJuZXRcbiAgNDc6XHRcdCAgQ2hhbm5lbHMgdG9nZXRoZXIuIFRoaXMgaXMgY2FsbGVkICYjMzk7RXRoZXJjaGFubmVsJiMzOTsgYnkgQ2lzY28sXG4gIDQ4Olx0XHQgICYjMzk7VHJ1bmtpbmcmIzM5OyBieSBTdW4sIDgwMi4zYWQgYnkgdGhlIElFRUUsIGFuZCAmIzM5O0JvbmRpbmcmIzM5OyBpbiBMaW51eC5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgVGhlIGRyaXZlciBzdXBwb3J0cyBtdWx0aXBsZSBib25kaW5nIG1vZGVzIHRvIGFsbG93IGZvciBib3RoIGhpZ2hcbiAgNTE6XHRcdCAgcGVyZm9ybWFuY2UgYW5kIGhpZ2ggYXZhaWxhYmlsaXR5IG9wZXJhdGlvbi5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgUmVmZXIgdG8gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy5yc3RcdTAwM2UgZm9yIG1vcmVcbiAgNTQ6XHRcdCAgaW5mb3JtYXRpb24uXG4gIDU1Olx0XG4gIDU2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNTc6XHRcdCAgd2lsbCBiZSBjYWxsZWQgYm9uZGluZy5cbiAgNTg6XHRcbiAgNTk6XHRjb25maWcgRFVNTVlcbiAgNjA6XHRcdHRyaXN0YXRlIFwmIzM0O0R1bW15IG5ldCBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuICA2MTpcdFx0aGVscFxuICA2MjpcdFx0ICBUaGlzIGlzIGVzc2VudGlhbGx5IGEgYml0LWJ1Y2tldCBkZXZpY2UgKGkuZS4gdHJhZmZpYyB5b3Ugc2VuZCB0b1xuICA2MzpcdFx0ICB0aGlzIGRldmljZSBpcyBjb25zaWduZWQgaW50byBvYmxpdmlvbikgd2l0aCBhIGNvbmZpZ3VyYWJsZSBJUFxuICA2NDpcdFx0ICBhZGRyZXNzLiBJdCBpcyBtb3N0IGNvbW1vbmx5IHVzZWQgaW4gb3JkZXIgdG8gbWFrZSB5b3VyIGN1cnJlbnRseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTcxCgkJCQkJCQlvdXRwdXQ6IDk1CgkJCQkJCQl0aG91Z2h0czogODM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXR3b3JrIEJvbmRpbmcgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYSB3b3J0aHdoaWxlIHBhdGNoIHRvIGFuYWx5emUuIFRoZSBgYm9uZF9lbnNsYXZlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyIChgYm9uZF9tYWluLmNgKSBpcyBjbGVhcmx5IHRoZSB0YXJnZXQsIGFuZCB0aGF0JiMzOTtzIHRoZSBvbmx5IGZ1bmN0aW9uIG1vZGlmaWVkIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBkaWZmLiBJdCYjMzk7cyBhbHNvIHdvcnRoIG5vdGluZyB0aGF0IHRoZSBib25kaW5nIGRyaXZlciBpcyBhIHN0YW5kYXJkIG5ldGRldiBkcml2ZXIsIHNvIGl0JiMzOTtzIGEga25vd24gcXVhbnRpdHkuIEl0IGNhbiBiZSBjcmVhdGVkIGFuZCBtYW5pcHVsYXRlZCB0aHJvdWdoIHN0YW5kYXJkIGludGVyZmFjZXMgbGlrZSBgcnRubGAsIGBuZXRsaW5rYCwgYGlvY3RsYCwgYW5kIGBzeXNmc2Agd2hpY2ggaXMgdXNlZnVsIGluIHRlc3RpbmcuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpdCYjMzk7cyByZWFkaWx5IHJlYWNoYWJsZSB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCB3aGljaCBzaW1wbGlmaWVzIGZ1enppbmcgYW5kIGRlYnVnZ2luZy4gU3l6a2FsbGVyIGFjdGl2ZWx5IHRhcmdldHMgYG5ldGxpbmtgIHJlbGF0ZWQgdG8gYm9uZGluZywgbWFraW5nIHRoaXMgcGFydGljdWxhcmx5IHJlbGV2YW50LgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIGEgY2hhbmdlIGluIHRoZSBzdGF0ZSB0cmFja2luZyBvZiBgYm9uZC0mZ3Q7c2xhdmVfY250YCB3aXRoaW4gYGJvbmRfZW5zbGF2ZWAuIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSB0aW1pbmcgaXNzdWUgd2l0aCB0aGUgaW5jcmVtZW50IG9mIHRoZSBzbGF2ZSBjb3VudC4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGNvbnNpc3RlbmN5IHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIFRoZSBwcmV2aW91cyBwbGFjZW1lbnQgb2YgYFdSSVRFX09OQ0UoYm9uZC0mZ3Q7c2xhdmVfY250LCBib25kLSZndDtzbGF2ZV9jbnQgJiM0MzsgMSk7YCBtaWdodCBoYXZlIGNhdXNlZCBpc3N1ZXMgaWYgc29tZSBzdWJzZXF1ZW50IHNldHVwIG9yIFhEUCBjaGVja3MgZmFpbGVkLiBCeSBtb3ZpbmcgaXQsIHRoZSBjb3VudCBpcyBpbmNyZW1lbnRlZCAqYWZ0ZXIqIHRob3NlIGNoZWNrcyB3aGljaCB3b3VsZCBtaXRpZ2F0ZSBpbmNvbnNpc3RlbmNpZXMuCgpJJiMzOTt2ZSB2ZXJpZmllZCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnM6IGBCT05ESU5HYCBhbmQgYElORVRgLCBzbyB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4gTXkgZm9jdXMgc3ltYm9scyBhcmUgZGVmaW5pdGVseSBjZW50ZXJlZCBvbiBgYm9uZF9lbnNsYXZlYCB3aGljaCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24uIEkgZG91YmxlLWNoZWNrZWQgdGhlIGRpZmYgYW5kIHZlcmlmaWVkIHRoYXQgb25seSB0aGUgYGJvbmRfbWFpbi5jYCBmaWxlIHdhcyB0b3VjaGVkIGFuZCBvbmx5IGBib25kX2Vuc2xhdmVgIHdhcyBtb2RpZmllZC4KCkJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgaXQmIzM5O3MgY2xlYXIgdGhpcyBwYXRjaCBmaXhlcyBhIGNyaXRpY2FsIHRpbWluZyBpc3N1ZSB3aXRoaW4gYSByZWxhdGl2ZWx5IGFjY2Vzc2libGUgYW5kIGFjdGl2ZWx5IGZ1enplZCBhcmVhIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIGFuZCBmdXJ0aGVyIGludmVzdGlnYXRpb24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2Vuc2xhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYm9uZF9lbnNsYXZlKCkgaW4gdGhlIG5ldHdvcmsgYm9uZGluZyBkcml2ZXIgdG8gZGVmZXIgaW5jcmVtZW50aW5nIHRoZSBzbGF2ZSBjb3VudCB1bnRpbCBhZnRlciBYRFAgc2V0dXAgYW5kIHZhbGlkYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldGxpbmsvcnRubCBpbnRlcmZhY2VzIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2Vuc2xhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYm9uZF9lbnNsYXZlKCkgaW4gdGhlIG5ldHdvcmsgYm9uZGluZyBkcml2ZXIgdG8gZGVmZXIgaW5jcmVtZW50aW5nIHRoZSBzbGF2ZSBjb3VudCB1bnRpbCBhZnRlciBYRFAgc2V0dXAgYW5kIHZhbGlkYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldGxpbmsvcnRubCBpbnRlcmZhY2VzIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJvbmRfZW5zbGF2ZSgpYCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AgYnkgZGVmZXJyaW5nIHRoZSBpbmNyZW1lbnQgb2YgYGJvbmQtXHUwMDNlc2xhdmVfY250YCAoYFdSSVRFX09OQ0UoYm9uZC1cdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXHUwMDNlc2xhdmVfY250ICYjNDM7IDEpYCkgdW50aWwgYWZ0ZXIgcG90ZW50aWFsIGVycm9yIHBhdGhzIGR1cmluZyBYRFAgY29uZmlndXJhdGlvbiBjaGVja3MuIFRoaXMgcHJldmVudHMgYGJvbmQtXHUwMDNlc2xhdmVfY250YCBmcm9tIGJlY29taW5nIGRlc3luY2hyb25pemVkL2luY29uc2lzdGVudCB3aGVuIGVuc2xhdmluZyBhIGRldmljZSBmYWlscyBpbiBgYm9uZF9lbnNsYXZlKClgLlxuXG5UaGUgY2hhbmdlIGlzIHN0cmljdGx5IGNvbnRyb2wtZmxvdyBhbmQgc3RhdGUtY291bnRlciBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb3B5X3RvX3VzZXIvaW5mby1sZWFrIHBhdGhzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGlzIHN1ZmZpY2llbnQ7IHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOTY2MmQxYTk3OTY2YmM5MGY2NzhkNDQ1NzBlYTgxZjgxODViODM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxMDoxOTozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IGE5YmZmNzY2M2VlY2EuLjE1MTRhOGJhMDg4OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMjI4NCw3ICYjNDM7MjI4NCw2IEBAIGludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LAogCQl9CiAJfQogCi0JV1JJVEVfT05DRShib25kLSZndDtzbGF2ZV9jbnQsIGJvbmQtJmd0O3NsYXZlX2NudCAmIzQzOyAxKTsKIAluZXRkZXZfY29tcHV0ZV9tYXN0ZXJfdXBwZXJfZmVhdHVyZXMoYm9uZC0mZ3Q7ZGV2LCB0cnVlKTsKIAlib25kX3NldF9jYXJyaWVyKGJvbmQpOwogCkBAIC0yMzMyLDYgJiM0MzsyMzMxLDkgQEAgaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsCiAJCQlicGZfcHJvZ19pbmMoYm9uZC0mZ3Q7eGRwX3Byb2cpOwogCX0KIAomIzQzOwkvKiBJbmNyZWFzZSB0aGUgc2xhdmUgY291bnQgYmVmb3JlIHJlYnVpbGRpbmcgdGhlIHNsYXZlIGFycmF5cy4gKi8KJiM0MzsJV1JJVEVfT05DRShib25kLSZndDtzbGF2ZV9jbnQsIGJvbmQtJmd0O3NsYXZlX2NudCAmIzQzOyAxKTsKJiM0MzsKIAkvKiBicm9hZGNhc3QgbW9kZSB1c2VzIHRoZSBhbGxfc2xhdmVzIHRvIGxvb3AgdGhyb3VnaCBzbGF2ZXMuICovCiAJaWYgKGJvbmRfbW9kZV9jYW5fdXNlX3htaXRfaGFzaChib25kKSB8fAogCSAgICBCT05EX01PREUoYm9uZCkgPT0gQk9ORF9NT0RFX0JST0FEQ0FTVCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBCb25kaW5nIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIHRvIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKRmlyc3QsIEkgc2VlIGEgc21hbGwgZGlmZiwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBzaWduLiBJdCBsb29rcyBsaWtlIGEgbWlub3IgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgYGJvbmRfZW5zbGF2ZWAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlIGluY3JlbWVudGVkIGBib25kLSZndDtzbGF2ZV9jbnRgIGJlZm9yZSBgbmV0ZGV2X2NvbXB1dGVfbWFzdGVyX3VwcGVyX2ZlYXR1cmVzYCBhbmQgYGJvbmRfc2V0X2NhcnJpZXJgLiBUaGUgcGF0Y2ggbW92ZXMgdGhlIGBXUklURV9PTkNFYCBjYWxsIHRoYXQgaW5jcmVtZW50cyBgYm9uZC0mZ3Q7c2xhdmVfY250YCAqYWZ0ZXIqIHRob3NlIGNhbGxzLCBidXQgYmVmb3JlIHRoZSBzbGF2ZSBhcnJheSByZWJ1aWxkLiBIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoLgoKVGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhlIGRpZmYsIGFyb3VuZCBsaW5lcyAyMjgwLTIzNTAsIHNlZW1zIHRvIGRlYWwgd2l0aCBhZGRpbmcgYSBzbGF2ZSBuZXR3b3JrIGRldmljZSB0byBhIGJvbmRpbmcgaW50ZXJmYWNlLiBUaGUgYGJvbmRfZW5zbGF2ZWAgZnVuY3Rpb24gYXBwZWFycyB0byBiZSBjZW50cmFsIHRvIHRoaXMgcHJvY2Vzcy4gVGhlIGNvZGUmIzM5O3MgY29tbWVudCBtZW50aW9ucyBicm9hZGNhc3QgbW9kZSB1c2luZyBgYWxsX3NsYXZlc2AgdG8gbG9vcCB0aHJvdWdoIHNsYXZlcywgc28gbWF5YmUgdGhlcmUmIzM5O3MgYSByZWFzb24gZm9yIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZGVwZW5kZW5jaWVzIGhlcmUuCgpTbywgdGhlIGtleSBxdWVzdGlvbnMgYXJlOiBEb2VzIHRoaXMgcmVvcmRlcmluZyBpbnRyb2R1Y2UgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gcmVsYXRlZCB0byBgYm9uZC0mZ3Q7c2xhdmVfY250YCBvciB0aGUgc2xhdmUgYXJyYXlzLCBldmVuIHRyYW5zaWVudGx5PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIG90aGVyIHRocmVhZHMgYWNjZXNzIGBib25kLSZndDtzbGF2ZV9jbnRgIHdoaWxlIHRoZSBhcnJheXMgYXJlIGJlaW5nIHJlYnVpbHQ/IFNwZWNpZmljYWxseSwgZG9lcyB0aGUgdGltaW5nIG9mIHRoZSBpbmNyZW1lbnQgb2YgYGJvbmQtJmd0O3NsYXZlX2NudGAgYWZmZWN0IGFueSBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYnkgYG5ldGRldl9jb21wdXRlX21hc3Rlcl91cHBlcl9mZWF0dXJlc2AsIGBib25kX3NldF9jYXJyaWVyYCwgb3IgdGhlIGFycmF5IHJlYnVpbGQsIGV2ZW4gdGVtcG9yYXJpbHk/IERvZXMgdGhlIG5ldyBvcmRlciBpbnRyb2R1Y2UgYSB3aW5kb3cgd2hlcmUgYW4gaW5hY2N1cmF0ZSBzbGF2ZSBjb3VudCBjb3VsZCBjYXVzZSBpc3N1ZXM/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZXMgd2l0aCBvdGhlciB0aHJlYWRzIHRoYXQgbWF5IGJlIGFjY2Vzc2luZyB0aGUgYm9uZCBzdHJ1Y3R1cmUgY29uY3VycmVudGx5PwoKSSB0aGluayBJJiMzOTtsbCB3YW50IHRvIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGlzIGFyZWEsIGNvbnNpZGVyaW5nIGhvdyBhbmQgd2hlbiBgYm9uZC0mZ3Q7c2xhdmVfY250YCBpcyBhY2Nlc3NlZCwgYW5kIGlmIHRoZSBjb3VudCBiZWluZyB3cm9uZyBmb3IgYSBzaG9ydCBwZXJpb2QgY2F1c2VzIGFueSBwcm9ibGVtcy4gRGVwZW5kaW5nIG9uIHRoZSBhbnN3ZXIsIGEgZnV6emluZyBzZXNzaW9uIG1pZ2h0IGJlIG92ZXJraWxsLCBvciB0aGlzIGNoYW5nZSBjb3VsZCBiZSBhIHJpc2t5IHJlZmFjdG9yLiBUaGlzIG1pZ2h0IGJlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGEgY2FyZWZ1bCBjb2RlIHJldmlldyB3aXRoIGFuIGV5ZSB0b3dhcmRzIGNvbmN1cnJlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyNzA6XHRcdFx0XHRcdGlmIChib25kX2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1BST01JU0MpXG4yMjcxOlx0XHRcdFx0XHRcdGRldl9zZXRfcHJvbWlzY3VpdHkoc2xhdmVfZGV2LCAtMSk7XG4yMjcyOlx0XHRcdFx0XHRnb3RvIGVycl9zeXNmc19kZWw7XG4yMjczOlx0XHRcdFx0fVxuMjI3NDpcdFx0XHR9XG4yMjc1Olx0XG4yMjc2Olx0XHRcdGlmIChib25kX2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSB7XG4yMjc3Olx0XHRcdFx0bmV0aWZfYWRkcl9sb2NrX2JoKGJvbmRfZGV2KTtcbjIyNzg6XHRcdFx0XHRkZXZfbWNfc3luY19tdWx0aXBsZShzbGF2ZV9kZXYsIGJvbmRfZGV2KTtcbjIyNzk6XHRcdFx0XHRkZXZfdWNfc3luY19tdWx0aXBsZShzbGF2ZV9kZXYsIGJvbmRfZGV2KTtcbjIyODA6XHRcdFx0XHRuZXRpZl9hZGRyX3VubG9ja19iaChib25kX2Rldik7XG4yMjgxOlx0XG4yMjgyOlx0XHRcdFx0aWYgKEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfODAyM0FEKVxuMjI4MzpcdFx0XHRcdFx0ZGV2X21jX2FkZChzbGF2ZV9kZXYsIGxhY3BkdV9tY2FzdF9hZGRyKTtcbjIyODQ6XHRcdFx0fVxuMjI4NTpcdFx0fVxuMjI4NjpcdFxuMjI4NzpcdFx0bmV0ZGV2X2NvbXB1dGVfbWFzdGVyX3VwcGVyX2ZlYXR1cmVzKGJvbmQtXHUwMDNlZGV2LCB0cnVlKTtcbjIyODg6XHRcdGJvbmRfc2V0X2NhcnJpZXIoYm9uZCk7XG4yMjg5Olx0XG4yMjkwOlx0XHQvKiBOZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIGJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZSgpLCB3aGljaCB3aWxsXG4yMjkxOlx0XHQgKiByZW1vdmUgdGhlIG1hZGRycyBpZiB0aGUgc2xhdmUgaXMgc2VsZWN0ZWQgYXMgYWN0aXZlIHNsYXZlLlxuMjI5MjpcdFx0ICovXG4yMjkzOlx0XHRib25kX3NsYXZlX25zX21hZGRyc19hZGQoYm9uZCwgbmV3X3NsYXZlKTtcbjIyOTQ6XHRcbjIyOTU6XHRcdGlmIChib25kX3VzZXNfcHJpbWFyeShib25kKSkge1xuMjI5NjpcdFx0XHRibG9ja19uZXRwb2xsX3R4KCk7XG4yMjk3Olx0XHRcdGJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZShib25kKTtcbjIyOTg6XHRcdFx0dW5ibG9ja19uZXRwb2xsX3R4KCk7XG4yMjk5Olx0XHR9XG4yMzAwOlx0XG4yMzAxOlx0XHRpZiAoIXNsYXZlX2Rldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19icGYgfHxcbjIzMDI6XHRcdCAgICAhc2xhdmVfZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3hkcF94bWl0KSB7XG4yMzAzOlx0XHRcdGlmIChib25kLVx1MDAzZXhkcF9wcm9nKSB7XG4yMzA0Olx0XHRcdFx0U0xBVkVfTkxfRVJSKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIGV4dGFjayxcbjIzMDU6XHRcdFx0XHRcdCAgICAgXCYjMzQ7U2xhdmUgZG9lcyBub3Qgc3VwcG9ydCBYRFBcJiMzNDspO1xuMjMwNjpcdFx0XHRcdHJlcyA9IC1FT1BOT1RTVVBQO1xuMjMwNzpcdFx0XHRcdGdvdG8gZXJyX3N5c2ZzX2RlbDtcbjIzMDg6XHRcdFx0fVxuMjMwOTpcdFx0fSBlbHNlIGlmIChib25kLVx1MDAzZXhkcF9wcm9nKSB7XG4yMzEwOlx0XHRcdHN0cnVjdCBuZXRkZXZfYnBmIHhkcCA9IHtcbjIzMTE6XHRcdFx0XHQuY29tbWFuZCA9IFhEUF9TRVRVUF9QUk9HLFxuMjMxMjpcdFx0XHRcdC5mbGFncyAgID0gMCxcbjIzMTM6XHRcdFx0XHQucHJvZyAgICA9IGJvbmQtXHUwMDNleGRwX3Byb2csXG4yMzE0Olx0XHRcdFx0LmV4dGFjayAgPSBleHRhY2ssXG4yMzE1Olx0XHRcdH07XG4yMzE2Olx0XG4yMzE3Olx0XHRcdGlmIChkZXZfeGRwX3Byb2dfY291bnQoc2xhdmVfZGV2KSBcdTAwM2UgMCkge1xuMjMxODpcdFx0XHRcdFNMQVZFX05MX0VSUihib25kX2Rldiwgc2xhdmVfZGV2LCBleHRhY2ssXG4yMzE5Olx0XHRcdFx0XHQgICAgIFwmIzM0O1NsYXZlIGhhcyBYRFAgcHJvZ3JhbSBsb2FkZWQsIHBsZWFzZSB1bmxvYWQgYmVmb3JlIGVuc2xhdmluZ1wmIzM0Oyk7XG4yMzIwOlx0XHRcdFx0cmVzID0gLUVPUE5PVFNVUFA7XG4yMzIxOlx0XHRcdFx0Z290byBlcnJfc3lzZnNfZGVsO1xuMjMyMjpcdFx0XHR9XG4yMzIzOlx0XG4yMzI0Olx0XHRcdHJlcyA9IGRldl94ZHBfcHJvcGFnYXRlKHNsYXZlX2RldiwgXHUwMDI2eGRwKTtcbjIzMjU6XHRcdFx0aWYgKHJlcyBcdTAwM2MgMCkge1xuMjMyNjpcdFx0XHRcdC8qIG5kb19icGYoKSBzZXRzIGV4dGFjayBlcnJvciBtZXNzYWdlICovXG4yMzI3Olx0XHRcdFx0c2xhdmVfZGJnKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIFwmIzM0O0Vycm9yICVkIGNhbGxpbmcgbmRvX2JwZlxcblwmIzM0OywgcmVzKTtcbjIzMjg6XHRcdFx0XHRnb3RvIGVycl9zeXNmc19kZWw7XG4yMzI5Olx0XHRcdH1cbjIzMzA6XHRcdFx0aWYgKGJvbmQtXHUwMDNleGRwX3Byb2cpXG4yMzMxOlx0XHRcdFx0YnBmX3Byb2dfaW5jKGJvbmQtXHUwMDNleGRwX3Byb2cpO1xuMjMzMjpcdFx0fVxuMjMzMzpcdFxuMjMzNDpcdFx0LyogSW5jcmVhc2UgdGhlIHNsYXZlIGNvdW50IGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBzbGF2ZSBhcnJheXMuICovXG4yMzM1Olx0XHRXUklURV9PTkNFKGJvbmQtXHUwMDNlc2xhdmVfY250LCBib25kLVx1MDAzZXNsYXZlX2NudCAmIzQzOyAxKTtcbjIzMzY6XHRcbjIzMzc6XHRcdC8qIGJyb2FkY2FzdCBtb2RlIHVzZXMgdGhlIGFsbF9zbGF2ZXMgdG8gbG9vcCB0aHJvdWdoIHNsYXZlcy4gKi9cbjIzMzg6XHRcdGlmIChib25kX21vZGVfY2FuX3VzZV94bWl0X2hhc2goYm9uZCkgfHxcbjIzMzk6XHRcdCAgICBCT05EX01PREUoYm9uZCkgPT0gQk9ORF9NT0RFX0JST0FEQ0FTVClcbjIzNDA6XHRcdFx0Ym9uZF91cGRhdGVfc2xhdmVfYXJyKGJvbmQsIE5VTEwpO1xuMjM0MTpcdFxuMjM0MjpcdFx0Ym9uZF94ZHBfc2V0X2ZlYXR1cmVzKGJvbmRfZGV2KTtcbjIzNDM6XHRcbjIzNDQ6XHRcdHNsYXZlX2luZm8oYm9uZF9kZXYsIHNsYXZlX2RldiwgXCYjMzQ7RW5zbGF2aW5nIGFzICVzIGludGVyZmFjZSB3aXRoICVzIGxpbmtcXG5cJiMzNDssXG4yMzQ1Olx0XHRcdCAgIGJvbmRfaXNfYWN0aXZlX3NsYXZlKG5ld19zbGF2ZSkgPyBcJiMzNDthbiBhY3RpdmVcJiMzNDsgOiBcJiMzNDthIGJhY2t1cFwmIzM0OyxcbjIzNDY6XHRcdFx0ICAgbmV3X3NsYXZlLVx1MDAzZWxpbmsgIT0gQk9ORF9MSU5LX0RPV04gPyBcJiMzNDthbiB1cFwmIzM0OyA6IFwmIzM0O2EgZG93blwmIzM0Oyk7XG4yMzQ3Olx0XG4yMzQ4Olx0XHQvKiBlbnNsYXZlIGlzIHN1Y2Nlc3NmdWwgKi9cbjIzNDk6XHRcdGJvbmRfcXVldWVfc2xhdmVfZXZlbnQobmV3X3NsYXZlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU2NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBZGRyZXNzaW5nIGEgU3VidGxlIEJvbmQgRW5zbGF2ZW1lbnQgQnVnKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBib25kX2Vuc2xhdmVgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBpbmNvbnNpc3RlbmN5IGluIGhvdyBgYm9uZC0mZ3Q7c2xhdmVfY250YCBpcyBpbmNyZW1lbnRlZC4gUHJldmlvdXNseSwgdGhhdCBgV1JJVEVfT05DRWAgY2FsbCB0byBpbmNyZW1lbnQgdGhlIGNvdW50ZXIgd2FzIGhhcHBlbmluZyAqYmVmb3JlKiB0aGUgWERQIGNoZWNrcyBhbmQgKmJlZm9yZSogd2UgY291bGQganVtcCB0byBgZXJyX3N5c2ZzX2RlbGAuIEVzc2VudGlhbGx5LCBpZiBzb21ldGhpbmcgd2VudCB3cm9uZyBhdCBsaW5lcyAyMzA3LCAyMzIxLCBvciAyMzI4IOKAkyB3ZSBoaXQgYW4gZXJyb3Ig4oCTIGBzbGF2ZV9jbnRgIHdvdWxkIGJlIGluY3JlbWVudGVkLCBidXQgdGhlIGFjdHVhbCBlbnNsYXZlbWVudCBuZXZlciBoYXBwZW5lZC4gVGhpcyBjb3VsZCBsZWF2ZSB0aGUgY291bnQgb3V0IG9mIHN5bmMgZHVyaW5nIHRoZSBjbGVhbnVwIHByb2Nlc3MuCgpUaGUgZml4PyBNb3ZpbmcgdGhhdCBgV1JJVEVfT05DRWAgaW5jcmVtZW50IGRvd24gKmFmdGVyKiBYRFAgcHJvcGFnYXRpb24gYW5kIGp1c3QgYmVmb3JlIHRoZSBjYWxsIHRvIGBib25kX3VwZGF0ZV9zbGF2ZV9hcnIoKWAuIFRoaXMgd2F5LCB3ZSBvbmx5IGluY3JlbWVudCB0aGUgY291bnRlciBpZiB0aGUgWERQIHNldHVwIGlzIHN1Y2Nlc3NmdWwuIEl0IHNlZW1zIGxpa2UgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCB0byBwcmV2ZW50IHRoZSBwcmVtYXR1cmUgaW5jcmVtZW50IG9mIGBib25kLSZndDtzbGF2ZV9jbnRgIGlmIGBib25kX2Vuc2xhdmUoKWAgZmFpbHMgZHVyaW5nIFhEUCBzZXR1cC4KCk5vdywgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgYGVycl9zeXNmc19kZWxgIGNvZGUgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjM1MDpcdFx0cmV0dXJuIDA7XG4yMzUxOlx0XG4yMzUyOlx0LyogVW5kbyBzdGFnZXMgb24gZXJyb3IgKi9cbjIzNTM6XHRlcnJfc3lzZnNfZGVsOlxuMjM1NDpcdFx0Ym9uZF9zeXNmc19zbGF2ZV9kZWwobmV3X3NsYXZlKTtcbjIzNTU6XHRcbjIzNTY6XHRlcnJfdXBwZXJfdW5saW5rOlxuMjM1NzpcdFx0Ym9uZF91cHBlcl9kZXZfdW5saW5rKGJvbmQsIG5ld19zbGF2ZSk7XG4yMzU4Olx0XG4yMzU5Olx0ZXJyX3VucmVnaXN0ZXI6XG4yMzYwOlx0XHRuZXRkZXZfcnhfaGFuZGxlcl91bnJlZ2lzdGVyKHNsYXZlX2Rldik7XG4yMzYxOlx0XG4yMzYyOlx0ZXJyX2RldGFjaDpcbjIzNjM6XHRcdHZsYW5fdmlkc19kZWxfYnlfZGV2KHNsYXZlX2RldiwgYm9uZF9kZXYpO1xuMjM2NDpcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVx1MDAzZXByaW1hcnlfc2xhdmUpID09IG5ld19zbGF2ZSlcbjIzNjU6XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihib25kLVx1MDAzZXByaW1hcnlfc2xhdmUsIE5VTEwpO1xuMjM2NjpcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKSA9PSBuZXdfc2xhdmUpIHtcbjIzNjc6XHRcdFx0YmxvY2tfbmV0cG9sbF90eCgpO1xuMjM2ODpcdFx0XHRib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUoYm9uZCwgTlVMTCk7XG4yMzY5Olx0XHRcdGJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZShib25kKTtcbjIzNzA6XHRcdFx0dW5ibG9ja19uZXRwb2xsX3R4KCk7XG4yMzcxOlx0XHR9XG4yMzcyOlx0XHQvKiBlaXRoZXIgcHJpbWFyeV9zbGF2ZSBvciBjdXJyX2FjdGl2ZV9zbGF2ZSBtaWdodCYjMzk7dmUgY2hhbmdlZCAqL1xuMjM3MzpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4yMzc0Olx0XHRzbGF2ZV9kaXNhYmxlX25ldHBvbGwobmV3X3NsYXZlKTtcbjIzNzU6XHRcbjIzNzY6XHRlcnJfY2xvc2U6XG4yMzc3Olx0XHRpZiAoIW5ldGlmX2lzX2JvbmRfbWFzdGVyKHNsYXZlX2RldikpXG4yMzc4Olx0XHRcdHNsYXZlX2Rldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNj0gfklGRl9CT05ESU5HO1xuMjM3OTpcdFx0ZGV2X2Nsb3NlKHNsYXZlX2Rldik7XG4yMzgwOlx0XG4yMzgxOlx0ZXJyX3Jlc3RvcmVfbWFjOlxuMjM4MjpcdFx0c2xhdmVfZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2PSB+SUZGX05PX0FERFJDT05GO1xuMjM4MzpcdFx0aWYgKCFib25kLVx1MDAzZXBhcmFtcy5mYWlsX292ZXJfbWFjIHx8XG4yMzg0Olx0XHQgICAgQk9ORF9NT0RFKGJvbmQpICE9IEJPTkRfTU9ERV9BQ1RJVkVCQUNLVVApIHtcbjIzODU6XHRcdFx0LyogWFhYIFRPRE8gLSBmb20gZm9sbG93IG1vZGUgbmVlZHMgdG8gY2hhbmdlIG1hc3RlciYjMzk7c1xuMjM4NjpcdFx0XHQgKiBNQUMgaWYgdGhpcyBzbGF2ZSYjMzk7cyBNQUMgaXMgaW4gdXNlIGJ5IHRoZSBib25kLCBvciBhdFxuMjM4NzpcdFx0XHQgKiBsZWFzdCBwcmludCBhIHdhcm5pbmcuXG4yMzg4Olx0XHRcdCAqL1xuMjM4OTpcdFx0XHRib25kX2h3X2FkZHJfY29weShzcy5fX2RhdGEsIG5ld19zbGF2ZS1cdTAwM2VwZXJtX2h3YWRkcixcbjIzOTA6XHRcdFx0XHRcdCAgbmV3X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VhZGRyX2xlbik7XG4yMzkxOlx0XHRcdHNzLnNzX2ZhbWlseSA9IHNsYXZlX2Rldi1cdTAwM2V0eXBlO1xuMjM5MjpcdFx0XHRkZXZfc2V0X21hY19hZGRyZXNzKHNsYXZlX2RldiwgXHUwMDI2c3MsIE5VTEwpO1xuMjM5MzpcdFx0fVxuMjM5NDpcdFxuMjM5NTpcdGVycl9yZXN0b3JlX210dTpcbjIzOTY6XHRcdGRldl9zZXRfbXR1KHNsYXZlX2RldiwgbmV3X3NsYXZlLVx1MDAzZW9yaWdpbmFsX210dSk7XG4yMzk3Olx0XG4yMzk4Olx0ZXJyX2ZyZWU6XG4yMzk5Olx0XHRrb2JqZWN0X3B1dChcdTAwMjZuZXdfc2xhdmUtXHUwMDNla29iaik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MTIKCQkJCQkJCW91dHB1dDogMjAyCgkJCQkJCQl0aG91Z2h0czogNTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgYm9uZF9lbnNsYXZlKClgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgc3BvdC1vbjogdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgc3VidGxlIGJ1dCBzaWduaWZpY2FudCBsb2dpYyBlcnJvci4gYGVycl9zeXNmc19kZWxgIGFuZCBzdWJzZXF1ZW50IGNsZWFudXAgYWN0aW9ucyBkaWRuJiMzOTt0IGRlY3JlbWVudCBgYm9uZC0mZ3Q7c2xhdmVfY250YC4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBYRFAgc2V0dXAgaW4gYGJvbmRfZW5zbGF2ZSgpYCBmYWlsZWQsIHRoZSBgYm9uZC0mZ3Q7c2xhdmVfY250YCB3YXMgbGVmdCBwZXJtYW5lbnRseSBpbmNyZW1lbnRlZCwgbGVhZGluZyB0byBhbiBpbmNvbnNpc3RlbnQgY291bnRlciDigJMgYSBjbGFzc2ljIHN0YXRlIGJ1Zy4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIGV4cG9zZSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgYWJzb2x1dGVseSBub3QuIEkmIzM5O3ZlIGNhcmVmdWxseSBzY3J1dGluaXplZCB0aGUgY29kZS4gVGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQuIENydWNpYWxseSwgbm8gYGNvcHlfdG9fdXNlcmAgY2FsbHMgb3IgaW5mb3JtYXRpb24gbGVhayBwYXRocyBhcmUgdG91Y2hlZCB0byBwb3RlbnRpYWxseSBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLiBGdXJ0aGVybW9yZSwgbm8gZXhpc3RpbmcgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkLiBUaGlzIHBhdGNoIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nLCBtb3ZpbmcgdGhlIGBXUklURV9PTkNFKGJvbmQtJmd0O3NsYXZlX2NudCwgLi4uKWAgbGluZSAqYWZ0ZXIqIHRoZSBmYWlsdXJlIHBvaW50cyBpbiBgYm9uZF9lbnNsYXZlKClgLgoKTmV4dCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBuZWVkIGZvciBLTVNBTi4gSSBrbm93IHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTjsgS0FTQU4gZGVhbHMgd2l0aCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIFVBRiwgZXRjLikgYW5kIGxvY2tkZXAgaGFuZGxlcyBsb2NraW5nIGlzc3Vlcy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gU2luY2UgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucywgYE5lZWRzS01TQU5gIGlzIGNsZWFybHkgZmFsc2UuCgpUbyByZWluZm9yY2UgdGhpcywgSSByZS1leGFtaW5lZCB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYE5lZWRzS01TQU49dHJ1ZWAuIE5vbmUgb2YgdGhvc2UgY29uZGl0aW9ucyBhcmUgbWV0OiB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW52b2x2ZSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIGRvZXNuJiMzOTt0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lc24mIzM5O3QgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCwgYW5kIGl0IGRvZXNuJiMzOTt0IG1hbmlwdWxhdGUgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYmVpbmcgYWNjZXNzZWQuCgpDb252ZXJzZWx5LCB0aGUgY3JpdGVyaWEgZm9yIGBOZWVkc0tNU0FOPWZhbHNlYCBhcmUgcGVyZmVjdGx5IHNhdGlzZmllZC4gVGhlIGNvZGUgY2hhbmdlcyBtYWlubHkgYWRkcmVzcyB0aGUgY291bnRlciBpc3N1ZSBhbmQgdGhleSBkbyBub3QgaW50cm9kdWNlIHJpc2tzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcy4gQWxsIHRvdWNoZWQgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgYmVmb3JlIGFueSByZWFkIG9yIGNvcHkgb3BlcmF0aW9uLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAgaXMgdGhlIGRlZmluaXRpdmUgY29uY2x1c2lvbi4gSSYjMzk7bSByZWFkeSB0byBkb2N1bWVudCB0aGUgcmVhc29uaW5nIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBib25kX2Vuc2xhdmUoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIGJ5IGRlZmVycmluZyB0aGUgaW5jcmVtZW50IG9mIGBib25kLVx1MDAzZXNsYXZlX2NudGAgKGBXUklURV9PTkNFKGJvbmQtXHUwMDNlc2xhdmVfY250LCBib25kLVx1MDAzZXNsYXZlX2NudCAmIzQzOyAxKWApIHVudGlsIGFmdGVyIHBvdGVudGlhbCBlcnJvciBwYXRocyBkdXJpbmcgWERQIGNvbmZpZ3VyYXRpb24gY2hlY2tzLiBUaGlzIHByZXZlbnRzIGBib25kLVx1MDAzZXNsYXZlX2NudGAgZnJvbSBiZWNvbWluZyBkZXN5bmNocm9uaXplZC9pbmNvbnNpc3RlbnQgd2hlbiBlbnNsYXZpbmcgYSBkZXZpY2UgZmFpbHMgaW4gYGJvbmRfZW5zbGF2ZSgpYC5cblxuVGhlIGNoYW5nZSBpcyBzdHJpY3RseSBjb250cm9sLWZsb3cgYW5kIHN0YXRlLWNvdW50ZXIgbWFuYWdlbWVudC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29weV90b191c2VyL2luZm8tbGVhayBwYXRocywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFN0YW5kYXJkIHRlc3Rpbmcgd2l0aCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyBpcyBzdWZmaWNpZW50OyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJvbmRfZW5zbGF2ZSgpYCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AgYnkgZGVmZXJyaW5nIHRoZSBpbmNyZW1lbnQgb2YgYGJvbmQtXHUwMDNlc2xhdmVfY250YCAoYFdSSVRFX09OQ0UoYm9uZC1cdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXHUwMDNlc2xhdmVfY250ICYjNDM7IDEpYCkgdW50aWwgYWZ0ZXIgcG90ZW50aWFsIGVycm9yIHBhdGhzIGR1cmluZyBYRFAgY29uZmlndXJhdGlvbiBjaGVja3MuIFRoaXMgcHJldmVudHMgYGJvbmQtXHUwMDNlc2xhdmVfY250YCBmcm9tIGJlY29taW5nIGRlc3luY2hyb25pemVkL2luY29uc2lzdGVudCB3aGVuIGVuc2xhdmluZyBhIGRldmljZSBmYWlscyBpbiBgYm9uZF9lbnNsYXZlKClgLlxuXG5UaGUgY2hhbmdlIGlzIHN0cmljdGx5IGNvbnRyb2wtZmxvdyBhbmQgc3RhdGUtY291bnRlciBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb3B5X3RvX3VzZXIvaW5mby1sZWFrIHBhdGhzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGlzIHN1ZmZpY2llbnQ7IHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjE5OjM2LjU2ODQ1MjczMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTgxMTcwNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2Vuc2xhdmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBib25kX2Vuc2xhdmUoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIGJ5IGRlZmVycmluZyB0aGUgaW5jcmVtZW50IG9mIGBib25kLVxcdTAwM2VzbGF2ZV9jbnRgIChgV1JJVEVfT05DRShib25kLVxcdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXFx1MDAzZXNsYXZlX2NudCArIDEpYCkgdW50aWwgYWZ0ZXIgcG90ZW50aWFsIGVycm9yIHBhdGhzIGR1cmluZyBYRFAgY29uZmlndXJhdGlvbiBjaGVja3MuIFRoaXMgcHJldmVudHMgYGJvbmQtXFx1MDAzZXNsYXZlX2NudGAgZnJvbSBiZWNvbWluZyBkZXN5bmNocm9uaXplZC9pbmNvbnNpc3RlbnQgd2hlbiBlbnNsYXZpbmcgYSBkZXZpY2UgZmFpbHMgaW4gYGJvbmRfZW5zbGF2ZSgpYC5cXG5cXG5UaGUgY2hhbmdlIGlzIHN0cmljdGx5IGNvbnRyb2wtZmxvdyBhbmQgc3RhdGUtY291bnRlciBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb3B5X3RvX3VzZXIvaW5mby1sZWFrIHBhdGhzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGlzIHN1ZmZpY2llbnQ7IHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYm9uZF9lbnNsYXZlKCkgaW4gdGhlIG5ldHdvcmsgYm9uZGluZyBkcml2ZXIgdG8gZGVmZXIgaW5jcmVtZW50aW5nIHRoZSBzbGF2ZSBjb3VudCB1bnRpbCBhZnRlciBYRFAgc2V0dXAgYW5kIHZhbGlkYXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldGxpbmsvcnRubCBpbnRlcmZhY2VzIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDoxOTozNi41Njg0NTcxMzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDk2MjA0MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhOTY2MmQxYTk3OTY2YmM5MGY2NzhkNDQ1NzBlYTgxZjgxODViODM5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTA6MTk6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcXG5pbmRleCBhOWJmZjc2NjNlZWNhLi4xNTE0YThiYTA4ODhkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXFxuQEAgLTIyODQsNyArMjI4NCw2IEBAIGludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdFdSSVRFX09OQ0UoYm9uZC1cXHUwMDNlc2xhdmVfY250LCBib25kLVxcdTAwM2VzbGF2ZV9jbnQgKyAxKTtcXG4gXFx0bmV0ZGV2X2NvbXB1dGVfbWFzdGVyX3VwcGVyX2ZlYXR1cmVzKGJvbmQtXFx1MDAzZWRldiwgdHJ1ZSk7XFxuIFxcdGJvbmRfc2V0X2NhcnJpZXIoYm9uZCk7XFxuIFxcbkBAIC0yMzMyLDYgKzIzMzEsOSBAQCBpbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldixcXG4gXFx0XFx0XFx0YnBmX3Byb2dfaW5jKGJvbmQtXFx1MDAzZXhkcF9wcm9nKTtcXG4gXFx0fVxcbiBcXG4rXFx0LyogSW5jcmVhc2UgdGhlIHNsYXZlIGNvdW50IGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBzbGF2ZSBhcnJheXMuICovXFxuK1xcdFdSSVRFX09OQ0UoYm9uZC1cXHUwMDNlc2xhdmVfY250LCBib25kLVxcdTAwM2VzbGF2ZV9jbnQgKyAxKTtcXG4rXFxuIFxcdC8qIGJyb2FkY2FzdCBtb2RlIHVzZXMgdGhlIGFsbF9zbGF2ZXMgdG8gbG9vcCB0aHJvdWdoIHNsYXZlcy4gKi9cXG4gXFx0aWYgKGJvbmRfbW9kZV9jYW5fdXNlX3htaXRfaGFzaChib25kKSB8fFxcbiBcXHQgICAgQk9ORF9NT0RFKGJvbmQpID09IEJPTkRfTU9ERV9CUk9BRENBU1QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjE5OjM3Ljg3ODc2NjA3MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc3NTcyNzcxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJvbmRfZW5zbGF2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJvbmRfZW5zbGF2ZSgpIGluIHRoZSBuZXR3b3JrIGJvbmRpbmcgZHJpdmVyIHRvIGRlZmVyIGluY3JlbWVudGluZyB0aGUgc2xhdmUgY291bnQgdW50aWwgYWZ0ZXIgWERQIHNldHVwIGFuZCB2YWxpZGF0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3J0bmwgaW50ZXJmYWNlcyBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOTY2MmQxYTk3OTY2YmM5MGY2NzhkNDQ1NzBlYTgxZjgxODViODM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMDoxOTozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG5pbmRleCBhOWJmZjc2NjNlZWNhLi4xNTE0YThiYTA4ODhkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xuQEAgLTIyODQsNyArMjI4NCw2IEBAIGludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRXUklURV9PTkNFKGJvbmQtXHUwMDNlc2xhdmVfY250LCBib25kLVx1MDAzZXNsYXZlX2NudCArIDEpO1xuIFx0bmV0ZGV2X2NvbXB1dGVfbWFzdGVyX3VwcGVyX2ZlYXR1cmVzKGJvbmQtXHUwMDNlZGV2LCB0cnVlKTtcbiBcdGJvbmRfc2V0X2NhcnJpZXIoYm9uZCk7XG4gXG5AQCAtMjMzMiw2ICsyMzMxLDkgQEAgaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXG4gXHRcdFx0YnBmX3Byb2dfaW5jKGJvbmQtXHUwMDNleGRwX3Byb2cpO1xuIFx0fVxuIFxuK1x0LyogSW5jcmVhc2UgdGhlIHNsYXZlIGNvdW50IGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBzbGF2ZSBhcnJheXMuICovXG4rXHRXUklURV9PTkNFKGJvbmQtXHUwMDNlc2xhdmVfY250LCBib25kLVx1MDAzZXNsYXZlX2NudCArIDEpO1xuK1xuIFx0LyogYnJvYWRjYXN0IG1vZGUgdXNlcyB0aGUgYWxsX3NsYXZlcyB0byBsb29wIHRocm91Z2ggc2xhdmVzLiAqL1xuIFx0aWYgKGJvbmRfbW9kZV9jYW5fdXNlX3htaXRfaGFzaChib25kKSB8fFxuIFx0ICAgIEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfQlJPQURDQVNUKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MTk6MzcuODc4NzY3ODExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njk1ODQwNDU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJvbmRpbmcgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBjaGFuZ2VzLiBJJ2xsIGhlYWQgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCBhbmQgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBwdWxsIHVwIHRoZSBwYXRjaCBhbmQgaXRzIHN1cnJvdW5kaW5nIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAnd2h5JyBiZWhpbmQgdGhlICd3aGF0JyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLiBUaW1lIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCBnb3QgYWx0ZXJlZCB3aXRoaW4gYGJvbmRfbWFpbi5jYC4gVW5kZXJzdGFuZGluZyB0aGUgY29kZSB0aGF0IHdhcyBjaGFuZ2VkIHdpbGwgZ2l2ZSB0aGUgbW9zdCByZWxldmFudCBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MTk6NDQuODM3MTc2MDE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI3MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI3MDpcXHRcXHRcXHRcXHRcXHRpZiAoYm9uZF9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1BST01JU0MpXFxuMjI3MTpcXHRcXHRcXHRcXHRcXHRcXHRkZXZfc2V0X3Byb21pc2N1aXR5KHNsYXZlX2RldiwgLTEpO1xcbjIyNzI6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJfc3lzZnNfZGVsO1xcbjIyNzM6XFx0XFx0XFx0XFx0fVxcbjIyNzQ6XFx0XFx0XFx0fVxcbjIyNzU6XFx0XFxuMjI3NjpcXHRcXHRcXHRpZiAoYm9uZF9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB7XFxuMjI3NzpcXHRcXHRcXHRcXHRuZXRpZl9hZGRyX2xvY2tfYmgoYm9uZF9kZXYpO1xcbjIyNzg6XFx0XFx0XFx0XFx0ZGV2X21jX3N5bmNfbXVsdGlwbGUoc2xhdmVfZGV2LCBib25kX2Rldik7XFxuMjI3OTpcXHRcXHRcXHRcXHRkZXZfdWNfc3luY19tdWx0aXBsZShzbGF2ZV9kZXYsIGJvbmRfZGV2KTtcXG4yMjgwOlxcdFxcdFxcdFxcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGJvbmRfZGV2KTtcXG4yMjgxOlxcdFxcbjIyODI6XFx0XFx0XFx0XFx0aWYgKEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfODAyM0FEKVxcbjIyODM6XFx0XFx0XFx0XFx0XFx0ZGV2X21jX2FkZChzbGF2ZV9kZXYsIGxhY3BkdV9tY2FzdF9hZGRyKTtcXG4yMjg0OlxcdFxcdFxcdH1cXG4yMjg1OlxcdFxcdH1cXG4yMjg2OlxcdFxcbjIyODc6XFx0XFx0bmV0ZGV2X2NvbXB1dGVfbWFzdGVyX3VwcGVyX2ZlYXR1cmVzKGJvbmQtXFx1MDAzZWRldiwgdHJ1ZSk7XFxuMjI4ODpcXHRcXHRib25kX3NldF9jYXJyaWVyKGJvbmQpO1xcbjIyODk6XFx0XFxuMjI5MDpcXHRcXHQvKiBOZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIGJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZSgpLCB3aGljaCB3aWxsXFxuMjI5MTpcXHRcXHQgKiByZW1vdmUgdGhlIG1hZGRycyBpZiB0aGUgc2xhdmUgaXMgc2VsZWN0ZWQgYXMgYWN0aXZlIHNsYXZlLlxcbjIyOTI6XFx0XFx0ICovXFxuMjI5MzpcXHRcXHRib25kX3NsYXZlX25zX21hZGRyc19hZGQoYm9uZCwgbmV3X3NsYXZlKTtcXG4yMjk0OlxcdFxcbjIyOTU6XFx0XFx0aWYgKGJvbmRfdXNlc19wcmltYXJ5KGJvbmQpKSB7XFxuMjI5NjpcXHRcXHRcXHRibG9ja19uZXRwb2xsX3R4KCk7XFxuMjI5NzpcXHRcXHRcXHRib25kX3NlbGVjdF9hY3RpdmVfc2xhdmUoYm9uZCk7XFxuMjI5ODpcXHRcXHRcXHR1bmJsb2NrX25ldHBvbGxfdHgoKTtcXG4yMjk5OlxcdFxcdH1cXG4yMzAwOlxcdFxcbjIzMDE6XFx0XFx0aWYgKCFzbGF2ZV9kZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19icGYgfHxcXG4yMzAyOlxcdFxcdCAgICAhc2xhdmVfZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9feGRwX3htaXQpIHtcXG4yMzAzOlxcdFxcdFxcdGlmIChib25kLVxcdTAwM2V4ZHBfcHJvZykge1xcbjIzMDQ6XFx0XFx0XFx0XFx0U0xBVkVfTkxfRVJSKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIGV4dGFjayxcXG4yMzA1OlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIlNsYXZlIGRvZXMgbm90IHN1cHBvcnQgWERQXFxcIik7XFxuMjMwNjpcXHRcXHRcXHRcXHRyZXMgPSAtRU9QTk9UU1VQUDtcXG4yMzA3OlxcdFxcdFxcdFxcdGdvdG8gZXJyX3N5c2ZzX2RlbDtcXG4yMzA4OlxcdFxcdFxcdH1cXG4yMzA5OlxcdFxcdH0gZWxzZSBpZiAoYm9uZC1cXHUwMDNleGRwX3Byb2cpIHtcXG4yMzEwOlxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfYnBmIHhkcCA9IHtcXG4yMzExOlxcdFxcdFxcdFxcdC5jb21tYW5kID0gWERQX1NFVFVQX1BST0csXFxuMjMxMjpcXHRcXHRcXHRcXHQuZmxhZ3MgICA9IDAsXFxuMjMxMzpcXHRcXHRcXHRcXHQucHJvZyAgICA9IGJvbmQtXFx1MDAzZXhkcF9wcm9nLFxcbjIzMTQ6XFx0XFx0XFx0XFx0LmV4dGFjayAgPSBleHRhY2ssXFxuMjMxNTpcXHRcXHRcXHR9O1xcbjIzMTY6XFx0XFxuMjMxNzpcXHRcXHRcXHRpZiAoZGV2X3hkcF9wcm9nX2NvdW50KHNsYXZlX2RldikgXFx1MDAzZSAwKSB7XFxuMjMxODpcXHRcXHRcXHRcXHRTTEFWRV9OTF9FUlIoYm9uZF9kZXYsIHNsYXZlX2RldiwgZXh0YWNrLFxcbjIzMTk6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiU2xhdmUgaGFzIFhEUCBwcm9ncmFtIGxvYWRlZCwgcGxlYXNlIHVubG9hZCBiZWZvcmUgZW5zbGF2aW5nXFxcIik7XFxuMjMyMDpcXHRcXHRcXHRcXHRyZXMgPSAtRU9QTk9UU1VQUDtcXG4yMzIxOlxcdFxcdFxcdFxcdGdvdG8gZXJyX3N5c2ZzX2RlbDtcXG4yMzIyOlxcdFxcdFxcdH1cXG4yMzIzOlxcdFxcbjIzMjQ6XFx0XFx0XFx0cmVzID0gZGV2X3hkcF9wcm9wYWdhdGUoc2xhdmVfZGV2LCBcXHUwMDI2eGRwKTtcXG4yMzI1OlxcdFxcdFxcdGlmIChyZXMgXFx1MDAzYyAwKSB7XFxuMjMyNjpcXHRcXHRcXHRcXHQvKiBuZG9fYnBmKCkgc2V0cyBleHRhY2sgZXJyb3IgbWVzc2FnZSAqL1xcbjIzMjc6XFx0XFx0XFx0XFx0c2xhdmVfZGJnKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIFxcXCJFcnJvciAlZCBjYWxsaW5nIG5kb19icGZcXFxcblxcXCIsIHJlcyk7XFxuMjMyODpcXHRcXHRcXHRcXHRnb3RvIGVycl9zeXNmc19kZWw7XFxuMjMyOTpcXHRcXHRcXHR9XFxuMjMzMDpcXHRcXHRcXHRpZiAoYm9uZC1cXHUwMDNleGRwX3Byb2cpXFxuMjMzMTpcXHRcXHRcXHRcXHRicGZfcHJvZ19pbmMoYm9uZC1cXHUwMDNleGRwX3Byb2cpO1xcbjIzMzI6XFx0XFx0fVxcbjIzMzM6XFx0XFxuMjMzNDpcXHRcXHQvKiBJbmNyZWFzZSB0aGUgc2xhdmUgY291bnQgYmVmb3JlIHJlYnVpbGRpbmcgdGhlIHNsYXZlIGFycmF5cy4gKi9cXG4yMzM1OlxcdFxcdFdSSVRFX09OQ0UoYm9uZC1cXHUwMDNlc2xhdmVfY250LCBib25kLVxcdTAwM2VzbGF2ZV9jbnQgKyAxKTtcXG4yMzM2OlxcdFxcbjIzMzc6XFx0XFx0LyogYnJvYWRjYXN0IG1vZGUgdXNlcyB0aGUgYWxsX3NsYXZlcyB0byBsb29wIHRocm91Z2ggc2xhdmVzLiAqL1xcbjIzMzg6XFx0XFx0aWYgKGJvbmRfbW9kZV9jYW5fdXNlX3htaXRfaGFzaChib25kKSB8fFxcbjIzMzk6XFx0XFx0ICAgIEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfQlJPQURDQVNUKVxcbjIzNDA6XFx0XFx0XFx0Ym9uZF91cGRhdGVfc2xhdmVfYXJyKGJvbmQsIE5VTEwpO1xcbjIzNDE6XFx0XFxuMjM0MjpcXHRcXHRib25kX3hkcF9zZXRfZmVhdHVyZXMoYm9uZF9kZXYpO1xcbjIzNDM6XFx0XFxuMjM0NDpcXHRcXHRzbGF2ZV9pbmZvKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIFxcXCJFbnNsYXZpbmcgYXMgJXMgaW50ZXJmYWNlIHdpdGggJXMgbGlua1xcXFxuXFxcIixcXG4yMzQ1OlxcdFxcdFxcdCAgIGJvbmRfaXNfYWN0aXZlX3NsYXZlKG5ld19zbGF2ZSkgPyBcXFwiYW4gYWN0aXZlXFxcIiA6IFxcXCJhIGJhY2t1cFxcXCIsXFxuMjM0NjpcXHRcXHRcXHQgICBuZXdfc2xhdmUtXFx1MDAzZWxpbmsgIT0gQk9ORF9MSU5LX0RPV04gPyBcXFwiYW4gdXBcXFwiIDogXFxcImEgZG93blxcXCIpO1xcbjIzNDc6XFx0XFxuMjM0ODpcXHRcXHQvKiBlbnNsYXZlIGlzIHN1Y2Nlc3NmdWwgKi9cXG4yMzQ5OlxcdFxcdGJvbmRfcXVldWVfc2xhdmVfZXZlbnQobmV3X3NsYXZlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MTk6NDQuODM3NDEyMjA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzkwMjUwMTc0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaXhpbmcgYSBSYWNlIENvbmRpdGlvbiBpbiB0aGUgQm9uZGluZyBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYm9uZF9lbnNsYXZlYCBmdW5jdGlvbiB3aXRoaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGFkZHJlc3NpbmcgYSBidWcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGV4YWN0bHkgd2FzIGJlaW5nIGZpeGVkLiBSaWdodCwgZ290IGl0LiBMb29raW5nIGF0IGxpbmVzIDIzMDAtMjMzMCwgdGhlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhlIFhEUCAoZVhwcmVzcyBEYXRhIFBhdGgpIHNldHVwIGludGVyYWN0cyB3aXRoIHRoZSBib25kaW5nIHByb2Nlc3MuXG5cbkJlZm9yZSwgdGhlcmUgd2FzIHRoaXMgY3JpdGljYWwgc2VxdWVuY2U6IGBXUklURV9PTkNFKGJvbmQtXHUwMDNlc2xhdmVfY250LCBib25kLVx1MDAzZXNsYXZlX2NudCArIDEpO2Agd2FzIGhhcHBlbmluZyAqYmVmb3JlKiBjcnVjaWFsIGNoZWNrcyDigJMgc3BlY2lmaWNhbGx5LCB3aGV0aGVyIFhEUCBzZXR1cCB3YXMgc3VjY2Vzc2Z1bCBvciBpZiB0aGUgc2xhdmUgaW50ZXJmYWNlIGV2ZW4gc3VwcG9ydGVkIFhEUC4gSWYgWERQIHNldHVwIGZhaWxlZCBvciB0aGUgc2xhdmUgZGlkbid0IHN1cHBvcnQgaXQsIHRoZSBjb2RlIHdvdWxkIGp1bXAgdG8gYGVycl9zeXNmc19kZWxgLiBUaGUgcHJvYmxlbT8gYGJvbmQtXHUwMDNlc2xhdmVfY250YCB3b3VsZCBhbHJlYWR5IGJlIGluY3JlbWVudGVkIGV2ZW4gdGhvdWdoIHRoZSBzbGF2ZSB3YXNuJ3QgYWN0dWFsbHkgcHJvcGVybHkgZW5zbGF2ZWQuIFRoaXMgY3JlYXRlZCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBhbmQgZGF0YSBjb3JydXB0aW9uLiBJZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIHNldHVwLCBgYm9uZC1cdTAwM2VzbGF2ZV9jbnRgIG1pZ2h0IGJlIGxlZnQgb3V0IG9mIHN5bmMsIG9yIHRoZSBhcnJheSBgYm9uZF9zbGF2ZV9hcnJgIHdvdWxkIGJlIGNvcnJ1cHRlZC5cblxuVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBjcml0aWNhbC4gTW92aW5nIHRoZSBgV1JJVEVfT05DRWAgb3BlcmF0aW9uICphZnRlciogdGhlIFhEUCBjaGVja3MgZW5zdXJlcyB0aGF0IGBib25kLVx1MDAzZXNsYXZlX2NudGAgaXMgb25seSBpbmNyZW1lbnRlZCBpZiB0aGUgc2xhdmUgaXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLiBUaGlzIHNob3VsZCByZXNvbHZlIHRoZSBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBjcmFzaGVzIG9yIGluY29ycmVjdCBiZWhhdmlvciBpbiBgYm9uZF91cGRhdGVfc2xhdmVfYXJyYCwgb3Igb3RoZXIgcmVsYXRlZCBwcm9jZXNzZXMuXG5cbk5vdywgbGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZm9yIHRoZSBib25kaW5nIGRyaXZlciwgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGlzIHByb3Blcmx5IGludGVncmF0ZWQuIEknbGwgaGVhZCBvdmVyIHRvIGBkcml2ZXJzL25ldC9ib25kaW5nYCBhbmQgbG9jYXRlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjAwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MTk6NDguNzM5OTE3MDA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjE5ODExLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQk9ORElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MTk6NDguODAwMTQ2NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDU0NzEwODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqS2NvbmZpZyBMb2NhdGlvbiBIdW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIGNvbmZpZ3VyZSBzb21ldGhpbmcgcmVsYXRlZCB0byBuZXR3b3JraW5nLCBwcm9iYWJseSBhIGRyaXZlci4gR2l2ZW4gdGhlIHNjb3BlIG9mIHRoaXMgcHJvamVjdCwgSSdtIHByZXR0eSBzdXJlIGl0J3MgZ29pbmcgdG8gaW52b2x2ZSBhIEtjb25maWcgZmlsZS4gV2hlcmUgd291bGQgdGhhdCBsaXZlPyBUaGlua2luZyBsb2dpY2FsbHksIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgYXJlIHRoZSBvYnZpb3VzOiBgZHJpdmVycy9uZXQvYCBhbmQsIHBlcmhhcHMgbW9yZSBzcGVjaWZpY2FsbHksIGBkcml2ZXJzL25ldC9ib25kaW5nL2AuIFRoYXQgYm9uZGluZyBkaXJlY3RvcnkgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gbGluayBhZ2dyZWdhdGlvbiwgYW5kIHRoYXQgc2VlbXMgdG8gYmUgcmVsZXZhbnQuIEl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgY29udmVudGlvbiwgc28gdGhvc2UgYXJlIHRoZSBmaXJzdCBwbGFjZXMgSSdsbCBzdGFydCBkaWdnaW5nLiBJJ2xsIGNoZWNrIHRob3NlIGZpcnN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjYzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MTk6NTEuMjU0ODU5NjM0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDE1MzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJPTkRJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQxOmNvbmZpZyBCT05ESU5HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiQm9uZGluZyBkcml2ZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MTk6NTEuMzA2MjgwMzQ2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODQzODU3OTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHNvIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgdGhhdCB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUgaXMgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0LiBJJ20gZ29pbmcgdG8ganVtcCBpbiBhcm91bmQgbGluZSA0MSwgYXMgdGhhdCdzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZXhwbG9yaW5nIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlc2UgZmlsZXMuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBhdmFpbGFibGUgbmV0d29yayBkcml2ZXJzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgdGhlIGFyZWEgcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUzOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjE5OjU5Ljc0NDg2MzY5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIFlvdSBjYW4gc2F5IE4gaGVyZSBpZiB5b3UgZG8gbm90IGludGVuZCB0byB1c2UgYW55IG9mIHRoZVxcbiAgMzc6XFx0XFx0ICBuZXR3b3JraW5nIGNvcmUgZHJpdmVycyAoaS5lLiBWTEFOLCBicmlkZ2luZywgYm9uZGluZywgZXRjLilcXG4gIDM4OlxcdFxcbiAgMzk6XFx0aWYgTkVUX0NPUkVcXG4gIDQwOlxcdFxcbiAgNDE6XFx0Y29uZmlnIEJPTkRJTkdcXG4gIDQyOlxcdFxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbiAgNDM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cXG4gIDQ1OlxcdFxcdGhlbHBcXG4gIDQ2OlxcdFxcdCAgU2F5ICdZJyBvciAnTScgaWYgeW91IHdpc2ggdG8gYmUgYWJsZSB0byAnYm9uZCcgbXVsdGlwbGUgRXRoZXJuZXRcXG4gIDQ3OlxcdFxcdCAgQ2hhbm5lbHMgdG9nZXRoZXIuIFRoaXMgaXMgY2FsbGVkICdFdGhlcmNoYW5uZWwnIGJ5IENpc2NvLFxcbiAgNDg6XFx0XFx0ICAnVHJ1bmtpbmcnIGJ5IFN1biwgODAyLjNhZCBieSB0aGUgSUVFRSwgYW5kICdCb25kaW5nJyBpbiBMaW51eC5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBUaGUgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGJvbmRpbmcgbW9kZXMgdG8gYWxsb3cgZm9yIGJvdGggaGlnaFxcbiAgNTE6XFx0XFx0ICBwZXJmb3JtYW5jZSBhbmQgaGlnaCBhdmFpbGFiaWxpdHkgb3BlcmF0aW9uLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIFJlZmVyIHRvIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnJzdFxcdTAwM2UgZm9yIG1vcmVcXG4gIDU0OlxcdFxcdCAgaW5mb3JtYXRpb24uXFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNTc6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBib25kaW5nLlxcbiAgNTg6XFx0XFxuICA1OTpcXHRjb25maWcgRFVNTVlcXG4gIDYwOlxcdFxcdHRyaXN0YXRlIFxcXCJEdW1teSBuZXQgZHJpdmVyIHN1cHBvcnRcXFwiXFxuICA2MTpcXHRcXHRoZWxwXFxuICA2MjpcXHRcXHQgIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBiaXQtYnVja2V0IGRldmljZSAoaS5lLiB0cmFmZmljIHlvdSBzZW5kIHRvXFxuICA2MzpcXHRcXHQgIHRoaXMgZGV2aWNlIGlzIGNvbnNpZ25lZCBpbnRvIG9ibGl2aW9uKSB3aXRoIGEgY29uZmlndXJhYmxlIElQXFxuICA2NDpcXHRcXHQgIGFkZHJlc3MuIEl0IGlzIG1vc3QgY29tbW9ubHkgdXNlZCBpbiBvcmRlciB0byBtYWtlIHlvdXIgY3VycmVudGx5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjE5OjU5Ljc0NDk2NzMzNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODA2MjY4NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBOZXR3b3JrIEJvbmRpbmcgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgd29ydGh3aGlsZSBwYXRjaCB0byBhbmFseXplLiBUaGUgYGJvbmRfZW5zbGF2ZWAgZnVuY3Rpb24gd2l0aGluIHRoZSBib25kaW5nIGRyaXZlciAoYGJvbmRfbWFpbi5jYCkgaXMgY2xlYXJseSB0aGUgdGFyZ2V0LCBhbmQgdGhhdCdzIHRoZSBvbmx5IGZ1bmN0aW9uIG1vZGlmaWVkIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBkaWZmLiBJdCdzIGFsc28gd29ydGggbm90aW5nIHRoYXQgdGhlIGJvbmRpbmcgZHJpdmVyIGlzIGEgc3RhbmRhcmQgbmV0ZGV2IGRyaXZlciwgc28gaXQncyBhIGtub3duIHF1YW50aXR5LiBJdCBjYW4gYmUgY3JlYXRlZCBhbmQgbWFuaXB1bGF0ZWQgdGhyb3VnaCBzdGFuZGFyZCBpbnRlcmZhY2VzIGxpa2UgYHJ0bmxgLCBgbmV0bGlua2AsIGBpb2N0bGAsIGFuZCBgc3lzZnNgIHdoaWNoIGlzIHVzZWZ1bCBpbiB0ZXN0aW5nLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgaXQncyByZWFkaWx5IHJlYWNoYWJsZSB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCB3aGljaCBzaW1wbGlmaWVzIGZ1enppbmcgYW5kIGRlYnVnZ2luZy4gU3l6a2FsbGVyIGFjdGl2ZWx5IHRhcmdldHMgYG5ldGxpbmtgIHJlbGF0ZWQgdG8gYm9uZGluZywgbWFraW5nIHRoaXMgcGFydGljdWxhcmx5IHJlbGV2YW50LlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgYSBjaGFuZ2UgaW4gdGhlIHN0YXRlIHRyYWNraW5nIG9mIGBib25kLVx1MDAzZXNsYXZlX2NudGAgd2l0aGluIGBib25kX2Vuc2xhdmVgLiBJdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSB0aW1pbmcgaXNzdWUgd2l0aCB0aGUgaW5jcmVtZW50IG9mIHRoZSBzbGF2ZSBjb3VudC4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGNvbnNpc3RlbmN5IHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIFRoZSBwcmV2aW91cyBwbGFjZW1lbnQgb2YgYFdSSVRFX09OQ0UoYm9uZC1cdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXHUwMDNlc2xhdmVfY250ICsgMSk7YCBtaWdodCBoYXZlIGNhdXNlZCBpc3N1ZXMgaWYgc29tZSBzdWJzZXF1ZW50IHNldHVwIG9yIFhEUCBjaGVja3MgZmFpbGVkLiBCeSBtb3ZpbmcgaXQsIHRoZSBjb3VudCBpcyBpbmNyZW1lbnRlZCAqYWZ0ZXIqIHRob3NlIGNoZWNrcyB3aGljaCB3b3VsZCBtaXRpZ2F0ZSBpbmNvbnNpc3RlbmNpZXMuXG5cbkkndmUgdmVyaWZpZWQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zOiBgQk9ORElOR2AgYW5kIGBJTkVUYCwgc28gd2UncmUgZ29vZCB0aGVyZS4gTXkgZm9jdXMgc3ltYm9scyBhcmUgZGVmaW5pdGVseSBjZW50ZXJlZCBvbiBgYm9uZF9lbnNsYXZlYCB3aGljaCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24uIEkgZG91YmxlLWNoZWNrZWQgdGhlIGRpZmYgYW5kIHZlcmlmaWVkIHRoYXQgb25seSB0aGUgYGJvbmRfbWFpbi5jYCBmaWxlIHdhcyB0b3VjaGVkIGFuZCBvbmx5IGBib25kX2Vuc2xhdmVgIHdhcyBtb2RpZmllZC5cblxuQmFzZWQgb24gdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBpdCdzIGNsZWFyIHRoaXMgcGF0Y2ggZml4ZXMgYSBjcml0aWNhbCB0aW1pbmcgaXNzdWUgd2l0aGluIGEgcmVsYXRpdmVseSBhY2Nlc3NpYmxlIGFuZCBhY3RpdmVseSBmdXp6ZWQgYXJlYSBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBhbmQgZnVydGhlciBpbnZlc3RpZ2F0aW9uIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTcxLCJPdXRwdXRUb2tlbnMiOjk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MjA6MDUuNTUxMjM4NTM4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ4MDE4NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2Vuc2xhdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBib25kX2Vuc2xhdmUoKSBpbiB0aGUgbmV0d29yayBib25kaW5nIGRyaXZlciB0byBkZWZlciBpbmNyZW1lbnRpbmcgdGhlIHNsYXZlIGNvdW50IHVudGlsIGFmdGVyIFhEUCBzZXR1cCBhbmQgdmFsaWRhdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0bGluay9ydG5sIGludGVyZmFjZXMgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJvbmRfZW5zbGF2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJvbmRfZW5zbGF2ZSgpIGluIHRoZSBuZXR3b3JrIGJvbmRpbmcgZHJpdmVyIHRvIGRlZmVyIGluY3JlbWVudGluZyB0aGUgc2xhdmUgY291bnQgdW50aWwgYWZ0ZXIgWERQIHNldHVwIGFuZCB2YWxpZGF0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3J0bmwgaW50ZXJmYWNlcyBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MjA6MDUuNjM2MDQ3NTg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTExMzU2NzM5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjIwOjA1LjYzNjU0NzY2NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE1MTEzMDYzMTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYm9uZF9lbnNsYXZlKClgIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCBieSBkZWZlcnJpbmcgdGhlIGluY3JlbWVudCBvZiBgYm9uZC1cXHUwMDNlc2xhdmVfY250YCAoYFdSSVRFX09OQ0UoYm9uZC1cXHUwMDNlc2xhdmVfY250LCBib25kLVxcdTAwM2VzbGF2ZV9jbnQgKyAxKWApIHVudGlsIGFmdGVyIHBvdGVudGlhbCBlcnJvciBwYXRocyBkdXJpbmcgWERQIGNvbmZpZ3VyYXRpb24gY2hlY2tzLiBUaGlzIHByZXZlbnRzIGBib25kLVxcdTAwM2VzbGF2ZV9jbnRgIGZyb20gYmVjb21pbmcgZGVzeW5jaHJvbml6ZWQvaW5jb25zaXN0ZW50IHdoZW4gZW5zbGF2aW5nIGEgZGV2aWNlIGZhaWxzIGluIGBib25kX2Vuc2xhdmUoKWAuXFxuXFxuVGhlIGNoYW5nZSBpcyBzdHJpY3RseSBjb250cm9sLWZsb3cgYW5kIHN0YXRlLWNvdW50ZXIgbWFuYWdlbWVudC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29weV90b191c2VyL2luZm8tbGVhayBwYXRocywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFN0YW5kYXJkIHRlc3Rpbmcgd2l0aCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyBpcyBzdWZmaWNpZW50OyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE5NjYyZDFhOTc5NjZiYzkwZjY3OGQ0NDU3MGVhODFmODE4NWI4MzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDEwOjE5OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcbmluZGV4IGE5YmZmNzY2M2VlY2EuLjE1MTRhOGJhMDg4OGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG5AQCAtMjI4NCw3ICsyMjg0LDYgQEAgaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdFdSSVRFX09OQ0UoYm9uZC1cdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXHUwMDNlc2xhdmVfY250ICsgMSk7XG4gXHRuZXRkZXZfY29tcHV0ZV9tYXN0ZXJfdXBwZXJfZmVhdHVyZXMoYm9uZC1cdTAwM2VkZXYsIHRydWUpO1xuIFx0Ym9uZF9zZXRfY2Fycmllcihib25kKTtcbiBcbkBAIC0yMzMyLDYgKzIzMzEsOSBAQCBpbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldixcbiBcdFx0XHRicGZfcHJvZ19pbmMoYm9uZC1cdTAwM2V4ZHBfcHJvZyk7XG4gXHR9XG4gXG4rXHQvKiBJbmNyZWFzZSB0aGUgc2xhdmUgY291bnQgYmVmb3JlIHJlYnVpbGRpbmcgdGhlIHNsYXZlIGFycmF5cy4gKi9cbitcdFdSSVRFX09OQ0UoYm9uZC1cdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXHUwMDNlc2xhdmVfY250ICsgMSk7XG4rXG4gXHQvKiBicm9hZGNhc3QgbW9kZSB1c2VzIHRoZSBhbGxfc2xhdmVzIHRvIGxvb3AgdGhyb3VnaCBzbGF2ZXMuICovXG4gXHRpZiAoYm9uZF9tb2RlX2Nhbl91c2VfeG1pdF9oYXNoKGJvbmQpIHx8XG4gXHQgICAgQk9ORF9NT0RFKGJvbmQpID09IEJPTkRfTU9ERV9CUk9BRENBU1QpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDoyMDowNS42MzY1NDk3NTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU4NTA0NzY5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIEJvbmRpbmcgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIHRvIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5GaXJzdCwgSSBzZWUgYSBzbWFsbCBkaWZmLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHNpZ24uIEl0IGxvb2tzIGxpa2UgYSBtaW5vciBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBgYm9uZF9lbnNsYXZlYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgaW5jcmVtZW50ZWQgYGJvbmQtXHUwMDNlc2xhdmVfY250YCBiZWZvcmUgYG5ldGRldl9jb21wdXRlX21hc3Rlcl91cHBlcl9mZWF0dXJlc2AgYW5kIGBib25kX3NldF9jYXJyaWVyYC4gVGhlIHBhdGNoIG1vdmVzIHRoZSBgV1JJVEVfT05DRWAgY2FsbCB0aGF0IGluY3JlbWVudHMgYGJvbmQtXHUwMDNlc2xhdmVfY250YCAqYWZ0ZXIqIHRob3NlIGNhbGxzLCBidXQgYmVmb3JlIHRoZSBzbGF2ZSBhcnJheSByZWJ1aWxkLiBIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEknbGwgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guXG5cblRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoZSBkaWZmLCBhcm91bmQgbGluZXMgMjI4MC0yMzUwLCBzZWVtcyB0byBkZWFsIHdpdGggYWRkaW5nIGEgc2xhdmUgbmV0d29yayBkZXZpY2UgdG8gYSBib25kaW5nIGludGVyZmFjZS4gVGhlIGBib25kX2Vuc2xhdmVgIGZ1bmN0aW9uIGFwcGVhcnMgdG8gYmUgY2VudHJhbCB0byB0aGlzIHByb2Nlc3MuIFRoZSBjb2RlJ3MgY29tbWVudCBtZW50aW9ucyBicm9hZGNhc3QgbW9kZSB1c2luZyBgYWxsX3NsYXZlc2AgdG8gbG9vcCB0aHJvdWdoIHNsYXZlcywgc28gbWF5YmUgdGhlcmUncyBhIHJlYXNvbiBmb3IgdGhpcyBjaGFuZ2UuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGRlcGVuZGVuY2llcyBoZXJlLlxuXG5TbywgdGhlIGtleSBxdWVzdGlvbnMgYXJlOiBEb2VzIHRoaXMgcmVvcmRlcmluZyBpbnRyb2R1Y2UgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gcmVsYXRlZCB0byBgYm9uZC1cdTAwM2VzbGF2ZV9jbnRgIG9yIHRoZSBzbGF2ZSBhcnJheXMsIGV2ZW4gdHJhbnNpZW50bHk/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgaWYgb3RoZXIgdGhyZWFkcyBhY2Nlc3MgYGJvbmQtXHUwMDNlc2xhdmVfY250YCB3aGlsZSB0aGUgYXJyYXlzIGFyZSBiZWluZyByZWJ1aWx0PyBTcGVjaWZpY2FsbHksIGRvZXMgdGhlIHRpbWluZyBvZiB0aGUgaW5jcmVtZW50IG9mIGBib25kLVx1MDAzZXNsYXZlX2NudGAgYWZmZWN0IGFueSBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYnkgYG5ldGRldl9jb21wdXRlX21hc3Rlcl91cHBlcl9mZWF0dXJlc2AsIGBib25kX3NldF9jYXJyaWVyYCwgb3IgdGhlIGFycmF5IHJlYnVpbGQsIGV2ZW4gdGVtcG9yYXJpbHk/IERvZXMgdGhlIG5ldyBvcmRlciBpbnRyb2R1Y2UgYSB3aW5kb3cgd2hlcmUgYW4gaW5hY2N1cmF0ZSBzbGF2ZSBjb3VudCBjb3VsZCBjYXVzZSBpc3N1ZXM/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZXMgd2l0aCBvdGhlciB0aHJlYWRzIHRoYXQgbWF5IGJlIGFjY2Vzc2luZyB0aGUgYm9uZCBzdHJ1Y3R1cmUgY29uY3VycmVudGx5P1xuXG5JIHRoaW5rIEknbGwgd2FudCB0byBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhpcyBhcmVhLCBjb25zaWRlcmluZyBob3cgYW5kIHdoZW4gYGJvbmQtXHUwMDNlc2xhdmVfY250YCBpcyBhY2Nlc3NlZCwgYW5kIGlmIHRoZSBjb3VudCBiZWluZyB3cm9uZyBmb3IgYSBzaG9ydCBwZXJpb2QgY2F1c2VzIGFueSBwcm9ibGVtcy4gRGVwZW5kaW5nIG9uIHRoZSBhbnN3ZXIsIGEgZnV6emluZyBzZXNzaW9uIG1pZ2h0IGJlIG92ZXJraWxsLCBvciB0aGlzIGNoYW5nZSBjb3VsZCBiZSBhIHJpc2t5IHJlZmFjdG9yLiBUaGlzIG1pZ2h0IGJlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGEgY2FyZWZ1bCBjb2RlIHJldmlldyB3aXRoIGFuIGV5ZSB0b3dhcmRzIGNvbmN1cnJlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjM3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MjA6MTAuMjIxNjAwMTM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNzA6XFx0XFx0XFx0XFx0XFx0aWYgKGJvbmRfZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9QUk9NSVNDKVxcbjIyNzE6XFx0XFx0XFx0XFx0XFx0XFx0ZGV2X3NldF9wcm9taXNjdWl0eShzbGF2ZV9kZXYsIC0xKTtcXG4yMjcyOlxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyX3N5c2ZzX2RlbDtcXG4yMjczOlxcdFxcdFxcdFxcdH1cXG4yMjc0OlxcdFxcdFxcdH1cXG4yMjc1OlxcdFxcbjIyNzY6XFx0XFx0XFx0aWYgKGJvbmRfZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCkge1xcbjIyNzc6XFx0XFx0XFx0XFx0bmV0aWZfYWRkcl9sb2NrX2JoKGJvbmRfZGV2KTtcXG4yMjc4OlxcdFxcdFxcdFxcdGRldl9tY19zeW5jX211bHRpcGxlKHNsYXZlX2RldiwgYm9uZF9kZXYpO1xcbjIyNzk6XFx0XFx0XFx0XFx0ZGV2X3VjX3N5bmNfbXVsdGlwbGUoc2xhdmVfZGV2LCBib25kX2Rldik7XFxuMjI4MDpcXHRcXHRcXHRcXHRuZXRpZl9hZGRyX3VubG9ja19iaChib25kX2Rldik7XFxuMjI4MTpcXHRcXG4yMjgyOlxcdFxcdFxcdFxcdGlmIChCT05EX01PREUoYm9uZCkgPT0gQk9ORF9NT0RFXzgwMjNBRClcXG4yMjgzOlxcdFxcdFxcdFxcdFxcdGRldl9tY19hZGQoc2xhdmVfZGV2LCBsYWNwZHVfbWNhc3RfYWRkcik7XFxuMjI4NDpcXHRcXHRcXHR9XFxuMjI4NTpcXHRcXHR9XFxuMjI4NjpcXHRcXG4yMjg3OlxcdFxcdG5ldGRldl9jb21wdXRlX21hc3Rlcl91cHBlcl9mZWF0dXJlcyhib25kLVxcdTAwM2VkZXYsIHRydWUpO1xcbjIyODg6XFx0XFx0Ym9uZF9zZXRfY2Fycmllcihib25kKTtcXG4yMjg5OlxcdFxcbjIyOTA6XFx0XFx0LyogTmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSBib25kX3NlbGVjdF9hY3RpdmVfc2xhdmUoKSwgd2hpY2ggd2lsbFxcbjIyOTE6XFx0XFx0ICogcmVtb3ZlIHRoZSBtYWRkcnMgaWYgdGhlIHNsYXZlIGlzIHNlbGVjdGVkIGFzIGFjdGl2ZSBzbGF2ZS5cXG4yMjkyOlxcdFxcdCAqL1xcbjIyOTM6XFx0XFx0Ym9uZF9zbGF2ZV9uc19tYWRkcnNfYWRkKGJvbmQsIG5ld19zbGF2ZSk7XFxuMjI5NDpcXHRcXG4yMjk1OlxcdFxcdGlmIChib25kX3VzZXNfcHJpbWFyeShib25kKSkge1xcbjIyOTY6XFx0XFx0XFx0YmxvY2tfbmV0cG9sbF90eCgpO1xcbjIyOTc6XFx0XFx0XFx0Ym9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKGJvbmQpO1xcbjIyOTg6XFx0XFx0XFx0dW5ibG9ja19uZXRwb2xsX3R4KCk7XFxuMjI5OTpcXHRcXHR9XFxuMjMwMDpcXHRcXG4yMzAxOlxcdFxcdGlmICghc2xhdmVfZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fYnBmIHx8XFxuMjMwMjpcXHRcXHQgICAgIXNsYXZlX2Rldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3hkcF94bWl0KSB7XFxuMjMwMzpcXHRcXHRcXHRpZiAoYm9uZC1cXHUwMDNleGRwX3Byb2cpIHtcXG4yMzA0OlxcdFxcdFxcdFxcdFNMQVZFX05MX0VSUihib25kX2Rldiwgc2xhdmVfZGV2LCBleHRhY2ssXFxuMjMwNTpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJTbGF2ZSBkb2VzIG5vdCBzdXBwb3J0IFhEUFxcXCIpO1xcbjIzMDY6XFx0XFx0XFx0XFx0cmVzID0gLUVPUE5PVFNVUFA7XFxuMjMwNzpcXHRcXHRcXHRcXHRnb3RvIGVycl9zeXNmc19kZWw7XFxuMjMwODpcXHRcXHRcXHR9XFxuMjMwOTpcXHRcXHR9IGVsc2UgaWYgKGJvbmQtXFx1MDAzZXhkcF9wcm9nKSB7XFxuMjMxMDpcXHRcXHRcXHRzdHJ1Y3QgbmV0ZGV2X2JwZiB4ZHAgPSB7XFxuMjMxMTpcXHRcXHRcXHRcXHQuY29tbWFuZCA9IFhEUF9TRVRVUF9QUk9HLFxcbjIzMTI6XFx0XFx0XFx0XFx0LmZsYWdzICAgPSAwLFxcbjIzMTM6XFx0XFx0XFx0XFx0LnByb2cgICAgPSBib25kLVxcdTAwM2V4ZHBfcHJvZyxcXG4yMzE0OlxcdFxcdFxcdFxcdC5leHRhY2sgID0gZXh0YWNrLFxcbjIzMTU6XFx0XFx0XFx0fTtcXG4yMzE2OlxcdFxcbjIzMTc6XFx0XFx0XFx0aWYgKGRldl94ZHBfcHJvZ19jb3VudChzbGF2ZV9kZXYpIFxcdTAwM2UgMCkge1xcbjIzMTg6XFx0XFx0XFx0XFx0U0xBVkVfTkxfRVJSKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIGV4dGFjayxcXG4yMzE5OlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIlNsYXZlIGhhcyBYRFAgcHJvZ3JhbSBsb2FkZWQsIHBsZWFzZSB1bmxvYWQgYmVmb3JlIGVuc2xhdmluZ1xcXCIpO1xcbjIzMjA6XFx0XFx0XFx0XFx0cmVzID0gLUVPUE5PVFNVUFA7XFxuMjMyMTpcXHRcXHRcXHRcXHRnb3RvIGVycl9zeXNmc19kZWw7XFxuMjMyMjpcXHRcXHRcXHR9XFxuMjMyMzpcXHRcXG4yMzI0OlxcdFxcdFxcdHJlcyA9IGRldl94ZHBfcHJvcGFnYXRlKHNsYXZlX2RldiwgXFx1MDAyNnhkcCk7XFxuMjMyNTpcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2MgMCkge1xcbjIzMjY6XFx0XFx0XFx0XFx0LyogbmRvX2JwZigpIHNldHMgZXh0YWNrIGVycm9yIG1lc3NhZ2UgKi9cXG4yMzI3OlxcdFxcdFxcdFxcdHNsYXZlX2RiZyhib25kX2Rldiwgc2xhdmVfZGV2LCBcXFwiRXJyb3IgJWQgY2FsbGluZyBuZG9fYnBmXFxcXG5cXFwiLCByZXMpO1xcbjIzMjg6XFx0XFx0XFx0XFx0Z290byBlcnJfc3lzZnNfZGVsO1xcbjIzMjk6XFx0XFx0XFx0fVxcbjIzMzA6XFx0XFx0XFx0aWYgKGJvbmQtXFx1MDAzZXhkcF9wcm9nKVxcbjIzMzE6XFx0XFx0XFx0XFx0YnBmX3Byb2dfaW5jKGJvbmQtXFx1MDAzZXhkcF9wcm9nKTtcXG4yMzMyOlxcdFxcdH1cXG4yMzMzOlxcdFxcbjIzMzQ6XFx0XFx0LyogSW5jcmVhc2UgdGhlIHNsYXZlIGNvdW50IGJlZm9yZSByZWJ1aWxkaW5nIHRoZSBzbGF2ZSBhcnJheXMuICovXFxuMjMzNTpcXHRcXHRXUklURV9PTkNFKGJvbmQtXFx1MDAzZXNsYXZlX2NudCwgYm9uZC1cXHUwMDNlc2xhdmVfY250ICsgMSk7XFxuMjMzNjpcXHRcXG4yMzM3OlxcdFxcdC8qIGJyb2FkY2FzdCBtb2RlIHVzZXMgdGhlIGFsbF9zbGF2ZXMgdG8gbG9vcCB0aHJvdWdoIHNsYXZlcy4gKi9cXG4yMzM4OlxcdFxcdGlmIChib25kX21vZGVfY2FuX3VzZV94bWl0X2hhc2goYm9uZCkgfHxcXG4yMzM5OlxcdFxcdCAgICBCT05EX01PREUoYm9uZCkgPT0gQk9ORF9NT0RFX0JST0FEQ0FTVClcXG4yMzQwOlxcdFxcdFxcdGJvbmRfdXBkYXRlX3NsYXZlX2Fycihib25kLCBOVUxMKTtcXG4yMzQxOlxcdFxcbjIzNDI6XFx0XFx0Ym9uZF94ZHBfc2V0X2ZlYXR1cmVzKGJvbmRfZGV2KTtcXG4yMzQzOlxcdFxcbjIzNDQ6XFx0XFx0c2xhdmVfaW5mbyhib25kX2Rldiwgc2xhdmVfZGV2LCBcXFwiRW5zbGF2aW5nIGFzICVzIGludGVyZmFjZSB3aXRoICVzIGxpbmtcXFxcblxcXCIsXFxuMjM0NTpcXHRcXHRcXHQgICBib25kX2lzX2FjdGl2ZV9zbGF2ZShuZXdfc2xhdmUpID8gXFxcImFuIGFjdGl2ZVxcXCIgOiBcXFwiYSBiYWNrdXBcXFwiLFxcbjIzNDY6XFx0XFx0XFx0ICAgbmV3X3NsYXZlLVxcdTAwM2VsaW5rICE9IEJPTkRfTElOS19ET1dOID8gXFxcImFuIHVwXFxcIiA6IFxcXCJhIGRvd25cXFwiKTtcXG4yMzQ3OlxcdFxcbjIzNDg6XFx0XFx0LyogZW5zbGF2ZSBpcyBzdWNjZXNzZnVsICovXFxuMjM0OTpcXHRcXHRib25kX3F1ZXVlX3NsYXZlX2V2ZW50KG5ld19zbGF2ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjIwOjEwLjIyMjA3MjQ2NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzU4NTMyMjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFkZHJlc3NpbmcgYSBTdWJ0bGUgQm9uZCBFbnNsYXZlbWVudCBCdWcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBib25kX2Vuc2xhdmVgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGVyZSdzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGluY29uc2lzdGVuY3kgaW4gaG93IGBib25kLVx1MDAzZXNsYXZlX2NudGAgaXMgaW5jcmVtZW50ZWQuIFByZXZpb3VzbHksIHRoYXQgYFdSSVRFX09OQ0VgIGNhbGwgdG8gaW5jcmVtZW50IHRoZSBjb3VudGVyIHdhcyBoYXBwZW5pbmcgKmJlZm9yZSogdGhlIFhEUCBjaGVja3MgYW5kICpiZWZvcmUqIHdlIGNvdWxkIGp1bXAgdG8gYGVycl9zeXNmc19kZWxgLiBFc3NlbnRpYWxseSwgaWYgc29tZXRoaW5nIHdlbnQgd3JvbmcgYXQgbGluZXMgMjMwNywgMjMyMSwgb3IgMjMyOCDigJMgd2UgaGl0IGFuIGVycm9yIOKAkyBgc2xhdmVfY250YCB3b3VsZCBiZSBpbmNyZW1lbnRlZCwgYnV0IHRoZSBhY3R1YWwgZW5zbGF2ZW1lbnQgbmV2ZXIgaGFwcGVuZWQuIFRoaXMgY291bGQgbGVhdmUgdGhlIGNvdW50IG91dCBvZiBzeW5jIGR1cmluZyB0aGUgY2xlYW51cCBwcm9jZXNzLlxuXG5UaGUgZml4PyBNb3ZpbmcgdGhhdCBgV1JJVEVfT05DRWAgaW5jcmVtZW50IGRvd24gKmFmdGVyKiBYRFAgcHJvcGFnYXRpb24gYW5kIGp1c3QgYmVmb3JlIHRoZSBjYWxsIHRvIGBib25kX3VwZGF0ZV9zbGF2ZV9hcnIoKWAuIFRoaXMgd2F5LCB3ZSBvbmx5IGluY3JlbWVudCB0aGUgY291bnRlciBpZiB0aGUgWERQIHNldHVwIGlzIHN1Y2Nlc3NmdWwuIEl0IHNlZW1zIGxpa2UgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCB0byBwcmV2ZW50IHRoZSBwcmVtYXR1cmUgaW5jcmVtZW50IG9mIGBib25kLVx1MDAzZXNsYXZlX2NudGAgaWYgYGJvbmRfZW5zbGF2ZSgpYCBmYWlscyBkdXJpbmcgWERQIHNldHVwLlxuXG5Ob3csIEknbGwgcXVpY2tseSBjaGVjayB0aGUgYGVycl9zeXNmc19kZWxgIGNvZGUgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDoyMDoxMi45ODA2MDcyOTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM1MDpcXHRcXHRyZXR1cm4gMDtcXG4yMzUxOlxcdFxcbjIzNTI6XFx0LyogVW5kbyBzdGFnZXMgb24gZXJyb3IgKi9cXG4yMzUzOlxcdGVycl9zeXNmc19kZWw6XFxuMjM1NDpcXHRcXHRib25kX3N5c2ZzX3NsYXZlX2RlbChuZXdfc2xhdmUpO1xcbjIzNTU6XFx0XFxuMjM1NjpcXHRlcnJfdXBwZXJfdW5saW5rOlxcbjIzNTc6XFx0XFx0Ym9uZF91cHBlcl9kZXZfdW5saW5rKGJvbmQsIG5ld19zbGF2ZSk7XFxuMjM1ODpcXHRcXG4yMzU5OlxcdGVycl91bnJlZ2lzdGVyOlxcbjIzNjA6XFx0XFx0bmV0ZGV2X3J4X2hhbmRsZXJfdW5yZWdpc3RlcihzbGF2ZV9kZXYpO1xcbjIzNjE6XFx0XFxuMjM2MjpcXHRlcnJfZGV0YWNoOlxcbjIzNjM6XFx0XFx0dmxhbl92aWRzX2RlbF9ieV9kZXYoc2xhdmVfZGV2LCBib25kX2Rldik7XFxuMjM2NDpcXHRcXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGJvbmQtXFx1MDAzZXByaW1hcnlfc2xhdmUpID09IG5ld19zbGF2ZSlcXG4yMzY1OlxcdFxcdFxcdFJDVV9JTklUX1BPSU5URVIoYm9uZC1cXHUwMDNlcHJpbWFyeV9zbGF2ZSwgTlVMTCk7XFxuMjM2NjpcXHRcXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGJvbmQtXFx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKSA9PSBuZXdfc2xhdmUpIHtcXG4yMzY3OlxcdFxcdFxcdGJsb2NrX25ldHBvbGxfdHgoKTtcXG4yMzY4OlxcdFxcdFxcdGJvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZShib25kLCBOVUxMKTtcXG4yMzY5OlxcdFxcdFxcdGJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZShib25kKTtcXG4yMzcwOlxcdFxcdFxcdHVuYmxvY2tfbmV0cG9sbF90eCgpO1xcbjIzNzE6XFx0XFx0fVxcbjIzNzI6XFx0XFx0LyogZWl0aGVyIHByaW1hcnlfc2xhdmUgb3IgY3Vycl9hY3RpdmVfc2xhdmUgbWlnaHQndmUgY2hhbmdlZCAqL1xcbjIzNzM6XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuMjM3NDpcXHRcXHRzbGF2ZV9kaXNhYmxlX25ldHBvbGwobmV3X3NsYXZlKTtcXG4yMzc1OlxcdFxcbjIzNzY6XFx0ZXJyX2Nsb3NlOlxcbjIzNzc6XFx0XFx0aWYgKCFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKVxcbjIzNzg6XFx0XFx0XFx0c2xhdmVfZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjY9IH5JRkZfQk9ORElORztcXG4yMzc5OlxcdFxcdGRldl9jbG9zZShzbGF2ZV9kZXYpO1xcbjIzODA6XFx0XFxuMjM4MTpcXHRlcnJfcmVzdG9yZV9tYWM6XFxuMjM4MjpcXHRcXHRzbGF2ZV9kZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNj0gfklGRl9OT19BRERSQ09ORjtcXG4yMzgzOlxcdFxcdGlmICghYm9uZC1cXHUwMDNlcGFyYW1zLmZhaWxfb3Zlcl9tYWMgfHxcXG4yMzg0OlxcdFxcdCAgICBCT05EX01PREUoYm9uZCkgIT0gQk9ORF9NT0RFX0FDVElWRUJBQ0tVUCkge1xcbjIzODU6XFx0XFx0XFx0LyogWFhYIFRPRE8gLSBmb20gZm9sbG93IG1vZGUgbmVlZHMgdG8gY2hhbmdlIG1hc3RlcidzXFxuMjM4NjpcXHRcXHRcXHQgKiBNQUMgaWYgdGhpcyBzbGF2ZSdzIE1BQyBpcyBpbiB1c2UgYnkgdGhlIGJvbmQsIG9yIGF0XFxuMjM4NzpcXHRcXHRcXHQgKiBsZWFzdCBwcmludCBhIHdhcm5pbmcuXFxuMjM4ODpcXHRcXHRcXHQgKi9cXG4yMzg5OlxcdFxcdFxcdGJvbmRfaHdfYWRkcl9jb3B5KHNzLl9fZGF0YSwgbmV3X3NsYXZlLVxcdTAwM2VwZXJtX2h3YWRkcixcXG4yMzkwOlxcdFxcdFxcdFxcdFxcdCAgbmV3X3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWFkZHJfbGVuKTtcXG4yMzkxOlxcdFxcdFxcdHNzLnNzX2ZhbWlseSA9IHNsYXZlX2Rldi1cXHUwMDNldHlwZTtcXG4yMzkyOlxcdFxcdFxcdGRldl9zZXRfbWFjX2FkZHJlc3Moc2xhdmVfZGV2LCBcXHUwMDI2c3MsIE5VTEwpO1xcbjIzOTM6XFx0XFx0fVxcbjIzOTQ6XFx0XFxuMjM5NTpcXHRlcnJfcmVzdG9yZV9tdHU6XFxuMjM5NjpcXHRcXHRkZXZfc2V0X210dShzbGF2ZV9kZXYsIG5ld19zbGF2ZS1cXHUwMDNlb3JpZ2luYWxfbXR1KTtcXG4yMzk3OlxcdFxcbjIzOTg6XFx0ZXJyX2ZyZWU6XFxuMjM5OTpcXHRcXHRrb2JqZWN0X3B1dChcXHUwMDI2bmV3X3NsYXZlLVxcdTAwM2Vrb2JqKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MjA6MTIuOTgwOTgwMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NzY4NjExMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgYm9uZF9lbnNsYXZlKClgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHNwb3Qtb246IHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgbG9naWMgZXJyb3IuIGBlcnJfc3lzZnNfZGVsYCBhbmQgc3Vic2VxdWVudCBjbGVhbnVwIGFjdGlvbnMgZGlkbid0IGRlY3JlbWVudCBgYm9uZC1cdTAwM2VzbGF2ZV9jbnRgLiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIFhEUCBzZXR1cCBpbiBgYm9uZF9lbnNsYXZlKClgIGZhaWxlZCwgdGhlIGBib25kLVx1MDAzZXNsYXZlX2NudGAgd2FzIGxlZnQgcGVybWFuZW50bHkgaW5jcmVtZW50ZWQsIGxlYWRpbmcgdG8gYW4gaW5jb25zaXN0ZW50IGNvdW50ZXIg4oCTIGEgY2xhc3NpYyBzdGF0ZSBidWcuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIGV4cG9zZSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgYWJzb2x1dGVseSBub3QuIEkndmUgY2FyZWZ1bGx5IHNjcnV0aW5pemVkIHRoZSBjb2RlLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgYnVmZmVycyBhcmUgaW50cm9kdWNlZC4gQ3J1Y2lhbGx5LCBubyBgY29weV90b191c2VyYCBjYWxscyBvciBpbmZvcm1hdGlvbiBsZWFrIHBhdGhzIGFyZSB0b3VjaGVkIHRvIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIEZ1cnRoZXJtb3JlLCBubyBleGlzdGluZyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQuIFRoaXMgcGF0Y2ggaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcsIG1vdmluZyB0aGUgYFdSSVRFX09OQ0UoYm9uZC1cdTAwM2VzbGF2ZV9jbnQsIC4uLilgIGxpbmUgKmFmdGVyKiB0aGUgZmFpbHVyZSBwb2ludHMgaW4gYGJvbmRfZW5zbGF2ZSgpYC5cblxuTmV4dCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBuZWVkIGZvciBLTVNBTi4gSSBrbm93IHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTjsgS0FTQU4gZGVhbHMgd2l0aCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIFVBRiwgZXRjLikgYW5kIGxvY2tkZXAgaGFuZGxlcyBsb2NraW5nIGlzc3Vlcy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcy4gU2luY2UgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLCBgTmVlZHNLTVNBTmAgaXMgY2xlYXJseSBmYWxzZS5cblxuVG8gcmVpbmZvcmNlIHRoaXMsIEkgcmUtZXhhbWluZWQgdGhlIGNyaXRlcmlhIGZvciBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgLiBOb25lIG9mIHRob3NlIGNvbmRpdGlvbnMgYXJlIG1ldDogdGhlIHBhdGNoIGRvZXNuJ3QgaW52b2x2ZSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIGRvZXNuJ3QgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2Vzbid0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQsIGFuZCBpdCBkb2Vzbid0IG1hbmlwdWxhdGUgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYmVpbmcgYWNjZXNzZWQuXG5cbkNvbnZlcnNlbHksIHRoZSBjcml0ZXJpYSBmb3IgYE5lZWRzS01TQU49ZmFsc2VgIGFyZSBwZXJmZWN0bHkgc2F0aXNmaWVkLiBUaGUgY29kZSBjaGFuZ2VzIG1haW5seSBhZGRyZXNzIHRoZSBjb3VudGVyIGlzc3VlIGFuZCB0aGV5IGRvIG5vdCBpbnRyb2R1Y2Ugcmlza3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBBbGwgdG91Y2hlZCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIG9yIHplcm9lZCBiZWZvcmUgYW55IHJlYWQgb3IgY29weSBvcGVyYXRpb24uXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU49ZmFsc2VgIGlzIHRoZSBkZWZpbml0aXZlIGNvbmNsdXNpb24uIEknbSByZWFkeSB0byBkb2N1bWVudCB0aGUgcmVhc29uaW5nIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MTIsIk91dHB1dFRva2VucyI6MjAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MjA6MjAuNzQ5NTk0OTk4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYm9uZF9lbnNsYXZlKClgIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCBieSBkZWZlcnJpbmcgdGhlIGluY3JlbWVudCBvZiBgYm9uZC1cXHUwMDNlc2xhdmVfY250YCAoYFdSSVRFX09OQ0UoYm9uZC1cXHUwMDNlc2xhdmVfY250LCBib25kLVxcdTAwM2VzbGF2ZV9jbnQgKyAxKWApIHVudGlsIGFmdGVyIHBvdGVudGlhbCBlcnJvciBwYXRocyBkdXJpbmcgWERQIGNvbmZpZ3VyYXRpb24gY2hlY2tzLiBUaGlzIHByZXZlbnRzIGBib25kLVxcdTAwM2VzbGF2ZV9jbnRgIGZyb20gYmVjb21pbmcgZGVzeW5jaHJvbml6ZWQvaW5jb25zaXN0ZW50IHdoZW4gZW5zbGF2aW5nIGEgZGV2aWNlIGZhaWxzIGluIGBib25kX2Vuc2xhdmUoKWAuXFxuXFxuVGhlIGNoYW5nZSBpcyBzdHJpY3RseSBjb250cm9sLWZsb3cgYW5kIHN0YXRlLWNvdW50ZXIgbWFuYWdlbWVudC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29weV90b191c2VyL2luZm8tbGVhayBwYXRocywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFN0YW5kYXJkIHRlc3Rpbmcgd2l0aCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyBpcyBzdWZmaWNpZW50OyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBib25kX2Vuc2xhdmUoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIGJ5IGRlZmVycmluZyB0aGUgaW5jcmVtZW50IG9mIGBib25kLVxcdTAwM2VzbGF2ZV9jbnRgIChgV1JJVEVfT05DRShib25kLVxcdTAwM2VzbGF2ZV9jbnQsIGJvbmQtXFx1MDAzZXNsYXZlX2NudCArIDEpYCkgdW50aWwgYWZ0ZXIgcG90ZW50aWFsIGVycm9yIHBhdGhzIGR1cmluZyBYRFAgY29uZmlndXJhdGlvbiBjaGVja3MuIFRoaXMgcHJldmVudHMgYGJvbmQtXFx1MDAzZXNsYXZlX2NudGAgZnJvbSBiZWNvbWluZyBkZXN5bmNocm9uaXplZC9pbmNvbnNpc3RlbnQgd2hlbiBlbnNsYXZpbmcgYSBkZXZpY2UgZmFpbHMgaW4gYGJvbmRfZW5zbGF2ZSgpYC5cXG5cXG5UaGUgY2hhbmdlIGlzIHN0cmljdGx5IGNvbnRyb2wtZmxvdyBhbmQgc3RhdGUtY291bnRlciBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb3B5X3RvX3VzZXIvaW5mby1sZWFrIHBhdGhzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGlzIHN1ZmZpY2llbnQ7IHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowpkc79[1] Phase: Succeeded StartedAt: 2026-09-07 10:20:32 +0000 UTC FinishedAt: 2026-09-07 10:20:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 10:20:32 +0000 UTC FinishedAt: 2026-09-07 10:20:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2] Phase: Succeeded StartedAt: 2026-09-07 10:20:32 +0000 UTC FinishedAt: 2026-09-07 14:01:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 10:20:32 +0000 UTC FinishedAt: 2026-09-07 14:01:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 10:20:32 +0000 UTC FinishedAt: 2026-09-07 10:20:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 10:20:32 +0000 UTC FinishedAt: 2026-09-07 10:20:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpkc79/series-workflowpkc79-convert-artifact-3895509394/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 10:20:42 +0000 UTC FinishedAt: 2026-09-07 10:37:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 10:20:42 +0000 UTC FinishedAt: 2026-09-07 10:37:02 +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:*9962df0c-c3ec-449d-a725-05f4e0afa0b1,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-workflowpkc79/series-workflowpkc79-convert-artifact-3895509394/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": "6358fcfd-92c6-4a5a-bccc-859723b72db9", "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-workflowpkc79/series-workflowpkc79-build-action-2018198288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 10:20:42 +0000 UTC FinishedAt: 2026-09-07 10:36:52 +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:*9962df0c-c3ec-449d-a725-05f4e0afa0b1,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-workflowpkc79/series-workflowpkc79-convert-artifact-3895509394/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": "6358fcfd-92c6-4a5a-bccc-859723b72db9", "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-workflowpkc79/series-workflowpkc79-build-action-2018198288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 10:37:02 +0000 UTC FinishedAt: 2026-09-07 10:37:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 10:37:02 +0000 UTC FinishedAt: 2026-09-07 10:37:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 10:37:02 +0000 UTC FinishedAt: 2026-09-07 10:37:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 10:37:02 +0000 UTC FinishedAt: 2026-09-07 10:37:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpkc79/series-workflowpkc79-convert-artifact-227351725/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 10:37:13 +0000 UTC FinishedAt: 2026-09-07 10:38:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 10:37:13 +0000 UTC FinishedAt: 2026-09-07 10:38:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6358fcfd-92c6-4a5a-bccc-859723b72db9,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-workflowpkc79/series-workflowpkc79-build-action-2018198288/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-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 10:38:49 +0000 UTC FinishedAt: 2026-09-07 10:38:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 10:38:49 +0000 UTC FinishedAt: 2026-09-07 10:38:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 10:38:49 +0000 UTC FinishedAt: 2026-09-07 10:56:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 10:38:49 +0000 UTC FinishedAt: 2026-09-07 10:56:03 +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:*9962df0c-c3ec-449d-a725-05f4e0afa0b1,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-workflowpkc79/series-workflowpkc79-convert-artifact-227351725/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": "897d2dc7-d7ae-4cf8-8fc9-c0ff6006017c", "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-workflowpkc79/series-workflowpkc79-build-action-4275134729/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 10:38:49 +0000 UTC FinishedAt: 2026-09-07 10:55:53 +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:*9962df0c-c3ec-449d-a725-05f4e0afa0b1,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-workflowpkc79/series-workflowpkc79-convert-artifact-227351725/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": "897d2dc7-d7ae-4cf8-8fc9-c0ff6006017c", "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-workflowpkc79/series-workflowpkc79-build-action-4275134729/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 10:56:03 +0000 UTC FinishedAt: 2026-09-07 10:56:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 10:56:03 +0000 UTC FinishedAt: 2026-09-07 10:56:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 10:56:03 +0000 UTC FinishedAt: 2026-09-07 10:58:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 10:56:03 +0000 UTC FinishedAt: 2026-09-07 10:57:56 +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:*897d2dc7-d7ae-4cf8-8fc9-c0ff6006017c,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-workflowpkc79/series-workflowpkc79-build-action-4275134729/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-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 10:58:06 +0000 UTC FinishedAt: 2026-09-07 14:01:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 10:58:06 +0000 UTC FinishedAt: 2026-09-07 14:01:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*6358fcfd-92c6-4a5a-bccc-859723b72db9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*897d2dc7-d7ae-4cf8-8fc9-c0ff6006017c,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-workflowpkc79/series-workflowpkc79-build-action-2018198288/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-workflowpkc79/series-workflowpkc79-build-action-4275134729/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 10:58:06 +0000 UTC FinishedAt: 2026-09-07 10:58:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 10:58:06 +0000 UTC FinishedAt: 2026-09-07 10:58:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpkc79/series-workflowpkc79-convert-artifact-1925167122/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[10].run-retest Phase: Succeeded StartedAt: 2026-09-07 10:58:06 +0000 UTC FinishedAt: 2026-09-07 11:14:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:retest-data,Default:nil,Value:*{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*6358fcfd-92c6-4a5a-bccc-859723b72db9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*897d2dc7-d7ae-4cf8-8fc9-c0ff6006017c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,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-workflowpkc79/series-workflowpkc79-build-action-2018198288/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-workflowpkc79/series-workflowpkc79-build-action-4275134729/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[10].run-retest[0] Phase: Succeeded StartedAt: 2026-09-07 10:58:06 +0000 UTC FinishedAt: 2026-09-07 10:58:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[10].run-retest[0].save-retest-task Phase: Succeeded StartedAt: 2026-09-07 10:58:06 +0000 UTC FinishedAt: 2026-09-07 10:58:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},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-workflowpkc79/series-workflowpkc79-convert-artifact-3515769937/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 10:58:06 +0000 UTC FinishedAt: 2026-09-07 10:58:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 10:58:06 +0000 UTC FinishedAt: 2026-09-07 10:58:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 10:58:16 +0000 UTC FinishedAt: 2026-09-07 14:01:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 10:58:16 +0000 UTC FinishedAt: 2026-09-07 14:00:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6358fcfd-92c6-4a5a-bccc-859723b72db9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*897d2dc7-d7ae-4cf8-8fc9-c0ff6006017c,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-workflowpkc79/series-workflowpkc79-build-action-2018198288/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-workflowpkc79/series-workflowpkc79-build-action-4275134729/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-workflowpkc79/series-workflowpkc79-convert-artifact-1925167122/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,} --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[10].run-retest[1] Phase: Succeeded StartedAt: 2026-09-07 10:58:16 +0000 UTC FinishedAt: 2026-09-07 11:14:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkc79[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a5e03719-4a21-4d95-8d29-8cd3fcdd4bd8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:{"findings":["abcea6f7-092c-48e4-8137-756a0ff617ba"]},track:KASAN)[10].run-retest[1].retest Phase: Succeeded StartedAt: 2026-09-07 10:58:16 +0000 UTC FinishedAt: 2026-09-07 11:14:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6358fcfd-92c6-4a5a-bccc-859723b72db9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*897d2dc7-d7ae-4cf8-8fc9-c0ff6006017c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Previous reproducers,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-workflowpkc79/series-workflowpkc79-build-action-2018198288/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-workflowpkc79/series-workflowpkc79-build-action-4275134729/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:retest-task,Path:/data/retest.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-workflowpkc79/series-workflowpkc79-convert-artifact-3515769937/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,}