Name: series-workflow6xbxv Phase: Succeeded StartedAt: 2026-08-20 11:29:52 +0000 UTC FinishedAt: 2026-08-20 13:33:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[0] Phase: Succeeded StartedAt: 2026-08-20 11:29:52 +0000 UTC FinishedAt: 2026-08-20 12:00:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 11:29:52 +0000 UTC FinishedAt: 2026-08-20 12:00:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "61eb236c41c2a4717015dff18016a75a5eb90052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_FREESCALE", "FEC", "COMPILE_TEST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "61eb236c41c2a4717015dff18016a75a5eb90052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_FREESCALE", "FEC", "COMPILE_TEST" ], "series_id": "3ae3530c-ffc0-41a7-8082-6acbf61bdf9e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fec_ptp_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDExOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfRlJFRVNDQUxFJiMzNDssCiAgICAmIzM0O0ZFQyYjMzQ7LAogICAgJiMzNDtDT01QSUxFX1RFU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmZWNfcHRwX2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgZnVuY3Rpb24gb2YgdGhlIEZyZWVzY2FsZSBGRUMgZXRoZXJuZXQgZHJpdmVyLiBJdCBjaGFuZ2VzIGBmZWNfcHRwX2luaXRgIHRvIHJldHVybiBhbiBpbnRlZ2VyIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBgdm9pZGAsIGFsbG93aW5nIGl0IHRvIHByb3BhZ2F0ZSBlcnJvcnMgZnJvbSBJUlEgcmVxdWVzdHMgYW5kIFBUUCBjbG9jayByZWdpc3RyYXRpb24uIFRoZSBgZmVjX3Byb2JlYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlIGFuZCBqdW1wIHRvIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBoYW5kbGluZyBsYWJlbC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBlcnJvciBwcm9wYWdhdGlvbiwgd2hpY2ggZG8gbm90IHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyB0byBmZWNfcHRwX2luaXQgYW5kIHByb3BhZ2F0ZXMgdGhlIGVycm9yIHRvIGZlY19wcm9iZSwgd2hpY2ggbm93IGFib3J0cyBpbml0aWFsaXphdGlvbiBpZiBQVFAgc2V0dXAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZHJpdmVyIHByb2JlIHBhdGggdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBwcm9wZXIgcmVzb3VyY2UgY2xlYW51cCBvbiBmYWlsdXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDExOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2Y4Y2Q4YTMyYmZjNDQ4MzRkMTA3YzM4YjhjMTg4MTg4MTU4YzE4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDExOjU3OjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaFxuaW5kZXggNzE3NjgwMzE0NmYzZC4uODgzMWRhMzczMjZiMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlYy5oXG5AQCAtNjkyLDcgJiM0Mzs2OTIsNyBAQCBzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSB7XG4gXHR1NjQgZXRodG9vbF9zdGF0c1tdO1xuIH07XG4gXG4tdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpO1xuJiM0MztpbnQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KTtcbiB2b2lkIGZlY19wdHBfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKTtcbiB2b2lkIGZlY19wdHBfc2F2ZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKTtcbiB2b2lkIGZlY19wdHBfc3RvcChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jXG5pbmRleCBjZWQ0ZGJmOGNkOTBmLi5iNmMyMmQ2YzFlNjlhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jXG5AQCAtNTM4NCw4ICYjNDM7NTM4NCwxMSBAQCBmZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0Z290byBmYWlsZWRfcmVzZXQ7XG4gXG4gXHRpcnFfY250ID0gZmVjX2VuZXRfZ2V0X2lycV9jbnQocGRldik7XG4tXHRpZiAoZmVwLVx1MDAzZWJ1ZmRlc2NfZXgpXG4tXHRcdGZlY19wdHBfaW5pdChwZGV2LCBpcnFfY250KTtcbiYjNDM7XHRpZiAoZmVwLVx1MDAzZWJ1ZmRlc2NfZXgpIHtcbiYjNDM7XHRcdHJldCA9IGZlY19wdHBfaW5pdChwZGV2LCBpcnFfY250KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gZmFpbGVkX3Jlc2V0O1xuJiM0MztcdH1cbiBcbiBcdHJldCA9IGZlY19lbmV0X2luaXQobmRldik7XG4gXHRpZiAocmV0KVxuQEAgLTU0NTcsNyAmIzQzOzU0NjAsOCBAQCBmZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBmYWlsZWRfaXJxOlxuIFx0ZmVjX2VuZXRfZGVpbml0KG5kZXYpO1xuIGZhaWxlZF9pbml0OlxuLVx0ZmVjX3B0cF9zdG9wKHBkZXYpO1xuJiM0MztcdGlmIChmZXAtXHUwMDNlYnVmZGVzY19leClcbiYjNDM7XHRcdGZlY19wdHBfc3RvcChwZGV2KTtcbiBmYWlsZWRfcmVzZXQ6XG4gXHRwbV9ydW50aW1lX3B1dF9ub2lkbGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFx0cG1fcnVudGltZV9kaXNhYmxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY1xuaW5kZXggNTY4MDFjMjAwOWQ1OS4uOGFkNjgwNDExYjBjMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmNcbkBAIC03MzYsNyAmIzQzOzczNiw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBmZWNfcHBzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4gICogY3ljbGVjb3VudGVyIGluaXQgcm91dGluZSBhbmQgZXhpdHMuXG4gICovXG4gXG4tdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpXG4mIzQzO2ludCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcdHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbkBAIC03NzksMjYgJiM0Mzs3NzksMjkgQEAgdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpXG4gXHRcdCAgICAgIEhSVElNRVJfTU9ERV9SRUwpO1xuIFxuIFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWVfb3B0aW9uYWwocGRldiwgXCYjMzQ7cHBzXCYjMzQ7KTtcbi1cdGlmIChpcnEgXHUwMDNjIDApXG4mIzQzO1x0aWYgKGlycSBcdTAwM2MgMCkge1xuIFx0XHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX29wdGlvbmFsKHBkZXYsIGlycV9pZHgpO1xuLVx0LyogRmFpbHVyZSB0byBnZXQgYW4gaXJxIGlzIG5vdCBmYXRhbCxcbi1cdCAqIG9ubHkgdGhlIFBUUF9DTE9DS19QUFMgY2xvY2sgZXZlbnRzIHNob3VsZCBzdG9wXG4tXHQgKi9cbi1cdGlmIChpcnEgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRpZiAoaXJxIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBpcnEgIT0gLUVOWElPKVxuJiM0MztcdFx0XHRyZXR1cm4gaXJxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlycSBcdTAwM2UgMCkge1xuIFx0XHRyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBpcnEsIGZlY19wcHNfaW50ZXJydXB0LFxuIFx0XHRcdFx0ICAgICAgIDAsIHBkZXYtXHUwMDNlbmFtZSwgbmRldik7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3JlcXVlc3QgZm9yIHBwcyBpcnEgZmFpbGVkKCVkKVxcblwmIzM0Oyxcbi1cdFx0XHRcdCByZXQpO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0ZmVwLVx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZmZXAtXHUwMDNlcHRwX2NhcHMsIFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcdGlmIChJU19FUlIoZmVwLVx1MDAzZXB0cF9jbG9jaykpIHtcbiBcdFx0ZmVwLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4gXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3B0cF9jbG9ja19yZWdpc3RlciBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZmVwLVx1MDAzZXB0cF9jbG9jayk7XG4gXHR9XG4gXG4gXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2ZmVwLVx1MDAzZXRpbWVfa2VlcCwgSFopO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gdm9pZCBmZWNfcHRwX3NhdmVfc3RhdGUoc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMTo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9GUkVFU0NBTEUmIzM0OywKICAgICYjMzQ7RkVDJiMzNDssCiAgICAmIzM0O0NPTVBJTEVfVEVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZlY19wdHBfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZlY19wdHBfaW5pdCBhbmQgcHJvcGFnYXRlcyB0aGUgZXJyb3IgdG8gZmVjX3Byb2JlLCB3aGljaCBub3cgYWJvcnRzIGluaXRpYWxpemF0aW9uIGlmIFBUUCBzZXR1cCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIgcHJvYmUgcGF0aCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciByZXNvdXJjZSBjbGVhbnVwIG9uIGZhaWx1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZjhjZDhhMzJiZmM0NDgzNGQxMDdjMzhiOGMxODgxODgxNThjMThhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMTE6NTc6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjLmgKaW5kZXggNzE3NjgwMzE0NmYzZC4uODgzMWRhMzczMjZiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaApAQCAtNjkyLDcgJiM0Mzs2OTIsNyBAQCBzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSB7CiAJdTY0IGV0aHRvb2xfc3RhdHNbXTsKIH07CiAKLXZvaWQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KTsKJiM0MztpbnQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KTsKIHZvaWQgZmVjX3B0cF9yZXN0b3JlX3N0YXRlKHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXApOwogdm9pZCBmZWNfcHRwX3NhdmVfc3RhdGUoc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCk7CiB2b2lkIGZlY19wdHBfc3RvcChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMKaW5kZXggY2VkNGRiZjhjZDkwZi4uYjZjMjJkNmMxZTY5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMKQEAgLTUzODQsOCAmIzQzOzUzODQsMTEgQEAgZmVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCWdvdG8gZmFpbGVkX3Jlc2V0OwogCiAJaXJxX2NudCA9IGZlY19lbmV0X2dldF9pcnFfY250KHBkZXYpOwotCWlmIChmZXAtJmd0O2J1ZmRlc2NfZXgpCi0JCWZlY19wdHBfaW5pdChwZGV2LCBpcnFfY250KTsKJiM0MzsJaWYgKGZlcC0mZ3Q7YnVmZGVzY19leCkgewomIzQzOwkJcmV0ID0gZmVjX3B0cF9pbml0KHBkZXYsIGlycV9jbnQpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIGZhaWxlZF9yZXNldDsKJiM0MzsJfQogCiAJcmV0ID0gZmVjX2VuZXRfaW5pdChuZGV2KTsKIAlpZiAocmV0KQpAQCAtNTQ1Nyw3ICYjNDM7NTQ2MCw4IEBAIGZlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogZmFpbGVkX2lycToKIAlmZWNfZW5ldF9kZWluaXQobmRldik7CiBmYWlsZWRfaW5pdDoKLQlmZWNfcHRwX3N0b3AocGRldik7CiYjNDM7CWlmIChmZXAtJmd0O2J1ZmRlc2NfZXgpCiYjNDM7CQlmZWNfcHRwX3N0b3AocGRldik7CiBmYWlsZWRfcmVzZXQ6CiAJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKIAlwbV9ydW50aW1lX2Rpc2FibGUoJmFtcDtwZGV2LSZndDtkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmMKaW5kZXggNTY4MDFjMjAwOWQ1OS4uOGFkNjgwNDExYjBjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jCkBAIC03MzYsNyAmIzQzOzczNiw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBmZWNfcHBzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiAgKiBjeWNsZWNvdW50ZXIgaW5pdCByb3V0aW5lIGFuZCBleGl0cy4KICAqLwogCi12b2lkIGZlY19wdHBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXJxX2lkeCkKJiM0MztpbnQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtNzc5LDI2ICYjNDM7Nzc5LDI5IEBAIHZvaWQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KQogCQkgICAgICBIUlRJTUVSX01PREVfUkVMKTsKIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lX29wdGlvbmFsKHBkZXYsICYjMzQ7cHBzJiMzNDspOwotCWlmIChpcnEgJmx0OyAwKQomIzQzOwlpZiAoaXJxICZsdDsgMCkgewogCQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX29wdGlvbmFsKHBkZXYsIGlycV9pZHgpOwotCS8qIEZhaWx1cmUgdG8gZ2V0IGFuIGlycSBpcyBub3QgZmF0YWwsCi0JICogb25seSB0aGUgUFRQX0NMT0NLX1BQUyBjbG9jayBldmVudHMgc2hvdWxkIHN0b3AKLQkgKi8KLQlpZiAoaXJxICZndDs9IDApIHsKJiM0MzsJCWlmIChpcnEgJmx0OyAwICZhbXA7JmFtcDsgaXJxICE9IC1FTlhJTykKJiM0MzsJCQlyZXR1cm4gaXJxOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpcnEgJmd0OyAwKSB7CiAJCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJmFtcDtwZGV2LSZndDtkZXYsIGlycSwgZmVjX3Bwc19pbnRlcnJ1cHQsCiAJCQkJICAgICAgIDAsIHBkZXYtJmd0O25hbWUsIG5kZXYpOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWRldl93YXJuKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3JlcXVlc3QgZm9yIHBwcyBpcnEgZmFpbGVkKCVkKVxuJiMzNDssCi0JCQkJIHJldCk7CiYjNDM7CQkJcmV0dXJuIHJldDsKIAl9CiAKIAlmZXAtJmd0O3B0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcigmYW1wO2ZlcC0mZ3Q7cHRwX2NhcHMsICZhbXA7cGRldi0mZ3Q7ZGV2KTsKIAlpZiAoSVNfRVJSKGZlcC0mZ3Q7cHRwX2Nsb2NrKSkgewogCQlmZXAtJmd0O3B0cF9jbG9jayA9IE5VTEw7CiAJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7cHRwX2Nsb2NrX3JlZ2lzdGVyIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIoZmVwLSZndDtwdHBfY2xvY2spOwogCX0KIAogCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO2ZlcC0mZ3Q7dGltZV9rZWVwLCBIWik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiB2b2lkIGZlY19wdHBfc2F2ZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTc2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEZyZWVzY2FsZSBGRUMgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIHRoZSBGcmVlc2NhbGUgRmFzdCBFdGhlcm5ldCBDb250cm9sbGVyIChGRUMpIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhbHRlcmluZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG9mIGBmZWNfcHRwX2luaXRgIGluIGBmZWNfcHRwLmNgLCBtYWtpbmcgaXQgcmV0dXJuIGFuIGBpbnRgIGluc3RlYWQgb2YgYHZvaWRgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGVycm9yIGhhbmRsaW5nLXJlbGF0ZWQsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLiBUaGUgY29ycmVzcG9uZGluZyB1cGRhdGUgdG8gYGZlY19wcm9iZWAgaW4gYGZlY19tYWluLmNgIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlIGNvbmZpcm1zIHRoYXQgc3VzcGljaW9uLiBUaGlzIG1lYW5zIHRoZSBwcm9iZSBmdW5jdGlvbiB3aWxsIG5vdyBhY3RpdmVseSBoYW5kbGUgZXJyb3JzIGZyb20gdGhlIFBUUCBpbml0aWFsaXphdGlvbiwgaW1wcm92aW5nIG92ZXJhbGwgcm9idXN0bmVzcywgYW5kIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGRldGFpbCBJJiMzOTttIGxvb2tpbmcgZm9yIGluIGRyaXZlciB1cGRhdGVzLgoKTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaG93IHJlbGV2YW50IGlzIHRoaXMgY2hhbmdlIGluIGEgY29tbW9uIHRlc3RpbmcgZW52aXJvbm1lbnQ/IFRoZSBkcml2ZXIgaXRzZWxmIGlzIGNsZWFybHkgZm9yIEZyZWVzY2FsZSBGRUMgaGFyZHdhcmUuIEdpdmVuIHRoZSB1YmlxdWl0eSBvZiBRRU1VIGZvciB2aXJ0dWFsaXphdGlvbiwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgZHJpdmVyIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBRRU1VIGluc3RhbmNlPyBRRU1VLCBvZiBjb3Vyc2UsIGhhcyBhbiBgaW14LmZlY2AgZGV2aWNlIChkZWZpbmVkIGluIGBpbXhfZmVjLmNgKSwgc28gdGhhdCBzb3VuZHMgbGlrZSBhIGdvb2QgbGVhZCB0byBmb2xsb3cuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0byBzZWUgaWYgYGZlY19wcm9iZWAgaXMgYWN0dWFsbHkgaW52b2tlZC4gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBkcml2ZXIsIHNvIGlmIHdlIGNhbiB0cmlnZ2VyIHRoZSBwcm9iZSwgdGhlbiB0aGUgY2hhbmdlcyBhcmUgYXQgbGVhc3QgdGVzdGFibGUuIEdpdmVuIHRoYXQgaXQmIzM5O3MgZm9yIHRoZSBGcmVlc2NhbGUgRkVDLCB0aGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IEtjb25maWcgb3B0aW9ucyBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIGJlIHN1cmUgdGhlIGRyaXZlciBpcyBidWlsdCBhbmQgYWNjZXNzaWJsZSBpbiB0aGUgY29uZmlndXJhdGlvbnMgSSB0eXBpY2FsbHkgdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDExOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGRUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz0yMT1pZiBORVRfVkVORE9SX0ZSRUVTQ0FMRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzoyMzpjb25maWcgRkVDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0yNC1cdHRyaXN0YXRlIFwmIzM0O0ZFQyBldGhlcm5ldCBjb250cm9sbGVyIChvZiBDb2xkRmlyZSBhbmQgc29tZSBpLk1YIENQVXMpXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzozOTpjb25maWcgRkVDX01QQzUyeHhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTQwLVx0dHJpc3RhdGUgXCYjMzQ7RkVDIE1QQzUyeHggZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzo1MDpjb25maWcgRkVDX01QQzUyeHhfTURJT1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNTEtXHRib29sIFwmIzM0O0ZFQyBNUEM1Mnh4IE1ESU8gYnVzIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDExOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipGRUMgRHJpdmVyIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBzb21ldGhpbmcgdGhhdCBzZWVtcyB0byBpbnZvbHZlIGEgZHJpdmVyIGNhbGxlZCBgRkVDYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuJiMzNDsgVGhlIHRleHQgcG9pbnRzIG91dCB0aGF0IGBGRUNgIHJlbGllcyBvbiBgTkVUX1ZFTkRPUl9GUkVFU0NBTEVgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIGEgbmV0d29yayBkcml2ZXIgcmVsYXRlZCB0byBGcmVlc2NhbGUgKG5vdyBOWFApIGhhcmR3YXJlLiBNeSBuZXh0IHN0ZXA/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQgZm9yIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBjaGVjayB0aGUgYEtjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY3kgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgYEZFQ2AgZHJpdmVyIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBtaWdodCBiZSByZWxldmFudCB0byBpdHMgYmVoYXZpb3IuIExldCYjMzk7cyBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRkVDJCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnPTIxPWlmIE5FVF9WRU5ET1JfRlJFRVNDQUxFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0yMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjIzOmNvbmZpZyBGRUNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7RkVDIGV0aGVybmV0IGNvbnRyb2xsZXIgKG9mIENvbGRGaXJlIGFuZCBzb21lIGkuTVggQ1BVcylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzQwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRkVDJiMzOTtzIEtjb25maWcgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIHRoZSBGRUMgKEZsZXhpYmxlIEV0aGVybmV0IENvbnRyb2xsZXIpLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgaXQmIzM5O3MgY29uZmlndXJlZCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIHNlZSBLY29uZmlnIGZvciBGRUMuJiMzNDsgVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBidWlsZCBmbGFncywgdGhlIGRldmljZSB0cmVlIGludGVncmF0aW9uIHBvaW50c+KApiBldmVyeXRoaW5nIHRoYXQgc2hhcGVzIGhvdyB0aGlzIHNwZWNpZmljIEZFQyBpbnN0YW5jZSB3aWxsIGJlaGF2ZSBpbiBhIHN5c3RlbS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3R1ZmYgLSBjbG9jayBjb25maWd1cmF0aW9ucywgaW50ZXJydXB0IHNldHRpbmdzLCBQSFkgc3VwcG9ydCwgbWF5YmUgc29tZSBhZHZhbmNlZCBmZWF0dXJlcyBsaWtlIERNQSBzZXR0aW5ncyBvciBWTEFOIGhhbmRsaW5nLiBCdXQgSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgZm9yIGFueXRoaW5nIHZlbmRvci1zcGVjaWZpYyBvciBhbnkgdW51c3VhbCBhcmNoaXRlY3R1cmFsIGNob2ljZXMgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgaW50ZWdyYXRpb24uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9ucyBhbmQgYXNzZXNzIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGFyZWFzIGZvciBjdXN0b21pemF0aW9uIGJlZm9yZSBJIHN0YXJ0IGJ1aWxkaW5nIG9yIGRlYnVnZ2luZyBhbnkgRkVDLWRlcGVuZGVudCBkcml2ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDExOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0XG4gIDIxOlx0aWYgTkVUX1ZFTkRPUl9GUkVFU0NBTEVcbiAgMjI6XHRcbiAgMjM6XHRjb25maWcgRkVDXG4gIDI0Olx0XHR0cmlzdGF0ZSBcJiMzNDtGRUMgZXRoZXJuZXQgY29udHJvbGxlciAob2YgQ29sZEZpcmUgYW5kIHNvbWUgaS5NWCBDUFVzKVwmIzM0O1xuICAyNTpcdFx0ZGVwZW5kcyBvbiAoTTUyM3ggfHwgTTUyN3ggfHwgTTUyNzIgfHwgTTUyOHggfHwgTTUyMHggfHwgTTUzMnggfHwgXFxcbiAgMjY6XHRcdFx0ICAgQVJDSF9NWEMgfHwgQVJDSF9TMzIgfHwgU09DX0lNWDI4IHx8IENPTVBJTEVfVEVTVClcbiAgMjc6XHRcdGRlZmF1bHQgQVJDSF9NWEMgfHwgU09DX0lNWDI4IGlmIEFSTVxuICAyODpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAyOTpcdFx0c2VsZWN0IENSQzMyXG4gIDMwOlx0XHRzZWxlY3QgUEhZTElCXG4gIDMxOlx0XHRzZWxlY3QgRklYRURfUEhZXG4gIDMyOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDMzOlx0XHRpbXBseSBQQUdFX1BPT0xfU1RBVFNcbiAgMzQ6XHRcdGltcGx5IE5FVF9TRUxGVEVTVFNcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIGJ1aWx0LWluIDEwLzEwMCBGYXN0IGV0aGVybmV0XG4gIDM3Olx0XHQgIGNvbnRyb2xsZXIgb24gc29tZSBNb3Rvcm9sYSBDb2xkRmlyZSBhbmQgRnJlZXNjYWxlIGkuTVgvUzMyIHByb2Nlc3NvcnMuXG4gIDM4Olx0XG4gIDM5Olx0Y29uZmlnIEZFQ19NUEM1Mnh4XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkyNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBGRUMgRHJpdmVyOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyB0aGUgcG9zc2liaWxpdHkgb2YgZnV6emluZyB0aGlzIGRyaXZlciBoaW5nZXMgb24gYSBmZXcgY29uZGl0aW9ucywgc3BlY2lmaWNhbGx5IHRob3NlIGRlZmluZWQgYnkgdGhhdCBsb25nIGNvbmRpdGlvbmFsIHN0YXRlbWVudCDigJMgYChNNTIzeCB8fCBNNTI3eCB8fCBNNTI3MiB8fCBNNTI4eCB8fCBNNTIweCB8fCBNNTMyeCB8fCBBUkNIX01YQyB8fCBBUkNIX1MzMiB8fCBTT0NfSU1YMjggfHwgQ09NUElMRV9URVNUKWAuIFRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5ICpmdXp6KiB0aGlzIHRoaW5nIGVmZmVjdGl2ZWx5PwoKVGhpbmtpbmcgcHJhY3RpY2FsbHksIHllcywgaXQgY2FuIGJlIHRlc3RlZCBpbiBRRU1VLCBwYXJ0aWN1bGFybHkgdXNpbmcgYW4gQVJNIG1hY2hpbmUuIFNvbWV0aGluZyBsaWtlIGFuIGBpbXgyNS1wZGtgLCBgc2FicmVsaXRlYCwgb3IgYG1jaW14NnVsLWV2a2Agd291bGQgYmUgcGVyZmVjdCBmb3IgdGhpcyBraW5kIG9mIHRlc3RpbmcuIEJ1dCBoZXJlJiMzOTtzIHRoZSBydWI6IHN5emthbGxlciB1c3VhbGx5IHJ1bnMgb24geDg2XzY0IG9yIGFybTY0IGFyY2hpdGVjdHVyZXMuIElmIGBDT01QSUxFX1RFU1RgIGlzIGVuYWJsZWQsIHdlIGNhbiBhdCBsZWFzdCBidWlsZCB0aGUgZHJpdmVyIG9uIHg4Nl82NCwgYnV0IGNhbiB3ZSByZWxpYWJseSBwcm9iZSBpdD8gVGhpcyBkcml2ZXIgaXMgYSAqcGxhdGZvcm0qIGRyaXZlciwgc28gdGhhdCBwcm9iaW5nIGJlY29tZXMgdGhlIGtleS4KClRoZXJlZm9yZSwgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIGV4YW1pbmUgYGZlY19wcm9iZWAgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHByb2JlIGZ1bmN0aW9uIHdvcmtzIHRvIGRldGVybWluZSBpZiBpdCBjYW4gYmUgdHJpZ2dlcmVkIGluIGEgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIGFyY2hpdGVjdHVyZSBhbmQgcGxhdGZvcm0gaW1wbGljYXRpb25zIGFyZSB3aGF0IEkgbmVlZCB0byB1bnBhY2sgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmVjX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NTIwMz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzo1MjA0OmZlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNTIwNS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NTY3Mz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmZWNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTU2ODAtXHQuaWRfdGFibGUgPSBmZWNfZGV2dHlwZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjU2ODE6XHQucHJvYmVcdD0gZmVjX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNTY4Mi1cdC5yZW1vdmUgPSBmZWNfZHJ2X3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTczMAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDc4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBGRUMgRHJpdmVyOiBBIFByb2JlIFBhdGggQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtDYW4gc3l6a2FsbGVyIGV2ZW4gKnJlYWNoKiB0aGlzPyYjMzQ7IEl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBwcm9iZWQgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIEFDUEksIG9yIHNvbWV0aGluZyBlbHNlLiBJIGltbWVkaWF0ZWx5IGp1bXAgdG8gbXkga25vd2xlZGdlIG9mIHN5emthbGxlciwgd29uZGVyaW5nIGlmIGl0IGNhbiBtYW5pcHVsYXRlIGRldmljZXMgZGlyZWN0bHksIGxpa2Ugd2l0aCBgc3l6X2RldmxpbmtfbmV0YCwgb3IgaWYgaXQgbmVlZHMgYSBtb3JlIGluZGlyZWN0IHJvdXRlLiBJIHJlbWVtYmVyIHRoZXJlIG1pZ2h0IGJlIHBsYXRmb3JtIGRldmljZSBpbmplY3Rpb24gdmlhIGBzeXpfcGxhdGZvcm1fZGV2aWNlX2FkZGAg4oCTIGJ1dCBubywgdGhhdCYjMzk7cyBub3QgYSBnZW5lcmFsIHN5c2NhbGwsIG5vdCBhIGdvb2Qgb3B0aW9uIGhlcmUuCgpUaGVuIEkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgb3RoZXIgd2F5cyBzeXprYWxsZXIgaW50ZXJhY3RzIHdpdGggZHJpdmVycywgbGlrZSBgc3l6X2dlbmV0bGlua19nZXRfZmFtaWx5X2lkYOKApiBubyBkaWNlLCBpdCYjMzk7cyBub3QgYSBnb29kIGZpdCBoZXJlIGVpdGhlci4gVGhlIGNvcmUgcHJvYmxlbSBpcywgY2FuIHN5emthbGxlciBldmVuICYjMzQ7c2VlJiMzNDsgdGhpcyBkZXZpY2Ugd2l0aGluIGEgdHlwaWNhbCBWTSBlbnZpcm9ubWVudD8gSSBrbm93IHN5emthbGxlciBvZnRlbiBydW5zIG9uIEFSTTY0IHdpdGggUUVNVSwgdXNpbmcgdGhlIGB2aXJ0YCBtYWNoaW5lLCBidXQgSSBkb3VidCB0aGlzIGRldmljZSBpcyBwcmVzZW50IHRoZXJlLiBTYW1lIHdpdGggeDg2XzY0OyBJIHF1aWNrbHkgcmVhbGl6ZSBpdOKAmXMgbm90LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHN5emthbGxlciBzdGlja3MgdG8gUUVNVSBlbnZpcm9ubWVudHMuCgpJIGJyaWVmbHkgY29uc2lkZXIgaWYgdGhlcmUmIzM5O3Mgc29tZSAqb3RoZXIqIG9ic2N1cmUgbWV0aG9kIHN5emthbGxlciBjb3VsZCB1c2UsIGJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhpcyBsaW5lIGZyb20gdGhlIHByb21wdDogJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gVGhhdCB0aHJvd3MgbWUgYW5vdGhlciBjdXJ2ZWJhbGwsIGJlY2F1c2UgSSB3b25kZXIgaWYgYGZlY2AgaXMgZW11bGF0ZWQuIFRoZW4gaXQgaGl0cyBtZSwgSSB0aGluaywgJiMzNDtXYWl0LCBkb2VzbiYjMzk7dCBRRU1VIGhhdmUgdGhlIGBpbXguZmVjYCBkZXZpY2U/JiMzNDsgWWVzISBJZiBJIHJ1biBpdCBvbiBhbiBpLk1YIG1hY2hpbmUgaXQmIzM5O3MgcmVhY2hhYmxlLgoKVGhlIHByb21wdCBhbHNvIHNheXMgdGhhdCBzeXprYWxsZXIgcnVucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEl0IGRvZXMgbm90IG1lbnRpb24gdGhhdCBpdCYjMzk7cyByZXN0cmljdGVkIHRvIHg4Nl82NCwgb3Igb3RoZXIgc3lzdGVtcywgc28gdGhlIGkuTVggbWFjaGluZSBpcyBhIHBvc3NpYmlsaXR5LiBBbmQgdGhlbiBpdCBzYXlzLCAmIzM0O0NvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7LiBHaXZlbiB0aGF0IGBmZWNgIGlzIGVtdWxhdGVkIGFzIGBpbXguZmVjYCwgaXQgKmlzKiB0ZWNobmljYWxseSByZWFjaGFibGUgaW4gUUVNVS4gVGhhdCBpcyBnb29kIG5ld3MuCgpBbHJpZ2h0LCBzbyB0aGUgZGV2aWNlICppcyogcmVhY2hhYmxlLiBOb3csIGlzIGl0IHdvcnRoIGZ1enppbmc/IFRoZSBwYXRjaCBmb2N1c2VzIG9uIGVycm9yIGNoZWNraW5nIGluIGBmZWNfcHRwX2luaXRgIHdpdGhpbiBgZmVjX3Byb2JlYC4gSWYgdGhpcyBmYWlscywgaXQgZ29lcyB0byBgZmFpbGVkX3Jlc2V0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNoYW5nZSBpbiB0aGUgKnByb2JlKiBwYXRoLCBhbmQgdGhpcyBpcyB3aGVyZSBzeXprYWxsZXIgcmVhbGx5IHNoaW5lcy4gTXkgZXhwZXJpZW5jZSBzaG93cyB0aGF0IHByb2JlIHBhdGhzIGFyZSBvZnRlbiBmdXp6ZWQgdGhyb3VnaCBmYXVsdCBpbmplY3Rpb24gb3IgaW5zdGFudGlhdGlvbi4gU28sIHRoZSBzaG9ydCBhbnN3ZXIgaXMgeWVzLCB3b3J0aCBmdXp6aW5nLgoKTXkgbmV4dCBxdWVzdGlvbjogQ2FuIGBmZWNfcHRwX2luaXRgIGFjdHVhbGx5IGZhaWw/IExldCYjMzk7cyBjaGVjayB0aGUgY29kZS4gSSByZWNhbGwgdGhhdCBgZmVjX3B0cF9pbml0YCBjYWxscyBgcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbGAsIGBkZXZtX3JlcXVlc3RfaXJxYCwgYW5kIGBwdHBfY2xvY2tfcmVnaXN0ZXJgLiBUaGVzZSBmdW5jdGlvbnMgYWxsIGhhdmUgdGhlIHBvdGVudGlhbCB0byBmYWlsLCBlc3BlY2lhbGx5IHVuZGVyIGZhdWx0IGluamVjdGlvbi4gTm93LCBpZiBgZmVjX3B0cF9pbml0YCBjYWxscyB0aG9zZSBmdW5jdGlvbnMsIGFuZCB0aG9zZSBmdW5jdGlvbnMgZmFpbCwgdGhlbiB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB3b3J0aCBpbnZlc3RpZ2F0aW5nIGZ1cnRoZXIuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBmZWNfcHRwX2luaXRgIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmVjX3B0cF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jPTY5Nj1zdGF0aWMgaXJxcmV0dXJuX3QgZmVjX3Bwc19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmMtNzI5LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYzo3MzA6ICogZmVjX3B0cF9pbml0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jLTczMS0gKiBAcGRldjogVGhlIEZFQyBuZXR3b3JrIGFkYXB0ZXJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jLTczOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmM6NzM5OmludCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jLTc0MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDExOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZFQyBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSB1cGRhdGVkIGBmZWNfcHRwX2luaXRgIHRvIHJldHVybiBhbiBpbnRlZ2VyLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UgZm9yIGVycm9yIGhhbmRsaW5nLiBUaGF0IHJldHVybiB2YWx1ZSBpcyB0aGVuIGJlaW5nIGRlYWx0IHdpdGggaW4gYGZlY19wcm9iZWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIHRvIG1ha2Ugc3VyZSB0aGlzIGJ1aWxkcyBjb3JyZWN0bHkuCgpGaXJzdCwgb2J2aW91c2x5LCBJJiMzOTtsbCBuZWVkIGBGRUNgIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHNlZSBpZiBgRkVDYCBkZXBlbmRzIG9uIGFueSBvdGhlciBjb25maWdzLiBBaCwgbG9va3MgbGlrZSBgTkVUX1ZFTkRPUl9GUkVFU0NBTEVgIGlzIGFsc28gcmVxdWlyZWQuIEFscmlnaHQsIGxldCBtZSB0YWtlIGEgcXVpY2sgbG9vayBhdCBgTkVUX1ZFTkRPUl9GUkVFU0NBTEVgIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGRlcGVuZGVuY2llcyBvciBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1ZFTkRPUl9GUkVFU0NBTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9GUkVFU0NBTEVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTctXHRib29sIFwmIzM0O0ZyZWVzY2FsZSBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDExOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NzEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEZyZWVzY2FsZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEZyZWVzY2FsZSBuZXR3b3JrIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgTkVUX1ZFTkRPUl9GUkVFU0NBTEVgIGFuZCB0aGUgYEZFQ2AgY29tcG9uZW50cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlaXIgaW50ZXJkZXBlbmRlbmNpZXMuIEFoYSwgaGVyZSYjMzk7cyBhbiBpbnRlcmVzdGluZyBkZXBlbmRlbmN5IC0gYEZFQ2AgcmVsaWVzIG9uIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAuIEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoYXQgb3B0aW9uYWwgY2xvY2sgc2V0dGluZy4gUmlnaHQgbm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgc2V0dGluZyBpbiB0aGlzIGNvbnRleHQuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCB0aGF0JiMzOTtzIGFsbCBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9LY29uZmlnPTg9Y29uZmlnIFBUUF8xNTg4X0NMT0NLXG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0yOS1cbmRyaXZlcnMvcHRwL0tjb25maWc6MzA6Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL3B0cC9LY29uZmlnLTMxLVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI4OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIERpbGVtbWEqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgdHJpc3RhdGUgb3B0aW9uLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIGEgZmVhdHVyZSB0aGF0IGNhbiBiZSBzZWxlY3RpdmVseSBpbmNsdWRlZC4gSW4gdGhpcyBjYXNlLCBpdCBzZWVtcyB0byBiZSByZWxhdGVkIHRvIGBGRUNgIOKAkyBGb3J3YXJkIEVycm9yIENvcnJlY3Rpb24uIFRoZSBkb2N1bWVudGF0aW9uIHNheXMgaWYgd2UgZW5hYmxlIGBGRUNgLCB3ZSBtaWdodCBuZWVkIHRvIGVuYWJsZSBgUFRQXzE1ODhfQ0xPQ0tgLCBvciwgd2VsbCwgaXQgbWlnaHQganVzdCB3b3JrIGlmIGBQVFBfMTU4OF9DTE9DS2AgKmlzbiYjMzk7dCogc2V0LCBzaW5jZSBpdCYjMzk7cyBsaXN0ZWQgYXMgb3B0aW9uYWwuIFRoYXTigJlzIGEgbGl0dGxlIGFtYmlndW91cy4KCldhaXQgYSBtaW51dGUsIHRoZSBgZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgc3RhdGVtZW50IG1lYW5zIHRoYXQgaWYgYFBUUF8xNTg4X0NMT0NLYCBpcyBidWlsdCBhcyBhIG1vZHVsZSwgb3IgYG1gLCB0aGVuIGBGRUNgICpjYW4mIzM5O3QqIGJlIGVuYWJsZWQuIFRoYXQgY29tcGxpY2F0ZXMgdGhpbmdzLCBiZWNhdXNlIGl0IG1lYW5zIGlmIGBGRUNgIG5lZWRzIGBQVFBfMTU4OF9DTE9DS2AsIHdlJiMzOTtyZSBsb2NrZWQgb3V0IG9mIGEgbW9kdWxlIGJ1aWxkLiBJIHNob3VsZCBwcm9iYWJseSBlcnIgb24gdGhlIHNpZGUgb2YgY2F1dGlvbiBhbmQgZW5hYmxlIGBQVFBfMTU4OF9DTE9DS2AgdG8gYmUgYHlgIGp1c3QgdG8gYmUgc2FmZS4gQWx0ZXJuYXRpdmVseSwgcGVyaGFwcyBsZWF2ZSBpdCB1bmRlZmluZWQ/CgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiwgd2hhdCBhYm91dCBgQ09NUElMRV9URVNUYD8gSXQmIzM5O3MgbGlzdGVkIGluIHRoZSBkZXBlbmRlbmN5IGZvciBgRkVDYC4gTGV0IG1lIHNlZSwgYEZFQ2AgZGVwZW5kcyBvbiBhIGxpc3Qgb2YgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZXMsIGFuZCBhbHNvLCBjcml0aWNhbGx5LCBgQ09NUElMRV9URVNUYC4gVGhpcyBkZXBlbmRlbmN5IGlzIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluISBUaGlzIGRlcGVuZGVuY3kgb24gYENPTVBJTEVfVEVTVGAgY291bGQgYmUgZW5vdWdoIHRvIGVuYWJsZSBidWlsZGluZyB0aGUgY29kZSBvbiB4ODZfNjQsIHdoaWNoIGlzIHdoYXQgSSBuZWVkLgoKU28sIHRoZSBrZXkgaGVyZSBpcyB0byBlbmFibGUgYENPTVBJTEVfVEVTVGAgdG8gZW5zdXJlIHRoYXQgdGhpcyBjYW4gYmUgYnVpbHQgb24geDg2XzY0IGFuZCB0ZXN0IHRoZSBmZWF0dXJlLiBMZXQgbWUgY2hlY2sgaWYgYENPTVBJTEVfVEVTVGAgaXMgZW5vdWdoLCBieSBpdHNlbGYuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGBGRUNgIGVuYWJsZWQgaWYgdGhlIG90aGVyIGRlcGVuZGVuY2llcyBhcmUgbWV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09NUElMRV9URVNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0yMzM9Y29uZmlnIElOSVRfRU5WX0FSR19MSU1JVFxuLS1cbmluaXQvS2NvbmZpZy0yNDAtXG5pbml0L0tjb25maWc6MjQxOmNvbmZpZyBDT01QSUxFX1RFU1RcbmluaXQvS2NvbmZpZy0yNDItXHRib29sIFwmIzM0O0NvbXBpbGUgYWxzbyBkcml2ZXJzIHdoaWNoIHdpbGwgbm90IGxvYWRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA0OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVhY2hhYmlsaXR5IGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqCgpPa2F5LCBzbyBgQ09NUElMRV9URVNUYCBpcyBkZWZpbml0ZWx5IHN0YW5kYXJkLCBzbyB0aGF0IHBhcnQgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGF0IG1lYW5zIGBFbmFibGVDb25maWdzYCBzaG91bGQgaW5jbHVkZSBgWyYjMzQ7TkVUX1ZFTkRPUl9GUkVFU0NBTEUmIzM0OywgJiMzNDtGRUMmIzM0OywgJiMzNDtDT01QSUxFX1RFU1QmIzM0O11gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgZmVjX3Byb2JlYCBpcyBhY3R1YWxseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cC4gVGhlIHF1ZXN0aW9uIGJvaWxzIGRvd24gdG8gd2hldGhlciBpdCB3aWxsIGJlIHByb2JlZCwgZXZlbiBpZiBpdCYjMzk7cyBjb21waWxlZC4KCkkga25vdyBTeXprYWxsZXIgZG9lc24mIzM5O3QgdXNlIGBzeXpfZGV2bGlua19uZXRgIGZvciBwbGF0Zm9ybSBkZXZpY2VzLiBIbW1tLi4ud2FpdCwgdGhlcmUmIzM5O3MgYSBwc2V1ZG8tc3lzY2FsbDogYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IFN5emthbGxlciBwc2V1ZG8tc3lzY2FsbCBsaXN0LgoKSGFuZyBvbi4uLnRoZSBwcm9tcHQgZXhwbGljaXRseSBtZW50aW9ucyBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24uIFNvLCBpZiBhIGRldmljZSAqaXNuJiMzOTt0KiBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9uIHRoZSBhcmNoaXRlY3R1cmUgU3l6a2FsbGVyIHJ1bnMsIHRoZW4gaXQmIzM5O3MgKm5vdCogcmVhY2hhYmxlLCByaWdodD8gQnV0IFFFTVUgKmRvZXMqIGVtdWxhdGUgYGlteC5mZWNgIG9uIEFSTSwgYW5kIFN5emthbGxlciBjYW4gcnVuIG9uIEFSTSBRRU1VICh1c2luZyBgcWVtdS1zeXN0ZW0tYXJtYCBvciBgcWVtdS1zeXN0ZW0tYWFyY2g2NGApLiBTbyB0aGF0IG1lYW5zIGl0ICppcyogcmVhY2hhYmxlIGluIFFFTVUuCgpKdXN0IHRvIGJlIHN1cmUsIGV2ZW4gdGhvdWdoIEkgZGlkbiYjMzk7dCBzZWUgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYCwgbWF5YmUgaXQmIzM5O3MgcHJvYmUtYWJsZSB0aHJvdWdoIGRldmljZSB0cmVlIG92ZXJsYXlzIG9yIHNvbWV0aGluZyBzaW1pbGFyPwoKQWxyaWdodCwgdGhlIHByb21wdCYjMzk7cyB3b3JkaW5nICgmIzM0O2V2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0OykgcmVhbGx5IGNsYXJpZmllcyB0aGlzLiBTaW5jZSBRRU1VIGVtdWxhdGVzIGBpbXguZmVjYCwgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuCgpOb3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgaW1wb3J0YW50PyBJIHNob3VsZCBmb2N1cyBvbiBgZmVjX3Byb2JlYCBhbmQgYGZlY19wdHBfaW5pdGAuIEkgbmVlZCB0byBzZWUgaWYgYGZlY19wdHBfaW5pdGAgaXMgc3RhdGljLiBJdCYjMzk7cyBub3Qgc3RhdGljLgpgaW50IGZlY19wdHBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXJxX2lkeClgLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQW5kIGBmZWNfcHJvYmVgIGlzIHN0YXRpYy4gT2theS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmVjX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NTIwMz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzo1MjA0OmZlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNTIwNS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NTY3Mz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmZWNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTU2ODAtXHQuaWRfdGFibGUgPSBmZWNfZGV2dHlwZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjU2ODE6XHQucHJvYmVcdD0gZmVjX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNTY4Mi1cdC5yZW1vdmUgPSBmZWNfZHJ2X3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMjQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEcml2ZXIgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYGZlY19wcm9iZWAganVtcHMgb3V0IGF0IG1lLiBUaGUgdGhpbmcgaXMsIGBmZWNfcHJvYmVgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpcyBsZXNzIGRlc2lyYWJsZSBmcm9tIGFuIEFQSSBlbnRyeSBwb2ludCBwZXJzcGVjdGl2ZSwgYXMgaXQmIzM5O3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGUgcHJvbXB0IGlzIGNsZWFyIG9uIHRoYXQuIEkgaW5pdGlhbGx5IHRob3VnaHQgSSBjb3VsZCBqdXN0IGZvY3VzIG9uIGBmZWNfcHRwX2luaXRgIHNpbmNlIHRoYXQmIzM5O3Mgbm9uLXN0YXRpYywgYW5kIHNlZW1zIHRvIGJlIHRoZSBwcmVmZXJyZWQgY2hvaWNlLiBCdXQgd2FpdCwgdGhlIHBhdGNoICphbHNvKiBtb2RpZmllcyBgZmVjX3Byb2JlYCwgd2hpY2ggY29tcGxpY2F0ZXMgdGhpbmdzLiBFdmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIHN0aWxsIGJlaW5nIHRvdWNoZWQsIGFuZCBpdCAqaXMqIGEgcHJvYmUgZnVuY3Rpb24sIHdoaWNoIHN1Z2dlc3RzIGl0ICpjb3VsZCogYmUgYSBkcml2ZXIgZW50cnkgcG9pbnQuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCByZWFzc2Vzcy4gU28sIGBmZWNfcHJvYmVgIGlzIG91dCBiZWNhdXNlIGl0JiMzOTtzIHN0YXRpYywgd2hpY2ggbWFrZXMgYGZlY19wdHBfaW5pdGAgdGhlIG1vcmUgcHJlZmVycmVkIGZ1bmN0aW9uLiBIb3dldmVyLCB0aGUgcGF0Y2ggc2hvd3MgdGhhdCBgZmVjX3Byb2JlYCBjb25kaXRpb25hbGx5IGNhbGxzIGBmZWNfcHRwX3N0b3BgLiBUaGlzIG1ha2VzIGBmZWNfcHRwX3N0b3BgIGEgZnVuY3Rpb24gSSAqc2hvdWxkKiBjb25zaWRlciBiZWNhdXNlIG9mIGl0cyBtb2RpZmllZCB1c2FnZSBpbiB0aGUgcHJvYmUuIEkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZSB0aGF0IGFzIGEgY2FuZGlkYXRlIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmVjX3B0cF9zdG9wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jPTgyNz12b2lkIGZlY19wdHBfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmMtODU2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYzo4NTc6dm9pZCBmZWNfcHRwX3N0b3Aoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmMtODU4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4ODkKCQkJCQkJCW91dHB1dDogMTE1CgkJCQkJCQl0aG91Z2h0czogMTAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBGRUMgUFRQIEluaXRpYWxpemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIGBmZWNfcHRwX3N0b3BgIGlzICpub3QqIHN0YXRpYywgd2hpY2ggbWVhbnMgYGZlY19wdHBfaW5pdGAgYW5kIGBmZWNfcHRwX3N0b3BgIGFyZSBwb3RlbnRpYWwgZm9jYWwgcG9pbnRzIGZvciBmdXp6aW5nLCBzbyB0aG9zZSBzaG91bGQgZ28gaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuCgpMb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIGl0JiMzOTtzIHByZXR0eSBjbGVhcjogdGhleSYjMzk7dmUgY2hhbmdlZCB0aGUgcmV0dXJuIHR5cGUgb2YgYGZlY19wdHBfaW5pdGAgdG8gYGludGAgYW5kIGFkZGVkIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgZnVuY3Rpb24gYW5kIGFsc28gaW4gdGhlIGBmZWNfcHJvYmVgIGNhbGxlci4gU3BlY2lmaWNhbGx5LCBgZmVjX3Byb2JlYCBub3cgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGZlY19wdHBfaW5pdGAgYW5kIGp1bXBzIHRvIGBmYWlsZWRfcmVzZXRgIG9uIGZhaWx1cmUuIEFuZCB0aGUgY2hhbmdlZCBgZmVjX3B0cF9pbml0YCBoYXMgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgYXJvdW5kIElSUSByZXF1ZXN0cyBhbmQgUFRQIGNsb2NrIHJlZ2lzdHJhdGlvbi4gVGhpcyBpcyBhICpzaWduaWZpY2FudCogZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGVycm9yIGhhbmRsaW5nIG9mIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gcGF0aC4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcgdG8gZW5zdXJlIHRoYXQgZXJyb3JzIGFyZSBoYW5kbGVkIGNvcnJlY3RseSwgYW5kIG5vIHJlc291cmNlcyBhcmUgbGVha2VkLCBvciBubyBjcmFzaGVzIG9jY3VyLCBlc3BlY2lhbGx5IHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuCgpOb3csIGNhbiB3ZSByZWFjaCB0aGlzIGNvZGUgcGF0aD8gTGV0JiMzOTtzIGNoZWNrLiBZZXMsIFFFTVUgaGFzIGBpbXguZmVjYCBkZXZpY2VzIGFuZCB0aGVzZSBhcmUgdXNlZCBpbiB0aGUgYGlteDI1LXBka2AsIGBzYWJyZWxpdGVgLCBgbWNpbXg2dWwtZXZrYCwgYW5kIGBtY2lteDdkLXNhYnJlYCBtYWNoaW5lcy4gRXhjZWxsZW50LCB0aGVzZSBhcmUgYWxsIHBlcmZlY3RseSBmdXp6ZWFibGUgdmlhIHN5emthbGxlciBvbiBBUk0gYW5kIEFSTTY0LiBBbHRob3VnaCBJIGFtIHVuc3VyZSBleGFjdGx5IGhvdyBzeXprYWxsZXIgaGFuZGxlcyBwbGF0Zm9ybSBkZXZpY2VzLCBteSBtZW1vcnkgaXMgdGhhdCBpdCBjYW4sIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBwcm9tcHQgc2FpZCB0aGF0IGl0IHdvdWxkbiYjMzk7dCBiZSBwb3NzaWJsZSB0byByZWFjaC4KClNpbmNlIHRoaXMgaXMgYSBRRU1VLWVtdWxhdGVkIGRldmljZSwgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZy4gSSB3aWxsIG1ha2UgYSBmdXp6aW5nIGNvbmZpZzoKCiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWAKKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbJiMzNDtmZWNfcHRwX2luaXQmIzM0O11gIC0gV2hpbGUgYGZlY19wdHBfc3RvcGAgaXMgcmVhY2hhYmxlLCB0aGUgcHJpbWFyeSBjaGFuZ2UgaXMgaW4gYGZlY19wdHBfaW5pdGAsIHNvIGZvY3VzaW5nIHRoZXJlIG1ha2VzIHNlbnNlLgoqICAgKipFbmFibGVDb25maWdzKio6IGBbJiMzNDtORVRfVkVORE9SX0ZSRUVTQ0FMRSYjMzQ7LCAmIzM0O0ZFQyYjMzQ7LCAmIzM0O0NPTVBJTEVfVEVTVCYjMzQ7XWAgLSBTdGFuZGFyZCBjb25maWdzIGZvciB0aGlzIGRyaXZlciwgd2l0aCBgQ09NUElMRV9URVNUYCB0byBlbnN1cmUgYnVpbGRzLgoqICAgKipSZWFzb25pbmcqKjogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyB0byBmZWNfcHRwX2luaXQgYW5kIHByb3BhZ2F0ZXMgdGhlIGVycm9yIHRvIGZlY19wcm9iZSwgd2hpY2ggbm93IGFib3J0cyBpbml0aWFsaXphdGlvbiBpZiBQVFAgc2V0dXAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZHJpdmVyIHByb2JlIHBhdGggdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBwcm9wZXIgcmVzb3VyY2UgY2xlYW51cCBvbiBmYWlsdXJlLiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX0ZSRUVTQ0FMRSYjMzQ7LAogICAgJiMzNDtGRUMmIzM0OywKICAgICYjMzQ7Q09NUElMRV9URVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmVjX3B0cF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgaGFuZGxpbmcgdG8gZmVjX3B0cF9pbml0IGFuZCBwcm9wYWdhdGVzIHRoZSBlcnJvciB0byBmZWNfcHJvYmUsIHdoaWNoIG5vdyBhYm9ydHMgaW5pdGlhbGl6YXRpb24gaWYgUFRQIHNldHVwIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlciBwcm9iZSBwYXRoIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgcHJvcGVyIHJlc291cmNlIGNsZWFudXAgb24gZmFpbHVyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9GUkVFU0NBTEUmIzM0OywKICAgICYjMzQ7RkVDJiMzNDssCiAgICAmIzM0O0NPTVBJTEVfVEVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZlY19wdHBfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZlY19wdHBfaW5pdCBhbmQgcHJvcGFnYXRlcyB0aGUgZXJyb3IgdG8gZmVjX3Byb2JlLCB3aGljaCBub3cgYWJvcnRzIGluaXRpYWxpemF0aW9uIGlmIFBUUCBzZXR1cCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIgcHJvYmUgcGF0aCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciByZXNvdXJjZSBjbGVhbnVwIG9uIGZhaWx1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIHByb2JlIGZ1bmN0aW9uIG9mIHRoZSBGcmVlc2NhbGUgRkVDIGV0aGVybmV0IGRyaXZlci4gSXQgY2hhbmdlcyBgZmVjX3B0cF9pbml0YCB0byByZXR1cm4gYW4gaW50ZWdlciBlcnJvciBjb2RlIGluc3RlYWQgb2YgYHZvaWRgLCBhbGxvd2luZyBpdCB0byBwcm9wYWdhdGUgZXJyb3JzIGZyb20gSVJRIHJlcXVlc3RzIGFuZCBQVFAgY2xvY2sgcmVnaXN0cmF0aW9uLiBUaGUgYGZlY19wcm9iZWAgZnVuY3Rpb24gaXMgdXBkYXRlZCB0byBjaGVjayB0aGlzIHJldHVybiB2YWx1ZSBhbmQganVtcCB0byB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgaGFuZGxpbmcgbGFiZWwuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgZXJyb3IgcHJvcGFnYXRpb24sIHdoaWNoIGRvIG5vdCBwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNmOGNkOGEzMmJmYzQ0ODM0ZDEwN2MzOGI4YzE4ODE4ODE1OGMxOGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAxMTo1NzoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaAppbmRleCA3MTc2ODAzMTQ2ZjNkLi44ODMxZGEzNzMyNmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlYy5oCkBAIC02OTIsNyAmIzQzOzY5Miw3IEBAIHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlIHsKIAl1NjQgZXRodG9vbF9zdGF0c1tdOwogfTsKIAotdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpOwomIzQzO2ludCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpOwogdm9pZCBmZWNfcHRwX3Jlc3RvcmVfc3RhdGUoc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCk7CiB2b2lkIGZlY19wdHBfc2F2ZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKTsKIHZvaWQgZmVjX3B0cF9zdG9wKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYwppbmRleCBjZWQ0ZGJmOGNkOTBmLi5iNmMyMmQ2YzFlNjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYwpAQCAtNTM4NCw4ICYjNDM7NTM4NCwxMSBAQCBmZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJZ290byBmYWlsZWRfcmVzZXQ7CiAKIAlpcnFfY250ID0gZmVjX2VuZXRfZ2V0X2lycV9jbnQocGRldik7Ci0JaWYgKGZlcC0mZ3Q7YnVmZGVzY19leCkKLQkJZmVjX3B0cF9pbml0KHBkZXYsIGlycV9jbnQpOwomIzQzOwlpZiAoZmVwLSZndDtidWZkZXNjX2V4KSB7CiYjNDM7CQlyZXQgPSBmZWNfcHRwX2luaXQocGRldiwgaXJxX2NudCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gZmFpbGVkX3Jlc2V0OwomIzQzOwl9CiAKIAlyZXQgPSBmZWNfZW5ldF9pbml0KG5kZXYpOwogCWlmIChyZXQpCkBAIC01NDU3LDcgJiM0Mzs1NDYwLDggQEAgZmVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiBmYWlsZWRfaXJxOgogCWZlY19lbmV0X2RlaW5pdChuZGV2KTsKIGZhaWxlZF9pbml0OgotCWZlY19wdHBfc3RvcChwZGV2KTsKJiM0MzsJaWYgKGZlcC0mZ3Q7YnVmZGVzY19leCkKJiM0MzsJCWZlY19wdHBfc3RvcChwZGV2KTsKIGZhaWxlZF9yZXNldDoKIAlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJmFtcDtwZGV2LSZndDtkZXYpOwogCXBtX3J1bnRpbWVfZGlzYWJsZSgmYW1wO3BkZXYtJmd0O2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYwppbmRleCA1NjgwMWMyMDA5ZDU5Li44YWQ2ODA0MTFiMGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmMKQEAgLTczNiw3ICYjNDM7NzM2LDcgQEAgc3RhdGljIGlycXJldHVybl90IGZlY19wcHNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKICAqIGN5Y2xlY291bnRlciBpbml0IHJvdXRpbmUgYW5kIGV4aXRzLgogICovCiAKLXZvaWQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KQomIzQzO2ludCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYobmRldik7CkBAIC03NzksMjYgJiM0Mzs3NzksMjkgQEAgdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpCiAJCSAgICAgIEhSVElNRVJfTU9ERV9SRUwpOwogCiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWVfb3B0aW9uYWwocGRldiwgJiMzNDtwcHMmIzM0Oyk7Ci0JaWYgKGlycSAmbHQ7IDApCiYjNDM7CWlmIChpcnEgJmx0OyAwKSB7CiAJCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfb3B0aW9uYWwocGRldiwgaXJxX2lkeCk7Ci0JLyogRmFpbHVyZSB0byBnZXQgYW4gaXJxIGlzIG5vdCBmYXRhbCwKLQkgKiBvbmx5IHRoZSBQVFBfQ0xPQ0tfUFBTIGNsb2NrIGV2ZW50cyBzaG91bGQgc3RvcAotCSAqLwotCWlmIChpcnEgJmd0Oz0gMCkgewomIzQzOwkJaWYgKGlycSAmbHQ7IDAgJmFtcDsmYW1wOyBpcnEgIT0gLUVOWElPKQomIzQzOwkJCXJldHVybiBpcnE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGlycSAmZ3Q7IDApIHsKIAkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmYW1wO3BkZXYtJmd0O2RldiwgaXJxLCBmZWNfcHBzX2ludGVycnVwdCwKIAkJCQkgICAgICAgMCwgcGRldi0mZ3Q7bmFtZSwgbmRldik7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJZGV2X3dhcm4oJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7cmVxdWVzdCBmb3IgcHBzIGlycSBmYWlsZWQoJWQpXG4mIzM0OywKLQkJCQkgcmV0KTsKJiM0MzsJCQlyZXR1cm4gcmV0OwogCX0KIAogCWZlcC0mZ3Q7cHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKCZhbXA7ZmVwLSZndDtwdHBfY2FwcywgJmFtcDtwZGV2LSZndDtkZXYpOwogCWlmIChJU19FUlIoZmVwLSZndDtwdHBfY2xvY2spKSB7CiAJCWZlcC0mZ3Q7cHRwX2Nsb2NrID0gTlVMTDsKIAkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtwdHBfY2xvY2tfcmVnaXN0ZXIgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gUFRSX0VSUihmZXAtJmd0O3B0cF9jbG9jayk7CiAJfQogCiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7ZmVwLSZndDt0aW1lX2tlZXAsIEhaKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHZvaWQgZmVjX3B0cF9zYXZlX3N0YXRlKHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXApCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTczCgkJCQkJCQlvdXRwdXQ6IDE2MQoJCQkJCQkJdGhvdWdodHM6IDM5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGcmVlc2NhbGUgRkVDIFBUUCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhpcyBwYXRjaCwgYXQgYSBnbGFuY2UsIGlzIG1vZGlmeWluZyB0aGUgRnJlZXNjYWxlIEZFQyBQVFAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBmZWNfcHRwX2luaXRgIGZ1bmN0aW9uIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY2AuIEl0JiMzOTtzIGNoYW5naW5nIHRoZSByZXR1cm4gdHlwZSBvZiB0aGF0IGZ1bmN0aW9uIGZyb20gYHZvaWRgIHRvIGBpbnRgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhbiBlcnJvciBjb2RlIHByb3BhZ2F0aW9uIHN0cmF0ZWd5LiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBjbHVlLgoKVGhlbiwgbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gd2l0aGluIGBmZWNfcHJvYmVgIGluIGBmZWNfbWFpbi5jYCwgdGhleSYjMzk7cmUgYWN0dWFsbHkgKmNoZWNraW5nKiB0aGUgcmV0dXJuIHZhbHVlIG9mIGBmZWNfcHRwX2luaXRgIG5vdy4gSWYgaXQgZmFpbHMsIHdlIGp1bXAgdG8gYGZhaWxlZF9yZXNldGAuIFNvIHRoZSBwYXRjaCBpcyAqZG9pbmcqIHNvbWV0aGluZyB3aXRoIHRoYXQgZXJyb3IgY29kZSEgTXkgcmVhZCBoZXJlIGlzIHRoYXQgdGhpcyBpcyBoYW5kbGluZyBJUlEgcmVxdWVzdCBmYWlsdXJlcyBhbmQgUFRQIGNsb2NrIHJlZ2lzdHJhdGlvbiBmYWlsdXJlcy4KCkFuZCBpbiB0aGUgYGZhaWxlZF9pbml0YCBwYXRoLCBgZmVjX3B0cF9zdG9wKHBkZXYpYCBpcyBub3cgKmNvbmRpdGlvbmFsbHkqIGNhbGxlZCBvbmx5IGlmIGBmZXAtJmd0O2J1ZmRlc2NfZXhgIGlzIHRydWUuIFRoaXMgYWxzbyBtYWtlcyBzZW5zZSBpbiB0ZXJtcyBvZiByZXNvdXJjZSBjbGVhbnVwLgoKVGhpcyBpcyBhbGwgKnN0YW5kYXJkKiBlcnJvciBoYW5kbGluZyBzdHVmZi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBhYm91dCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgZXhwb3N1cmUuIEhvd2V2ZXIsIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB0byB1c2Vyc3BhY2UuIEluIGZhY3QsIGl0IGRvZXMgcXVpdGUgdGhlIG9wcG9zaXRlIGFuZCBpcyBjbGVhbmluZyB1cCBjb3JyZWN0bHkuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgcmVzb3VyY2UgbGVhayBhbmQvb3IgZXJyb3IgaGFuZGxpbmcgZml4LgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtLCBJJiMzOTtsbCBzY2FuIHRoZSBkaWZmIGFnYWluOiBgZmVjX3B0cF9pbml0YCByZXR1cm5zIGFuIGBpbnRgLiBgZmVjX3Byb2JlYCBjYWxscyBpdCBhbmQgY2hlY2tzIHRoZSByZXR1cm46IGByZXQgPSBmZWNfcHRwX2luaXQocGRldiwgaXJxX2NudCk7IGlmIChyZXQpIGdvdG8gZmFpbGVkX3Jlc2V0O2AgVGhlIGBmYWlsZWRfcmVzZXRgIHBhdGggaXMgYWxsIGFib3V0IFBNIHJ1bnRpbWUgc3R1ZmYuIEFuZCBgZmVjX3B0cF9zdG9wYCBpcyBjYWxsZWQgY29uZGl0aW9uYWxseSBpbiBgZmFpbGVkX2luaXRgIGlmIGBmZXAtJmd0O2J1ZmRlc2NfZXhgLgoKUmlnaHQsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhpcyBsb29rcyBnb29kLCBhIHNvbGlkIGltcHJvdmVtZW50IGluIGVycm9yIGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgZnVuY3Rpb24gb2YgdGhlIEZyZWVzY2FsZSBGRUMgZXRoZXJuZXQgZHJpdmVyLiBJdCBjaGFuZ2VzIGBmZWNfcHRwX2luaXRgIHRvIHJldHVybiBhbiBpbnRlZ2VyIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBgdm9pZGAsIGFsbG93aW5nIGl0IHRvIHByb3BhZ2F0ZSBlcnJvcnMgZnJvbSBJUlEgcmVxdWVzdHMgYW5kIFBUUCBjbG9jayByZWdpc3RyYXRpb24uIFRoZSBgZmVjX3Byb2JlYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlIGFuZCBqdW1wIHRvIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBoYW5kbGluZyBsYWJlbC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBlcnJvciBwcm9wYWdhdGlvbiwgd2hpY2ggZG8gbm90IHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBwcm9iZSBmdW5jdGlvbiBvZiB0aGUgRnJlZXNjYWxlIEZFQyBldGhlcm5ldCBkcml2ZXIuIEl0IGNoYW5nZXMgYGZlY19wdHBfaW5pdGAgdG8gcmV0dXJuIGFuIGludGVnZXIgZXJyb3IgY29kZSBpbnN0ZWFkIG9mIGB2b2lkYCwgYWxsb3dpbmcgaXQgdG8gcHJvcGFnYXRlIGVycm9ycyBmcm9tIElSUSByZXF1ZXN0cyBhbmQgUFRQIGNsb2NrIHJlZ2lzdHJhdGlvbi4gVGhlIGBmZWNfcHJvYmVgIGZ1bmN0aW9uIGlzIHVwZGF0ZWQgdG8gY2hlY2sgdGhpcyByZXR1cm4gdmFsdWUgYW5kIGp1bXAgdG8gdGhlIGFwcHJvcHJpYXRlIGVycm9yIGhhbmRsaW5nIGxhYmVsLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0aGF0IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNrcywgb3IgZXhwb3NlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGVycm9yIHByb3BhZ2F0aW9uLCB3aGljaCBkbyBub3QgcG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1NzoyOC4xMDc3MDI0MDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM5NTEwNzQ2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9GUkVFU0NBTEVcIixcbiAgICBcIkZFQ1wiLFxuICAgIFwiQ09NUElMRV9URVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmVjX3B0cF9pbml0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgZnVuY3Rpb24gb2YgdGhlIEZyZWVzY2FsZSBGRUMgZXRoZXJuZXQgZHJpdmVyLiBJdCBjaGFuZ2VzIGBmZWNfcHRwX2luaXRgIHRvIHJldHVybiBhbiBpbnRlZ2VyIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBgdm9pZGAsIGFsbG93aW5nIGl0IHRvIHByb3BhZ2F0ZSBlcnJvcnMgZnJvbSBJUlEgcmVxdWVzdHMgYW5kIFBUUCBjbG9jayByZWdpc3RyYXRpb24uIFRoZSBgZmVjX3Byb2JlYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlIGFuZCBqdW1wIHRvIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBoYW5kbGluZyBsYWJlbC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBlcnJvciBwcm9wYWdhdGlvbiwgd2hpY2ggZG8gbm90IHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZlY19wdHBfaW5pdCBhbmQgcHJvcGFnYXRlcyB0aGUgZXJyb3IgdG8gZmVjX3Byb2JlLCB3aGljaCBub3cgYWJvcnRzIGluaXRpYWxpemF0aW9uIGlmIFBUUCBzZXR1cCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIgcHJvYmUgcGF0aCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciByZXNvdXJjZSBjbGVhbnVwIG9uIGZhaWx1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDExOjU3OjI4LjEwNzcwNzcwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4MjUwOTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2Y4Y2Q4YTMyYmZjNDQ4MzRkMTA3YzM4YjhjMTg4MTg4MTU4YzE4YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxMTo1NzoyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjLmhcXG5pbmRleCA3MTc2ODAzMTQ2ZjNkLi44ODMxZGEzNzMyNmIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaFxcbkBAIC02OTIsNyArNjkyLDcgQEAgc3RydWN0IGZlY19lbmV0X3ByaXZhdGUge1xcbiBcXHR1NjQgZXRodG9vbF9zdGF0c1tdO1xcbiB9O1xcbiBcXG4tdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpO1xcbitpbnQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KTtcXG4gdm9pZCBmZWNfcHRwX3Jlc3RvcmVfc3RhdGUoc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCk7XFxuIHZvaWQgZmVjX3B0cF9zYXZlX3N0YXRlKHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXApO1xcbiB2b2lkIGZlY19wdHBfc3RvcChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uY1xcbmluZGV4IGNlZDRkYmY4Y2Q5MGYuLmI2YzIyZDZjMWU2OWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uY1xcbkBAIC01Mzg0LDggKzUzODQsMTEgQEAgZmVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdFxcdGdvdG8gZmFpbGVkX3Jlc2V0O1xcbiBcXG4gXFx0aXJxX2NudCA9IGZlY19lbmV0X2dldF9pcnFfY250KHBkZXYpO1xcbi1cXHRpZiAoZmVwLVxcdTAwM2VidWZkZXNjX2V4KVxcbi1cXHRcXHRmZWNfcHRwX2luaXQocGRldiwgaXJxX2NudCk7XFxuK1xcdGlmIChmZXAtXFx1MDAzZWJ1ZmRlc2NfZXgpIHtcXG4rXFx0XFx0cmV0ID0gZmVjX3B0cF9pbml0KHBkZXYsIGlycV9jbnQpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIGZhaWxlZF9yZXNldDtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0ID0gZmVjX2VuZXRfaW5pdChuZGV2KTtcXG4gXFx0aWYgKHJldClcXG5AQCAtNTQ1Nyw3ICs1NDYwLDggQEAgZmVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIGZhaWxlZF9pcnE6XFxuIFxcdGZlY19lbmV0X2RlaW5pdChuZGV2KTtcXG4gZmFpbGVkX2luaXQ6XFxuLVxcdGZlY19wdHBfc3RvcChwZGV2KTtcXG4rXFx0aWYgKGZlcC1cXHUwMDNlYnVmZGVzY19leClcXG4rXFx0XFx0ZmVjX3B0cF9zdG9wKHBkZXYpO1xcbiBmYWlsZWRfcmVzZXQ6XFxuIFxcdHBtX3J1bnRpbWVfcHV0X25vaWRsZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFx0cG1fcnVudGltZV9kaXNhYmxlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY1xcbmluZGV4IDU2ODAxYzIwMDlkNTkuLjhhZDY4MDQxMWIwYzMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmNcXG5AQCAtNzM2LDcgKzczNiw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBmZWNfcHBzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuICAqIGN5Y2xlY291bnRlciBpbml0IHJvdXRpbmUgYW5kIGV4aXRzLlxcbiAgKi9cXG4gXFxuLXZvaWQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KVxcbitpbnQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XFxuIFxcdHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG5AQCAtNzc5LDI2ICs3NzksMjkgQEAgdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpXFxuIFxcdFxcdCAgICAgIEhSVElNRVJfTU9ERV9SRUwpO1xcbiBcXG4gXFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWVfb3B0aW9uYWwocGRldiwgXFxcInBwc1xcXCIpO1xcbi1cXHRpZiAoaXJxIFxcdTAwM2MgMClcXG4rXFx0aWYgKGlycSBcXHUwMDNjIDApIHtcXG4gXFx0XFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCBpcnFfaWR4KTtcXG4tXFx0LyogRmFpbHVyZSB0byBnZXQgYW4gaXJxIGlzIG5vdCBmYXRhbCxcXG4tXFx0ICogb25seSB0aGUgUFRQX0NMT0NLX1BQUyBjbG9jayBldmVudHMgc2hvdWxkIHN0b3BcXG4tXFx0ICovXFxuLVxcdGlmIChpcnEgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRpZiAoaXJxIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBpcnEgIT0gLUVOWElPKVxcbitcXHRcXHRcXHRyZXR1cm4gaXJxO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaXJxIFxcdTAwM2UgMCkge1xcbiBcXHRcXHRyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGlycSwgZmVjX3Bwc19pbnRlcnJ1cHQsXFxuIFxcdFxcdFxcdFxcdCAgICAgICAwLCBwZGV2LVxcdTAwM2VuYW1lLCBuZGV2KTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJyZXF1ZXN0IGZvciBwcHMgaXJxIGZhaWxlZCglZClcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCByZXQpO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbiBcXHRmZXAtXFx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcXHUwMDI2ZmVwLVxcdTAwM2VwdHBfY2FwcywgXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcdGlmIChJU19FUlIoZmVwLVxcdTAwM2VwdHBfY2xvY2spKSB7XFxuIFxcdFxcdGZlcC1cXHUwMDNlcHRwX2Nsb2NrID0gTlVMTDtcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwicHRwX2Nsb2NrX3JlZ2lzdGVyIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGZlcC1cXHUwMDNlcHRwX2Nsb2NrKTtcXG4gXFx0fVxcbiBcXG4gXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZmZXAtXFx1MDAzZXRpbWVfa2VlcCwgSFopO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHZvaWQgZmVjX3B0cF9zYXZlX3N0YXRlKHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDExOjU3OjI4LjU4NjYyODEyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE2NTU3Nzg1NTkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0ZSRUVTQ0FMRVwiLFxuICAgIFwiRkVDXCIsXG4gICAgXCJDT01QSUxFX1RFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmZWNfcHRwX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZlY19wdHBfaW5pdCBhbmQgcHJvcGFnYXRlcyB0aGUgZXJyb3IgdG8gZmVjX3Byb2JlLCB3aGljaCBub3cgYWJvcnRzIGluaXRpYWxpemF0aW9uIGlmIFBUUCBzZXR1cCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIgcHJvYmUgcGF0aCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciByZXNvdXJjZSBjbGVhbnVwIG9uIGZhaWx1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNmOGNkOGEzMmJmYzQ0ODM0ZDEwN2MzOGI4YzE4ODE4ODE1OGMxOGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxMTo1NzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaFxuaW5kZXggNzE3NjgwMzE0NmYzZC4uODgzMWRhMzczMjZiMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlYy5oXG5AQCAtNjkyLDcgKzY5Miw3IEBAIHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlIHtcbiBcdHU2NCBldGh0b29sX3N0YXRzW107XG4gfTtcbiBcbi12b2lkIGZlY19wdHBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXJxX2lkeCk7XG4raW50IGZlY19wdHBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXJxX2lkeCk7XG4gdm9pZCBmZWNfcHRwX3Jlc3RvcmVfc3RhdGUoc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCk7XG4gdm9pZCBmZWNfcHRwX3NhdmVfc3RhdGUoc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCk7XG4gdm9pZCBmZWNfcHRwX3N0b3Aoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uY1xuaW5kZXggY2VkNGRiZjhjZDkwZi4uYjZjMjJkNmMxZTY5YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uY1xuQEAgLTUzODQsOCArNTM4NCwxMSBAQCBmZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0Z290byBmYWlsZWRfcmVzZXQ7XG4gXG4gXHRpcnFfY250ID0gZmVjX2VuZXRfZ2V0X2lycV9jbnQocGRldik7XG4tXHRpZiAoZmVwLVx1MDAzZWJ1ZmRlc2NfZXgpXG4tXHRcdGZlY19wdHBfaW5pdChwZGV2LCBpcnFfY250KTtcbitcdGlmIChmZXAtXHUwMDNlYnVmZGVzY19leCkge1xuK1x0XHRyZXQgPSBmZWNfcHRwX2luaXQocGRldiwgaXJxX2NudCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBmYWlsZWRfcmVzZXQ7XG4rXHR9XG4gXG4gXHRyZXQgPSBmZWNfZW5ldF9pbml0KG5kZXYpO1xuIFx0aWYgKHJldClcbkBAIC01NDU3LDcgKzU0NjAsOCBAQCBmZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBmYWlsZWRfaXJxOlxuIFx0ZmVjX2VuZXRfZGVpbml0KG5kZXYpO1xuIGZhaWxlZF9pbml0OlxuLVx0ZmVjX3B0cF9zdG9wKHBkZXYpO1xuK1x0aWYgKGZlcC1cdTAwM2VidWZkZXNjX2V4KVxuK1x0XHRmZWNfcHRwX3N0b3AocGRldik7XG4gZmFpbGVkX3Jlc2V0OlxuIFx0cG1fcnVudGltZV9wdXRfbm9pZGxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcdHBtX3J1bnRpbWVfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmNcbmluZGV4IDU2ODAxYzIwMDlkNTkuLjhhZDY4MDQxMWIwYzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jXG5AQCAtNzM2LDcgKzczNiw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBmZWNfcHBzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4gICogY3ljbGVjb3VudGVyIGluaXQgcm91dGluZSBhbmQgZXhpdHMuXG4gICovXG4gXG4tdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpXG4raW50IGZlY19wdHBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXJxX2lkeClcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuIFx0c3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KG5kZXYpO1xuQEAgLTc3OSwyNiArNzc5LDI5IEBAIHZvaWQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KVxuIFx0XHQgICAgICBIUlRJTUVSX01PREVfUkVMKTtcbiBcbiBcdGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lX29wdGlvbmFsKHBkZXYsIFwicHBzXCIpO1xuLVx0aWYgKGlycSBcdTAwM2MgMClcbitcdGlmIChpcnEgXHUwMDNjIDApIHtcbiBcdFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCBpcnFfaWR4KTtcbi1cdC8qIEZhaWx1cmUgdG8gZ2V0IGFuIGlycSBpcyBub3QgZmF0YWwsXG4tXHQgKiBvbmx5IHRoZSBQVFBfQ0xPQ0tfUFBTIGNsb2NrIGV2ZW50cyBzaG91bGQgc3RvcFxuLVx0ICovXG4tXHRpZiAoaXJxIFx1MDAzZT0gMCkge1xuK1x0XHRpZiAoaXJxIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBpcnEgIT0gLUVOWElPKVxuK1x0XHRcdHJldHVybiBpcnE7XG4rXHR9XG4rXG4rXHRpZiAoaXJxIFx1MDAzZSAwKSB7XG4gXHRcdHJldCA9IGRldm1fcmVxdWVzdF9pcnEoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGlycSwgZmVjX3Bwc19pbnRlcnJ1cHQsXG4gXHRcdFx0XHQgICAgICAgMCwgcGRldi1cdTAwM2VuYW1lLCBuZGV2KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRkZXZfd2FybihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJyZXF1ZXN0IGZvciBwcHMgaXJxIGZhaWxlZCglZClcXG5cIixcbi1cdFx0XHRcdCByZXQpO1xuK1x0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRmZXAtXHUwMDNlcHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFx1MDAyNmZlcC1cdTAwM2VwdHBfY2FwcywgXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFx0aWYgKElTX0VSUihmZXAtXHUwMDNlcHRwX2Nsb2NrKSkge1xuIFx0XHRmZXAtXHUwMDNlcHRwX2Nsb2NrID0gTlVMTDtcbiBcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJwdHBfY2xvY2tfcmVnaXN0ZXIgZmFpbGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gUFRSX0VSUihmZXAtXHUwMDNlcHRwX2Nsb2NrKTtcbiBcdH1cbiBcbiBcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZmZXAtXHUwMDNldGltZV9rZWVwLCBIWik7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gdm9pZCBmZWNfcHRwX3NhdmVfc3RhdGUoc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDExOjU3OjI4LjU4NjYyOTY4NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MTQ2ODg2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgRnJlZXNjYWxlIEZFQyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1ha2luZyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgRnJlZXNjYWxlIEZhc3QgRXRoZXJuZXQgQ29udHJvbGxlciAoRkVDKSBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQncyBhbHRlcmluZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG9mIGBmZWNfcHRwX2luaXRgIGluIGBmZWNfcHRwLmNgLCBtYWtpbmcgaXQgcmV0dXJuIGFuIGBpbnRgIGluc3RlYWQgb2YgYHZvaWRgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGVycm9yIGhhbmRsaW5nLXJlbGF0ZWQsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLiBUaGUgY29ycmVzcG9uZGluZyB1cGRhdGUgdG8gYGZlY19wcm9iZWAgaW4gYGZlY19tYWluLmNgIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlIGNvbmZpcm1zIHRoYXQgc3VzcGljaW9uLiBUaGlzIG1lYW5zIHRoZSBwcm9iZSBmdW5jdGlvbiB3aWxsIG5vdyBhY3RpdmVseSBoYW5kbGUgZXJyb3JzIGZyb20gdGhlIFBUUCBpbml0aWFsaXphdGlvbiwgaW1wcm92aW5nIG92ZXJhbGwgcm9idXN0bmVzcywgYW5kIHRoYXQncyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgZGV0YWlsIEknbSBsb29raW5nIGZvciBpbiBkcml2ZXIgdXBkYXRlcy5cblxuTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaG93IHJlbGV2YW50IGlzIHRoaXMgY2hhbmdlIGluIGEgY29tbW9uIHRlc3RpbmcgZW52aXJvbm1lbnQ/IFRoZSBkcml2ZXIgaXRzZWxmIGlzIGNsZWFybHkgZm9yIEZyZWVzY2FsZSBGRUMgaGFyZHdhcmUuIEdpdmVuIHRoZSB1YmlxdWl0eSBvZiBRRU1VIGZvciB2aXJ0dWFsaXphdGlvbiwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgZHJpdmVyIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBRRU1VIGluc3RhbmNlPyBRRU1VLCBvZiBjb3Vyc2UsIGhhcyBhbiBgaW14LmZlY2AgZGV2aWNlIChkZWZpbmVkIGluIGBpbXhfZmVjLmNgKSwgc28gdGhhdCBzb3VuZHMgbGlrZSBhIGdvb2QgbGVhZCB0byBmb2xsb3cuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdG8gc2VlIGlmIGBmZWNfcHJvYmVgIGlzIGFjdHVhbGx5IGludm9rZWQuIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgZHJpdmVyLCBzbyBpZiB3ZSBjYW4gdHJpZ2dlciB0aGUgcHJvYmUsIHRoZW4gdGhlIGNoYW5nZXMgYXJlIGF0IGxlYXN0IHRlc3RhYmxlLiBHaXZlbiB0aGF0IGl0J3MgZm9yIHRoZSBGcmVlc2NhbGUgRkVDLCB0aGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IEtjb25maWcgb3B0aW9ucyBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdG8gYmUgc3VyZSB0aGUgZHJpdmVyIGlzIGJ1aWx0IGFuZCBhY2Nlc3NpYmxlIGluIHRoZSBjb25maWd1cmF0aW9ucyBJIHR5cGljYWxseSB1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1NzozNS4wMDEzMjE1MTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1NDEyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZFQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz0yMT1pZiBORVRfVkVORE9SX0ZSRUVTQ0FMRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjIzOmNvbmZpZyBGRUNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiRkVDIGV0aGVybmV0IGNvbnRyb2xsZXIgKG9mIENvbGRGaXJlIGFuZCBzb21lIGkuTVggQ1BVcylcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0zOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzozOTpjb25maWcgRkVDX01QQzUyeHhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy00MC1cXHR0cmlzdGF0ZSBcXFwiRkVDIE1QQzUyeHggZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6NTA6Y29uZmlnIEZFQ19NUEM1Mnh4X01ESU9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy01MS1cXHRib29sIFxcXCJGRUMgTVBDNTJ4eCBNRElPIGJ1cyBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDExOjU3OjM1LjA0NDg2Njk1M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzEyNjE1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkZFQyBEcml2ZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21ldGhpbmcgdGhhdCBzZWVtcyB0byBpbnZvbHZlIGEgZHJpdmVyIGNhbGxlZCBgRkVDYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuXCIgVGhlIHRleHQgcG9pbnRzIG91dCB0aGF0IGBGRUNgIHJlbGllcyBvbiBgTkVUX1ZFTkRPUl9GUkVFU0NBTEVgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0J3MgYSBuZXR3b3JrIGRyaXZlciByZWxhdGVkIHRvIEZyZWVzY2FsZSAobm93IE5YUCkgaGFyZHdhcmUuIE15IG5leHQgc3RlcD8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkIGZvciB0aGUga2VybmVsLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmN5IGFuZCB1bmRlcnN0YW5kIGhvdyB0aGlzIGBGRUNgIGRyaXZlciBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgbWlnaHQgYmUgcmVsZXZhbnQgdG8gaXRzIGJlaGF2aW9yLiBMZXQncyBnZXQgdG8gd29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6NDAwNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDExOjU3OjM4LjMxNjEzMTIzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE3NzQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRkVDJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz0yMT1pZiBORVRfVkVORE9SX0ZSRUVTQ0FMRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjIzOmNvbmZpZyBGRUNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiRkVDIGV0aGVybmV0IGNvbnRyb2xsZXIgKG9mIENvbGRGaXJlIGFuZCBzb21lIGkuTVggQ1BVcylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDExOjU3OjM4LjM2MDMxMzAzNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDkzMTk5MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBGRUMncyBLY29uZmlnIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIHRoZSBGRUMgKEZsZXhpYmxlIEV0aGVybmV0IENvbnRyb2xsZXIpLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgaXQncyBjb25maWd1cmVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gSSdtIHRoaW5raW5nLCBcIkxldCdzIHNlZSBLY29uZmlnIGZvciBGRUMuXCIgVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGJ1aWxkIGZsYWdzLCB0aGUgZGV2aWNlIHRyZWUgaW50ZWdyYXRpb24gcG9pbnRz4oCmIGV2ZXJ5dGhpbmcgdGhhdCBzaGFwZXMgaG93IHRoaXMgc3BlY2lmaWMgRkVDIGluc3RhbmNlIHdpbGwgYmVoYXZlIGluIGEgc3lzdGVtLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIHN0dWZmIC0gY2xvY2sgY29uZmlndXJhdGlvbnMsIGludGVycnVwdCBzZXR0aW5ncywgUEhZIHN1cHBvcnQsIG1heWJlIHNvbWUgYWR2YW5jZWQgZmVhdHVyZXMgbGlrZSBETUEgc2V0dGluZ3Mgb3IgVkxBTiBoYW5kbGluZy4gQnV0IEknbGwgbmVlZCB0byBsb29rIGNsb3NlbHkgZm9yIGFueXRoaW5nIHZlbmRvci1zcGVjaWZpYyBvciBhbnkgdW51c3VhbCBhcmNoaXRlY3R1cmFsIGNob2ljZXMgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgaW50ZWdyYXRpb24uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9ucyBhbmQgYXNzZXNzIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGFyZWFzIGZvciBjdXN0b21pemF0aW9uIGJlZm9yZSBJIHN0YXJ0IGJ1aWxkaW5nIG9yIGRlYnVnZ2luZyBhbnkgRkVDLWRlcGVuZGVudCBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1Nzo0Mi4yNjk2MzcyNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIwOlxcdFxcbiAgMjE6XFx0aWYgTkVUX1ZFTkRPUl9GUkVFU0NBTEVcXG4gIDIyOlxcdFxcbiAgMjM6XFx0Y29uZmlnIEZFQ1xcbiAgMjQ6XFx0XFx0dHJpc3RhdGUgXFxcIkZFQyBldGhlcm5ldCBjb250cm9sbGVyIChvZiBDb2xkRmlyZSBhbmQgc29tZSBpLk1YIENQVXMpXFxcIlxcbiAgMjU6XFx0XFx0ZGVwZW5kcyBvbiAoTTUyM3ggfHwgTTUyN3ggfHwgTTUyNzIgfHwgTTUyOHggfHwgTTUyMHggfHwgTTUzMnggfHwgXFxcXFxcbiAgMjY6XFx0XFx0XFx0ICAgQVJDSF9NWEMgfHwgQVJDSF9TMzIgfHwgU09DX0lNWDI4IHx8IENPTVBJTEVfVEVTVClcXG4gIDI3OlxcdFxcdGRlZmF1bHQgQVJDSF9NWEMgfHwgU09DX0lNWDI4IGlmIEFSTVxcbiAgMjg6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgMjk6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAzMDpcXHRcXHRzZWxlY3QgUEhZTElCXFxuICAzMTpcXHRcXHRzZWxlY3QgRklYRURfUEhZXFxuICAzMjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAzMzpcXHRcXHRpbXBseSBQQUdFX1BPT0xfU1RBVFNcXG4gIDM0OlxcdFxcdGltcGx5IE5FVF9TRUxGVEVTVFNcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIGJ1aWx0LWluIDEwLzEwMCBGYXN0IGV0aGVybmV0XFxuICAzNzpcXHRcXHQgIGNvbnRyb2xsZXIgb24gc29tZSBNb3Rvcm9sYSBDb2xkRmlyZSBhbmQgRnJlZXNjYWxlIGkuTVgvUzMyIHByb2Nlc3NvcnMuXFxuICAzODpcXHRcXG4gIDM5OlxcdGNvbmZpZyBGRUNfTVBDNTJ4eFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1Nzo0Mi4yNjk3MDY5NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NTE4Mjk4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgRkVDIERyaXZlcjogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyB0aGUgcG9zc2liaWxpdHkgb2YgZnV6emluZyB0aGlzIGRyaXZlciBoaW5nZXMgb24gYSBmZXcgY29uZGl0aW9ucywgc3BlY2lmaWNhbGx5IHRob3NlIGRlZmluZWQgYnkgdGhhdCBsb25nIGNvbmRpdGlvbmFsIHN0YXRlbWVudCDigJMgYChNNTIzeCB8fCBNNTI3eCB8fCBNNTI3MiB8fCBNNTI4eCB8fCBNNTIweCB8fCBNNTMyeCB8fCBBUkNIX01YQyB8fCBBUkNIX1MzMiB8fCBTT0NfSU1YMjggfHwgQ09NUElMRV9URVNUKWAuIFRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5ICpmdXp6KiB0aGlzIHRoaW5nIGVmZmVjdGl2ZWx5P1xuXG5UaGlua2luZyBwcmFjdGljYWxseSwgeWVzLCBpdCBjYW4gYmUgdGVzdGVkIGluIFFFTVUsIHBhcnRpY3VsYXJseSB1c2luZyBhbiBBUk0gbWFjaGluZS4gU29tZXRoaW5nIGxpa2UgYW4gYGlteDI1LXBka2AsIGBzYWJyZWxpdGVgLCBvciBgbWNpbXg2dWwtZXZrYCB3b3VsZCBiZSBwZXJmZWN0IGZvciB0aGlzIGtpbmQgb2YgdGVzdGluZy4gQnV0IGhlcmUncyB0aGUgcnViOiBzeXprYWxsZXIgdXN1YWxseSBydW5zIG9uIHg4Nl82NCBvciBhcm02NCBhcmNoaXRlY3R1cmVzLiBJZiBgQ09NUElMRV9URVNUYCBpcyBlbmFibGVkLCB3ZSBjYW4gYXQgbGVhc3QgYnVpbGQgdGhlIGRyaXZlciBvbiB4ODZfNjQsIGJ1dCBjYW4gd2UgcmVsaWFibHkgcHJvYmUgaXQ/IFRoaXMgZHJpdmVyIGlzIGEgKnBsYXRmb3JtKiBkcml2ZXIsIHNvIHRoYXQgcHJvYmluZyBiZWNvbWVzIHRoZSBrZXkuXG5cblRoZXJlZm9yZSwgbGV0J3MgZHJpbGwgZG93biBhbmQgZXhhbWluZSBgZmVjX3Byb2JlYCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwcm9iZSBmdW5jdGlvbiB3b3JrcyB0byBkZXRlcm1pbmUgaWYgaXQgY2FuIGJlIHRyaWdnZXJlZCBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSBhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtIGltcGxpY2F0aW9ucyBhcmUgd2hhdCBJIG5lZWQgdG8gdW5wYWNrIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MjUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1Nzo0OS45MjE1MzkyNDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTMyMjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZlY19wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz01MjAzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzo1MjA0OmZlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTUyMDUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NTY3Mz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmZWNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNTY4MC1cXHQuaWRfdGFibGUgPSBmZWNfZGV2dHlwZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzo1NjgxOlxcdC5wcm9iZVxcdD0gZmVjX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTU2ODItXFx0LnJlbW92ZSA9IGZlY19kcnZfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1Nzo0OS45NjY0NzUxMDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ5MzQ3NTUzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgRkVDIERyaXZlcjogQSBQcm9iZSBQYXRoIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkNhbiBzeXprYWxsZXIgZXZlbiAqcmVhY2gqIHRoaXM/XCIgSXQncyBhIHBsYXRmb3JtIGRyaXZlciwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBwcm9iZWQgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIEFDUEksIG9yIHNvbWV0aGluZyBlbHNlLiBJIGltbWVkaWF0ZWx5IGp1bXAgdG8gbXkga25vd2xlZGdlIG9mIHN5emthbGxlciwgd29uZGVyaW5nIGlmIGl0IGNhbiBtYW5pcHVsYXRlIGRldmljZXMgZGlyZWN0bHksIGxpa2Ugd2l0aCBgc3l6X2RldmxpbmtfbmV0YCwgb3IgaWYgaXQgbmVlZHMgYSBtb3JlIGluZGlyZWN0IHJvdXRlLiBJIHJlbWVtYmVyIHRoZXJlIG1pZ2h0IGJlIHBsYXRmb3JtIGRldmljZSBpbmplY3Rpb24gdmlhIGBzeXpfcGxhdGZvcm1fZGV2aWNlX2FkZGAg4oCTIGJ1dCBubywgdGhhdCdzIG5vdCBhIGdlbmVyYWwgc3lzY2FsbCwgbm90IGEgZ29vZCBvcHRpb24gaGVyZS5cblxuVGhlbiBJIHN0YXJ0IHRoaW5raW5nIGFib3V0IG90aGVyIHdheXMgc3l6a2FsbGVyIGludGVyYWN0cyB3aXRoIGRyaXZlcnMsIGxpa2UgYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseV9pZGDigKYgbm8gZGljZSwgaXQncyBub3QgYSBnb29kIGZpdCBoZXJlIGVpdGhlci4gVGhlIGNvcmUgcHJvYmxlbSBpcywgY2FuIHN5emthbGxlciBldmVuIFwic2VlXCIgdGhpcyBkZXZpY2Ugd2l0aGluIGEgdHlwaWNhbCBWTSBlbnZpcm9ubWVudD8gSSBrbm93IHN5emthbGxlciBvZnRlbiBydW5zIG9uIEFSTTY0IHdpdGggUUVNVSwgdXNpbmcgdGhlIGB2aXJ0YCBtYWNoaW5lLCBidXQgSSBkb3VidCB0aGlzIGRldmljZSBpcyBwcmVzZW50IHRoZXJlLiBTYW1lIHdpdGggeDg2XzY0OyBJIHF1aWNrbHkgcmVhbGl6ZSBpdOKAmXMgbm90LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHN5emthbGxlciBzdGlja3MgdG8gUUVNVSBlbnZpcm9ubWVudHMuXG5cbkkgYnJpZWZseSBjb25zaWRlciBpZiB0aGVyZSdzIHNvbWUgKm90aGVyKiBvYnNjdXJlIG1ldGhvZCBzeXprYWxsZXIgY291bGQgdXNlLCBidXQgdGhlbiBJIHJlbWVtYmVyIHRoaXMgbGluZSBmcm9tIHRoZSBwcm9tcHQ6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFRoYXQgdGhyb3dzIG1lIGFub3RoZXIgY3VydmViYWxsLCBiZWNhdXNlIEkgd29uZGVyIGlmIGBmZWNgIGlzIGVtdWxhdGVkLiBUaGVuIGl0IGhpdHMgbWUsIEkgdGhpbmssIFwiV2FpdCwgZG9lc24ndCBRRU1VIGhhdmUgdGhlIGBpbXguZmVjYCBkZXZpY2U/XCIgWWVzISBJZiBJIHJ1biBpdCBvbiBhbiBpLk1YIG1hY2hpbmUgaXQncyByZWFjaGFibGUuXG5cblRoZSBwcm9tcHQgYWxzbyBzYXlzIHRoYXQgc3l6a2FsbGVyIHJ1bnMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCBkb2VzIG5vdCBtZW50aW9uIHRoYXQgaXQncyByZXN0cmljdGVkIHRvIHg4Nl82NCwgb3Igb3RoZXIgc3lzdGVtcywgc28gdGhlIGkuTVggbWFjaGluZSBpcyBhIHBvc3NpYmlsaXR5LiBBbmQgdGhlbiBpdCBzYXlzLCBcIkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiLiBHaXZlbiB0aGF0IGBmZWNgIGlzIGVtdWxhdGVkIGFzIGBpbXguZmVjYCwgaXQgKmlzKiB0ZWNobmljYWxseSByZWFjaGFibGUgaW4gUUVNVS4gVGhhdCBpcyBnb29kIG5ld3MuXG5cbkFscmlnaHQsIHNvIHRoZSBkZXZpY2UgKmlzKiByZWFjaGFibGUuIE5vdywgaXMgaXQgd29ydGggZnV6emluZz8gVGhlIHBhdGNoIGZvY3VzZXMgb24gZXJyb3IgY2hlY2tpbmcgaW4gYGZlY19wdHBfaW5pdGAgd2l0aGluIGBmZWNfcHJvYmVgLiBJZiB0aGlzIGZhaWxzLCBpdCBnb2VzIHRvIGBmYWlsZWRfcmVzZXRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY2hhbmdlIGluIHRoZSAqcHJvYmUqIHBhdGgsIGFuZCB0aGlzIGlzIHdoZXJlIHN5emthbGxlciByZWFsbHkgc2hpbmVzLiBNeSBleHBlcmllbmNlIHNob3dzIHRoYXQgcHJvYmUgcGF0aHMgYXJlIG9mdGVuIGZ1enplZCB0aHJvdWdoIGZhdWx0IGluamVjdGlvbiBvciBpbnN0YW50aWF0aW9uLiBTbywgdGhlIHNob3J0IGFuc3dlciBpcyB5ZXMsIHdvcnRoIGZ1enppbmcuXG5cbk15IG5leHQgcXVlc3Rpb246IENhbiBgZmVjX3B0cF9pbml0YCBhY3R1YWxseSBmYWlsPyBMZXQncyBjaGVjayB0aGUgY29kZS4gSSByZWNhbGwgdGhhdCBgZmVjX3B0cF9pbml0YCBjYWxscyBgcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbGAsIGBkZXZtX3JlcXVlc3RfaXJxYCwgYW5kIGBwdHBfY2xvY2tfcmVnaXN0ZXJgLiBUaGVzZSBmdW5jdGlvbnMgYWxsIGhhdmUgdGhlIHBvdGVudGlhbCB0byBmYWlsLCBlc3BlY2lhbGx5IHVuZGVyIGZhdWx0IGluamVjdGlvbi4gTm93LCBpZiBgZmVjX3B0cF9pbml0YCBjYWxscyB0aG9zZSBmdW5jdGlvbnMsIGFuZCB0aG9zZSBmdW5jdGlvbnMgZmFpbCwgdGhlbiB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB3b3J0aCBpbnZlc3RpZ2F0aW5nIGZ1cnRoZXIuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgZmVjX3B0cF9pbml0YCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTE6NTg6MDQuOTAxMjMzNDExWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAxMTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmZWNfcHRwX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jPTY5Nj1zdGF0aWMgaXJxcmV0dXJuX3QgZmVjX3Bwc19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYy03MjktLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYzo3MzA6ICogZmVjX3B0cF9pbml0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYy03MzEtICogQHBkZXY6IFRoZSBGRUMgbmV0d29yayBhZGFwdGVyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jLTczOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jOjczOTppbnQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmMtNzQwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTE6NTg6MDQuOTQ3MjUwNTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUyNjUyNDE5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGRUMgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIHVwZGF0ZWQgYGZlY19wdHBfaW5pdGAgdG8gcmV0dXJuIGFuIGludGVnZXIsIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZSBmb3IgZXJyb3IgaGFuZGxpbmcuIFRoYXQgcmV0dXJuIHZhbHVlIGlzIHRoZW4gYmVpbmcgZGVhbHQgd2l0aCBpbiBgZmVjX3Byb2JlYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gbWFrZSBzdXJlIHRoaXMgYnVpbGRzIGNvcnJlY3RseS5cblxuRmlyc3QsIG9idmlvdXNseSwgSSdsbCBuZWVkIGBGRUNgIGVuYWJsZWQuIFRoYXQncyBhIGdpdmVuLiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgc2VlIGlmIGBGRUNgIGRlcGVuZHMgb24gYW55IG90aGVyIGNvbmZpZ3MuIEFoLCBsb29rcyBsaWtlIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAgaXMgYWxzbyByZXF1aXJlZC4gQWxyaWdodCwgbGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZGVwZW5kZW5jaWVzIG9yIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1OTozMC4yMTI0OTU2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg3MDc3MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9WRU5ET1JfRlJFRVNDQUxFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9GUkVFU0NBTEVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy03LVxcdGJvb2wgXFxcIkZyZWVzY2FsZSBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1OTozMC4zMjEyMTA5MzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwMjU5Mzk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEZyZWVzY2FsZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBGcmVlc2NhbGUgbmV0d29yayBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYE5FVF9WRU5ET1JfRlJFRVNDQUxFYCBhbmQgdGhlIGBGRUNgIGNvbXBvbmVudHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGdyYXNwIHRoZWlyIGludGVyZGVwZW5kZW5jaWVzLiBBaGEsIGhlcmUncyBhbiBpbnRlcmVzdGluZyBkZXBlbmRlbmN5IC0gYEZFQ2AgcmVsaWVzIG9uIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAuIEl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhhdCBvcHRpb25hbCBjbG9jayBzZXR0aW5nLiBSaWdodCBub3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCBzZXR0aW5nIGluIHRoaXMgY29udGV4dC4gTGV0J3MgZGlnIGRlZXBlciBhbmQgc2VlIHdoYXQgdGhhdCdzIGFsbCBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk3MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDExOjU5OjMzLjQyMzgwODI1NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY2NTI3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvcHRwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wdHAvS2NvbmZpZz04PWNvbmZpZyBQVFBfMTU4OF9DTE9DS1xcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjMwOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvcHRwL0tjb25maWctMzEtXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTE6NTk6MzMuNTEwNDY2ODQzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTA1NTc4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBEaWxlbW1hKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyB0cmlzdGF0ZSBvcHRpb24sIHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQncyBhIGZlYXR1cmUgdGhhdCBjYW4gYmUgc2VsZWN0aXZlbHkgaW5jbHVkZWQuIEluIHRoaXMgY2FzZSwgaXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBgRkVDYCDigJMgRm9yd2FyZCBFcnJvciBDb3JyZWN0aW9uLiBUaGUgZG9jdW1lbnRhdGlvbiBzYXlzIGlmIHdlIGVuYWJsZSBgRkVDYCwgd2UgbWlnaHQgbmVlZCB0byBlbmFibGUgYFBUUF8xNTg4X0NMT0NLYCwgb3IsIHdlbGwsIGl0IG1pZ2h0IGp1c3Qgd29yayBpZiBgUFRQXzE1ODhfQ0xPQ0tgICppc24ndCogc2V0LCBzaW5jZSBpdCdzIGxpc3RlZCBhcyBvcHRpb25hbC4gVGhhdOKAmXMgYSBsaXR0bGUgYW1iaWd1b3VzLlxuXG5XYWl0IGEgbWludXRlLCB0aGUgYGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgIHN0YXRlbWVudCBtZWFucyB0aGF0IGlmIGBQVFBfMTU4OF9DTE9DS2AgaXMgYnVpbHQgYXMgYSBtb2R1bGUsIG9yIGBtYCwgdGhlbiBgRkVDYCAqY2FuJ3QqIGJlIGVuYWJsZWQuIFRoYXQgY29tcGxpY2F0ZXMgdGhpbmdzLCBiZWNhdXNlIGl0IG1lYW5zIGlmIGBGRUNgIG5lZWRzIGBQVFBfMTU4OF9DTE9DS2AsIHdlJ3JlIGxvY2tlZCBvdXQgb2YgYSBtb2R1bGUgYnVpbGQuIEkgc2hvdWxkIHByb2JhYmx5IGVyciBvbiB0aGUgc2lkZSBvZiBjYXV0aW9uIGFuZCBlbmFibGUgYFBUUF8xNTg4X0NMT0NLYCB0byBiZSBgeWAganVzdCB0byBiZSBzYWZlLiBBbHRlcm5hdGl2ZWx5LCBwZXJoYXBzIGxlYXZlIGl0IHVuZGVmaW5lZD9cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24sIHdoYXQgYWJvdXQgYENPTVBJTEVfVEVTVGA/IEl0J3MgbGlzdGVkIGluIHRoZSBkZXBlbmRlbmN5IGZvciBgRkVDYC4gTGV0IG1lIHNlZSwgYEZFQ2AgZGVwZW5kcyBvbiBhIGxpc3Qgb2YgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZXMsIGFuZCBhbHNvLCBjcml0aWNhbGx5LCBgQ09NUElMRV9URVNUYC4gVGhpcyBkZXBlbmRlbmN5IGlzIHdoYXQgSSdtIGludGVyZXN0ZWQgaW4hIFRoaXMgZGVwZW5kZW5jeSBvbiBgQ09NUElMRV9URVNUYCBjb3VsZCBiZSBlbm91Z2ggdG8gZW5hYmxlIGJ1aWxkaW5nIHRoZSBjb2RlIG9uIHg4Nl82NCwgd2hpY2ggaXMgd2hhdCBJIG5lZWQuXG5cblNvLCB0aGUga2V5IGhlcmUgaXMgdG8gZW5hYmxlIGBDT01QSUxFX1RFU1RgIHRvIGVuc3VyZSB0aGF0IHRoaXMgY2FuIGJlIGJ1aWx0IG9uIHg4Nl82NCBhbmQgdGVzdCB0aGUgZmVhdHVyZS4gTGV0IG1lIGNoZWNrIGlmIGBDT01QSUxFX1RFU1RgIGlzIGVub3VnaCwgYnkgaXRzZWxmLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBgRkVDYCBlbmFibGVkIGlmIHRoZSBvdGhlciBkZXBlbmRlbmNpZXMgYXJlIG1ldC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI4OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1OTozOS40MDEwMjc3NTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQ1Mzg1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09NUElMRV9URVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MjMzPWNvbmZpZyBJTklUX0VOVl9BUkdfTElNSVRcXG4tLVxcbmluaXQvS2NvbmZpZy0yNDAtXFxuaW5pdC9LY29uZmlnOjI0MTpjb25maWcgQ09NUElMRV9URVNUXFxuaW5pdC9LY29uZmlnLTI0Mi1cXHRib29sIFxcXCJDb21waWxlIGFsc28gZHJpdmVycyB3aGljaCB3aWxsIG5vdCBsb2FkXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1OTozOS41MDM0OTEwMjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUzNzMwNTcwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJlYWNoYWJpbGl0eSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyBgQ09NUElMRV9URVNUYCBpcyBkZWZpbml0ZWx5IHN0YW5kYXJkLCBzbyB0aGF0IHBhcnQgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGF0IG1lYW5zIGBFbmFibGVDb25maWdzYCBzaG91bGQgaW5jbHVkZSBgW1wiTkVUX1ZFTkRPUl9GUkVFU0NBTEVcIiwgXCJGRUNcIiwgXCJDT01QSUxFX1RFU1RcIl1gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgZmVjX3Byb2JlYCBpcyBhY3R1YWxseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cC4gVGhlIHF1ZXN0aW9uIGJvaWxzIGRvd24gdG8gd2hldGhlciBpdCB3aWxsIGJlIHByb2JlZCwgZXZlbiBpZiBpdCdzIGNvbXBpbGVkLlxuXG5JIGtub3cgU3l6a2FsbGVyIGRvZXNuJ3QgdXNlIGBzeXpfZGV2bGlua19uZXRgIGZvciBwbGF0Zm9ybSBkZXZpY2VzLiBIbW1tLi4ud2FpdCwgdGhlcmUncyBhIHBzZXVkby1zeXNjYWxsOiBgc3l6X3BsYXRmb3JtX2RldmljZV9hZGRgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgU3l6a2FsbGVyIHBzZXVkby1zeXNjYWxsIGxpc3QuXG5cbkhhbmcgb24uLi50aGUgcHJvbXB0IGV4cGxpY2l0bHkgbWVudGlvbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLiBTbywgaWYgYSBkZXZpY2UgKmlzbid0KiBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9uIHRoZSBhcmNoaXRlY3R1cmUgU3l6a2FsbGVyIHJ1bnMsIHRoZW4gaXQncyAqbm90KiByZWFjaGFibGUsIHJpZ2h0PyBCdXQgUUVNVSAqZG9lcyogZW11bGF0ZSBgaW14LmZlY2Agb24gQVJNLCBhbmQgU3l6a2FsbGVyIGNhbiBydW4gb24gQVJNIFFFTVUgKHVzaW5nIGBxZW11LXN5c3RlbS1hcm1gIG9yIGBxZW11LXN5c3RlbS1hYXJjaDY0YCkuIFNvIHRoYXQgbWVhbnMgaXQgKmlzKiByZWFjaGFibGUgaW4gUUVNVS5cblxuSnVzdCB0byBiZSBzdXJlLCBldmVuIHRob3VnaCBJIGRpZG4ndCBzZWUgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYCwgbWF5YmUgaXQncyBwcm9iZS1hYmxlIHRocm91Z2ggZGV2aWNlIHRyZWUgb3ZlcmxheXMgb3Igc29tZXRoaW5nIHNpbWlsYXI/XG5cbkFscmlnaHQsIHRoZSBwcm9tcHQncyB3b3JkaW5nIChcImV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIikgcmVhbGx5IGNsYXJpZmllcyB0aGlzLiBTaW5jZSBRRU1VIGVtdWxhdGVzIGBpbXguZmVjYCwgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIGltcG9ydGFudD8gSSBzaG91bGQgZm9jdXMgb24gYGZlY19wcm9iZWAgYW5kIGBmZWNfcHRwX2luaXRgLiBJIG5lZWQgdG8gc2VlIGlmIGBmZWNfcHRwX2luaXRgIGlzIHN0YXRpYy4gSXQncyBub3Qgc3RhdGljLlxuYGludCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpYC4gVGhhdCdzIGdvb2QgdG8ga25vdy4gQW5kIGBmZWNfcHJvYmVgIGlzIHN0YXRpYy4gT2theS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA0OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1OTo1NC44NzY1NTI5ODJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NDgwNzkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmZWNfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NTIwMz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NTIwNDpmZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy01MjA1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTU2NzM9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZmVjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTU2ODAtXFx0LmlkX3RhYmxlID0gZmVjX2RldnR5cGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NTY4MTpcXHQucHJvYmVcXHQ9IGZlY19wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy01NjgyLVxcdC5yZW1vdmUgPSBmZWNfZHJ2X3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTE6NTk6NTUuMjcxMzcyM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTY1NjgyMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRHJpdmVyIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgZmVjX3Byb2JlYCBqdW1wcyBvdXQgYXQgbWUuIFRoZSB0aGluZyBpcywgYGZlY19wcm9iZWAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIGxlc3MgZGVzaXJhYmxlIGZyb20gYW4gQVBJIGVudHJ5IHBvaW50IHBlcnNwZWN0aXZlLCBhcyBpdCdzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4gSSBuZWVkIHRvIGZvY3VzIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIHByb21wdCBpcyBjbGVhciBvbiB0aGF0LiBJIGluaXRpYWxseSB0aG91Z2h0IEkgY291bGQganVzdCBmb2N1cyBvbiBgZmVjX3B0cF9pbml0YCBzaW5jZSB0aGF0J3Mgbm9uLXN0YXRpYywgYW5kIHNlZW1zIHRvIGJlIHRoZSBwcmVmZXJyZWQgY2hvaWNlLiBCdXQgd2FpdCwgdGhlIHBhdGNoICphbHNvKiBtb2RpZmllcyBgZmVjX3Byb2JlYCwgd2hpY2ggY29tcGxpY2F0ZXMgdGhpbmdzLiBFdmVuIHRob3VnaCBpdCdzIHN0YXRpYywgaXQncyBzdGlsbCBiZWluZyB0b3VjaGVkLCBhbmQgaXQgKmlzKiBhIHByb2JlIGZ1bmN0aW9uLCB3aGljaCBzdWdnZXN0cyBpdCAqY291bGQqIGJlIGEgZHJpdmVyIGVudHJ5IHBvaW50LlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2sgYW5kIHJlYXNzZXNzLiBTbywgYGZlY19wcm9iZWAgaXMgb3V0IGJlY2F1c2UgaXQncyBzdGF0aWMsIHdoaWNoIG1ha2VzIGBmZWNfcHRwX2luaXRgIHRoZSBtb3JlIHByZWZlcnJlZCBmdW5jdGlvbi4gSG93ZXZlciwgdGhlIHBhdGNoIHNob3dzIHRoYXQgYGZlY19wcm9iZWAgY29uZGl0aW9uYWxseSBjYWxscyBgZmVjX3B0cF9zdG9wYC4gVGhpcyBtYWtlcyBgZmVjX3B0cF9zdG9wYCBhIGZ1bmN0aW9uIEkgKnNob3VsZCogY29uc2lkZXIgYmVjYXVzZSBvZiBpdHMgbW9kaWZpZWQgdXNhZ2UgaW4gdGhlIHByb2JlLiBJJ20gZ29pbmcgdG8gaW5jbHVkZSB0aGF0IGFzIGEgY2FuZGlkYXRlIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMjQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6MDA6MDAuODM3MDU5MzU2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTk4NTA1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmZWNfcHRwX3N0b3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jPTgyNz12b2lkIGZlY19wdHBfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYy04NTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYzo4NTc6dm9pZCBmZWNfcHRwX3N0b3Aoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jLTg1OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjAwOjAwLjkyMzA1MDQ2M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzExNDc2NjQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBGRUMgUFRQIEluaXRpYWxpemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gYGZlY19wdHBfc3RvcGAgaXMgKm5vdCogc3RhdGljLCB3aGljaCBtZWFucyBgZmVjX3B0cF9pbml0YCBhbmQgYGZlY19wdHBfc3RvcGAgYXJlIHBvdGVudGlhbCBmb2NhbCBwb2ludHMgZm9yIGZ1enppbmcsIHNvIHRob3NlIHNob3VsZCBnbyBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC5cblxuTG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBpdCdzIHByZXR0eSBjbGVhcjogdGhleSd2ZSBjaGFuZ2VkIHRoZSByZXR1cm4gdHlwZSBvZiBgZmVjX3B0cF9pbml0YCB0byBgaW50YCBhbmQgYWRkZWQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBmdW5jdGlvbiBhbmQgYWxzbyBpbiB0aGUgYGZlY19wcm9iZWAgY2FsbGVyLiBTcGVjaWZpY2FsbHksIGBmZWNfcHJvYmVgIG5vdyBjaGVja3MgdGhlIHJldHVybiB2YWx1ZSBvZiBgZmVjX3B0cF9pbml0YCBhbmQganVtcHMgdG8gYGZhaWxlZF9yZXNldGAgb24gZmFpbHVyZS4gQW5kIHRoZSBjaGFuZ2VkIGBmZWNfcHRwX2luaXRgIGhhcyBtb3JlIHJvYnVzdCBlcnJvciBoYW5kbGluZyBhcm91bmQgSVJRIHJlcXVlc3RzIGFuZCBQVFAgY2xvY2sgcmVnaXN0cmF0aW9uLiBUaGlzIGlzIGEgKnNpZ25pZmljYW50KiBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgdGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHBhdGguIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyB0aG9yb3VnaCBmdXp6aW5nIHRvIGVuc3VyZSB0aGF0IGVycm9ycyBhcmUgaGFuZGxlZCBjb3JyZWN0bHksIGFuZCBubyByZXNvdXJjZXMgYXJlIGxlYWtlZCwgb3Igbm8gY3Jhc2hlcyBvY2N1ciwgZXNwZWNpYWxseSB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLlxuXG5Ob3csIGNhbiB3ZSByZWFjaCB0aGlzIGNvZGUgcGF0aD8gTGV0J3MgY2hlY2suIFllcywgUUVNVSBoYXMgYGlteC5mZWNgIGRldmljZXMgYW5kIHRoZXNlIGFyZSB1c2VkIGluIHRoZSBgaW14MjUtcGRrYCwgYHNhYnJlbGl0ZWAsIGBtY2lteDZ1bC1ldmtgLCBhbmQgYG1jaW14N2Qtc2FicmVgIG1hY2hpbmVzLiBFeGNlbGxlbnQsIHRoZXNlIGFyZSBhbGwgcGVyZmVjdGx5IGZ1enplYWJsZSB2aWEgc3l6a2FsbGVyIG9uIEFSTSBhbmQgQVJNNjQuIEFsdGhvdWdoIEkgYW0gdW5zdXJlIGV4YWN0bHkgaG93IHN5emthbGxlciBoYW5kbGVzIHBsYXRmb3JtIGRldmljZXMsIG15IG1lbW9yeSBpcyB0aGF0IGl0IGNhbiwgYmVjYXVzZSBvdGhlcndpc2UgdGhlIHByb21wdCBzYWlkIHRoYXQgaXQgd291bGRuJ3QgYmUgcG9zc2libGUgdG8gcmVhY2guXG5cblNpbmNlIHRoaXMgaXMgYSBRRU1VLWVtdWxhdGVkIGRldmljZSwgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcuIEkgd2lsbCBtYWtlIGEgZnV6emluZyBjb25maWc6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWBcbiogICAqKkZvY3VzU3ltYm9scyoqOiBgW1wiZmVjX3B0cF9pbml0XCJdYCAtIFdoaWxlIGBmZWNfcHRwX3N0b3BgIGlzIHJlYWNoYWJsZSwgdGhlIHByaW1hcnkgY2hhbmdlIGlzIGluIGBmZWNfcHRwX2luaXRgLCBzbyBmb2N1c2luZyB0aGVyZSBtYWtlcyBzZW5zZS5cbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYFtcIk5FVF9WRU5ET1JfRlJFRVNDQUxFXCIsIFwiRkVDXCIsIFwiQ09NUElMRV9URVNUXCJdYCAtIFN0YW5kYXJkIGNvbmZpZ3MgZm9yIHRoaXMgZHJpdmVyLCB3aXRoIGBDT01QSUxFX1RFU1RgIHRvIGVuc3VyZSBidWlsZHMuXG4qICAgKipSZWFzb25pbmcqKjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyB0byBmZWNfcHRwX2luaXQgYW5kIHByb3BhZ2F0ZXMgdGhlIGVycm9yIHRvIGZlY19wcm9iZSwgd2hpY2ggbm93IGFib3J0cyBpbml0aWFsaXphdGlvbiBpZiBQVFAgc2V0dXAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZHJpdmVyIHByb2JlIHBhdGggdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBwcm9wZXIgcmVzb3VyY2UgY2xlYW51cCBvbiBmYWlsdXJlLlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODg5LCJPdXRwdXRUb2tlbnMiOjExNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6MDA6MTQuMDM3ODIxNTA2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NjU3NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0ZSRUVTQ0FMRVwiLFxuICAgIFwiRkVDXCIsXG4gICAgXCJDT01QSUxFX1RFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmZWNfcHRwX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZlY19wdHBfaW5pdCBhbmQgcHJvcGFnYXRlcyB0aGUgZXJyb3IgdG8gZmVjX3Byb2JlLCB3aGljaCBub3cgYWJvcnRzIGluaXRpYWxpemF0aW9uIGlmIFBUUCBzZXR1cCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIgcHJvYmUgcGF0aCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciByZXNvdXJjZSBjbGVhbnVwIG9uIGZhaWx1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9GUkVFU0NBTEVcIixcbiAgICBcIkZFQ1wiLFxuICAgIFwiQ09NUElMRV9URVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmVjX3B0cF9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyB0byBmZWNfcHRwX2luaXQgYW5kIHByb3BhZ2F0ZXMgdGhlIGVycm9yIHRvIGZlY19wcm9iZSwgd2hpY2ggbm93IGFib3J0cyBpbml0aWFsaXphdGlvbiBpZiBQVFAgc2V0dXAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZHJpdmVyIHByb2JlIHBhdGggdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBwcm9wZXIgcmVzb3VyY2UgY2xlYW51cCBvbiBmYWlsdXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjowMDoxNC4xNjQ0OTA0NzJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4OTQyNjU0MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjowMDoxNC4xNjUyODQ2NDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Nzg5MzQ2NTY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIHByb2JlIGZ1bmN0aW9uIG9mIHRoZSBGcmVlc2NhbGUgRkVDIGV0aGVybmV0IGRyaXZlci4gSXQgY2hhbmdlcyBgZmVjX3B0cF9pbml0YCB0byByZXR1cm4gYW4gaW50ZWdlciBlcnJvciBjb2RlIGluc3RlYWQgb2YgYHZvaWRgLCBhbGxvd2luZyBpdCB0byBwcm9wYWdhdGUgZXJyb3JzIGZyb20gSVJRIHJlcXVlc3RzIGFuZCBQVFAgY2xvY2sgcmVnaXN0cmF0aW9uLiBUaGUgYGZlY19wcm9iZWAgZnVuY3Rpb24gaXMgdXBkYXRlZCB0byBjaGVjayB0aGlzIHJldHVybiB2YWx1ZSBhbmQganVtcCB0byB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgaGFuZGxpbmcgbGFiZWwuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgZXJyb3IgcHJvcGFnYXRpb24sIHdoaWNoIGRvIG5vdCBwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2Y4Y2Q4YTMyYmZjNDQ4MzRkMTA3YzM4YjhjMTg4MTg4MTU4YzE4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDExOjU3OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlYy5oXG5pbmRleCA3MTc2ODAzMTQ2ZjNkLi44ODMxZGEzNzMyNmIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlYy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjLmhcbkBAIC02OTIsNyArNjkyLDcgQEAgc3RydWN0IGZlY19lbmV0X3ByaXZhdGUge1xuIFx0dTY0IGV0aHRvb2xfc3RhdHNbXTtcbiB9O1xuIFxuLXZvaWQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KTtcbitpbnQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KTtcbiB2b2lkIGZlY19wdHBfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKTtcbiB2b2lkIGZlY19wdHBfc2F2ZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKTtcbiB2b2lkIGZlY19wdHBfc3RvcChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jXG5pbmRleCBjZWQ0ZGJmOGNkOTBmLi5iNmMyMmQ2YzFlNjlhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jXG5AQCAtNTM4NCw4ICs1Mzg0LDExIEBAIGZlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRnb3RvIGZhaWxlZF9yZXNldDtcbiBcbiBcdGlycV9jbnQgPSBmZWNfZW5ldF9nZXRfaXJxX2NudChwZGV2KTtcbi1cdGlmIChmZXAtXHUwMDNlYnVmZGVzY19leClcbi1cdFx0ZmVjX3B0cF9pbml0KHBkZXYsIGlycV9jbnQpO1xuK1x0aWYgKGZlcC1cdTAwM2VidWZkZXNjX2V4KSB7XG4rXHRcdHJldCA9IGZlY19wdHBfaW5pdChwZGV2LCBpcnFfY250KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIGZhaWxlZF9yZXNldDtcbitcdH1cbiBcbiBcdHJldCA9IGZlY19lbmV0X2luaXQobmRldik7XG4gXHRpZiAocmV0KVxuQEAgLTU0NTcsNyArNTQ2MCw4IEBAIGZlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIGZhaWxlZF9pcnE6XG4gXHRmZWNfZW5ldF9kZWluaXQobmRldik7XG4gZmFpbGVkX2luaXQ6XG4tXHRmZWNfcHRwX3N0b3AocGRldik7XG4rXHRpZiAoZmVwLVx1MDAzZWJ1ZmRlc2NfZXgpXG4rXHRcdGZlY19wdHBfc3RvcChwZGV2KTtcbiBmYWlsZWRfcmVzZXQ6XG4gXHRwbV9ydW50aW1lX3B1dF9ub2lkbGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFx0cG1fcnVudGltZV9kaXNhYmxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY1xuaW5kZXggNTY4MDFjMjAwOWQ1OS4uOGFkNjgwNDExYjBjMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmNcbkBAIC03MzYsNyArNzM2LDcgQEAgc3RhdGljIGlycXJldHVybl90IGZlY19wcHNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcbiAgKiBjeWNsZWNvdW50ZXIgaW5pdCByb3V0aW5lIGFuZCBleGl0cy5cbiAgKi9cbiBcbi12b2lkIGZlY19wdHBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXJxX2lkeClcbitpbnQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG4gXHRzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYobmRldik7XG5AQCAtNzc5LDI2ICs3NzksMjkgQEAgdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpXG4gXHRcdCAgICAgIEhSVElNRVJfTU9ERV9SRUwpO1xuIFxuIFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWVfb3B0aW9uYWwocGRldiwgXCJwcHNcIik7XG4tXHRpZiAoaXJxIFx1MDAzYyAwKVxuK1x0aWYgKGlycSBcdTAwM2MgMCkge1xuIFx0XHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX29wdGlvbmFsKHBkZXYsIGlycV9pZHgpO1xuLVx0LyogRmFpbHVyZSB0byBnZXQgYW4gaXJxIGlzIG5vdCBmYXRhbCxcbi1cdCAqIG9ubHkgdGhlIFBUUF9DTE9DS19QUFMgY2xvY2sgZXZlbnRzIHNob3VsZCBzdG9wXG4tXHQgKi9cbi1cdGlmIChpcnEgXHUwMDNlPSAwKSB7XG4rXHRcdGlmIChpcnEgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGlycSAhPSAtRU5YSU8pXG4rXHRcdFx0cmV0dXJuIGlycTtcbitcdH1cbitcbitcdGlmIChpcnEgXHUwMDNlIDApIHtcbiBcdFx0cmV0ID0gZGV2bV9yZXF1ZXN0X2lycShcdTAwMjZwZGV2LVx1MDAzZWRldiwgaXJxLCBmZWNfcHBzX2ludGVycnVwdCxcbiBcdFx0XHRcdCAgICAgICAwLCBwZGV2LVx1MDAzZW5hbWUsIG5kZXYpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGRldl93YXJuKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcInJlcXVlc3QgZm9yIHBwcyBpcnEgZmFpbGVkKCVkKVxcblwiLFxuLVx0XHRcdFx0IHJldCk7XG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdGZlcC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXHUwMDI2ZmVwLVx1MDAzZXB0cF9jYXBzLCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXHRpZiAoSVNfRVJSKGZlcC1cdTAwM2VwdHBfY2xvY2spKSB7XG4gXHRcdGZlcC1cdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xuIFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcInB0cF9jbG9ja19yZWdpc3RlciBmYWlsZWRcXG5cIik7XG4rXHRcdHJldHVybiBQVFJfRVJSKGZlcC1cdTAwM2VwdHBfY2xvY2spO1xuIFx0fVxuIFxuIFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNmZlcC1cdTAwM2V0aW1lX2tlZXAsIEhaKTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiB2b2lkIGZlY19wdHBfc2F2ZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6MDA6MTQuMTY1Mjg2MTkyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4OTM0MjM3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnJlZXNjYWxlIEZFQyBQVFAgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhpcyBwYXRjaCwgYXQgYSBnbGFuY2UsIGlzIG1vZGlmeWluZyB0aGUgRnJlZXNjYWxlIEZFQyBQVFAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBmZWNfcHRwX2luaXRgIGZ1bmN0aW9uIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY2AuIEl0J3MgY2hhbmdpbmcgdGhlIHJldHVybiB0eXBlIG9mIHRoYXQgZnVuY3Rpb24gZnJvbSBgdm9pZGAgdG8gYGludGAsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGFuIGVycm9yIGNvZGUgcHJvcGFnYXRpb24gc3RyYXRlZ3kuIFRoYXQncyB0aGUgZmlyc3QgY2x1ZS5cblxuVGhlbiwgbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gd2l0aGluIGBmZWNfcHJvYmVgIGluIGBmZWNfbWFpbi5jYCwgdGhleSdyZSBhY3R1YWxseSAqY2hlY2tpbmcqIHRoZSByZXR1cm4gdmFsdWUgb2YgYGZlY19wdHBfaW5pdGAgbm93LiBJZiBpdCBmYWlscywgd2UganVtcCB0byBgZmFpbGVkX3Jlc2V0YC4gU28gdGhlIHBhdGNoIGlzICpkb2luZyogc29tZXRoaW5nIHdpdGggdGhhdCBlcnJvciBjb2RlISBNeSByZWFkIGhlcmUgaXMgdGhhdCB0aGlzIGlzIGhhbmRsaW5nIElSUSByZXF1ZXN0IGZhaWx1cmVzIGFuZCBQVFAgY2xvY2sgcmVnaXN0cmF0aW9uIGZhaWx1cmVzLlxuXG5BbmQgaW4gdGhlIGBmYWlsZWRfaW5pdGAgcGF0aCwgYGZlY19wdHBfc3RvcChwZGV2KWAgaXMgbm93ICpjb25kaXRpb25hbGx5KiBjYWxsZWQgb25seSBpZiBgZmVwLVx1MDAzZWJ1ZmRlc2NfZXhgIGlzIHRydWUuIFRoaXMgYWxzbyBtYWtlcyBzZW5zZSBpbiB0ZXJtcyBvZiByZXNvdXJjZSBjbGVhbnVwLlxuXG5UaGlzIGlzIGFsbCAqc3RhbmRhcmQqIGVycm9yIGhhbmRsaW5nIHN0dWZmLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzIGFib3V0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBleHBvc3VyZS4gSG93ZXZlciwgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdG8gdXNlcnNwYWNlLiBJbiBmYWN0LCBpdCBkb2VzIHF1aXRlIHRoZSBvcHBvc2l0ZSBhbmQgaXMgY2xlYW5pbmcgdXAgY29ycmVjdGx5LiBJdCdzIGVzc2VudGlhbGx5IGEgcmVzb3VyY2UgbGVhayBhbmQvb3IgZXJyb3IgaGFuZGxpbmcgZml4LlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0sIEknbGwgc2NhbiB0aGUgZGlmZiBhZ2FpbjogYGZlY19wdHBfaW5pdGAgcmV0dXJucyBhbiBgaW50YC4gYGZlY19wcm9iZWAgY2FsbHMgaXQgYW5kIGNoZWNrcyB0aGUgcmV0dXJuOiBgcmV0ID0gZmVjX3B0cF9pbml0KHBkZXYsIGlycV9jbnQpOyBpZiAocmV0KSBnb3RvIGZhaWxlZF9yZXNldDtgIFRoZSBgZmFpbGVkX3Jlc2V0YCBwYXRoIGlzIGFsbCBhYm91dCBQTSBydW50aW1lIHN0dWZmLiBBbmQgYGZlY19wdHBfc3RvcGAgaXMgY2FsbGVkIGNvbmRpdGlvbmFsbHkgaW4gYGZhaWxlZF9pbml0YCBpZiBgZmVwLVx1MDAzZWJ1ZmRlc2NfZXhgLlxuXG5SaWdodCwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGlzIGxvb2tzIGdvb2QsIGEgc29saWQgaW1wcm92ZW1lbnQgaW4gZXJyb3IgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzMsIk91dHB1dFRva2VucyI6MTYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6MDA6MjIuMDU4NzE0ODk5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgZnVuY3Rpb24gb2YgdGhlIEZyZWVzY2FsZSBGRUMgZXRoZXJuZXQgZHJpdmVyLiBJdCBjaGFuZ2VzIGBmZWNfcHRwX2luaXRgIHRvIHJldHVybiBhbiBpbnRlZ2VyIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBgdm9pZGAsIGFsbG93aW5nIGl0IHRvIHByb3BhZ2F0ZSBlcnJvcnMgZnJvbSBJUlEgcmVxdWVzdHMgYW5kIFBUUCBjbG9jayByZWdpc3RyYXRpb24uIFRoZSBgZmVjX3Byb2JlYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlIGFuZCBqdW1wIHRvIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBoYW5kbGluZyBsYWJlbC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBlcnJvciBwcm9wYWdhdGlvbiwgd2hpY2ggZG8gbm90IHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgZnVuY3Rpb24gb2YgdGhlIEZyZWVzY2FsZSBGRUMgZXRoZXJuZXQgZHJpdmVyLiBJdCBjaGFuZ2VzIGBmZWNfcHRwX2luaXRgIHRvIHJldHVybiBhbiBpbnRlZ2VyIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBgdm9pZGAsIGFsbG93aW5nIGl0IHRvIHByb3BhZ2F0ZSBlcnJvcnMgZnJvbSBJUlEgcmVxdWVzdHMgYW5kIFBUUCBjbG9jayByZWdpc3RyYXRpb24uIFRoZSBgZmVjX3Byb2JlYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlIGFuZCBqdW1wIHRvIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBoYW5kbGluZyBsYWJlbC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBlcnJvciBwcm9wYWdhdGlvbiwgd2hpY2ggZG8gbm90IHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow6xbxv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 11:29:52 +0000 UTC FinishedAt: 2026-08-20 12:00:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "61eb236c41c2a4717015dff18016a75a5eb90052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_FREESCALE", "FEC", "COMPILE_TEST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "61eb236c41c2a4717015dff18016a75a5eb90052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_FREESCALE", "FEC", "COMPILE_TEST" ], "series_id": "3ae3530c-ffc0-41a7-8082-6acbf61bdf9e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fec_ptp_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDExOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfRlJFRVNDQUxFJiMzNDssCiAgICAmIzM0O0ZFQyYjMzQ7LAogICAgJiMzNDtDT01QSUxFX1RFU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmZWNfcHRwX2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgZnVuY3Rpb24gb2YgdGhlIEZyZWVzY2FsZSBGRUMgZXRoZXJuZXQgZHJpdmVyLiBJdCBjaGFuZ2VzIGBmZWNfcHRwX2luaXRgIHRvIHJldHVybiBhbiBpbnRlZ2VyIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBgdm9pZGAsIGFsbG93aW5nIGl0IHRvIHByb3BhZ2F0ZSBlcnJvcnMgZnJvbSBJUlEgcmVxdWVzdHMgYW5kIFBUUCBjbG9jayByZWdpc3RyYXRpb24uIFRoZSBgZmVjX3Byb2JlYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlIGFuZCBqdW1wIHRvIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBoYW5kbGluZyBsYWJlbC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBlcnJvciBwcm9wYWdhdGlvbiwgd2hpY2ggZG8gbm90IHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyB0byBmZWNfcHRwX2luaXQgYW5kIHByb3BhZ2F0ZXMgdGhlIGVycm9yIHRvIGZlY19wcm9iZSwgd2hpY2ggbm93IGFib3J0cyBpbml0aWFsaXphdGlvbiBpZiBQVFAgc2V0dXAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZHJpdmVyIHByb2JlIHBhdGggdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBwcm9wZXIgcmVzb3VyY2UgY2xlYW51cCBvbiBmYWlsdXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDExOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2Y4Y2Q4YTMyYmZjNDQ4MzRkMTA3YzM4YjhjMTg4MTg4MTU4YzE4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDExOjU3OjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaFxuaW5kZXggNzE3NjgwMzE0NmYzZC4uODgzMWRhMzczMjZiMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlYy5oXG5AQCAtNjkyLDcgJiM0Mzs2OTIsNyBAQCBzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSB7XG4gXHR1NjQgZXRodG9vbF9zdGF0c1tdO1xuIH07XG4gXG4tdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpO1xuJiM0MztpbnQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KTtcbiB2b2lkIGZlY19wdHBfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKTtcbiB2b2lkIGZlY19wdHBfc2F2ZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKTtcbiB2b2lkIGZlY19wdHBfc3RvcChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jXG5pbmRleCBjZWQ0ZGJmOGNkOTBmLi5iNmMyMmQ2YzFlNjlhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jXG5AQCAtNTM4NCw4ICYjNDM7NTM4NCwxMSBAQCBmZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0Z290byBmYWlsZWRfcmVzZXQ7XG4gXG4gXHRpcnFfY250ID0gZmVjX2VuZXRfZ2V0X2lycV9jbnQocGRldik7XG4tXHRpZiAoZmVwLVx1MDAzZWJ1ZmRlc2NfZXgpXG4tXHRcdGZlY19wdHBfaW5pdChwZGV2LCBpcnFfY250KTtcbiYjNDM7XHRpZiAoZmVwLVx1MDAzZWJ1ZmRlc2NfZXgpIHtcbiYjNDM7XHRcdHJldCA9IGZlY19wdHBfaW5pdChwZGV2LCBpcnFfY250KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gZmFpbGVkX3Jlc2V0O1xuJiM0MztcdH1cbiBcbiBcdHJldCA9IGZlY19lbmV0X2luaXQobmRldik7XG4gXHRpZiAocmV0KVxuQEAgLTU0NTcsNyAmIzQzOzU0NjAsOCBAQCBmZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBmYWlsZWRfaXJxOlxuIFx0ZmVjX2VuZXRfZGVpbml0KG5kZXYpO1xuIGZhaWxlZF9pbml0OlxuLVx0ZmVjX3B0cF9zdG9wKHBkZXYpO1xuJiM0MztcdGlmIChmZXAtXHUwMDNlYnVmZGVzY19leClcbiYjNDM7XHRcdGZlY19wdHBfc3RvcChwZGV2KTtcbiBmYWlsZWRfcmVzZXQ6XG4gXHRwbV9ydW50aW1lX3B1dF9ub2lkbGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFx0cG1fcnVudGltZV9kaXNhYmxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY1xuaW5kZXggNTY4MDFjMjAwOWQ1OS4uOGFkNjgwNDExYjBjMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmNcbkBAIC03MzYsNyAmIzQzOzczNiw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBmZWNfcHBzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4gICogY3ljbGVjb3VudGVyIGluaXQgcm91dGluZSBhbmQgZXhpdHMuXG4gICovXG4gXG4tdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpXG4mIzQzO2ludCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcdHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbkBAIC03NzksMjYgJiM0Mzs3NzksMjkgQEAgdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpXG4gXHRcdCAgICAgIEhSVElNRVJfTU9ERV9SRUwpO1xuIFxuIFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWVfb3B0aW9uYWwocGRldiwgXCYjMzQ7cHBzXCYjMzQ7KTtcbi1cdGlmIChpcnEgXHUwMDNjIDApXG4mIzQzO1x0aWYgKGlycSBcdTAwM2MgMCkge1xuIFx0XHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX29wdGlvbmFsKHBkZXYsIGlycV9pZHgpO1xuLVx0LyogRmFpbHVyZSB0byBnZXQgYW4gaXJxIGlzIG5vdCBmYXRhbCxcbi1cdCAqIG9ubHkgdGhlIFBUUF9DTE9DS19QUFMgY2xvY2sgZXZlbnRzIHNob3VsZCBzdG9wXG4tXHQgKi9cbi1cdGlmIChpcnEgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRpZiAoaXJxIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBpcnEgIT0gLUVOWElPKVxuJiM0MztcdFx0XHRyZXR1cm4gaXJxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlycSBcdTAwM2UgMCkge1xuIFx0XHRyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBpcnEsIGZlY19wcHNfaW50ZXJydXB0LFxuIFx0XHRcdFx0ICAgICAgIDAsIHBkZXYtXHUwMDNlbmFtZSwgbmRldik7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3JlcXVlc3QgZm9yIHBwcyBpcnEgZmFpbGVkKCVkKVxcblwmIzM0Oyxcbi1cdFx0XHRcdCByZXQpO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0ZmVwLVx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZmZXAtXHUwMDNlcHRwX2NhcHMsIFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcdGlmIChJU19FUlIoZmVwLVx1MDAzZXB0cF9jbG9jaykpIHtcbiBcdFx0ZmVwLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4gXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3B0cF9jbG9ja19yZWdpc3RlciBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZmVwLVx1MDAzZXB0cF9jbG9jayk7XG4gXHR9XG4gXG4gXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2ZmVwLVx1MDAzZXRpbWVfa2VlcCwgSFopO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gdm9pZCBmZWNfcHRwX3NhdmVfc3RhdGUoc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMTo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9GUkVFU0NBTEUmIzM0OywKICAgICYjMzQ7RkVDJiMzNDssCiAgICAmIzM0O0NPTVBJTEVfVEVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZlY19wdHBfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZlY19wdHBfaW5pdCBhbmQgcHJvcGFnYXRlcyB0aGUgZXJyb3IgdG8gZmVjX3Byb2JlLCB3aGljaCBub3cgYWJvcnRzIGluaXRpYWxpemF0aW9uIGlmIFBUUCBzZXR1cCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIgcHJvYmUgcGF0aCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciByZXNvdXJjZSBjbGVhbnVwIG9uIGZhaWx1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZjhjZDhhMzJiZmM0NDgzNGQxMDdjMzhiOGMxODgxODgxNThjMThhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMTE6NTc6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjLmgKaW5kZXggNzE3NjgwMzE0NmYzZC4uODgzMWRhMzczMjZiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaApAQCAtNjkyLDcgJiM0Mzs2OTIsNyBAQCBzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSB7CiAJdTY0IGV0aHRvb2xfc3RhdHNbXTsKIH07CiAKLXZvaWQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KTsKJiM0MztpbnQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KTsKIHZvaWQgZmVjX3B0cF9yZXN0b3JlX3N0YXRlKHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXApOwogdm9pZCBmZWNfcHRwX3NhdmVfc3RhdGUoc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCk7CiB2b2lkIGZlY19wdHBfc3RvcChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMKaW5kZXggY2VkNGRiZjhjZDkwZi4uYjZjMjJkNmMxZTY5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMKQEAgLTUzODQsOCAmIzQzOzUzODQsMTEgQEAgZmVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCWdvdG8gZmFpbGVkX3Jlc2V0OwogCiAJaXJxX2NudCA9IGZlY19lbmV0X2dldF9pcnFfY250KHBkZXYpOwotCWlmIChmZXAtJmd0O2J1ZmRlc2NfZXgpCi0JCWZlY19wdHBfaW5pdChwZGV2LCBpcnFfY250KTsKJiM0MzsJaWYgKGZlcC0mZ3Q7YnVmZGVzY19leCkgewomIzQzOwkJcmV0ID0gZmVjX3B0cF9pbml0KHBkZXYsIGlycV9jbnQpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIGZhaWxlZF9yZXNldDsKJiM0MzsJfQogCiAJcmV0ID0gZmVjX2VuZXRfaW5pdChuZGV2KTsKIAlpZiAocmV0KQpAQCAtNTQ1Nyw3ICYjNDM7NTQ2MCw4IEBAIGZlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogZmFpbGVkX2lycToKIAlmZWNfZW5ldF9kZWluaXQobmRldik7CiBmYWlsZWRfaW5pdDoKLQlmZWNfcHRwX3N0b3AocGRldik7CiYjNDM7CWlmIChmZXAtJmd0O2J1ZmRlc2NfZXgpCiYjNDM7CQlmZWNfcHRwX3N0b3AocGRldik7CiBmYWlsZWRfcmVzZXQ6CiAJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKIAlwbV9ydW50aW1lX2Rpc2FibGUoJmFtcDtwZGV2LSZndDtkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmMKaW5kZXggNTY4MDFjMjAwOWQ1OS4uOGFkNjgwNDExYjBjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jCkBAIC03MzYsNyAmIzQzOzczNiw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBmZWNfcHBzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiAgKiBjeWNsZWNvdW50ZXIgaW5pdCByb3V0aW5lIGFuZCBleGl0cy4KICAqLwogCi12b2lkIGZlY19wdHBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXJxX2lkeCkKJiM0MztpbnQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtNzc5LDI2ICYjNDM7Nzc5LDI5IEBAIHZvaWQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KQogCQkgICAgICBIUlRJTUVSX01PREVfUkVMKTsKIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lX29wdGlvbmFsKHBkZXYsICYjMzQ7cHBzJiMzNDspOwotCWlmIChpcnEgJmx0OyAwKQomIzQzOwlpZiAoaXJxICZsdDsgMCkgewogCQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX29wdGlvbmFsKHBkZXYsIGlycV9pZHgpOwotCS8qIEZhaWx1cmUgdG8gZ2V0IGFuIGlycSBpcyBub3QgZmF0YWwsCi0JICogb25seSB0aGUgUFRQX0NMT0NLX1BQUyBjbG9jayBldmVudHMgc2hvdWxkIHN0b3AKLQkgKi8KLQlpZiAoaXJxICZndDs9IDApIHsKJiM0MzsJCWlmIChpcnEgJmx0OyAwICZhbXA7JmFtcDsgaXJxICE9IC1FTlhJTykKJiM0MzsJCQlyZXR1cm4gaXJxOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpcnEgJmd0OyAwKSB7CiAJCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJmFtcDtwZGV2LSZndDtkZXYsIGlycSwgZmVjX3Bwc19pbnRlcnJ1cHQsCiAJCQkJICAgICAgIDAsIHBkZXYtJmd0O25hbWUsIG5kZXYpOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWRldl93YXJuKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3JlcXVlc3QgZm9yIHBwcyBpcnEgZmFpbGVkKCVkKVxuJiMzNDssCi0JCQkJIHJldCk7CiYjNDM7CQkJcmV0dXJuIHJldDsKIAl9CiAKIAlmZXAtJmd0O3B0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcigmYW1wO2ZlcC0mZ3Q7cHRwX2NhcHMsICZhbXA7cGRldi0mZ3Q7ZGV2KTsKIAlpZiAoSVNfRVJSKGZlcC0mZ3Q7cHRwX2Nsb2NrKSkgewogCQlmZXAtJmd0O3B0cF9jbG9jayA9IE5VTEw7CiAJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7cHRwX2Nsb2NrX3JlZ2lzdGVyIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIoZmVwLSZndDtwdHBfY2xvY2spOwogCX0KIAogCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO2ZlcC0mZ3Q7dGltZV9rZWVwLCBIWik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiB2b2lkIGZlY19wdHBfc2F2ZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTc2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEZyZWVzY2FsZSBGRUMgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIHRoZSBGcmVlc2NhbGUgRmFzdCBFdGhlcm5ldCBDb250cm9sbGVyIChGRUMpIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhbHRlcmluZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG9mIGBmZWNfcHRwX2luaXRgIGluIGBmZWNfcHRwLmNgLCBtYWtpbmcgaXQgcmV0dXJuIGFuIGBpbnRgIGluc3RlYWQgb2YgYHZvaWRgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGVycm9yIGhhbmRsaW5nLXJlbGF0ZWQsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLiBUaGUgY29ycmVzcG9uZGluZyB1cGRhdGUgdG8gYGZlY19wcm9iZWAgaW4gYGZlY19tYWluLmNgIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlIGNvbmZpcm1zIHRoYXQgc3VzcGljaW9uLiBUaGlzIG1lYW5zIHRoZSBwcm9iZSBmdW5jdGlvbiB3aWxsIG5vdyBhY3RpdmVseSBoYW5kbGUgZXJyb3JzIGZyb20gdGhlIFBUUCBpbml0aWFsaXphdGlvbiwgaW1wcm92aW5nIG92ZXJhbGwgcm9idXN0bmVzcywgYW5kIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGRldGFpbCBJJiMzOTttIGxvb2tpbmcgZm9yIGluIGRyaXZlciB1cGRhdGVzLgoKTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaG93IHJlbGV2YW50IGlzIHRoaXMgY2hhbmdlIGluIGEgY29tbW9uIHRlc3RpbmcgZW52aXJvbm1lbnQ/IFRoZSBkcml2ZXIgaXRzZWxmIGlzIGNsZWFybHkgZm9yIEZyZWVzY2FsZSBGRUMgaGFyZHdhcmUuIEdpdmVuIHRoZSB1YmlxdWl0eSBvZiBRRU1VIGZvciB2aXJ0dWFsaXphdGlvbiwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgZHJpdmVyIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBRRU1VIGluc3RhbmNlPyBRRU1VLCBvZiBjb3Vyc2UsIGhhcyBhbiBgaW14LmZlY2AgZGV2aWNlIChkZWZpbmVkIGluIGBpbXhfZmVjLmNgKSwgc28gdGhhdCBzb3VuZHMgbGlrZSBhIGdvb2QgbGVhZCB0byBmb2xsb3cuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0byBzZWUgaWYgYGZlY19wcm9iZWAgaXMgYWN0dWFsbHkgaW52b2tlZC4gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBkcml2ZXIsIHNvIGlmIHdlIGNhbiB0cmlnZ2VyIHRoZSBwcm9iZSwgdGhlbiB0aGUgY2hhbmdlcyBhcmUgYXQgbGVhc3QgdGVzdGFibGUuIEdpdmVuIHRoYXQgaXQmIzM5O3MgZm9yIHRoZSBGcmVlc2NhbGUgRkVDLCB0aGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IEtjb25maWcgb3B0aW9ucyBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIGJlIHN1cmUgdGhlIGRyaXZlciBpcyBidWlsdCBhbmQgYWNjZXNzaWJsZSBpbiB0aGUgY29uZmlndXJhdGlvbnMgSSB0eXBpY2FsbHkgdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDExOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGRUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz0yMT1pZiBORVRfVkVORE9SX0ZSRUVTQ0FMRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzoyMzpjb25maWcgRkVDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0yNC1cdHRyaXN0YXRlIFwmIzM0O0ZFQyBldGhlcm5ldCBjb250cm9sbGVyIChvZiBDb2xkRmlyZSBhbmQgc29tZSBpLk1YIENQVXMpXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzozOTpjb25maWcgRkVDX01QQzUyeHhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTQwLVx0dHJpc3RhdGUgXCYjMzQ7RkVDIE1QQzUyeHggZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzo1MDpjb25maWcgRkVDX01QQzUyeHhfTURJT1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNTEtXHRib29sIFwmIzM0O0ZFQyBNUEM1Mnh4IE1ESU8gYnVzIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDExOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipGRUMgRHJpdmVyIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBzb21ldGhpbmcgdGhhdCBzZWVtcyB0byBpbnZvbHZlIGEgZHJpdmVyIGNhbGxlZCBgRkVDYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuJiMzNDsgVGhlIHRleHQgcG9pbnRzIG91dCB0aGF0IGBGRUNgIHJlbGllcyBvbiBgTkVUX1ZFTkRPUl9GUkVFU0NBTEVgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIGEgbmV0d29yayBkcml2ZXIgcmVsYXRlZCB0byBGcmVlc2NhbGUgKG5vdyBOWFApIGhhcmR3YXJlLiBNeSBuZXh0IHN0ZXA/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQgZm9yIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBjaGVjayB0aGUgYEtjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY3kgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgYEZFQ2AgZHJpdmVyIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBtaWdodCBiZSByZWxldmFudCB0byBpdHMgYmVoYXZpb3IuIExldCYjMzk7cyBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRkVDJCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnPTIxPWlmIE5FVF9WRU5ET1JfRlJFRVNDQUxFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0yMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjIzOmNvbmZpZyBGRUNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7RkVDIGV0aGVybmV0IGNvbnRyb2xsZXIgKG9mIENvbGRGaXJlIGFuZCBzb21lIGkuTVggQ1BVcylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzQwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRkVDJiMzOTtzIEtjb25maWcgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIHRoZSBGRUMgKEZsZXhpYmxlIEV0aGVybmV0IENvbnRyb2xsZXIpLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgaXQmIzM5O3MgY29uZmlndXJlZCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIHNlZSBLY29uZmlnIGZvciBGRUMuJiMzNDsgVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBidWlsZCBmbGFncywgdGhlIGRldmljZSB0cmVlIGludGVncmF0aW9uIHBvaW50c+KApiBldmVyeXRoaW5nIHRoYXQgc2hhcGVzIGhvdyB0aGlzIHNwZWNpZmljIEZFQyBpbnN0YW5jZSB3aWxsIGJlaGF2ZSBpbiBhIHN5c3RlbS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3R1ZmYgLSBjbG9jayBjb25maWd1cmF0aW9ucywgaW50ZXJydXB0IHNldHRpbmdzLCBQSFkgc3VwcG9ydCwgbWF5YmUgc29tZSBhZHZhbmNlZCBmZWF0dXJlcyBsaWtlIERNQSBzZXR0aW5ncyBvciBWTEFOIGhhbmRsaW5nLiBCdXQgSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgZm9yIGFueXRoaW5nIHZlbmRvci1zcGVjaWZpYyBvciBhbnkgdW51c3VhbCBhcmNoaXRlY3R1cmFsIGNob2ljZXMgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgaW50ZWdyYXRpb24uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9ucyBhbmQgYXNzZXNzIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGFyZWFzIGZvciBjdXN0b21pemF0aW9uIGJlZm9yZSBJIHN0YXJ0IGJ1aWxkaW5nIG9yIGRlYnVnZ2luZyBhbnkgRkVDLWRlcGVuZGVudCBkcml2ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDExOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0XG4gIDIxOlx0aWYgTkVUX1ZFTkRPUl9GUkVFU0NBTEVcbiAgMjI6XHRcbiAgMjM6XHRjb25maWcgRkVDXG4gIDI0Olx0XHR0cmlzdGF0ZSBcJiMzNDtGRUMgZXRoZXJuZXQgY29udHJvbGxlciAob2YgQ29sZEZpcmUgYW5kIHNvbWUgaS5NWCBDUFVzKVwmIzM0O1xuICAyNTpcdFx0ZGVwZW5kcyBvbiAoTTUyM3ggfHwgTTUyN3ggfHwgTTUyNzIgfHwgTTUyOHggfHwgTTUyMHggfHwgTTUzMnggfHwgXFxcbiAgMjY6XHRcdFx0ICAgQVJDSF9NWEMgfHwgQVJDSF9TMzIgfHwgU09DX0lNWDI4IHx8IENPTVBJTEVfVEVTVClcbiAgMjc6XHRcdGRlZmF1bHQgQVJDSF9NWEMgfHwgU09DX0lNWDI4IGlmIEFSTVxuICAyODpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAyOTpcdFx0c2VsZWN0IENSQzMyXG4gIDMwOlx0XHRzZWxlY3QgUEhZTElCXG4gIDMxOlx0XHRzZWxlY3QgRklYRURfUEhZXG4gIDMyOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDMzOlx0XHRpbXBseSBQQUdFX1BPT0xfU1RBVFNcbiAgMzQ6XHRcdGltcGx5IE5FVF9TRUxGVEVTVFNcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIGJ1aWx0LWluIDEwLzEwMCBGYXN0IGV0aGVybmV0XG4gIDM3Olx0XHQgIGNvbnRyb2xsZXIgb24gc29tZSBNb3Rvcm9sYSBDb2xkRmlyZSBhbmQgRnJlZXNjYWxlIGkuTVgvUzMyIHByb2Nlc3NvcnMuXG4gIDM4Olx0XG4gIDM5Olx0Y29uZmlnIEZFQ19NUEM1Mnh4XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkyNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBGRUMgRHJpdmVyOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyB0aGUgcG9zc2liaWxpdHkgb2YgZnV6emluZyB0aGlzIGRyaXZlciBoaW5nZXMgb24gYSBmZXcgY29uZGl0aW9ucywgc3BlY2lmaWNhbGx5IHRob3NlIGRlZmluZWQgYnkgdGhhdCBsb25nIGNvbmRpdGlvbmFsIHN0YXRlbWVudCDigJMgYChNNTIzeCB8fCBNNTI3eCB8fCBNNTI3MiB8fCBNNTI4eCB8fCBNNTIweCB8fCBNNTMyeCB8fCBBUkNIX01YQyB8fCBBUkNIX1MzMiB8fCBTT0NfSU1YMjggfHwgQ09NUElMRV9URVNUKWAuIFRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5ICpmdXp6KiB0aGlzIHRoaW5nIGVmZmVjdGl2ZWx5PwoKVGhpbmtpbmcgcHJhY3RpY2FsbHksIHllcywgaXQgY2FuIGJlIHRlc3RlZCBpbiBRRU1VLCBwYXJ0aWN1bGFybHkgdXNpbmcgYW4gQVJNIG1hY2hpbmUuIFNvbWV0aGluZyBsaWtlIGFuIGBpbXgyNS1wZGtgLCBgc2FicmVsaXRlYCwgb3IgYG1jaW14NnVsLWV2a2Agd291bGQgYmUgcGVyZmVjdCBmb3IgdGhpcyBraW5kIG9mIHRlc3RpbmcuIEJ1dCBoZXJlJiMzOTtzIHRoZSBydWI6IHN5emthbGxlciB1c3VhbGx5IHJ1bnMgb24geDg2XzY0IG9yIGFybTY0IGFyY2hpdGVjdHVyZXMuIElmIGBDT01QSUxFX1RFU1RgIGlzIGVuYWJsZWQsIHdlIGNhbiBhdCBsZWFzdCBidWlsZCB0aGUgZHJpdmVyIG9uIHg4Nl82NCwgYnV0IGNhbiB3ZSByZWxpYWJseSBwcm9iZSBpdD8gVGhpcyBkcml2ZXIgaXMgYSAqcGxhdGZvcm0qIGRyaXZlciwgc28gdGhhdCBwcm9iaW5nIGJlY29tZXMgdGhlIGtleS4KClRoZXJlZm9yZSwgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIGV4YW1pbmUgYGZlY19wcm9iZWAgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHByb2JlIGZ1bmN0aW9uIHdvcmtzIHRvIGRldGVybWluZSBpZiBpdCBjYW4gYmUgdHJpZ2dlcmVkIGluIGEgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIGFyY2hpdGVjdHVyZSBhbmQgcGxhdGZvcm0gaW1wbGljYXRpb25zIGFyZSB3aGF0IEkgbmVlZCB0byB1bnBhY2sgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmVjX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NTIwMz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzo1MjA0OmZlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNTIwNS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NTY3Mz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmZWNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTU2ODAtXHQuaWRfdGFibGUgPSBmZWNfZGV2dHlwZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjU2ODE6XHQucHJvYmVcdD0gZmVjX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNTY4Mi1cdC5yZW1vdmUgPSBmZWNfZHJ2X3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTczMAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDc4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBGRUMgRHJpdmVyOiBBIFByb2JlIFBhdGggQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtDYW4gc3l6a2FsbGVyIGV2ZW4gKnJlYWNoKiB0aGlzPyYjMzQ7IEl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBwcm9iZWQgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIEFDUEksIG9yIHNvbWV0aGluZyBlbHNlLiBJIGltbWVkaWF0ZWx5IGp1bXAgdG8gbXkga25vd2xlZGdlIG9mIHN5emthbGxlciwgd29uZGVyaW5nIGlmIGl0IGNhbiBtYW5pcHVsYXRlIGRldmljZXMgZGlyZWN0bHksIGxpa2Ugd2l0aCBgc3l6X2RldmxpbmtfbmV0YCwgb3IgaWYgaXQgbmVlZHMgYSBtb3JlIGluZGlyZWN0IHJvdXRlLiBJIHJlbWVtYmVyIHRoZXJlIG1pZ2h0IGJlIHBsYXRmb3JtIGRldmljZSBpbmplY3Rpb24gdmlhIGBzeXpfcGxhdGZvcm1fZGV2aWNlX2FkZGAg4oCTIGJ1dCBubywgdGhhdCYjMzk7cyBub3QgYSBnZW5lcmFsIHN5c2NhbGwsIG5vdCBhIGdvb2Qgb3B0aW9uIGhlcmUuCgpUaGVuIEkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgb3RoZXIgd2F5cyBzeXprYWxsZXIgaW50ZXJhY3RzIHdpdGggZHJpdmVycywgbGlrZSBgc3l6X2dlbmV0bGlua19nZXRfZmFtaWx5X2lkYOKApiBubyBkaWNlLCBpdCYjMzk7cyBub3QgYSBnb29kIGZpdCBoZXJlIGVpdGhlci4gVGhlIGNvcmUgcHJvYmxlbSBpcywgY2FuIHN5emthbGxlciBldmVuICYjMzQ7c2VlJiMzNDsgdGhpcyBkZXZpY2Ugd2l0aGluIGEgdHlwaWNhbCBWTSBlbnZpcm9ubWVudD8gSSBrbm93IHN5emthbGxlciBvZnRlbiBydW5zIG9uIEFSTTY0IHdpdGggUUVNVSwgdXNpbmcgdGhlIGB2aXJ0YCBtYWNoaW5lLCBidXQgSSBkb3VidCB0aGlzIGRldmljZSBpcyBwcmVzZW50IHRoZXJlLiBTYW1lIHdpdGggeDg2XzY0OyBJIHF1aWNrbHkgcmVhbGl6ZSBpdOKAmXMgbm90LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHN5emthbGxlciBzdGlja3MgdG8gUUVNVSBlbnZpcm9ubWVudHMuCgpJIGJyaWVmbHkgY29uc2lkZXIgaWYgdGhlcmUmIzM5O3Mgc29tZSAqb3RoZXIqIG9ic2N1cmUgbWV0aG9kIHN5emthbGxlciBjb3VsZCB1c2UsIGJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhpcyBsaW5lIGZyb20gdGhlIHByb21wdDogJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gVGhhdCB0aHJvd3MgbWUgYW5vdGhlciBjdXJ2ZWJhbGwsIGJlY2F1c2UgSSB3b25kZXIgaWYgYGZlY2AgaXMgZW11bGF0ZWQuIFRoZW4gaXQgaGl0cyBtZSwgSSB0aGluaywgJiMzNDtXYWl0LCBkb2VzbiYjMzk7dCBRRU1VIGhhdmUgdGhlIGBpbXguZmVjYCBkZXZpY2U/JiMzNDsgWWVzISBJZiBJIHJ1biBpdCBvbiBhbiBpLk1YIG1hY2hpbmUgaXQmIzM5O3MgcmVhY2hhYmxlLgoKVGhlIHByb21wdCBhbHNvIHNheXMgdGhhdCBzeXprYWxsZXIgcnVucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEl0IGRvZXMgbm90IG1lbnRpb24gdGhhdCBpdCYjMzk7cyByZXN0cmljdGVkIHRvIHg4Nl82NCwgb3Igb3RoZXIgc3lzdGVtcywgc28gdGhlIGkuTVggbWFjaGluZSBpcyBhIHBvc3NpYmlsaXR5LiBBbmQgdGhlbiBpdCBzYXlzLCAmIzM0O0NvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7LiBHaXZlbiB0aGF0IGBmZWNgIGlzIGVtdWxhdGVkIGFzIGBpbXguZmVjYCwgaXQgKmlzKiB0ZWNobmljYWxseSByZWFjaGFibGUgaW4gUUVNVS4gVGhhdCBpcyBnb29kIG5ld3MuCgpBbHJpZ2h0LCBzbyB0aGUgZGV2aWNlICppcyogcmVhY2hhYmxlLiBOb3csIGlzIGl0IHdvcnRoIGZ1enppbmc/IFRoZSBwYXRjaCBmb2N1c2VzIG9uIGVycm9yIGNoZWNraW5nIGluIGBmZWNfcHRwX2luaXRgIHdpdGhpbiBgZmVjX3Byb2JlYC4gSWYgdGhpcyBmYWlscywgaXQgZ29lcyB0byBgZmFpbGVkX3Jlc2V0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNoYW5nZSBpbiB0aGUgKnByb2JlKiBwYXRoLCBhbmQgdGhpcyBpcyB3aGVyZSBzeXprYWxsZXIgcmVhbGx5IHNoaW5lcy4gTXkgZXhwZXJpZW5jZSBzaG93cyB0aGF0IHByb2JlIHBhdGhzIGFyZSBvZnRlbiBmdXp6ZWQgdGhyb3VnaCBmYXVsdCBpbmplY3Rpb24gb3IgaW5zdGFudGlhdGlvbi4gU28sIHRoZSBzaG9ydCBhbnN3ZXIgaXMgeWVzLCB3b3J0aCBmdXp6aW5nLgoKTXkgbmV4dCBxdWVzdGlvbjogQ2FuIGBmZWNfcHRwX2luaXRgIGFjdHVhbGx5IGZhaWw/IExldCYjMzk7cyBjaGVjayB0aGUgY29kZS4gSSByZWNhbGwgdGhhdCBgZmVjX3B0cF9pbml0YCBjYWxscyBgcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbGAsIGBkZXZtX3JlcXVlc3RfaXJxYCwgYW5kIGBwdHBfY2xvY2tfcmVnaXN0ZXJgLiBUaGVzZSBmdW5jdGlvbnMgYWxsIGhhdmUgdGhlIHBvdGVudGlhbCB0byBmYWlsLCBlc3BlY2lhbGx5IHVuZGVyIGZhdWx0IGluamVjdGlvbi4gTm93LCBpZiBgZmVjX3B0cF9pbml0YCBjYWxscyB0aG9zZSBmdW5jdGlvbnMsIGFuZCB0aG9zZSBmdW5jdGlvbnMgZmFpbCwgdGhlbiB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB3b3J0aCBpbnZlc3RpZ2F0aW5nIGZ1cnRoZXIuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBmZWNfcHRwX2luaXRgIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmVjX3B0cF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jPTY5Nj1zdGF0aWMgaXJxcmV0dXJuX3QgZmVjX3Bwc19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmMtNzI5LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYzo3MzA6ICogZmVjX3B0cF9pbml0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jLTczMS0gKiBAcGRldjogVGhlIEZFQyBuZXR3b3JrIGFkYXB0ZXJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jLTczOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmM6NzM5OmludCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jLTc0MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDExOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZFQyBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSB1cGRhdGVkIGBmZWNfcHRwX2luaXRgIHRvIHJldHVybiBhbiBpbnRlZ2VyLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UgZm9yIGVycm9yIGhhbmRsaW5nLiBUaGF0IHJldHVybiB2YWx1ZSBpcyB0aGVuIGJlaW5nIGRlYWx0IHdpdGggaW4gYGZlY19wcm9iZWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIHRvIG1ha2Ugc3VyZSB0aGlzIGJ1aWxkcyBjb3JyZWN0bHkuCgpGaXJzdCwgb2J2aW91c2x5LCBJJiMzOTtsbCBuZWVkIGBGRUNgIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHNlZSBpZiBgRkVDYCBkZXBlbmRzIG9uIGFueSBvdGhlciBjb25maWdzLiBBaCwgbG9va3MgbGlrZSBgTkVUX1ZFTkRPUl9GUkVFU0NBTEVgIGlzIGFsc28gcmVxdWlyZWQuIEFscmlnaHQsIGxldCBtZSB0YWtlIGEgcXVpY2sgbG9vayBhdCBgTkVUX1ZFTkRPUl9GUkVFU0NBTEVgIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGRlcGVuZGVuY2llcyBvciBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1ZFTkRPUl9GUkVFU0NBTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9GUkVFU0NBTEVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTctXHRib29sIFwmIzM0O0ZyZWVzY2FsZSBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDExOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NzEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEZyZWVzY2FsZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEZyZWVzY2FsZSBuZXR3b3JrIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgTkVUX1ZFTkRPUl9GUkVFU0NBTEVgIGFuZCB0aGUgYEZFQ2AgY29tcG9uZW50cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlaXIgaW50ZXJkZXBlbmRlbmNpZXMuIEFoYSwgaGVyZSYjMzk7cyBhbiBpbnRlcmVzdGluZyBkZXBlbmRlbmN5IC0gYEZFQ2AgcmVsaWVzIG9uIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAuIEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoYXQgb3B0aW9uYWwgY2xvY2sgc2V0dGluZy4gUmlnaHQgbm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgc2V0dGluZyBpbiB0aGlzIGNvbnRleHQuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCB0aGF0JiMzOTtzIGFsbCBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9LY29uZmlnPTg9Y29uZmlnIFBUUF8xNTg4X0NMT0NLXG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0yOS1cbmRyaXZlcnMvcHRwL0tjb25maWc6MzA6Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL3B0cC9LY29uZmlnLTMxLVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI4OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIERpbGVtbWEqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgdHJpc3RhdGUgb3B0aW9uLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIGEgZmVhdHVyZSB0aGF0IGNhbiBiZSBzZWxlY3RpdmVseSBpbmNsdWRlZC4gSW4gdGhpcyBjYXNlLCBpdCBzZWVtcyB0byBiZSByZWxhdGVkIHRvIGBGRUNgIOKAkyBGb3J3YXJkIEVycm9yIENvcnJlY3Rpb24uIFRoZSBkb2N1bWVudGF0aW9uIHNheXMgaWYgd2UgZW5hYmxlIGBGRUNgLCB3ZSBtaWdodCBuZWVkIHRvIGVuYWJsZSBgUFRQXzE1ODhfQ0xPQ0tgLCBvciwgd2VsbCwgaXQgbWlnaHQganVzdCB3b3JrIGlmIGBQVFBfMTU4OF9DTE9DS2AgKmlzbiYjMzk7dCogc2V0LCBzaW5jZSBpdCYjMzk7cyBsaXN0ZWQgYXMgb3B0aW9uYWwuIFRoYXTigJlzIGEgbGl0dGxlIGFtYmlndW91cy4KCldhaXQgYSBtaW51dGUsIHRoZSBgZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgc3RhdGVtZW50IG1lYW5zIHRoYXQgaWYgYFBUUF8xNTg4X0NMT0NLYCBpcyBidWlsdCBhcyBhIG1vZHVsZSwgb3IgYG1gLCB0aGVuIGBGRUNgICpjYW4mIzM5O3QqIGJlIGVuYWJsZWQuIFRoYXQgY29tcGxpY2F0ZXMgdGhpbmdzLCBiZWNhdXNlIGl0IG1lYW5zIGlmIGBGRUNgIG5lZWRzIGBQVFBfMTU4OF9DTE9DS2AsIHdlJiMzOTtyZSBsb2NrZWQgb3V0IG9mIGEgbW9kdWxlIGJ1aWxkLiBJIHNob3VsZCBwcm9iYWJseSBlcnIgb24gdGhlIHNpZGUgb2YgY2F1dGlvbiBhbmQgZW5hYmxlIGBQVFBfMTU4OF9DTE9DS2AgdG8gYmUgYHlgIGp1c3QgdG8gYmUgc2FmZS4gQWx0ZXJuYXRpdmVseSwgcGVyaGFwcyBsZWF2ZSBpdCB1bmRlZmluZWQ/CgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiwgd2hhdCBhYm91dCBgQ09NUElMRV9URVNUYD8gSXQmIzM5O3MgbGlzdGVkIGluIHRoZSBkZXBlbmRlbmN5IGZvciBgRkVDYC4gTGV0IG1lIHNlZSwgYEZFQ2AgZGVwZW5kcyBvbiBhIGxpc3Qgb2YgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZXMsIGFuZCBhbHNvLCBjcml0aWNhbGx5LCBgQ09NUElMRV9URVNUYC4gVGhpcyBkZXBlbmRlbmN5IGlzIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluISBUaGlzIGRlcGVuZGVuY3kgb24gYENPTVBJTEVfVEVTVGAgY291bGQgYmUgZW5vdWdoIHRvIGVuYWJsZSBidWlsZGluZyB0aGUgY29kZSBvbiB4ODZfNjQsIHdoaWNoIGlzIHdoYXQgSSBuZWVkLgoKU28sIHRoZSBrZXkgaGVyZSBpcyB0byBlbmFibGUgYENPTVBJTEVfVEVTVGAgdG8gZW5zdXJlIHRoYXQgdGhpcyBjYW4gYmUgYnVpbHQgb24geDg2XzY0IGFuZCB0ZXN0IHRoZSBmZWF0dXJlLiBMZXQgbWUgY2hlY2sgaWYgYENPTVBJTEVfVEVTVGAgaXMgZW5vdWdoLCBieSBpdHNlbGYuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGBGRUNgIGVuYWJsZWQgaWYgdGhlIG90aGVyIGRlcGVuZGVuY2llcyBhcmUgbWV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09NUElMRV9URVNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0yMzM9Y29uZmlnIElOSVRfRU5WX0FSR19MSU1JVFxuLS1cbmluaXQvS2NvbmZpZy0yNDAtXG5pbml0L0tjb25maWc6MjQxOmNvbmZpZyBDT01QSUxFX1RFU1RcbmluaXQvS2NvbmZpZy0yNDItXHRib29sIFwmIzM0O0NvbXBpbGUgYWxzbyBkcml2ZXJzIHdoaWNoIHdpbGwgbm90IGxvYWRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA0OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVhY2hhYmlsaXR5IGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqCgpPa2F5LCBzbyBgQ09NUElMRV9URVNUYCBpcyBkZWZpbml0ZWx5IHN0YW5kYXJkLCBzbyB0aGF0IHBhcnQgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGF0IG1lYW5zIGBFbmFibGVDb25maWdzYCBzaG91bGQgaW5jbHVkZSBgWyYjMzQ7TkVUX1ZFTkRPUl9GUkVFU0NBTEUmIzM0OywgJiMzNDtGRUMmIzM0OywgJiMzNDtDT01QSUxFX1RFU1QmIzM0O11gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgZmVjX3Byb2JlYCBpcyBhY3R1YWxseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cC4gVGhlIHF1ZXN0aW9uIGJvaWxzIGRvd24gdG8gd2hldGhlciBpdCB3aWxsIGJlIHByb2JlZCwgZXZlbiBpZiBpdCYjMzk7cyBjb21waWxlZC4KCkkga25vdyBTeXprYWxsZXIgZG9lc24mIzM5O3QgdXNlIGBzeXpfZGV2bGlua19uZXRgIGZvciBwbGF0Zm9ybSBkZXZpY2VzLiBIbW1tLi4ud2FpdCwgdGhlcmUmIzM5O3MgYSBwc2V1ZG8tc3lzY2FsbDogYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IFN5emthbGxlciBwc2V1ZG8tc3lzY2FsbCBsaXN0LgoKSGFuZyBvbi4uLnRoZSBwcm9tcHQgZXhwbGljaXRseSBtZW50aW9ucyBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24uIFNvLCBpZiBhIGRldmljZSAqaXNuJiMzOTt0KiBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9uIHRoZSBhcmNoaXRlY3R1cmUgU3l6a2FsbGVyIHJ1bnMsIHRoZW4gaXQmIzM5O3MgKm5vdCogcmVhY2hhYmxlLCByaWdodD8gQnV0IFFFTVUgKmRvZXMqIGVtdWxhdGUgYGlteC5mZWNgIG9uIEFSTSwgYW5kIFN5emthbGxlciBjYW4gcnVuIG9uIEFSTSBRRU1VICh1c2luZyBgcWVtdS1zeXN0ZW0tYXJtYCBvciBgcWVtdS1zeXN0ZW0tYWFyY2g2NGApLiBTbyB0aGF0IG1lYW5zIGl0ICppcyogcmVhY2hhYmxlIGluIFFFTVUuCgpKdXN0IHRvIGJlIHN1cmUsIGV2ZW4gdGhvdWdoIEkgZGlkbiYjMzk7dCBzZWUgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYCwgbWF5YmUgaXQmIzM5O3MgcHJvYmUtYWJsZSB0aHJvdWdoIGRldmljZSB0cmVlIG92ZXJsYXlzIG9yIHNvbWV0aGluZyBzaW1pbGFyPwoKQWxyaWdodCwgdGhlIHByb21wdCYjMzk7cyB3b3JkaW5nICgmIzM0O2V2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0OykgcmVhbGx5IGNsYXJpZmllcyB0aGlzLiBTaW5jZSBRRU1VIGVtdWxhdGVzIGBpbXguZmVjYCwgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuCgpOb3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgaW1wb3J0YW50PyBJIHNob3VsZCBmb2N1cyBvbiBgZmVjX3Byb2JlYCBhbmQgYGZlY19wdHBfaW5pdGAuIEkgbmVlZCB0byBzZWUgaWYgYGZlY19wdHBfaW5pdGAgaXMgc3RhdGljLiBJdCYjMzk7cyBub3Qgc3RhdGljLgpgaW50IGZlY19wdHBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXJxX2lkeClgLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQW5kIGBmZWNfcHJvYmVgIGlzIHN0YXRpYy4gT2theS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmVjX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NTIwMz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzo1MjA0OmZlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNTIwNS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NTY3Mz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmZWNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTU2ODAtXHQuaWRfdGFibGUgPSBmZWNfZGV2dHlwZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjU2ODE6XHQucHJvYmVcdD0gZmVjX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNTY4Mi1cdC5yZW1vdmUgPSBmZWNfZHJ2X3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMjQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEcml2ZXIgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYGZlY19wcm9iZWAganVtcHMgb3V0IGF0IG1lLiBUaGUgdGhpbmcgaXMsIGBmZWNfcHJvYmVgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpcyBsZXNzIGRlc2lyYWJsZSBmcm9tIGFuIEFQSSBlbnRyeSBwb2ludCBwZXJzcGVjdGl2ZSwgYXMgaXQmIzM5O3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGUgcHJvbXB0IGlzIGNsZWFyIG9uIHRoYXQuIEkgaW5pdGlhbGx5IHRob3VnaHQgSSBjb3VsZCBqdXN0IGZvY3VzIG9uIGBmZWNfcHRwX2luaXRgIHNpbmNlIHRoYXQmIzM5O3Mgbm9uLXN0YXRpYywgYW5kIHNlZW1zIHRvIGJlIHRoZSBwcmVmZXJyZWQgY2hvaWNlLiBCdXQgd2FpdCwgdGhlIHBhdGNoICphbHNvKiBtb2RpZmllcyBgZmVjX3Byb2JlYCwgd2hpY2ggY29tcGxpY2F0ZXMgdGhpbmdzLiBFdmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIHN0aWxsIGJlaW5nIHRvdWNoZWQsIGFuZCBpdCAqaXMqIGEgcHJvYmUgZnVuY3Rpb24sIHdoaWNoIHN1Z2dlc3RzIGl0ICpjb3VsZCogYmUgYSBkcml2ZXIgZW50cnkgcG9pbnQuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCByZWFzc2Vzcy4gU28sIGBmZWNfcHJvYmVgIGlzIG91dCBiZWNhdXNlIGl0JiMzOTtzIHN0YXRpYywgd2hpY2ggbWFrZXMgYGZlY19wdHBfaW5pdGAgdGhlIG1vcmUgcHJlZmVycmVkIGZ1bmN0aW9uLiBIb3dldmVyLCB0aGUgcGF0Y2ggc2hvd3MgdGhhdCBgZmVjX3Byb2JlYCBjb25kaXRpb25hbGx5IGNhbGxzIGBmZWNfcHRwX3N0b3BgLiBUaGlzIG1ha2VzIGBmZWNfcHRwX3N0b3BgIGEgZnVuY3Rpb24gSSAqc2hvdWxkKiBjb25zaWRlciBiZWNhdXNlIG9mIGl0cyBtb2RpZmllZCB1c2FnZSBpbiB0aGUgcHJvYmUuIEkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZSB0aGF0IGFzIGEgY2FuZGlkYXRlIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmVjX3B0cF9zdG9wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jPTgyNz12b2lkIGZlY19wdHBfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmMtODU2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYzo4NTc6dm9pZCBmZWNfcHRwX3N0b3Aoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmMtODU4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4ODkKCQkJCQkJCW91dHB1dDogMTE1CgkJCQkJCQl0aG91Z2h0czogMTAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBGRUMgUFRQIEluaXRpYWxpemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIGBmZWNfcHRwX3N0b3BgIGlzICpub3QqIHN0YXRpYywgd2hpY2ggbWVhbnMgYGZlY19wdHBfaW5pdGAgYW5kIGBmZWNfcHRwX3N0b3BgIGFyZSBwb3RlbnRpYWwgZm9jYWwgcG9pbnRzIGZvciBmdXp6aW5nLCBzbyB0aG9zZSBzaG91bGQgZ28gaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuCgpMb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIGl0JiMzOTtzIHByZXR0eSBjbGVhcjogdGhleSYjMzk7dmUgY2hhbmdlZCB0aGUgcmV0dXJuIHR5cGUgb2YgYGZlY19wdHBfaW5pdGAgdG8gYGludGAgYW5kIGFkZGVkIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgZnVuY3Rpb24gYW5kIGFsc28gaW4gdGhlIGBmZWNfcHJvYmVgIGNhbGxlci4gU3BlY2lmaWNhbGx5LCBgZmVjX3Byb2JlYCBub3cgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGZlY19wdHBfaW5pdGAgYW5kIGp1bXBzIHRvIGBmYWlsZWRfcmVzZXRgIG9uIGZhaWx1cmUuIEFuZCB0aGUgY2hhbmdlZCBgZmVjX3B0cF9pbml0YCBoYXMgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgYXJvdW5kIElSUSByZXF1ZXN0cyBhbmQgUFRQIGNsb2NrIHJlZ2lzdHJhdGlvbi4gVGhpcyBpcyBhICpzaWduaWZpY2FudCogZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGVycm9yIGhhbmRsaW5nIG9mIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gcGF0aC4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcgdG8gZW5zdXJlIHRoYXQgZXJyb3JzIGFyZSBoYW5kbGVkIGNvcnJlY3RseSwgYW5kIG5vIHJlc291cmNlcyBhcmUgbGVha2VkLCBvciBubyBjcmFzaGVzIG9jY3VyLCBlc3BlY2lhbGx5IHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuCgpOb3csIGNhbiB3ZSByZWFjaCB0aGlzIGNvZGUgcGF0aD8gTGV0JiMzOTtzIGNoZWNrLiBZZXMsIFFFTVUgaGFzIGBpbXguZmVjYCBkZXZpY2VzIGFuZCB0aGVzZSBhcmUgdXNlZCBpbiB0aGUgYGlteDI1LXBka2AsIGBzYWJyZWxpdGVgLCBgbWNpbXg2dWwtZXZrYCwgYW5kIGBtY2lteDdkLXNhYnJlYCBtYWNoaW5lcy4gRXhjZWxsZW50LCB0aGVzZSBhcmUgYWxsIHBlcmZlY3RseSBmdXp6ZWFibGUgdmlhIHN5emthbGxlciBvbiBBUk0gYW5kIEFSTTY0LiBBbHRob3VnaCBJIGFtIHVuc3VyZSBleGFjdGx5IGhvdyBzeXprYWxsZXIgaGFuZGxlcyBwbGF0Zm9ybSBkZXZpY2VzLCBteSBtZW1vcnkgaXMgdGhhdCBpdCBjYW4sIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBwcm9tcHQgc2FpZCB0aGF0IGl0IHdvdWxkbiYjMzk7dCBiZSBwb3NzaWJsZSB0byByZWFjaC4KClNpbmNlIHRoaXMgaXMgYSBRRU1VLWVtdWxhdGVkIGRldmljZSwgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZy4gSSB3aWxsIG1ha2UgYSBmdXp6aW5nIGNvbmZpZzoKCiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWAKKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbJiMzNDtmZWNfcHRwX2luaXQmIzM0O11gIC0gV2hpbGUgYGZlY19wdHBfc3RvcGAgaXMgcmVhY2hhYmxlLCB0aGUgcHJpbWFyeSBjaGFuZ2UgaXMgaW4gYGZlY19wdHBfaW5pdGAsIHNvIGZvY3VzaW5nIHRoZXJlIG1ha2VzIHNlbnNlLgoqICAgKipFbmFibGVDb25maWdzKio6IGBbJiMzNDtORVRfVkVORE9SX0ZSRUVTQ0FMRSYjMzQ7LCAmIzM0O0ZFQyYjMzQ7LCAmIzM0O0NPTVBJTEVfVEVTVCYjMzQ7XWAgLSBTdGFuZGFyZCBjb25maWdzIGZvciB0aGlzIGRyaXZlciwgd2l0aCBgQ09NUElMRV9URVNUYCB0byBlbnN1cmUgYnVpbGRzLgoqICAgKipSZWFzb25pbmcqKjogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyB0byBmZWNfcHRwX2luaXQgYW5kIHByb3BhZ2F0ZXMgdGhlIGVycm9yIHRvIGZlY19wcm9iZSwgd2hpY2ggbm93IGFib3J0cyBpbml0aWFsaXphdGlvbiBpZiBQVFAgc2V0dXAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZHJpdmVyIHByb2JlIHBhdGggdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBwcm9wZXIgcmVzb3VyY2UgY2xlYW51cCBvbiBmYWlsdXJlLiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX0ZSRUVTQ0FMRSYjMzQ7LAogICAgJiMzNDtGRUMmIzM0OywKICAgICYjMzQ7Q09NUElMRV9URVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmVjX3B0cF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgaGFuZGxpbmcgdG8gZmVjX3B0cF9pbml0IGFuZCBwcm9wYWdhdGVzIHRoZSBlcnJvciB0byBmZWNfcHJvYmUsIHdoaWNoIG5vdyBhYm9ydHMgaW5pdGlhbGl6YXRpb24gaWYgUFRQIHNldHVwIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlciBwcm9iZSBwYXRoIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgcHJvcGVyIHJlc291cmNlIGNsZWFudXAgb24gZmFpbHVyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9GUkVFU0NBTEUmIzM0OywKICAgICYjMzQ7RkVDJiMzNDssCiAgICAmIzM0O0NPTVBJTEVfVEVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZlY19wdHBfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZlY19wdHBfaW5pdCBhbmQgcHJvcGFnYXRlcyB0aGUgZXJyb3IgdG8gZmVjX3Byb2JlLCB3aGljaCBub3cgYWJvcnRzIGluaXRpYWxpemF0aW9uIGlmIFBUUCBzZXR1cCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIgcHJvYmUgcGF0aCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciByZXNvdXJjZSBjbGVhbnVwIG9uIGZhaWx1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIHByb2JlIGZ1bmN0aW9uIG9mIHRoZSBGcmVlc2NhbGUgRkVDIGV0aGVybmV0IGRyaXZlci4gSXQgY2hhbmdlcyBgZmVjX3B0cF9pbml0YCB0byByZXR1cm4gYW4gaW50ZWdlciBlcnJvciBjb2RlIGluc3RlYWQgb2YgYHZvaWRgLCBhbGxvd2luZyBpdCB0byBwcm9wYWdhdGUgZXJyb3JzIGZyb20gSVJRIHJlcXVlc3RzIGFuZCBQVFAgY2xvY2sgcmVnaXN0cmF0aW9uLiBUaGUgYGZlY19wcm9iZWAgZnVuY3Rpb24gaXMgdXBkYXRlZCB0byBjaGVjayB0aGlzIHJldHVybiB2YWx1ZSBhbmQganVtcCB0byB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgaGFuZGxpbmcgbGFiZWwuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgZXJyb3IgcHJvcGFnYXRpb24sIHdoaWNoIGRvIG5vdCBwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNmOGNkOGEzMmJmYzQ0ODM0ZDEwN2MzOGI4YzE4ODE4ODE1OGMxOGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAxMTo1NzoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaAppbmRleCA3MTc2ODAzMTQ2ZjNkLi44ODMxZGEzNzMyNmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlYy5oCkBAIC02OTIsNyAmIzQzOzY5Miw3IEBAIHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlIHsKIAl1NjQgZXRodG9vbF9zdGF0c1tdOwogfTsKIAotdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpOwomIzQzO2ludCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpOwogdm9pZCBmZWNfcHRwX3Jlc3RvcmVfc3RhdGUoc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCk7CiB2b2lkIGZlY19wdHBfc2F2ZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKTsKIHZvaWQgZmVjX3B0cF9zdG9wKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYwppbmRleCBjZWQ0ZGJmOGNkOTBmLi5iNmMyMmQ2YzFlNjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYwpAQCAtNTM4NCw4ICYjNDM7NTM4NCwxMSBAQCBmZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJZ290byBmYWlsZWRfcmVzZXQ7CiAKIAlpcnFfY250ID0gZmVjX2VuZXRfZ2V0X2lycV9jbnQocGRldik7Ci0JaWYgKGZlcC0mZ3Q7YnVmZGVzY19leCkKLQkJZmVjX3B0cF9pbml0KHBkZXYsIGlycV9jbnQpOwomIzQzOwlpZiAoZmVwLSZndDtidWZkZXNjX2V4KSB7CiYjNDM7CQlyZXQgPSBmZWNfcHRwX2luaXQocGRldiwgaXJxX2NudCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gZmFpbGVkX3Jlc2V0OwomIzQzOwl9CiAKIAlyZXQgPSBmZWNfZW5ldF9pbml0KG5kZXYpOwogCWlmIChyZXQpCkBAIC01NDU3LDcgJiM0Mzs1NDYwLDggQEAgZmVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiBmYWlsZWRfaXJxOgogCWZlY19lbmV0X2RlaW5pdChuZGV2KTsKIGZhaWxlZF9pbml0OgotCWZlY19wdHBfc3RvcChwZGV2KTsKJiM0MzsJaWYgKGZlcC0mZ3Q7YnVmZGVzY19leCkKJiM0MzsJCWZlY19wdHBfc3RvcChwZGV2KTsKIGZhaWxlZF9yZXNldDoKIAlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJmFtcDtwZGV2LSZndDtkZXYpOwogCXBtX3J1bnRpbWVfZGlzYWJsZSgmYW1wO3BkZXYtJmd0O2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYwppbmRleCA1NjgwMWMyMDA5ZDU5Li44YWQ2ODA0MTFiMGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmMKQEAgLTczNiw3ICYjNDM7NzM2LDcgQEAgc3RhdGljIGlycXJldHVybl90IGZlY19wcHNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKICAqIGN5Y2xlY291bnRlciBpbml0IHJvdXRpbmUgYW5kIGV4aXRzLgogICovCiAKLXZvaWQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KQomIzQzO2ludCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYobmRldik7CkBAIC03NzksMjYgJiM0Mzs3NzksMjkgQEAgdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpCiAJCSAgICAgIEhSVElNRVJfTU9ERV9SRUwpOwogCiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWVfb3B0aW9uYWwocGRldiwgJiMzNDtwcHMmIzM0Oyk7Ci0JaWYgKGlycSAmbHQ7IDApCiYjNDM7CWlmIChpcnEgJmx0OyAwKSB7CiAJCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfb3B0aW9uYWwocGRldiwgaXJxX2lkeCk7Ci0JLyogRmFpbHVyZSB0byBnZXQgYW4gaXJxIGlzIG5vdCBmYXRhbCwKLQkgKiBvbmx5IHRoZSBQVFBfQ0xPQ0tfUFBTIGNsb2NrIGV2ZW50cyBzaG91bGQgc3RvcAotCSAqLwotCWlmIChpcnEgJmd0Oz0gMCkgewomIzQzOwkJaWYgKGlycSAmbHQ7IDAgJmFtcDsmYW1wOyBpcnEgIT0gLUVOWElPKQomIzQzOwkJCXJldHVybiBpcnE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGlycSAmZ3Q7IDApIHsKIAkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmYW1wO3BkZXYtJmd0O2RldiwgaXJxLCBmZWNfcHBzX2ludGVycnVwdCwKIAkJCQkgICAgICAgMCwgcGRldi0mZ3Q7bmFtZSwgbmRldik7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJZGV2X3dhcm4oJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7cmVxdWVzdCBmb3IgcHBzIGlycSBmYWlsZWQoJWQpXG4mIzM0OywKLQkJCQkgcmV0KTsKJiM0MzsJCQlyZXR1cm4gcmV0OwogCX0KIAogCWZlcC0mZ3Q7cHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKCZhbXA7ZmVwLSZndDtwdHBfY2FwcywgJmFtcDtwZGV2LSZndDtkZXYpOwogCWlmIChJU19FUlIoZmVwLSZndDtwdHBfY2xvY2spKSB7CiAJCWZlcC0mZ3Q7cHRwX2Nsb2NrID0gTlVMTDsKIAkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtwdHBfY2xvY2tfcmVnaXN0ZXIgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gUFRSX0VSUihmZXAtJmd0O3B0cF9jbG9jayk7CiAJfQogCiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7ZmVwLSZndDt0aW1lX2tlZXAsIEhaKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHZvaWQgZmVjX3B0cF9zYXZlX3N0YXRlKHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXApCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTczCgkJCQkJCQlvdXRwdXQ6IDE2MQoJCQkJCQkJdGhvdWdodHM6IDM5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGcmVlc2NhbGUgRkVDIFBUUCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhpcyBwYXRjaCwgYXQgYSBnbGFuY2UsIGlzIG1vZGlmeWluZyB0aGUgRnJlZXNjYWxlIEZFQyBQVFAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBmZWNfcHRwX2luaXRgIGZ1bmN0aW9uIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY2AuIEl0JiMzOTtzIGNoYW5naW5nIHRoZSByZXR1cm4gdHlwZSBvZiB0aGF0IGZ1bmN0aW9uIGZyb20gYHZvaWRgIHRvIGBpbnRgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhbiBlcnJvciBjb2RlIHByb3BhZ2F0aW9uIHN0cmF0ZWd5LiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBjbHVlLgoKVGhlbiwgbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gd2l0aGluIGBmZWNfcHJvYmVgIGluIGBmZWNfbWFpbi5jYCwgdGhleSYjMzk7cmUgYWN0dWFsbHkgKmNoZWNraW5nKiB0aGUgcmV0dXJuIHZhbHVlIG9mIGBmZWNfcHRwX2luaXRgIG5vdy4gSWYgaXQgZmFpbHMsIHdlIGp1bXAgdG8gYGZhaWxlZF9yZXNldGAuIFNvIHRoZSBwYXRjaCBpcyAqZG9pbmcqIHNvbWV0aGluZyB3aXRoIHRoYXQgZXJyb3IgY29kZSEgTXkgcmVhZCBoZXJlIGlzIHRoYXQgdGhpcyBpcyBoYW5kbGluZyBJUlEgcmVxdWVzdCBmYWlsdXJlcyBhbmQgUFRQIGNsb2NrIHJlZ2lzdHJhdGlvbiBmYWlsdXJlcy4KCkFuZCBpbiB0aGUgYGZhaWxlZF9pbml0YCBwYXRoLCBgZmVjX3B0cF9zdG9wKHBkZXYpYCBpcyBub3cgKmNvbmRpdGlvbmFsbHkqIGNhbGxlZCBvbmx5IGlmIGBmZXAtJmd0O2J1ZmRlc2NfZXhgIGlzIHRydWUuIFRoaXMgYWxzbyBtYWtlcyBzZW5zZSBpbiB0ZXJtcyBvZiByZXNvdXJjZSBjbGVhbnVwLgoKVGhpcyBpcyBhbGwgKnN0YW5kYXJkKiBlcnJvciBoYW5kbGluZyBzdHVmZi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBhYm91dCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgZXhwb3N1cmUuIEhvd2V2ZXIsIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB0byB1c2Vyc3BhY2UuIEluIGZhY3QsIGl0IGRvZXMgcXVpdGUgdGhlIG9wcG9zaXRlIGFuZCBpcyBjbGVhbmluZyB1cCBjb3JyZWN0bHkuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgcmVzb3VyY2UgbGVhayBhbmQvb3IgZXJyb3IgaGFuZGxpbmcgZml4LgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtLCBJJiMzOTtsbCBzY2FuIHRoZSBkaWZmIGFnYWluOiBgZmVjX3B0cF9pbml0YCByZXR1cm5zIGFuIGBpbnRgLiBgZmVjX3Byb2JlYCBjYWxscyBpdCBhbmQgY2hlY2tzIHRoZSByZXR1cm46IGByZXQgPSBmZWNfcHRwX2luaXQocGRldiwgaXJxX2NudCk7IGlmIChyZXQpIGdvdG8gZmFpbGVkX3Jlc2V0O2AgVGhlIGBmYWlsZWRfcmVzZXRgIHBhdGggaXMgYWxsIGFib3V0IFBNIHJ1bnRpbWUgc3R1ZmYuIEFuZCBgZmVjX3B0cF9zdG9wYCBpcyBjYWxsZWQgY29uZGl0aW9uYWxseSBpbiBgZmFpbGVkX2luaXRgIGlmIGBmZXAtJmd0O2J1ZmRlc2NfZXhgLgoKUmlnaHQsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhpcyBsb29rcyBnb29kLCBhIHNvbGlkIGltcHJvdmVtZW50IGluIGVycm9yIGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgZnVuY3Rpb24gb2YgdGhlIEZyZWVzY2FsZSBGRUMgZXRoZXJuZXQgZHJpdmVyLiBJdCBjaGFuZ2VzIGBmZWNfcHRwX2luaXRgIHRvIHJldHVybiBhbiBpbnRlZ2VyIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBgdm9pZGAsIGFsbG93aW5nIGl0IHRvIHByb3BhZ2F0ZSBlcnJvcnMgZnJvbSBJUlEgcmVxdWVzdHMgYW5kIFBUUCBjbG9jayByZWdpc3RyYXRpb24uIFRoZSBgZmVjX3Byb2JlYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlIGFuZCBqdW1wIHRvIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBoYW5kbGluZyBsYWJlbC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBlcnJvciBwcm9wYWdhdGlvbiwgd2hpY2ggZG8gbm90IHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBwcm9iZSBmdW5jdGlvbiBvZiB0aGUgRnJlZXNjYWxlIEZFQyBldGhlcm5ldCBkcml2ZXIuIEl0IGNoYW5nZXMgYGZlY19wdHBfaW5pdGAgdG8gcmV0dXJuIGFuIGludGVnZXIgZXJyb3IgY29kZSBpbnN0ZWFkIG9mIGB2b2lkYCwgYWxsb3dpbmcgaXQgdG8gcHJvcGFnYXRlIGVycm9ycyBmcm9tIElSUSByZXF1ZXN0cyBhbmQgUFRQIGNsb2NrIHJlZ2lzdHJhdGlvbi4gVGhlIGBmZWNfcHJvYmVgIGZ1bmN0aW9uIGlzIHVwZGF0ZWQgdG8gY2hlY2sgdGhpcyByZXR1cm4gdmFsdWUgYW5kIGp1bXAgdG8gdGhlIGFwcHJvcHJpYXRlIGVycm9yIGhhbmRsaW5nIGxhYmVsLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0aGF0IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNrcywgb3IgZXhwb3NlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGVycm9yIHByb3BhZ2F0aW9uLCB3aGljaCBkbyBub3QgcG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1NzoyOC4xMDc3MDI0MDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM5NTEwNzQ2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9GUkVFU0NBTEVcIixcbiAgICBcIkZFQ1wiLFxuICAgIFwiQ09NUElMRV9URVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmVjX3B0cF9pbml0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgZnVuY3Rpb24gb2YgdGhlIEZyZWVzY2FsZSBGRUMgZXRoZXJuZXQgZHJpdmVyLiBJdCBjaGFuZ2VzIGBmZWNfcHRwX2luaXRgIHRvIHJldHVybiBhbiBpbnRlZ2VyIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBgdm9pZGAsIGFsbG93aW5nIGl0IHRvIHByb3BhZ2F0ZSBlcnJvcnMgZnJvbSBJUlEgcmVxdWVzdHMgYW5kIFBUUCBjbG9jayByZWdpc3RyYXRpb24uIFRoZSBgZmVjX3Byb2JlYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlIGFuZCBqdW1wIHRvIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBoYW5kbGluZyBsYWJlbC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBlcnJvciBwcm9wYWdhdGlvbiwgd2hpY2ggZG8gbm90IHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZlY19wdHBfaW5pdCBhbmQgcHJvcGFnYXRlcyB0aGUgZXJyb3IgdG8gZmVjX3Byb2JlLCB3aGljaCBub3cgYWJvcnRzIGluaXRpYWxpemF0aW9uIGlmIFBUUCBzZXR1cCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIgcHJvYmUgcGF0aCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciByZXNvdXJjZSBjbGVhbnVwIG9uIGZhaWx1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDExOjU3OjI4LjEwNzcwNzcwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4MjUwOTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2Y4Y2Q4YTMyYmZjNDQ4MzRkMTA3YzM4YjhjMTg4MTg4MTU4YzE4YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxMTo1NzoyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjLmhcXG5pbmRleCA3MTc2ODAzMTQ2ZjNkLi44ODMxZGEzNzMyNmIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaFxcbkBAIC02OTIsNyArNjkyLDcgQEAgc3RydWN0IGZlY19lbmV0X3ByaXZhdGUge1xcbiBcXHR1NjQgZXRodG9vbF9zdGF0c1tdO1xcbiB9O1xcbiBcXG4tdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpO1xcbitpbnQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KTtcXG4gdm9pZCBmZWNfcHRwX3Jlc3RvcmVfc3RhdGUoc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCk7XFxuIHZvaWQgZmVjX3B0cF9zYXZlX3N0YXRlKHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXApO1xcbiB2b2lkIGZlY19wdHBfc3RvcChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uY1xcbmluZGV4IGNlZDRkYmY4Y2Q5MGYuLmI2YzIyZDZjMWU2OWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uY1xcbkBAIC01Mzg0LDggKzUzODQsMTEgQEAgZmVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdFxcdGdvdG8gZmFpbGVkX3Jlc2V0O1xcbiBcXG4gXFx0aXJxX2NudCA9IGZlY19lbmV0X2dldF9pcnFfY250KHBkZXYpO1xcbi1cXHRpZiAoZmVwLVxcdTAwM2VidWZkZXNjX2V4KVxcbi1cXHRcXHRmZWNfcHRwX2luaXQocGRldiwgaXJxX2NudCk7XFxuK1xcdGlmIChmZXAtXFx1MDAzZWJ1ZmRlc2NfZXgpIHtcXG4rXFx0XFx0cmV0ID0gZmVjX3B0cF9pbml0KHBkZXYsIGlycV9jbnQpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIGZhaWxlZF9yZXNldDtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0ID0gZmVjX2VuZXRfaW5pdChuZGV2KTtcXG4gXFx0aWYgKHJldClcXG5AQCAtNTQ1Nyw3ICs1NDYwLDggQEAgZmVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIGZhaWxlZF9pcnE6XFxuIFxcdGZlY19lbmV0X2RlaW5pdChuZGV2KTtcXG4gZmFpbGVkX2luaXQ6XFxuLVxcdGZlY19wdHBfc3RvcChwZGV2KTtcXG4rXFx0aWYgKGZlcC1cXHUwMDNlYnVmZGVzY19leClcXG4rXFx0XFx0ZmVjX3B0cF9zdG9wKHBkZXYpO1xcbiBmYWlsZWRfcmVzZXQ6XFxuIFxcdHBtX3J1bnRpbWVfcHV0X25vaWRsZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFx0cG1fcnVudGltZV9kaXNhYmxlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY1xcbmluZGV4IDU2ODAxYzIwMDlkNTkuLjhhZDY4MDQxMWIwYzMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmNcXG5AQCAtNzM2LDcgKzczNiw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBmZWNfcHBzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuICAqIGN5Y2xlY291bnRlciBpbml0IHJvdXRpbmUgYW5kIGV4aXRzLlxcbiAgKi9cXG4gXFxuLXZvaWQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KVxcbitpbnQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XFxuIFxcdHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG5AQCAtNzc5LDI2ICs3NzksMjkgQEAgdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpXFxuIFxcdFxcdCAgICAgIEhSVElNRVJfTU9ERV9SRUwpO1xcbiBcXG4gXFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWVfb3B0aW9uYWwocGRldiwgXFxcInBwc1xcXCIpO1xcbi1cXHRpZiAoaXJxIFxcdTAwM2MgMClcXG4rXFx0aWYgKGlycSBcXHUwMDNjIDApIHtcXG4gXFx0XFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCBpcnFfaWR4KTtcXG4tXFx0LyogRmFpbHVyZSB0byBnZXQgYW4gaXJxIGlzIG5vdCBmYXRhbCxcXG4tXFx0ICogb25seSB0aGUgUFRQX0NMT0NLX1BQUyBjbG9jayBldmVudHMgc2hvdWxkIHN0b3BcXG4tXFx0ICovXFxuLVxcdGlmIChpcnEgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRpZiAoaXJxIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBpcnEgIT0gLUVOWElPKVxcbitcXHRcXHRcXHRyZXR1cm4gaXJxO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaXJxIFxcdTAwM2UgMCkge1xcbiBcXHRcXHRyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGlycSwgZmVjX3Bwc19pbnRlcnJ1cHQsXFxuIFxcdFxcdFxcdFxcdCAgICAgICAwLCBwZGV2LVxcdTAwM2VuYW1lLCBuZGV2KTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJyZXF1ZXN0IGZvciBwcHMgaXJxIGZhaWxlZCglZClcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCByZXQpO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbiBcXHRmZXAtXFx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcXHUwMDI2ZmVwLVxcdTAwM2VwdHBfY2FwcywgXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcdGlmIChJU19FUlIoZmVwLVxcdTAwM2VwdHBfY2xvY2spKSB7XFxuIFxcdFxcdGZlcC1cXHUwMDNlcHRwX2Nsb2NrID0gTlVMTDtcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwicHRwX2Nsb2NrX3JlZ2lzdGVyIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGZlcC1cXHUwMDNlcHRwX2Nsb2NrKTtcXG4gXFx0fVxcbiBcXG4gXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZmZXAtXFx1MDAzZXRpbWVfa2VlcCwgSFopO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHZvaWQgZmVjX3B0cF9zYXZlX3N0YXRlKHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDExOjU3OjI4LjU4NjYyODEyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE2NTU3Nzg1NTkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0ZSRUVTQ0FMRVwiLFxuICAgIFwiRkVDXCIsXG4gICAgXCJDT01QSUxFX1RFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmZWNfcHRwX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZlY19wdHBfaW5pdCBhbmQgcHJvcGFnYXRlcyB0aGUgZXJyb3IgdG8gZmVjX3Byb2JlLCB3aGljaCBub3cgYWJvcnRzIGluaXRpYWxpemF0aW9uIGlmIFBUUCBzZXR1cCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIgcHJvYmUgcGF0aCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciByZXNvdXJjZSBjbGVhbnVwIG9uIGZhaWx1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNmOGNkOGEzMmJmYzQ0ODM0ZDEwN2MzOGI4YzE4ODE4ODE1OGMxOGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxMTo1NzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaFxuaW5kZXggNzE3NjgwMzE0NmYzZC4uODgzMWRhMzczMjZiMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlYy5oXG5AQCAtNjkyLDcgKzY5Miw3IEBAIHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlIHtcbiBcdHU2NCBldGh0b29sX3N0YXRzW107XG4gfTtcbiBcbi12b2lkIGZlY19wdHBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXJxX2lkeCk7XG4raW50IGZlY19wdHBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXJxX2lkeCk7XG4gdm9pZCBmZWNfcHRwX3Jlc3RvcmVfc3RhdGUoc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCk7XG4gdm9pZCBmZWNfcHRwX3NhdmVfc3RhdGUoc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCk7XG4gdm9pZCBmZWNfcHRwX3N0b3Aoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uY1xuaW5kZXggY2VkNGRiZjhjZDkwZi4uYjZjMjJkNmMxZTY5YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uY1xuQEAgLTUzODQsOCArNTM4NCwxMSBAQCBmZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0Z290byBmYWlsZWRfcmVzZXQ7XG4gXG4gXHRpcnFfY250ID0gZmVjX2VuZXRfZ2V0X2lycV9jbnQocGRldik7XG4tXHRpZiAoZmVwLVx1MDAzZWJ1ZmRlc2NfZXgpXG4tXHRcdGZlY19wdHBfaW5pdChwZGV2LCBpcnFfY250KTtcbitcdGlmIChmZXAtXHUwMDNlYnVmZGVzY19leCkge1xuK1x0XHRyZXQgPSBmZWNfcHRwX2luaXQocGRldiwgaXJxX2NudCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBmYWlsZWRfcmVzZXQ7XG4rXHR9XG4gXG4gXHRyZXQgPSBmZWNfZW5ldF9pbml0KG5kZXYpO1xuIFx0aWYgKHJldClcbkBAIC01NDU3LDcgKzU0NjAsOCBAQCBmZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBmYWlsZWRfaXJxOlxuIFx0ZmVjX2VuZXRfZGVpbml0KG5kZXYpO1xuIGZhaWxlZF9pbml0OlxuLVx0ZmVjX3B0cF9zdG9wKHBkZXYpO1xuK1x0aWYgKGZlcC1cdTAwM2VidWZkZXNjX2V4KVxuK1x0XHRmZWNfcHRwX3N0b3AocGRldik7XG4gZmFpbGVkX3Jlc2V0OlxuIFx0cG1fcnVudGltZV9wdXRfbm9pZGxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcdHBtX3J1bnRpbWVfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmNcbmluZGV4IDU2ODAxYzIwMDlkNTkuLjhhZDY4MDQxMWIwYzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jXG5AQCAtNzM2LDcgKzczNiw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBmZWNfcHBzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4gICogY3ljbGVjb3VudGVyIGluaXQgcm91dGluZSBhbmQgZXhpdHMuXG4gICovXG4gXG4tdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpXG4raW50IGZlY19wdHBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXJxX2lkeClcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuIFx0c3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KG5kZXYpO1xuQEAgLTc3OSwyNiArNzc5LDI5IEBAIHZvaWQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KVxuIFx0XHQgICAgICBIUlRJTUVSX01PREVfUkVMKTtcbiBcbiBcdGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lX29wdGlvbmFsKHBkZXYsIFwicHBzXCIpO1xuLVx0aWYgKGlycSBcdTAwM2MgMClcbitcdGlmIChpcnEgXHUwMDNjIDApIHtcbiBcdFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCBpcnFfaWR4KTtcbi1cdC8qIEZhaWx1cmUgdG8gZ2V0IGFuIGlycSBpcyBub3QgZmF0YWwsXG4tXHQgKiBvbmx5IHRoZSBQVFBfQ0xPQ0tfUFBTIGNsb2NrIGV2ZW50cyBzaG91bGQgc3RvcFxuLVx0ICovXG4tXHRpZiAoaXJxIFx1MDAzZT0gMCkge1xuK1x0XHRpZiAoaXJxIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBpcnEgIT0gLUVOWElPKVxuK1x0XHRcdHJldHVybiBpcnE7XG4rXHR9XG4rXG4rXHRpZiAoaXJxIFx1MDAzZSAwKSB7XG4gXHRcdHJldCA9IGRldm1fcmVxdWVzdF9pcnEoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGlycSwgZmVjX3Bwc19pbnRlcnJ1cHQsXG4gXHRcdFx0XHQgICAgICAgMCwgcGRldi1cdTAwM2VuYW1lLCBuZGV2KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRkZXZfd2FybihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJyZXF1ZXN0IGZvciBwcHMgaXJxIGZhaWxlZCglZClcXG5cIixcbi1cdFx0XHRcdCByZXQpO1xuK1x0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRmZXAtXHUwMDNlcHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFx1MDAyNmZlcC1cdTAwM2VwdHBfY2FwcywgXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFx0aWYgKElTX0VSUihmZXAtXHUwMDNlcHRwX2Nsb2NrKSkge1xuIFx0XHRmZXAtXHUwMDNlcHRwX2Nsb2NrID0gTlVMTDtcbiBcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJwdHBfY2xvY2tfcmVnaXN0ZXIgZmFpbGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gUFRSX0VSUihmZXAtXHUwMDNlcHRwX2Nsb2NrKTtcbiBcdH1cbiBcbiBcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZmZXAtXHUwMDNldGltZV9rZWVwLCBIWik7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gdm9pZCBmZWNfcHRwX3NhdmVfc3RhdGUoc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDExOjU3OjI4LjU4NjYyOTY4NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MTQ2ODg2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgRnJlZXNjYWxlIEZFQyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1ha2luZyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgRnJlZXNjYWxlIEZhc3QgRXRoZXJuZXQgQ29udHJvbGxlciAoRkVDKSBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQncyBhbHRlcmluZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG9mIGBmZWNfcHRwX2luaXRgIGluIGBmZWNfcHRwLmNgLCBtYWtpbmcgaXQgcmV0dXJuIGFuIGBpbnRgIGluc3RlYWQgb2YgYHZvaWRgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGVycm9yIGhhbmRsaW5nLXJlbGF0ZWQsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLiBUaGUgY29ycmVzcG9uZGluZyB1cGRhdGUgdG8gYGZlY19wcm9iZWAgaW4gYGZlY19tYWluLmNgIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlIGNvbmZpcm1zIHRoYXQgc3VzcGljaW9uLiBUaGlzIG1lYW5zIHRoZSBwcm9iZSBmdW5jdGlvbiB3aWxsIG5vdyBhY3RpdmVseSBoYW5kbGUgZXJyb3JzIGZyb20gdGhlIFBUUCBpbml0aWFsaXphdGlvbiwgaW1wcm92aW5nIG92ZXJhbGwgcm9idXN0bmVzcywgYW5kIHRoYXQncyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgZGV0YWlsIEknbSBsb29raW5nIGZvciBpbiBkcml2ZXIgdXBkYXRlcy5cblxuTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaG93IHJlbGV2YW50IGlzIHRoaXMgY2hhbmdlIGluIGEgY29tbW9uIHRlc3RpbmcgZW52aXJvbm1lbnQ/IFRoZSBkcml2ZXIgaXRzZWxmIGlzIGNsZWFybHkgZm9yIEZyZWVzY2FsZSBGRUMgaGFyZHdhcmUuIEdpdmVuIHRoZSB1YmlxdWl0eSBvZiBRRU1VIGZvciB2aXJ0dWFsaXphdGlvbiwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgZHJpdmVyIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBRRU1VIGluc3RhbmNlPyBRRU1VLCBvZiBjb3Vyc2UsIGhhcyBhbiBgaW14LmZlY2AgZGV2aWNlIChkZWZpbmVkIGluIGBpbXhfZmVjLmNgKSwgc28gdGhhdCBzb3VuZHMgbGlrZSBhIGdvb2QgbGVhZCB0byBmb2xsb3cuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdG8gc2VlIGlmIGBmZWNfcHJvYmVgIGlzIGFjdHVhbGx5IGludm9rZWQuIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgZHJpdmVyLCBzbyBpZiB3ZSBjYW4gdHJpZ2dlciB0aGUgcHJvYmUsIHRoZW4gdGhlIGNoYW5nZXMgYXJlIGF0IGxlYXN0IHRlc3RhYmxlLiBHaXZlbiB0aGF0IGl0J3MgZm9yIHRoZSBGcmVlc2NhbGUgRkVDLCB0aGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IEtjb25maWcgb3B0aW9ucyBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdG8gYmUgc3VyZSB0aGUgZHJpdmVyIGlzIGJ1aWx0IGFuZCBhY2Nlc3NpYmxlIGluIHRoZSBjb25maWd1cmF0aW9ucyBJIHR5cGljYWxseSB1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1NzozNS4wMDEzMjE1MTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1NDEyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZFQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz0yMT1pZiBORVRfVkVORE9SX0ZSRUVTQ0FMRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjIzOmNvbmZpZyBGRUNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiRkVDIGV0aGVybmV0IGNvbnRyb2xsZXIgKG9mIENvbGRGaXJlIGFuZCBzb21lIGkuTVggQ1BVcylcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0zOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzozOTpjb25maWcgRkVDX01QQzUyeHhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy00MC1cXHR0cmlzdGF0ZSBcXFwiRkVDIE1QQzUyeHggZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6NTA6Y29uZmlnIEZFQ19NUEM1Mnh4X01ESU9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy01MS1cXHRib29sIFxcXCJGRUMgTVBDNTJ4eCBNRElPIGJ1cyBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDExOjU3OjM1LjA0NDg2Njk1M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzEyNjE1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkZFQyBEcml2ZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21ldGhpbmcgdGhhdCBzZWVtcyB0byBpbnZvbHZlIGEgZHJpdmVyIGNhbGxlZCBgRkVDYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuXCIgVGhlIHRleHQgcG9pbnRzIG91dCB0aGF0IGBGRUNgIHJlbGllcyBvbiBgTkVUX1ZFTkRPUl9GUkVFU0NBTEVgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0J3MgYSBuZXR3b3JrIGRyaXZlciByZWxhdGVkIHRvIEZyZWVzY2FsZSAobm93IE5YUCkgaGFyZHdhcmUuIE15IG5leHQgc3RlcD8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkIGZvciB0aGUga2VybmVsLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmN5IGFuZCB1bmRlcnN0YW5kIGhvdyB0aGlzIGBGRUNgIGRyaXZlciBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgbWlnaHQgYmUgcmVsZXZhbnQgdG8gaXRzIGJlaGF2aW9yLiBMZXQncyBnZXQgdG8gd29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6NDAwNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDExOjU3OjM4LjMxNjEzMTIzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE3NzQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRkVDJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz0yMT1pZiBORVRfVkVORE9SX0ZSRUVTQ0FMRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjIzOmNvbmZpZyBGRUNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiRkVDIGV0aGVybmV0IGNvbnRyb2xsZXIgKG9mIENvbGRGaXJlIGFuZCBzb21lIGkuTVggQ1BVcylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDExOjU3OjM4LjM2MDMxMzAzNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDkzMTk5MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBGRUMncyBLY29uZmlnIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIHRoZSBGRUMgKEZsZXhpYmxlIEV0aGVybmV0IENvbnRyb2xsZXIpLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgaXQncyBjb25maWd1cmVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gSSdtIHRoaW5raW5nLCBcIkxldCdzIHNlZSBLY29uZmlnIGZvciBGRUMuXCIgVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGJ1aWxkIGZsYWdzLCB0aGUgZGV2aWNlIHRyZWUgaW50ZWdyYXRpb24gcG9pbnRz4oCmIGV2ZXJ5dGhpbmcgdGhhdCBzaGFwZXMgaG93IHRoaXMgc3BlY2lmaWMgRkVDIGluc3RhbmNlIHdpbGwgYmVoYXZlIGluIGEgc3lzdGVtLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIHN0dWZmIC0gY2xvY2sgY29uZmlndXJhdGlvbnMsIGludGVycnVwdCBzZXR0aW5ncywgUEhZIHN1cHBvcnQsIG1heWJlIHNvbWUgYWR2YW5jZWQgZmVhdHVyZXMgbGlrZSBETUEgc2V0dGluZ3Mgb3IgVkxBTiBoYW5kbGluZy4gQnV0IEknbGwgbmVlZCB0byBsb29rIGNsb3NlbHkgZm9yIGFueXRoaW5nIHZlbmRvci1zcGVjaWZpYyBvciBhbnkgdW51c3VhbCBhcmNoaXRlY3R1cmFsIGNob2ljZXMgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgaW50ZWdyYXRpb24uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9ucyBhbmQgYXNzZXNzIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGFyZWFzIGZvciBjdXN0b21pemF0aW9uIGJlZm9yZSBJIHN0YXJ0IGJ1aWxkaW5nIG9yIGRlYnVnZ2luZyBhbnkgRkVDLWRlcGVuZGVudCBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1Nzo0Mi4yNjk2MzcyNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIwOlxcdFxcbiAgMjE6XFx0aWYgTkVUX1ZFTkRPUl9GUkVFU0NBTEVcXG4gIDIyOlxcdFxcbiAgMjM6XFx0Y29uZmlnIEZFQ1xcbiAgMjQ6XFx0XFx0dHJpc3RhdGUgXFxcIkZFQyBldGhlcm5ldCBjb250cm9sbGVyIChvZiBDb2xkRmlyZSBhbmQgc29tZSBpLk1YIENQVXMpXFxcIlxcbiAgMjU6XFx0XFx0ZGVwZW5kcyBvbiAoTTUyM3ggfHwgTTUyN3ggfHwgTTUyNzIgfHwgTTUyOHggfHwgTTUyMHggfHwgTTUzMnggfHwgXFxcXFxcbiAgMjY6XFx0XFx0XFx0ICAgQVJDSF9NWEMgfHwgQVJDSF9TMzIgfHwgU09DX0lNWDI4IHx8IENPTVBJTEVfVEVTVClcXG4gIDI3OlxcdFxcdGRlZmF1bHQgQVJDSF9NWEMgfHwgU09DX0lNWDI4IGlmIEFSTVxcbiAgMjg6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgMjk6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAzMDpcXHRcXHRzZWxlY3QgUEhZTElCXFxuICAzMTpcXHRcXHRzZWxlY3QgRklYRURfUEhZXFxuICAzMjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAzMzpcXHRcXHRpbXBseSBQQUdFX1BPT0xfU1RBVFNcXG4gIDM0OlxcdFxcdGltcGx5IE5FVF9TRUxGVEVTVFNcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIGJ1aWx0LWluIDEwLzEwMCBGYXN0IGV0aGVybmV0XFxuICAzNzpcXHRcXHQgIGNvbnRyb2xsZXIgb24gc29tZSBNb3Rvcm9sYSBDb2xkRmlyZSBhbmQgRnJlZXNjYWxlIGkuTVgvUzMyIHByb2Nlc3NvcnMuXFxuICAzODpcXHRcXG4gIDM5OlxcdGNvbmZpZyBGRUNfTVBDNTJ4eFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1Nzo0Mi4yNjk3MDY5NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NTE4Mjk4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgRkVDIERyaXZlcjogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyB0aGUgcG9zc2liaWxpdHkgb2YgZnV6emluZyB0aGlzIGRyaXZlciBoaW5nZXMgb24gYSBmZXcgY29uZGl0aW9ucywgc3BlY2lmaWNhbGx5IHRob3NlIGRlZmluZWQgYnkgdGhhdCBsb25nIGNvbmRpdGlvbmFsIHN0YXRlbWVudCDigJMgYChNNTIzeCB8fCBNNTI3eCB8fCBNNTI3MiB8fCBNNTI4eCB8fCBNNTIweCB8fCBNNTMyeCB8fCBBUkNIX01YQyB8fCBBUkNIX1MzMiB8fCBTT0NfSU1YMjggfHwgQ09NUElMRV9URVNUKWAuIFRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5ICpmdXp6KiB0aGlzIHRoaW5nIGVmZmVjdGl2ZWx5P1xuXG5UaGlua2luZyBwcmFjdGljYWxseSwgeWVzLCBpdCBjYW4gYmUgdGVzdGVkIGluIFFFTVUsIHBhcnRpY3VsYXJseSB1c2luZyBhbiBBUk0gbWFjaGluZS4gU29tZXRoaW5nIGxpa2UgYW4gYGlteDI1LXBka2AsIGBzYWJyZWxpdGVgLCBvciBgbWNpbXg2dWwtZXZrYCB3b3VsZCBiZSBwZXJmZWN0IGZvciB0aGlzIGtpbmQgb2YgdGVzdGluZy4gQnV0IGhlcmUncyB0aGUgcnViOiBzeXprYWxsZXIgdXN1YWxseSBydW5zIG9uIHg4Nl82NCBvciBhcm02NCBhcmNoaXRlY3R1cmVzLiBJZiBgQ09NUElMRV9URVNUYCBpcyBlbmFibGVkLCB3ZSBjYW4gYXQgbGVhc3QgYnVpbGQgdGhlIGRyaXZlciBvbiB4ODZfNjQsIGJ1dCBjYW4gd2UgcmVsaWFibHkgcHJvYmUgaXQ/IFRoaXMgZHJpdmVyIGlzIGEgKnBsYXRmb3JtKiBkcml2ZXIsIHNvIHRoYXQgcHJvYmluZyBiZWNvbWVzIHRoZSBrZXkuXG5cblRoZXJlZm9yZSwgbGV0J3MgZHJpbGwgZG93biBhbmQgZXhhbWluZSBgZmVjX3Byb2JlYCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwcm9iZSBmdW5jdGlvbiB3b3JrcyB0byBkZXRlcm1pbmUgaWYgaXQgY2FuIGJlIHRyaWdnZXJlZCBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSBhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtIGltcGxpY2F0aW9ucyBhcmUgd2hhdCBJIG5lZWQgdG8gdW5wYWNrIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MjUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1Nzo0OS45MjE1MzkyNDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTMyMjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZlY19wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz01MjAzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzo1MjA0OmZlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTUyMDUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NTY3Mz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmZWNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNTY4MC1cXHQuaWRfdGFibGUgPSBmZWNfZGV2dHlwZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzo1NjgxOlxcdC5wcm9iZVxcdD0gZmVjX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTU2ODItXFx0LnJlbW92ZSA9IGZlY19kcnZfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1Nzo0OS45NjY0NzUxMDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ5MzQ3NTUzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgRkVDIERyaXZlcjogQSBQcm9iZSBQYXRoIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkNhbiBzeXprYWxsZXIgZXZlbiAqcmVhY2gqIHRoaXM/XCIgSXQncyBhIHBsYXRmb3JtIGRyaXZlciwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBwcm9iZWQgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIEFDUEksIG9yIHNvbWV0aGluZyBlbHNlLiBJIGltbWVkaWF0ZWx5IGp1bXAgdG8gbXkga25vd2xlZGdlIG9mIHN5emthbGxlciwgd29uZGVyaW5nIGlmIGl0IGNhbiBtYW5pcHVsYXRlIGRldmljZXMgZGlyZWN0bHksIGxpa2Ugd2l0aCBgc3l6X2RldmxpbmtfbmV0YCwgb3IgaWYgaXQgbmVlZHMgYSBtb3JlIGluZGlyZWN0IHJvdXRlLiBJIHJlbWVtYmVyIHRoZXJlIG1pZ2h0IGJlIHBsYXRmb3JtIGRldmljZSBpbmplY3Rpb24gdmlhIGBzeXpfcGxhdGZvcm1fZGV2aWNlX2FkZGAg4oCTIGJ1dCBubywgdGhhdCdzIG5vdCBhIGdlbmVyYWwgc3lzY2FsbCwgbm90IGEgZ29vZCBvcHRpb24gaGVyZS5cblxuVGhlbiBJIHN0YXJ0IHRoaW5raW5nIGFib3V0IG90aGVyIHdheXMgc3l6a2FsbGVyIGludGVyYWN0cyB3aXRoIGRyaXZlcnMsIGxpa2UgYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseV9pZGDigKYgbm8gZGljZSwgaXQncyBub3QgYSBnb29kIGZpdCBoZXJlIGVpdGhlci4gVGhlIGNvcmUgcHJvYmxlbSBpcywgY2FuIHN5emthbGxlciBldmVuIFwic2VlXCIgdGhpcyBkZXZpY2Ugd2l0aGluIGEgdHlwaWNhbCBWTSBlbnZpcm9ubWVudD8gSSBrbm93IHN5emthbGxlciBvZnRlbiBydW5zIG9uIEFSTTY0IHdpdGggUUVNVSwgdXNpbmcgdGhlIGB2aXJ0YCBtYWNoaW5lLCBidXQgSSBkb3VidCB0aGlzIGRldmljZSBpcyBwcmVzZW50IHRoZXJlLiBTYW1lIHdpdGggeDg2XzY0OyBJIHF1aWNrbHkgcmVhbGl6ZSBpdOKAmXMgbm90LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHN5emthbGxlciBzdGlja3MgdG8gUUVNVSBlbnZpcm9ubWVudHMuXG5cbkkgYnJpZWZseSBjb25zaWRlciBpZiB0aGVyZSdzIHNvbWUgKm90aGVyKiBvYnNjdXJlIG1ldGhvZCBzeXprYWxsZXIgY291bGQgdXNlLCBidXQgdGhlbiBJIHJlbWVtYmVyIHRoaXMgbGluZSBmcm9tIHRoZSBwcm9tcHQ6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFRoYXQgdGhyb3dzIG1lIGFub3RoZXIgY3VydmViYWxsLCBiZWNhdXNlIEkgd29uZGVyIGlmIGBmZWNgIGlzIGVtdWxhdGVkLiBUaGVuIGl0IGhpdHMgbWUsIEkgdGhpbmssIFwiV2FpdCwgZG9lc24ndCBRRU1VIGhhdmUgdGhlIGBpbXguZmVjYCBkZXZpY2U/XCIgWWVzISBJZiBJIHJ1biBpdCBvbiBhbiBpLk1YIG1hY2hpbmUgaXQncyByZWFjaGFibGUuXG5cblRoZSBwcm9tcHQgYWxzbyBzYXlzIHRoYXQgc3l6a2FsbGVyIHJ1bnMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCBkb2VzIG5vdCBtZW50aW9uIHRoYXQgaXQncyByZXN0cmljdGVkIHRvIHg4Nl82NCwgb3Igb3RoZXIgc3lzdGVtcywgc28gdGhlIGkuTVggbWFjaGluZSBpcyBhIHBvc3NpYmlsaXR5LiBBbmQgdGhlbiBpdCBzYXlzLCBcIkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiLiBHaXZlbiB0aGF0IGBmZWNgIGlzIGVtdWxhdGVkIGFzIGBpbXguZmVjYCwgaXQgKmlzKiB0ZWNobmljYWxseSByZWFjaGFibGUgaW4gUUVNVS4gVGhhdCBpcyBnb29kIG5ld3MuXG5cbkFscmlnaHQsIHNvIHRoZSBkZXZpY2UgKmlzKiByZWFjaGFibGUuIE5vdywgaXMgaXQgd29ydGggZnV6emluZz8gVGhlIHBhdGNoIGZvY3VzZXMgb24gZXJyb3IgY2hlY2tpbmcgaW4gYGZlY19wdHBfaW5pdGAgd2l0aGluIGBmZWNfcHJvYmVgLiBJZiB0aGlzIGZhaWxzLCBpdCBnb2VzIHRvIGBmYWlsZWRfcmVzZXRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY2hhbmdlIGluIHRoZSAqcHJvYmUqIHBhdGgsIGFuZCB0aGlzIGlzIHdoZXJlIHN5emthbGxlciByZWFsbHkgc2hpbmVzLiBNeSBleHBlcmllbmNlIHNob3dzIHRoYXQgcHJvYmUgcGF0aHMgYXJlIG9mdGVuIGZ1enplZCB0aHJvdWdoIGZhdWx0IGluamVjdGlvbiBvciBpbnN0YW50aWF0aW9uLiBTbywgdGhlIHNob3J0IGFuc3dlciBpcyB5ZXMsIHdvcnRoIGZ1enppbmcuXG5cbk15IG5leHQgcXVlc3Rpb246IENhbiBgZmVjX3B0cF9pbml0YCBhY3R1YWxseSBmYWlsPyBMZXQncyBjaGVjayB0aGUgY29kZS4gSSByZWNhbGwgdGhhdCBgZmVjX3B0cF9pbml0YCBjYWxscyBgcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbGAsIGBkZXZtX3JlcXVlc3RfaXJxYCwgYW5kIGBwdHBfY2xvY2tfcmVnaXN0ZXJgLiBUaGVzZSBmdW5jdGlvbnMgYWxsIGhhdmUgdGhlIHBvdGVudGlhbCB0byBmYWlsLCBlc3BlY2lhbGx5IHVuZGVyIGZhdWx0IGluamVjdGlvbi4gTm93LCBpZiBgZmVjX3B0cF9pbml0YCBjYWxscyB0aG9zZSBmdW5jdGlvbnMsIGFuZCB0aG9zZSBmdW5jdGlvbnMgZmFpbCwgdGhlbiB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB3b3J0aCBpbnZlc3RpZ2F0aW5nIGZ1cnRoZXIuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgZmVjX3B0cF9pbml0YCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTE6NTg6MDQuOTAxMjMzNDExWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAxMTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmZWNfcHRwX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jPTY5Nj1zdGF0aWMgaXJxcmV0dXJuX3QgZmVjX3Bwc19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYy03MjktLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYzo3MzA6ICogZmVjX3B0cF9pbml0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYy03MzEtICogQHBkZXY6IFRoZSBGRUMgbmV0d29yayBhZGFwdGVyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jLTczOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jOjczOTppbnQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmMtNzQwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTE6NTg6MDQuOTQ3MjUwNTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUyNjUyNDE5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGRUMgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIHVwZGF0ZWQgYGZlY19wdHBfaW5pdGAgdG8gcmV0dXJuIGFuIGludGVnZXIsIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZSBmb3IgZXJyb3IgaGFuZGxpbmcuIFRoYXQgcmV0dXJuIHZhbHVlIGlzIHRoZW4gYmVpbmcgZGVhbHQgd2l0aCBpbiBgZmVjX3Byb2JlYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gbWFrZSBzdXJlIHRoaXMgYnVpbGRzIGNvcnJlY3RseS5cblxuRmlyc3QsIG9idmlvdXNseSwgSSdsbCBuZWVkIGBGRUNgIGVuYWJsZWQuIFRoYXQncyBhIGdpdmVuLiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgc2VlIGlmIGBGRUNgIGRlcGVuZHMgb24gYW55IG90aGVyIGNvbmZpZ3MuIEFoLCBsb29rcyBsaWtlIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAgaXMgYWxzbyByZXF1aXJlZC4gQWxyaWdodCwgbGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZGVwZW5kZW5jaWVzIG9yIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1OTozMC4yMTI0OTU2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg3MDc3MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9WRU5ET1JfRlJFRVNDQUxFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9GUkVFU0NBTEVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy03LVxcdGJvb2wgXFxcIkZyZWVzY2FsZSBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1OTozMC4zMjEyMTA5MzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwMjU5Mzk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEZyZWVzY2FsZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBGcmVlc2NhbGUgbmV0d29yayBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYE5FVF9WRU5ET1JfRlJFRVNDQUxFYCBhbmQgdGhlIGBGRUNgIGNvbXBvbmVudHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGdyYXNwIHRoZWlyIGludGVyZGVwZW5kZW5jaWVzLiBBaGEsIGhlcmUncyBhbiBpbnRlcmVzdGluZyBkZXBlbmRlbmN5IC0gYEZFQ2AgcmVsaWVzIG9uIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAuIEl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhhdCBvcHRpb25hbCBjbG9jayBzZXR0aW5nLiBSaWdodCBub3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCBzZXR0aW5nIGluIHRoaXMgY29udGV4dC4gTGV0J3MgZGlnIGRlZXBlciBhbmQgc2VlIHdoYXQgdGhhdCdzIGFsbCBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk3MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDExOjU5OjMzLjQyMzgwODI1NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY2NTI3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvcHRwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wdHAvS2NvbmZpZz04PWNvbmZpZyBQVFBfMTU4OF9DTE9DS1xcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjMwOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvcHRwL0tjb25maWctMzEtXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTE6NTk6MzMuNTEwNDY2ODQzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTA1NTc4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBEaWxlbW1hKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyB0cmlzdGF0ZSBvcHRpb24sIHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQncyBhIGZlYXR1cmUgdGhhdCBjYW4gYmUgc2VsZWN0aXZlbHkgaW5jbHVkZWQuIEluIHRoaXMgY2FzZSwgaXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBgRkVDYCDigJMgRm9yd2FyZCBFcnJvciBDb3JyZWN0aW9uLiBUaGUgZG9jdW1lbnRhdGlvbiBzYXlzIGlmIHdlIGVuYWJsZSBgRkVDYCwgd2UgbWlnaHQgbmVlZCB0byBlbmFibGUgYFBUUF8xNTg4X0NMT0NLYCwgb3IsIHdlbGwsIGl0IG1pZ2h0IGp1c3Qgd29yayBpZiBgUFRQXzE1ODhfQ0xPQ0tgICppc24ndCogc2V0LCBzaW5jZSBpdCdzIGxpc3RlZCBhcyBvcHRpb25hbC4gVGhhdOKAmXMgYSBsaXR0bGUgYW1iaWd1b3VzLlxuXG5XYWl0IGEgbWludXRlLCB0aGUgYGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgIHN0YXRlbWVudCBtZWFucyB0aGF0IGlmIGBQVFBfMTU4OF9DTE9DS2AgaXMgYnVpbHQgYXMgYSBtb2R1bGUsIG9yIGBtYCwgdGhlbiBgRkVDYCAqY2FuJ3QqIGJlIGVuYWJsZWQuIFRoYXQgY29tcGxpY2F0ZXMgdGhpbmdzLCBiZWNhdXNlIGl0IG1lYW5zIGlmIGBGRUNgIG5lZWRzIGBQVFBfMTU4OF9DTE9DS2AsIHdlJ3JlIGxvY2tlZCBvdXQgb2YgYSBtb2R1bGUgYnVpbGQuIEkgc2hvdWxkIHByb2JhYmx5IGVyciBvbiB0aGUgc2lkZSBvZiBjYXV0aW9uIGFuZCBlbmFibGUgYFBUUF8xNTg4X0NMT0NLYCB0byBiZSBgeWAganVzdCB0byBiZSBzYWZlLiBBbHRlcm5hdGl2ZWx5LCBwZXJoYXBzIGxlYXZlIGl0IHVuZGVmaW5lZD9cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24sIHdoYXQgYWJvdXQgYENPTVBJTEVfVEVTVGA/IEl0J3MgbGlzdGVkIGluIHRoZSBkZXBlbmRlbmN5IGZvciBgRkVDYC4gTGV0IG1lIHNlZSwgYEZFQ2AgZGVwZW5kcyBvbiBhIGxpc3Qgb2YgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZXMsIGFuZCBhbHNvLCBjcml0aWNhbGx5LCBgQ09NUElMRV9URVNUYC4gVGhpcyBkZXBlbmRlbmN5IGlzIHdoYXQgSSdtIGludGVyZXN0ZWQgaW4hIFRoaXMgZGVwZW5kZW5jeSBvbiBgQ09NUElMRV9URVNUYCBjb3VsZCBiZSBlbm91Z2ggdG8gZW5hYmxlIGJ1aWxkaW5nIHRoZSBjb2RlIG9uIHg4Nl82NCwgd2hpY2ggaXMgd2hhdCBJIG5lZWQuXG5cblNvLCB0aGUga2V5IGhlcmUgaXMgdG8gZW5hYmxlIGBDT01QSUxFX1RFU1RgIHRvIGVuc3VyZSB0aGF0IHRoaXMgY2FuIGJlIGJ1aWx0IG9uIHg4Nl82NCBhbmQgdGVzdCB0aGUgZmVhdHVyZS4gTGV0IG1lIGNoZWNrIGlmIGBDT01QSUxFX1RFU1RgIGlzIGVub3VnaCwgYnkgaXRzZWxmLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBgRkVDYCBlbmFibGVkIGlmIHRoZSBvdGhlciBkZXBlbmRlbmNpZXMgYXJlIG1ldC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI4OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1OTozOS40MDEwMjc3NTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQ1Mzg1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09NUElMRV9URVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MjMzPWNvbmZpZyBJTklUX0VOVl9BUkdfTElNSVRcXG4tLVxcbmluaXQvS2NvbmZpZy0yNDAtXFxuaW5pdC9LY29uZmlnOjI0MTpjb25maWcgQ09NUElMRV9URVNUXFxuaW5pdC9LY29uZmlnLTI0Mi1cXHRib29sIFxcXCJDb21waWxlIGFsc28gZHJpdmVycyB3aGljaCB3aWxsIG5vdCBsb2FkXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1OTozOS41MDM0OTEwMjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUzNzMwNTcwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJlYWNoYWJpbGl0eSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyBgQ09NUElMRV9URVNUYCBpcyBkZWZpbml0ZWx5IHN0YW5kYXJkLCBzbyB0aGF0IHBhcnQgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGF0IG1lYW5zIGBFbmFibGVDb25maWdzYCBzaG91bGQgaW5jbHVkZSBgW1wiTkVUX1ZFTkRPUl9GUkVFU0NBTEVcIiwgXCJGRUNcIiwgXCJDT01QSUxFX1RFU1RcIl1gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgZmVjX3Byb2JlYCBpcyBhY3R1YWxseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cC4gVGhlIHF1ZXN0aW9uIGJvaWxzIGRvd24gdG8gd2hldGhlciBpdCB3aWxsIGJlIHByb2JlZCwgZXZlbiBpZiBpdCdzIGNvbXBpbGVkLlxuXG5JIGtub3cgU3l6a2FsbGVyIGRvZXNuJ3QgdXNlIGBzeXpfZGV2bGlua19uZXRgIGZvciBwbGF0Zm9ybSBkZXZpY2VzLiBIbW1tLi4ud2FpdCwgdGhlcmUncyBhIHBzZXVkby1zeXNjYWxsOiBgc3l6X3BsYXRmb3JtX2RldmljZV9hZGRgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgU3l6a2FsbGVyIHBzZXVkby1zeXNjYWxsIGxpc3QuXG5cbkhhbmcgb24uLi50aGUgcHJvbXB0IGV4cGxpY2l0bHkgbWVudGlvbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLiBTbywgaWYgYSBkZXZpY2UgKmlzbid0KiBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9uIHRoZSBhcmNoaXRlY3R1cmUgU3l6a2FsbGVyIHJ1bnMsIHRoZW4gaXQncyAqbm90KiByZWFjaGFibGUsIHJpZ2h0PyBCdXQgUUVNVSAqZG9lcyogZW11bGF0ZSBgaW14LmZlY2Agb24gQVJNLCBhbmQgU3l6a2FsbGVyIGNhbiBydW4gb24gQVJNIFFFTVUgKHVzaW5nIGBxZW11LXN5c3RlbS1hcm1gIG9yIGBxZW11LXN5c3RlbS1hYXJjaDY0YCkuIFNvIHRoYXQgbWVhbnMgaXQgKmlzKiByZWFjaGFibGUgaW4gUUVNVS5cblxuSnVzdCB0byBiZSBzdXJlLCBldmVuIHRob3VnaCBJIGRpZG4ndCBzZWUgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYCwgbWF5YmUgaXQncyBwcm9iZS1hYmxlIHRocm91Z2ggZGV2aWNlIHRyZWUgb3ZlcmxheXMgb3Igc29tZXRoaW5nIHNpbWlsYXI/XG5cbkFscmlnaHQsIHRoZSBwcm9tcHQncyB3b3JkaW5nIChcImV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIikgcmVhbGx5IGNsYXJpZmllcyB0aGlzLiBTaW5jZSBRRU1VIGVtdWxhdGVzIGBpbXguZmVjYCwgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIGltcG9ydGFudD8gSSBzaG91bGQgZm9jdXMgb24gYGZlY19wcm9iZWAgYW5kIGBmZWNfcHRwX2luaXRgLiBJIG5lZWQgdG8gc2VlIGlmIGBmZWNfcHRwX2luaXRgIGlzIHN0YXRpYy4gSXQncyBub3Qgc3RhdGljLlxuYGludCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpYC4gVGhhdCdzIGdvb2QgdG8ga25vdy4gQW5kIGBmZWNfcHJvYmVgIGlzIHN0YXRpYy4gT2theS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA0OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMTo1OTo1NC44NzY1NTI5ODJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NDgwNzkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmZWNfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NTIwMz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NTIwNDpmZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy01MjA1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTU2NzM9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZmVjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTU2ODAtXFx0LmlkX3RhYmxlID0gZmVjX2RldnR5cGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NTY4MTpcXHQucHJvYmVcXHQ9IGZlY19wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy01NjgyLVxcdC5yZW1vdmUgPSBmZWNfZHJ2X3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTE6NTk6NTUuMjcxMzcyM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTY1NjgyMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRHJpdmVyIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgZmVjX3Byb2JlYCBqdW1wcyBvdXQgYXQgbWUuIFRoZSB0aGluZyBpcywgYGZlY19wcm9iZWAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIGxlc3MgZGVzaXJhYmxlIGZyb20gYW4gQVBJIGVudHJ5IHBvaW50IHBlcnNwZWN0aXZlLCBhcyBpdCdzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4gSSBuZWVkIHRvIGZvY3VzIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIHByb21wdCBpcyBjbGVhciBvbiB0aGF0LiBJIGluaXRpYWxseSB0aG91Z2h0IEkgY291bGQganVzdCBmb2N1cyBvbiBgZmVjX3B0cF9pbml0YCBzaW5jZSB0aGF0J3Mgbm9uLXN0YXRpYywgYW5kIHNlZW1zIHRvIGJlIHRoZSBwcmVmZXJyZWQgY2hvaWNlLiBCdXQgd2FpdCwgdGhlIHBhdGNoICphbHNvKiBtb2RpZmllcyBgZmVjX3Byb2JlYCwgd2hpY2ggY29tcGxpY2F0ZXMgdGhpbmdzLiBFdmVuIHRob3VnaCBpdCdzIHN0YXRpYywgaXQncyBzdGlsbCBiZWluZyB0b3VjaGVkLCBhbmQgaXQgKmlzKiBhIHByb2JlIGZ1bmN0aW9uLCB3aGljaCBzdWdnZXN0cyBpdCAqY291bGQqIGJlIGEgZHJpdmVyIGVudHJ5IHBvaW50LlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2sgYW5kIHJlYXNzZXNzLiBTbywgYGZlY19wcm9iZWAgaXMgb3V0IGJlY2F1c2UgaXQncyBzdGF0aWMsIHdoaWNoIG1ha2VzIGBmZWNfcHRwX2luaXRgIHRoZSBtb3JlIHByZWZlcnJlZCBmdW5jdGlvbi4gSG93ZXZlciwgdGhlIHBhdGNoIHNob3dzIHRoYXQgYGZlY19wcm9iZWAgY29uZGl0aW9uYWxseSBjYWxscyBgZmVjX3B0cF9zdG9wYC4gVGhpcyBtYWtlcyBgZmVjX3B0cF9zdG9wYCBhIGZ1bmN0aW9uIEkgKnNob3VsZCogY29uc2lkZXIgYmVjYXVzZSBvZiBpdHMgbW9kaWZpZWQgdXNhZ2UgaW4gdGhlIHByb2JlLiBJJ20gZ29pbmcgdG8gaW5jbHVkZSB0aGF0IGFzIGEgY2FuZGlkYXRlIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMjQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6MDA6MDAuODM3MDU5MzU2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTk4NTA1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmZWNfcHRwX3N0b3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jPTgyNz12b2lkIGZlY19wdHBfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYy04NTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYzo4NTc6dm9pZCBmZWNfcHRwX3N0b3Aoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jLTg1OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjAwOjAwLjkyMzA1MDQ2M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzExNDc2NjQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBGRUMgUFRQIEluaXRpYWxpemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gYGZlY19wdHBfc3RvcGAgaXMgKm5vdCogc3RhdGljLCB3aGljaCBtZWFucyBgZmVjX3B0cF9pbml0YCBhbmQgYGZlY19wdHBfc3RvcGAgYXJlIHBvdGVudGlhbCBmb2NhbCBwb2ludHMgZm9yIGZ1enppbmcsIHNvIHRob3NlIHNob3VsZCBnbyBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC5cblxuTG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBpdCdzIHByZXR0eSBjbGVhcjogdGhleSd2ZSBjaGFuZ2VkIHRoZSByZXR1cm4gdHlwZSBvZiBgZmVjX3B0cF9pbml0YCB0byBgaW50YCBhbmQgYWRkZWQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBmdW5jdGlvbiBhbmQgYWxzbyBpbiB0aGUgYGZlY19wcm9iZWAgY2FsbGVyLiBTcGVjaWZpY2FsbHksIGBmZWNfcHJvYmVgIG5vdyBjaGVja3MgdGhlIHJldHVybiB2YWx1ZSBvZiBgZmVjX3B0cF9pbml0YCBhbmQganVtcHMgdG8gYGZhaWxlZF9yZXNldGAgb24gZmFpbHVyZS4gQW5kIHRoZSBjaGFuZ2VkIGBmZWNfcHRwX2luaXRgIGhhcyBtb3JlIHJvYnVzdCBlcnJvciBoYW5kbGluZyBhcm91bmQgSVJRIHJlcXVlc3RzIGFuZCBQVFAgY2xvY2sgcmVnaXN0cmF0aW9uLiBUaGlzIGlzIGEgKnNpZ25pZmljYW50KiBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgdGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHBhdGguIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyB0aG9yb3VnaCBmdXp6aW5nIHRvIGVuc3VyZSB0aGF0IGVycm9ycyBhcmUgaGFuZGxlZCBjb3JyZWN0bHksIGFuZCBubyByZXNvdXJjZXMgYXJlIGxlYWtlZCwgb3Igbm8gY3Jhc2hlcyBvY2N1ciwgZXNwZWNpYWxseSB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLlxuXG5Ob3csIGNhbiB3ZSByZWFjaCB0aGlzIGNvZGUgcGF0aD8gTGV0J3MgY2hlY2suIFllcywgUUVNVSBoYXMgYGlteC5mZWNgIGRldmljZXMgYW5kIHRoZXNlIGFyZSB1c2VkIGluIHRoZSBgaW14MjUtcGRrYCwgYHNhYnJlbGl0ZWAsIGBtY2lteDZ1bC1ldmtgLCBhbmQgYG1jaW14N2Qtc2FicmVgIG1hY2hpbmVzLiBFeGNlbGxlbnQsIHRoZXNlIGFyZSBhbGwgcGVyZmVjdGx5IGZ1enplYWJsZSB2aWEgc3l6a2FsbGVyIG9uIEFSTSBhbmQgQVJNNjQuIEFsdGhvdWdoIEkgYW0gdW5zdXJlIGV4YWN0bHkgaG93IHN5emthbGxlciBoYW5kbGVzIHBsYXRmb3JtIGRldmljZXMsIG15IG1lbW9yeSBpcyB0aGF0IGl0IGNhbiwgYmVjYXVzZSBvdGhlcndpc2UgdGhlIHByb21wdCBzYWlkIHRoYXQgaXQgd291bGRuJ3QgYmUgcG9zc2libGUgdG8gcmVhY2guXG5cblNpbmNlIHRoaXMgaXMgYSBRRU1VLWVtdWxhdGVkIGRldmljZSwgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcuIEkgd2lsbCBtYWtlIGEgZnV6emluZyBjb25maWc6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWBcbiogICAqKkZvY3VzU3ltYm9scyoqOiBgW1wiZmVjX3B0cF9pbml0XCJdYCAtIFdoaWxlIGBmZWNfcHRwX3N0b3BgIGlzIHJlYWNoYWJsZSwgdGhlIHByaW1hcnkgY2hhbmdlIGlzIGluIGBmZWNfcHRwX2luaXRgLCBzbyBmb2N1c2luZyB0aGVyZSBtYWtlcyBzZW5zZS5cbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYFtcIk5FVF9WRU5ET1JfRlJFRVNDQUxFXCIsIFwiRkVDXCIsIFwiQ09NUElMRV9URVNUXCJdYCAtIFN0YW5kYXJkIGNvbmZpZ3MgZm9yIHRoaXMgZHJpdmVyLCB3aXRoIGBDT01QSUxFX1RFU1RgIHRvIGVuc3VyZSBidWlsZHMuXG4qICAgKipSZWFzb25pbmcqKjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyB0byBmZWNfcHRwX2luaXQgYW5kIHByb3BhZ2F0ZXMgdGhlIGVycm9yIHRvIGZlY19wcm9iZSwgd2hpY2ggbm93IGFib3J0cyBpbml0aWFsaXphdGlvbiBpZiBQVFAgc2V0dXAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZHJpdmVyIHByb2JlIHBhdGggdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBwcm9wZXIgcmVzb3VyY2UgY2xlYW51cCBvbiBmYWlsdXJlLlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODg5LCJPdXRwdXRUb2tlbnMiOjExNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6MDA6MTQuMDM3ODIxNTA2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NjU3NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0ZSRUVTQ0FMRVwiLFxuICAgIFwiRkVDXCIsXG4gICAgXCJDT01QSUxFX1RFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmZWNfcHRwX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZlY19wdHBfaW5pdCBhbmQgcHJvcGFnYXRlcyB0aGUgZXJyb3IgdG8gZmVjX3Byb2JlLCB3aGljaCBub3cgYWJvcnRzIGluaXRpYWxpemF0aW9uIGlmIFBUUCBzZXR1cCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIgcHJvYmUgcGF0aCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciByZXNvdXJjZSBjbGVhbnVwIG9uIGZhaWx1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9GUkVFU0NBTEVcIixcbiAgICBcIkZFQ1wiLFxuICAgIFwiQ09NUElMRV9URVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmVjX3B0cF9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyB0byBmZWNfcHRwX2luaXQgYW5kIHByb3BhZ2F0ZXMgdGhlIGVycm9yIHRvIGZlY19wcm9iZSwgd2hpY2ggbm93IGFib3J0cyBpbml0aWFsaXphdGlvbiBpZiBQVFAgc2V0dXAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZHJpdmVyIHByb2JlIHBhdGggdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBwcm9wZXIgcmVzb3VyY2UgY2xlYW51cCBvbiBmYWlsdXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjowMDoxNC4xNjQ0OTA0NzJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4OTQyNjU0MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjowMDoxNC4xNjUyODQ2NDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Nzg5MzQ2NTY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIHByb2JlIGZ1bmN0aW9uIG9mIHRoZSBGcmVlc2NhbGUgRkVDIGV0aGVybmV0IGRyaXZlci4gSXQgY2hhbmdlcyBgZmVjX3B0cF9pbml0YCB0byByZXR1cm4gYW4gaW50ZWdlciBlcnJvciBjb2RlIGluc3RlYWQgb2YgYHZvaWRgLCBhbGxvd2luZyBpdCB0byBwcm9wYWdhdGUgZXJyb3JzIGZyb20gSVJRIHJlcXVlc3RzIGFuZCBQVFAgY2xvY2sgcmVnaXN0cmF0aW9uLiBUaGUgYGZlY19wcm9iZWAgZnVuY3Rpb24gaXMgdXBkYXRlZCB0byBjaGVjayB0aGlzIHJldHVybiB2YWx1ZSBhbmQganVtcCB0byB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgaGFuZGxpbmcgbGFiZWwuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgZXJyb3IgcHJvcGFnYXRpb24sIHdoaWNoIGRvIG5vdCBwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2Y4Y2Q4YTMyYmZjNDQ4MzRkMTA3YzM4YjhjMTg4MTg4MTU4YzE4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDExOjU3OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlYy5oXG5pbmRleCA3MTc2ODAzMTQ2ZjNkLi44ODMxZGEzNzMyNmIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlYy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjLmhcbkBAIC02OTIsNyArNjkyLDcgQEAgc3RydWN0IGZlY19lbmV0X3ByaXZhdGUge1xuIFx0dTY0IGV0aHRvb2xfc3RhdHNbXTtcbiB9O1xuIFxuLXZvaWQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KTtcbitpbnQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KTtcbiB2b2lkIGZlY19wdHBfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKTtcbiB2b2lkIGZlY19wdHBfc2F2ZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKTtcbiB2b2lkIGZlY19wdHBfc3RvcChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jXG5pbmRleCBjZWQ0ZGJmOGNkOTBmLi5iNmMyMmQ2YzFlNjlhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jXG5AQCAtNTM4NCw4ICs1Mzg0LDExIEBAIGZlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRnb3RvIGZhaWxlZF9yZXNldDtcbiBcbiBcdGlycV9jbnQgPSBmZWNfZW5ldF9nZXRfaXJxX2NudChwZGV2KTtcbi1cdGlmIChmZXAtXHUwMDNlYnVmZGVzY19leClcbi1cdFx0ZmVjX3B0cF9pbml0KHBkZXYsIGlycV9jbnQpO1xuK1x0aWYgKGZlcC1cdTAwM2VidWZkZXNjX2V4KSB7XG4rXHRcdHJldCA9IGZlY19wdHBfaW5pdChwZGV2LCBpcnFfY250KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIGZhaWxlZF9yZXNldDtcbitcdH1cbiBcbiBcdHJldCA9IGZlY19lbmV0X2luaXQobmRldik7XG4gXHRpZiAocmV0KVxuQEAgLTU0NTcsNyArNTQ2MCw4IEBAIGZlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIGZhaWxlZF9pcnE6XG4gXHRmZWNfZW5ldF9kZWluaXQobmRldik7XG4gZmFpbGVkX2luaXQ6XG4tXHRmZWNfcHRwX3N0b3AocGRldik7XG4rXHRpZiAoZmVwLVx1MDAzZWJ1ZmRlc2NfZXgpXG4rXHRcdGZlY19wdHBfc3RvcChwZGV2KTtcbiBmYWlsZWRfcmVzZXQ6XG4gXHRwbV9ydW50aW1lX3B1dF9ub2lkbGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFx0cG1fcnVudGltZV9kaXNhYmxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY1xuaW5kZXggNTY4MDFjMjAwOWQ1OS4uOGFkNjgwNDExYjBjMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmNcbkBAIC03MzYsNyArNzM2LDcgQEAgc3RhdGljIGlycXJldHVybl90IGZlY19wcHNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcbiAgKiBjeWNsZWNvdW50ZXIgaW5pdCByb3V0aW5lIGFuZCBleGl0cy5cbiAgKi9cbiBcbi12b2lkIGZlY19wdHBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXJxX2lkeClcbitpbnQgZmVjX3B0cF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnFfaWR4KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG4gXHRzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYobmRldik7XG5AQCAtNzc5LDI2ICs3NzksMjkgQEAgdm9pZCBmZWNfcHRwX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlycV9pZHgpXG4gXHRcdCAgICAgIEhSVElNRVJfTU9ERV9SRUwpO1xuIFxuIFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWVfb3B0aW9uYWwocGRldiwgXCJwcHNcIik7XG4tXHRpZiAoaXJxIFx1MDAzYyAwKVxuK1x0aWYgKGlycSBcdTAwM2MgMCkge1xuIFx0XHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX29wdGlvbmFsKHBkZXYsIGlycV9pZHgpO1xuLVx0LyogRmFpbHVyZSB0byBnZXQgYW4gaXJxIGlzIG5vdCBmYXRhbCxcbi1cdCAqIG9ubHkgdGhlIFBUUF9DTE9DS19QUFMgY2xvY2sgZXZlbnRzIHNob3VsZCBzdG9wXG4tXHQgKi9cbi1cdGlmIChpcnEgXHUwMDNlPSAwKSB7XG4rXHRcdGlmIChpcnEgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGlycSAhPSAtRU5YSU8pXG4rXHRcdFx0cmV0dXJuIGlycTtcbitcdH1cbitcbitcdGlmIChpcnEgXHUwMDNlIDApIHtcbiBcdFx0cmV0ID0gZGV2bV9yZXF1ZXN0X2lycShcdTAwMjZwZGV2LVx1MDAzZWRldiwgaXJxLCBmZWNfcHBzX2ludGVycnVwdCxcbiBcdFx0XHRcdCAgICAgICAwLCBwZGV2LVx1MDAzZW5hbWUsIG5kZXYpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGRldl93YXJuKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcInJlcXVlc3QgZm9yIHBwcyBpcnEgZmFpbGVkKCVkKVxcblwiLFxuLVx0XHRcdFx0IHJldCk7XG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdGZlcC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXHUwMDI2ZmVwLVx1MDAzZXB0cF9jYXBzLCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXHRpZiAoSVNfRVJSKGZlcC1cdTAwM2VwdHBfY2xvY2spKSB7XG4gXHRcdGZlcC1cdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xuIFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcInB0cF9jbG9ja19yZWdpc3RlciBmYWlsZWRcXG5cIik7XG4rXHRcdHJldHVybiBQVFJfRVJSKGZlcC1cdTAwM2VwdHBfY2xvY2spO1xuIFx0fVxuIFxuIFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNmZlcC1cdTAwM2V0aW1lX2tlZXAsIEhaKTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiB2b2lkIGZlY19wdHBfc2F2ZV9zdGF0ZShzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6MDA6MTQuMTY1Mjg2MTkyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4OTM0MjM3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnJlZXNjYWxlIEZFQyBQVFAgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhpcyBwYXRjaCwgYXQgYSBnbGFuY2UsIGlzIG1vZGlmeWluZyB0aGUgRnJlZXNjYWxlIEZFQyBQVFAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBmZWNfcHRwX2luaXRgIGZ1bmN0aW9uIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuY2AuIEl0J3MgY2hhbmdpbmcgdGhlIHJldHVybiB0eXBlIG9mIHRoYXQgZnVuY3Rpb24gZnJvbSBgdm9pZGAgdG8gYGludGAsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGFuIGVycm9yIGNvZGUgcHJvcGFnYXRpb24gc3RyYXRlZ3kuIFRoYXQncyB0aGUgZmlyc3QgY2x1ZS5cblxuVGhlbiwgbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gd2l0aGluIGBmZWNfcHJvYmVgIGluIGBmZWNfbWFpbi5jYCwgdGhleSdyZSBhY3R1YWxseSAqY2hlY2tpbmcqIHRoZSByZXR1cm4gdmFsdWUgb2YgYGZlY19wdHBfaW5pdGAgbm93LiBJZiBpdCBmYWlscywgd2UganVtcCB0byBgZmFpbGVkX3Jlc2V0YC4gU28gdGhlIHBhdGNoIGlzICpkb2luZyogc29tZXRoaW5nIHdpdGggdGhhdCBlcnJvciBjb2RlISBNeSByZWFkIGhlcmUgaXMgdGhhdCB0aGlzIGlzIGhhbmRsaW5nIElSUSByZXF1ZXN0IGZhaWx1cmVzIGFuZCBQVFAgY2xvY2sgcmVnaXN0cmF0aW9uIGZhaWx1cmVzLlxuXG5BbmQgaW4gdGhlIGBmYWlsZWRfaW5pdGAgcGF0aCwgYGZlY19wdHBfc3RvcChwZGV2KWAgaXMgbm93ICpjb25kaXRpb25hbGx5KiBjYWxsZWQgb25seSBpZiBgZmVwLVx1MDAzZWJ1ZmRlc2NfZXhgIGlzIHRydWUuIFRoaXMgYWxzbyBtYWtlcyBzZW5zZSBpbiB0ZXJtcyBvZiByZXNvdXJjZSBjbGVhbnVwLlxuXG5UaGlzIGlzIGFsbCAqc3RhbmRhcmQqIGVycm9yIGhhbmRsaW5nIHN0dWZmLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzIGFib3V0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBleHBvc3VyZS4gSG93ZXZlciwgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdG8gdXNlcnNwYWNlLiBJbiBmYWN0LCBpdCBkb2VzIHF1aXRlIHRoZSBvcHBvc2l0ZSBhbmQgaXMgY2xlYW5pbmcgdXAgY29ycmVjdGx5LiBJdCdzIGVzc2VudGlhbGx5IGEgcmVzb3VyY2UgbGVhayBhbmQvb3IgZXJyb3IgaGFuZGxpbmcgZml4LlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0sIEknbGwgc2NhbiB0aGUgZGlmZiBhZ2FpbjogYGZlY19wdHBfaW5pdGAgcmV0dXJucyBhbiBgaW50YC4gYGZlY19wcm9iZWAgY2FsbHMgaXQgYW5kIGNoZWNrcyB0aGUgcmV0dXJuOiBgcmV0ID0gZmVjX3B0cF9pbml0KHBkZXYsIGlycV9jbnQpOyBpZiAocmV0KSBnb3RvIGZhaWxlZF9yZXNldDtgIFRoZSBgZmFpbGVkX3Jlc2V0YCBwYXRoIGlzIGFsbCBhYm91dCBQTSBydW50aW1lIHN0dWZmLiBBbmQgYGZlY19wdHBfc3RvcGAgaXMgY2FsbGVkIGNvbmRpdGlvbmFsbHkgaW4gYGZhaWxlZF9pbml0YCBpZiBgZmVwLVx1MDAzZWJ1ZmRlc2NfZXhgLlxuXG5SaWdodCwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGlzIGxvb2tzIGdvb2QsIGEgc29saWQgaW1wcm92ZW1lbnQgaW4gZXJyb3IgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzMsIk91dHB1dFRva2VucyI6MTYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6MDA6MjIuMDU4NzE0ODk5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgZnVuY3Rpb24gb2YgdGhlIEZyZWVzY2FsZSBGRUMgZXRoZXJuZXQgZHJpdmVyLiBJdCBjaGFuZ2VzIGBmZWNfcHRwX2luaXRgIHRvIHJldHVybiBhbiBpbnRlZ2VyIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBgdm9pZGAsIGFsbG93aW5nIGl0IHRvIHByb3BhZ2F0ZSBlcnJvcnMgZnJvbSBJUlEgcmVxdWVzdHMgYW5kIFBUUCBjbG9jayByZWdpc3RyYXRpb24uIFRoZSBgZmVjX3Byb2JlYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlIGFuZCBqdW1wIHRvIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBoYW5kbGluZyBsYWJlbC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBlcnJvciBwcm9wYWdhdGlvbiwgd2hpY2ggZG8gbm90IHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvYmUgZnVuY3Rpb24gb2YgdGhlIEZyZWVzY2FsZSBGRUMgZXRoZXJuZXQgZHJpdmVyLiBJdCBjaGFuZ2VzIGBmZWNfcHRwX2luaXRgIHRvIHJldHVybiBhbiBpbnRlZ2VyIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBgdm9pZGAsIGFsbG93aW5nIGl0IHRvIHByb3BhZ2F0ZSBlcnJvcnMgZnJvbSBJUlEgcmVxdWVzdHMgYW5kIFBUUCBjbG9jayByZWdpc3RyYXRpb24uIFRoZSBgZmVjX3Byb2JlYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlIGFuZCBqdW1wIHRvIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBoYW5kbGluZyBsYWJlbC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBlcnJvciBwcm9wYWdhdGlvbiwgd2hpY2ggZG8gbm90IHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow6xbxv[1] Phase: Succeeded StartedAt: 2026-08-20 12:00:33 +0000 UTC FinishedAt: 2026-08-20 12:00:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-20 12:00:33 +0000 UTC FinishedAt: 2026-08-20 12:00:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2] Phase: Succeeded StartedAt: 2026-08-20 12:00:33 +0000 UTC FinishedAt: 2026-08-20 13:33:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-20 12:00:33 +0000 UTC FinishedAt: 2026-08-20 13:33:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-20 12:00:33 +0000 UTC FinishedAt: 2026-08-20 12:00:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-20 12:00:33 +0000 UTC FinishedAt: 2026-08-20 12:00:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6xbxv/series-workflow6xbxv-convert-artifact-3292363815/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-20 12:00:43 +0000 UTC FinishedAt: 2026-08-20 12:17:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-20 12:00:43 +0000 UTC FinishedAt: 2026-08-20 12:17:13 +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:*51e1bed6-16c3-4ffa-b9a6-c6886767b6f7,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-workflow6xbxv/series-workflow6xbxv-convert-artifact-3292363815/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": "9e65cc83-4e9d-4d7b-941e-bd8856905a20", "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-workflow6xbxv/series-workflow6xbxv-build-action-2469776317/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-20 12:00:43 +0000 UTC FinishedAt: 2026-08-20 12:17:03 +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:*51e1bed6-16c3-4ffa-b9a6-c6886767b6f7,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-workflow6xbxv/series-workflow6xbxv-convert-artifact-3292363815/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": "9e65cc83-4e9d-4d7b-941e-bd8856905a20", "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-workflow6xbxv/series-workflow6xbxv-build-action-2469776317/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-20 12:17:13 +0000 UTC FinishedAt: 2026-08-20 12:17:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-20 12:17:13 +0000 UTC FinishedAt: 2026-08-20 12:17:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-20 12:17:13 +0000 UTC FinishedAt: 2026-08-20 12:17:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-20 12:17:13 +0000 UTC FinishedAt: 2026-08-20 12:17:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6xbxv/series-workflow6xbxv-convert-artifact-4292305366/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-20 12:17:23 +0000 UTC FinishedAt: 2026-08-20 12:19:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-20 12:17:23 +0000 UTC FinishedAt: 2026-08-20 12:19:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9e65cc83-4e9d-4d7b-941e-bd8856905a20,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-workflow6xbxv/series-workflow6xbxv-build-action-2469776317/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-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-20 12:19:50 +0000 UTC FinishedAt: 2026-08-20 12:19:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-20 12:19:50 +0000 UTC FinishedAt: 2026-08-20 12:19:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-20 12:19:50 +0000 UTC FinishedAt: 2026-08-20 12:36:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-20 12:19:50 +0000 UTC FinishedAt: 2026-08-20 12:36:15 +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:*51e1bed6-16c3-4ffa-b9a6-c6886767b6f7,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-workflow6xbxv/series-workflow6xbxv-convert-artifact-4292305366/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": "887490be-4f50-4ae7-975c-c4f940fea2d4", "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-workflow6xbxv/series-workflow6xbxv-build-action-814483418/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-20 12:19:50 +0000 UTC FinishedAt: 2026-08-20 12:36:05 +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:*51e1bed6-16c3-4ffa-b9a6-c6886767b6f7,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-workflow6xbxv/series-workflow6xbxv-convert-artifact-4292305366/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": "887490be-4f50-4ae7-975c-c4f940fea2d4", "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-workflow6xbxv/series-workflow6xbxv-build-action-814483418/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-20 12:36:15 +0000 UTC FinishedAt: 2026-08-20 12:36:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-20 12:36:15 +0000 UTC FinishedAt: 2026-08-20 12:36:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-20 12:36:15 +0000 UTC FinishedAt: 2026-08-20 12:38:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-20 12:36:15 +0000 UTC FinishedAt: 2026-08-20 12:38:08 +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:*887490be-4f50-4ae7-975c-c4f940fea2d4,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-workflow6xbxv/series-workflow6xbxv-build-action-814483418/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-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-20 12:38:18 +0000 UTC FinishedAt: 2026-08-20 13:33:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-20 12:38:18 +0000 UTC FinishedAt: 2026-08-20 13:33:38 +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":["fec_ptp_init"],"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:*9e65cc83-4e9d-4d7b-941e-bd8856905a20,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*887490be-4f50-4ae7-975c-c4f940fea2d4,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-workflow6xbxv/series-workflow6xbxv-build-action-2469776317/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-workflow6xbxv/series-workflow6xbxv-build-action-814483418/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-20 12:38:18 +0000 UTC FinishedAt: 2026-08-20 12:38:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-20 12:38:18 +0000 UTC FinishedAt: 2026-08-20 12:38:23 +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":["fec_ptp_init"],"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-workflow6xbxv/series-workflow6xbxv-convert-artifact-3828237179/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-20 12:38:18 +0000 UTC FinishedAt: 2026-08-20 12:38:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-20 12:38:18 +0000 UTC FinishedAt: 2026-08-20 12:38:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-20 12:38:18 +0000 UTC FinishedAt: 2026-08-20 12:38:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-20 12:38:28 +0000 UTC FinishedAt: 2026-08-20 13:33:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xbxv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fec_ptp_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"61eb236c41c2a4717015dff18016a75a5eb90052","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FEC","COMPILE_TEST"],"series_id":"3ae3530c-ffc0-41a7-8082-6acbf61bdf9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-20 12:38:28 +0000 UTC FinishedAt: 2026-08-20 13:33:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9e65cc83-4e9d-4d7b-941e-bd8856905a20,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*887490be-4f50-4ae7-975c-c4f940fea2d4,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-workflow6xbxv/series-workflow6xbxv-build-action-2469776317/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-workflow6xbxv/series-workflow6xbxv-build-action-814483418/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-workflow6xbxv/series-workflow6xbxv-convert-artifact-3828237179/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,}