Name: series-workflowwz8f7 Phase: Succeeded StartedAt: 2026-08-07 12:01:38 +0000 UTC FinishedAt: 2026-08-07 14:10:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[0] Phase: Succeeded StartedAt: 2026-08-07 12:01:38 +0000 UTC FinishedAt: 2026-08-07 12:36:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 12:01:38 +0000 UTC FinishedAt: 2026-08-07 12:36:53 +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": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_CADENCE", "MACB", "MACB_PCI" ], "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": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_CADENCE", "MACB", "MACB_PCI" ], "series_id": "8d580efd-687a-492b-a0af-e386b41047e3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "macb_setup_cbs", "macb_cbs_add", "macb_cbs_destroy", "macb_setup_mqprio", "macb_tc_query_caps" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfQ0FERU5DRSYjMzQ7LAogICAgJiMzNDtNQUNCJiMzNDssCiAgICAmIzM0O01BQ0JfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjYl9zZXR1cF9jYnMmIzM0OywKICAgICYjMzQ7bWFjYl9jYnNfYWRkJiMzNDssCiAgICAmIzM0O21hY2JfY2JzX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWFjYl9zZXR1cF9tcXByaW8mIzM0OywKICAgICYjMzQ7bWFjYl90Y19xdWVyeV9jYXBzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBvZmZsb2FkIHN1cHBvcnQgZm9yIENCUyBhbmQgTVFQUklPIHRyYWZmaWMgY29udHJvbCBpbiB0aGUgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEl0IHJlYWRzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgbmV0d29ya2luZyBjb3JlIGFuZCBwcm9ncmFtcyBoYXJkd2FyZSByZWdpc3RlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlIHZhcmlhYmxlcyBwYXNzZWQgYnkgcmVmZXJlbmNlIChgZW5hYmxlX2JpdGAsIGBpc19xdWV1ZV9hYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQ0JTIChDcmVkaXQtQmFzZWQgU2hhcGVyKSBhbmQgTVFQUklPIChNdWx0aXBsZSBRdWV1ZSBQcmlvcml0eSkgdHJhZmZpYyBjb250cm9sIG9mZmxvYWRzIHRvIHRoZSBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyLiBUaGVzZSBmZWF0dXJlcyBhcmUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rICh0YyBxZGlzYykgYW5kIGludHJvZHVjZSBuZXcgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBsb2dpYyB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NjRhMjljMzllZTdmYzc1N2UxNzIwMmRjZjUyYTljN2JiOGZjNGZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMjoxODozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG5pbmRleCBhMTEwNTI1NjU0MzZhLi5kNWIyODQ1OWZkNzVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG5AQCAtMTg0LDYgJiM0MzsxODQsOSBAQFxuICNkZWZpbmUgR0VNX0RDRkc4XHRcdDB4MDI5QyAvKiBEZXNpZ24gQ29uZmlnIDggKi9cbiAjZGVmaW5lIEdFTV9EQ0ZHMTBcdFx0MHgwMkE0IC8qIERlc2lnbiBDb25maWcgMTAgKi9cbiAjZGVmaW5lIEdFTV9EQ0ZHMTJcdFx0MHgwMkFDIC8qIERlc2lnbiBDb25maWcgMTIgKi9cbiYjNDM7I2RlZmluZSBHRU1fQ0JTX0NPTlRST0xcdFx0MHgwNEJDIC8qIENCUyBDb250cm9sIFJlZ2lzdGVyICovXG4mIzQzOyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9BXHQweDA0QzAgLyogQ0JTIElkbGVTbG9wZSBRdWV1ZSBBICovXG4mIzQzOyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9CXHQweDA0QzQgLyogQ0JTIElkbGVTbG9wZSBRdWV1ZSBCICovXG4gI2RlZmluZSBHRU1fRU5TVF9DT05UUk9MXHQweDA4ODAgLyogRU5TVCBjb250cm9sIHJlZ2lzdGVyICovXG4gI2RlZmluZSBHRU1fVVNYX0NPTlRST0xcdFx0MHgwQTgwIC8qIEhpZ2ggc3BlZWQgUENTIGNvbnRyb2wgcmVnaXN0ZXIgKi9cbiAjZGVmaW5lIEdFTV9VU1hfU1RBVFVTXHRcdDB4MEE4OCAvKiBIaWdoIHNwZWVkIFBDUyBzdGF0dXMgcmVnaXN0ZXIgKi9cbkBAIC0yMjQsNiAmIzQzOzIyNywxMiBAQFxuICNkZWZpbmUgR0VNX0VOU1RfT05fVElNRShod19xKVx0XHQoMHgwODIwICYjNDM7ICgoaHdfcSkgXHUwMDNjXHUwMDNjIDIpKVxuICNkZWZpbmUgR0VNX0VOU1RfT0ZGX1RJTUUoaHdfcSlcdFx0KDB4MDg0MCAmIzQzOyAoKGh3X3EpIFx1MDAzY1x1MDAzYyAyKSlcbiBcbiYjNDM7LyogQml0ZmllbGRzIGluIENCU19DT05UUk9MICovXG4mIzQzOyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9PRkZTRVRcdDBcbiYjNDM7I2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9BX1NJWkVcdDFcbiYjNDM7I2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9CX09GRlNFVFx0MVxuJiM0MzsjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0JfU0laRVx0MVxuJiM0MztcbiAvKiBCaXRmaWVsZHMgaW4gRU5TVF9DT05UUk9MICovXG4gI2RlZmluZSBHRU1fRU5TVF9ESVNBQkxFX1FVRVVFX09GRlNFVFx0MTZcbiBcbkBAIC03NjgsNyAmIzQzOzc3Nyw3IEBAXG4gI2RlZmluZSBNQUNCX0NBUFNfTUlJT05SR01JSVx0XHRcdEJJVCg5KVxuICNkZWZpbmUgTUFDQl9DQVBTX05FRURfVFNVQ0xLXHRcdFx0QklUKDEwKVxuICNkZWZpbmUgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEVcdFx0XHRCSVQoMTEpXG4tI2RlZmluZSBNQUNCX0NBUFNfUUJWXHRcdFx0XHRCSVQoMTIpXG4mIzQzOyNkZWZpbmUgTUFDQl9DQVBTX1RDXHRcdFx0XHRCSVQoMTIpXG4gI2RlZmluZSBNQUNCX0NBUFNfUENTXHRcdFx0XHRCSVQoMTMpXG4gI2RlZmluZSBNQUNCX0NBUFNfSElHSF9TUEVFRFx0XHRcdEJJVCgxNClcbiAjZGVmaW5lIE1BQ0JfQ0FQU19DTEtfSFdfQ0hHXHRcdFx0QklUKDE1KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5pbmRleCBkMzk0ZjFmNDNiNjg1Li5hMGE2ODQ5MDUxOWU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuQEAgLTk5LDYgJiM0Mzs5OSwxMCBAQCBzdHJ1Y3Qgc2lmaXZlX2Z1NTQwX21hY2JfbWdtdCB7XG4gXG4gI2RlZmluZSBNQUNCX01ESU9fVElNRU9VVFx0MTAwMDAwMCAvKiBpbiB1c2VjcyAqL1xuIFxuJiM0MzsvKiBDQlMgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvcnM6IDEwMDAvaW50ZXJmYWNlX3dpZHRoICovXG4mIzQzOyNkZWZpbmUgTUFDQl9DQlNfUE9SVF9SQVRFXzFHXHRcdDEyNVx0LyogMTAwMC84IGZvciBHTUlJICg4LWJpdCkgKi9cbiYjNDM7I2RlZmluZSBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTVx0MjUwXHQvKiAxMDAwLzQgZm9yIE1JSSAoNC1iaXQpICovXG4mIzQzO1xuIC8qIERNQSBidWZmZXIgZGVzY3JpcHRvciBtaWdodCBiZSBkaWZmZXJlbnQgc2l6ZVxuICAqIGRlcGVuZHMgb24gaGFyZHdhcmUgY29uZmlndXJhdGlvbjpcbiAgKlxuQEAgLTQ0OTksMTggJiM0Mzs0NTAzLDggQEAgc3RhdGljIHZvaWQgbWFjYl90YXByaW9fZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRcdCAgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnRhcHJpbylcbiB7XG4tXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGludCBlcnIgPSAwO1xuIFxuLVx0aWYgKHVubGlrZWx5KCEobmRldi1cdTAwM2Vod19mZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19UQykpKVxuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tXG4tXHQvKiBDaGVjayBpZiBEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kICovXG4tXHRpZiAodW5saWtlbHkocG1fcnVudGltZV9zdXNwZW5kZWQoXHUwMDI2YnAtXHUwMDNlcGRldi1cdTAwM2VkZXYpKSkge1xuLVx0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O0RldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmRcXG5cJiMzNDspO1xuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tXHR9XG4tXG4gXHRzd2l0Y2ggKHRhcHJpby1cdTAwM2VjbWQpIHtcbiBcdGNhc2UgVEFQUklPX0NNRF9SRVBMQUNFOlxuIFx0XHRlcnIgPSBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKG5kZXYsIHRhcHJpbyk7XG5AQCAtNDUyNSwxMyAmIzQzOzQ1MTksMjAyIEBAIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKHN0cnVjdCBtYWNiICpicCwgdTggcXVldWVfbnVtLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyICplbmFibGVfYml0LCBib29sICppc19xdWV1ZV9hKVxuJiM0Mzt7XG4mIzQzO1x0LyogUXVldWUgQSBpcyBoaWdoZXN0IHByaW9yaXR5IChudW1fcXVldWVzIC0gMSkgKi9cbiYjNDM7XHRpZiAocXVldWVfbnVtID09IGJwLVx1MDAzZW51bV9xdWV1ZXMgLSAxKSB7XG4mIzQzO1x0XHQqZW5hYmxlX2JpdCA9IEdFTV9CSVQoQ0JTX0VOQUJMRV9RVUVVRV9BKTtcbiYjNDM7XHRcdCppc19xdWV1ZV9hID0gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUXVldWUgQiBpcyBzZWNvbmQgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDIpICovXG4mIzQzO1x0aWYgKHF1ZXVlX251bSA9PSBicC1cdTAwM2VudW1fcXVldWVzIC0gMikge1xuJiM0MztcdFx0KmVuYWJsZV9iaXQgPSBHRU1fQklUKENCU19FTkFCTEVfUVVFVUVfQik7XG4mIzQzO1x0XHQqaXNfcXVldWVfYSA9IGZhbHNlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtYWNiX2Nic19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4mIzQzO1x0XHRcdHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGVuYWJsZV9iaXQsIGlkbGVzbG9wZSwgc3BlZWRfa2JwcywgY3RybDtcbiYjNDM7XHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBrc2V0O1xuJiM0MztcdGJvb2wgaXNfcXVldWVfYTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKGJwLCBxb3B0LVx1MDAzZXF1ZXVlLCBcdTAwMjZlbmFibGVfYml0LCBcdTAwMjZpc19xdWV1ZV9hKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O0NCUzogUXVldWUgJWQgbm90IGVsaWdpYmxlIChvbmx5IHRvcCAyIHF1ZXVlcyBzdXBwb3J0IENCUylcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHFvcHQtXHUwMDNlcXVldWUpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBpZGxlc2xvcGUgaXMgY2FsaWJyYXRlZCBmb3IgdGhlIGN1cnJlbnQgbGluayBzcGVlZDsgQ0JTIGlzIG5vdFxuJiM0MztcdCAqIHJlcHJvZ3JhbW1lZCBvbiBsaW5rLXNwZWVkIGNoYW5nZXMsIHNvIGl0IG11c3QgYmUgcmVjb25maWd1cmVkXG4mIzQzO1x0ICogaWYgdGhlIGxpbmsgc3BlZWQgY2hhbmdlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldChicC1cdTAwM2VwaHlsaW5rLCBcdTAwMjZrc2V0KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFrc2V0LmJhc2Uuc3BlZWQgfHwga3NldC5iYXNlLnNwZWVkID09IFNQRUVEX1VOS05PV04pIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7Q0JTOiBJbnZhbGlkIGxpbmsgc3BlZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzcGVlZF9rYnBzID0ga3NldC5iYXNlLnNwZWVkICogMTAwMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHFvcHQtXHUwMDNlaWRsZXNsb3BlIFx1MDAzYz0gMCB8fCAodTMyKXFvcHQtXHUwMDNlaWRsZXNsb3BlIFx1MDAzZSBzcGVlZF9rYnBzKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O0NCUzogaW52YWxpZCBpZGxlc2xvcGUgJWQgKG11c3QgYmUgMS4uJXUga2JwcylcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHFvcHQtXHUwMDNlaWRsZXNsb3BlLCBzcGVlZF9rYnBzKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQ2FsY3VsYXRlIGlkbGVzbG9wZSBmb3IgaGFyZHdhcmUgcmVnaXN0ZXI6XG4mIzQzO1x0ICogLSBIaWdoLXNwZWVkIEdFTTogc2NhbGUgdG8gZnVsbCAzMi1iaXQgcmVnaXN0ZXIgcmFuZ2VcbiYjNDM7XHQgKiAtIFN0YW5kYXJkIE1BQ0I6IG11bHRpcGx5IGJ5IHBvcnQgdHJhbnNtaXQgcmF0ZSBmYWN0b3JcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX0hJR0hfU1BFRUQpXG4mIzQzO1x0XHRpZGxlc2xvcGUgPSBESVZfUk9VTkRfVVBfVUxMKCh1NjQpcW9wdC1cdTAwM2VpZGxlc2xvcGUgKiBVMzJfTUFYLCBzcGVlZF9rYnBzKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRpZGxlc2xvcGUgPSAodTMyKXFvcHQtXHUwMDNlaWRsZXNsb3BlICogKGtzZXQuYmFzZS5zcGVlZCBcdTAwM2U9IDEwMDAgP1xuJiM0MztcdFx0XHRcdFx0ICAgICAgIE1BQ0JfQ0JTX1BPUlRfUkFURV8xRyA6IE1BQ0JfQ0JTX1BPUlRfUkFURV8xMF8xMDBNKTtcbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmJwLVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdC8qIERpc2FibGUgQ0JTIGZvciB0aGUgcXVldWUgYmVmb3JlIHVwZGF0aW5nIGlkbGVzbG9wZSAqL1xuJiM0MztcdFx0Y3RybCA9IGdlbV9yZWFkbChicCwgQ0JTX0NPTlRST0wpIFx1MDAyNiB+ZW5hYmxlX2JpdDtcbiYjNDM7XHRcdGdlbV93cml0ZWwoYnAsIENCU19DT05UUk9MLCBjdHJsKTtcbiYjNDM7XHRcdC8qIFVwZGF0ZSBpZGxlc2xvcGUgZm9yIHRoZSBxdWV1ZSAqL1xuJiM0MztcdFx0aWYgKGlzX3F1ZXVlX2EpXG4mIzQzO1x0XHRcdGdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9BLCBpZGxlc2xvcGUpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRnZW1fd3JpdGVsKGJwLCBDQlNfSURMRVNMT1BFX1FfQiwgaWRsZXNsb3BlKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSZS1lbmFibGUgQ0JTIGZvciB0aGUgcXVldWUgd2l0aCBuZXcgaWRsZXNsb3BlICovXG4mIzQzO1x0XHRnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCB8IGVuYWJsZV9iaXQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2RiZyhuZGV2LCBcJiMzNDtDQlM6IENvbmZpZ3VyZWQgcXVldWUgJWQgd2l0aCBpZGxlc2xvcGUgMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIHFvcHQtXHUwMDNlcXVldWUsIGlkbGVzbG9wZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtYWNiX2Nic19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1OCBxdWV1ZV9udW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRib29sIGlzX3F1ZXVlX2E7XG4mIzQzO1x0dTMyIGVuYWJsZV9iaXQ7XG4mIzQzO1xuJiM0MztcdGlmIChtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKGJwLCBxdWV1ZV9udW0sIFx1MDAyNmVuYWJsZV9iaXQsIFx1MDAyNmlzX3F1ZXVlX2EpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2YnAtXHUwMDNlbG9jaykge1xuJiM0MztcdFx0Z2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGdlbV9yZWFkbChicCwgQ0JTX0NPTlRST0wpIFx1MDAyNiB+ZW5hYmxlX2JpdCk7XG4mIzQzO1x0XHRpZiAoaXNfcXVldWVfYSlcbiYjNDM7XHRcdFx0Z2VtX3dyaXRlbChicCwgQ0JTX0lETEVTTE9QRV9RX0EsIDApO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRnZW1fd3JpdGVsKGJwLCBDQlNfSURMRVNMT1BFX1FfQiwgMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRkZXZfZGJnKG5kZXYsIFwmIzM0O0NCUzogRGlzYWJsZWQgcXVldWUgJWRcXG5cJiMzNDssIHF1ZXVlX251bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWFjYl9zZXR1cF9jYnMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpXG4mIzQzO3tcbiYjNDM7XHRpZiAocW9wdC1cdTAwM2VlbmFibGUpXG4mIzQzO1x0XHRyZXR1cm4gbWFjYl9jYnNfYWRkKG5kZXYsIHFvcHQpO1xuJiM0MztcbiYjNDM7XHRtYWNiX2Nic19kZXN0cm95KG5kZXYsIHFvcHQtXHUwMDNlcXVldWUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1hY2Jfc2V0dXBfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHR1OCBudW1fdGMgPSBxb3B0LVx1MDAzZW51bV90YztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdHU4IGk7XG4mIzQzO1xuJiM0MztcdC8qIEhhbmRsZSByZXNldCBjYXNlIGVhcmx5ICovXG4mIzQzO1x0aWYgKCFudW1fdGMpIHtcbiYjNDM7XHRcdG5ldGRldl9yZXNldF90YyhuZGV2KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQ29uZmlndXJlIHRyYWZmaWMgY2xhc3NlcyAqL1xuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4mIzQzO1xuJiM0MztcdGVyciA9IG5ldGRldl9zZXRfbnVtX3RjKG5kZXYsIG51bV90Yyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV90YzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGVyciA9IG5ldGRldl9zZXRfdGNfcXVldWUobmRldiwgaSwgcW9wdC1cdTAwM2Vjb3VudFtpXSxcbiYjNDM7XHRcdFx0XHRcdCAgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzZXRfdGM7XG4mIzQzO1xuJiM0MztcdFx0bmV0ZGV2X2RiZyhuZGV2LCBcJiMzNDtNUVBSSU86IFRDJWQgLVx1MDAzZSBxdWV1ZSAldSAoY291bnQ9JXUpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBpLCBxb3B0LVx1MDAzZW9mZnNldFtpXSwgcW9wdC1cdTAwM2Vjb3VudFtpXSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9yZXNldF90YzpcbiYjNDM7XHRuZXRkZXZfcmVzZXRfdGMobmRldik7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtYWNiX3RjX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoYmFzZS1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86IHtcbiYjNDM7XHRcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbiYjNDM7XG4mIzQzO1x0XHRjYXBzLVx1MDAzZXZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0XHQgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbWFjYiAqYnA7XG4mIzQzO1xuIFx0aWYgKCFkZXYgfHwgIXR5cGVfZGF0YSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0aWYgKHR5cGUgPT0gVENfUVVFUllfQ0FQUylcbiYjNDM7XHRcdHJldHVybiBtYWNiX3RjX3F1ZXJ5X2NhcHMoZGV2LCB0eXBlX2RhdGEpO1xuJiM0MztcbiYjNDM7XHRicCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghKGRldi1cdTAwM2Vod19mZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19UQykpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKiBDaGVjayBpZiBEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KHBtX3J1bnRpbWVfc3VzcGVuZGVkKFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2KSkpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4mIzQzO1x0XHRyZXR1cm4gbWFjYl9zZXR1cF9tcXByaW8oZGV2LCB0eXBlX2RhdGEpO1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfQ0JTOlxuJiM0MztcdFx0cmV0dXJuIG1hY2Jfc2V0dXBfY2JzKGRldiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfVEFQUklPOlxuIFx0XHRyZXR1cm4gbWFjYl9zZXR1cF90YXByaW8oZGV2LCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbkBAIC00ODQ2LDggJiM0Mzs1MDI5LDggQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9SWENTVU07XG4gXHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1NHX0RJU0FCTEVEKVxuIFx0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9TRztcbi1cdC8qIEVuYWJsZSBIV19UQyBpZiBoYXJkd2FyZSBzdXBwb3J0cyBRQlYgKi9cbi1cdGlmIChicC1cdTAwM2VjYXBzIFx1MDAyNiBNQUNCX0NBUFNfUUJWKVxuJiM0MztcdC8qIEVuYWJsZSBUQyBvZmZsb2FkIGZvciBUU04tY2FwYWJsZSBoYXJkd2FyZSAqL1xuJiM0MztcdGlmIChicC1cdTAwM2VjYXBzIFx1MDAyNiBNQUNCX0NBUFNfVEMpXG4gXHRcdGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xuIFxuIFx0ZGV2LVx1MDAzZWZlYXR1cmVzID0gZGV2LVx1MDAzZWh3X2ZlYXR1cmVzO1xuQEAgLTU2NzgsNyAmIzQzOzU4NjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIHZlcnNhbF9jb25maWcgPSB7XG4gXHQuY2FwcyA9IE1BQ0JfQ0FQU19HSUdBQklUX01PREVfQVZBSUxBQkxFIHwgTUFDQl9DQVBTX0pVTUJPIHxcbiBcdFx0TUFDQl9DQVBTX0dFTV9IQVNfUFRQIHwgTUFDQl9DQVBTX0JEX1JEX1BSRUZFVENIIHxcbiBcdFx0TUFDQl9DQVBTX05FRURfVFNVQ0xLIHwgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEUgfFxuLVx0XHRNQUNCX0NBUFNfUUJWIHxcbiYjNDM7XHRcdE1BQ0JfQ0FQU19UQyB8XG4gXHRcdE1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLFxuIFx0LmRtYV9idXJzdF9sZW5ndGggPSAxNixcbiBcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9DQURFTkNFJiMzNDssCiAgICAmIzM0O01BQ0ImIzM0OywKICAgICYjMzQ7TUFDQl9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWNiX3NldHVwX2NicyYjMzQ7LAogICAgJiMzNDttYWNiX2Nic19hZGQmIzM0OywKICAgICYjMzQ7bWFjYl9jYnNfZGVzdHJveSYjMzQ7LAogICAgJiMzNDttYWNiX3NldHVwX21xcHJpbyYjMzQ7LAogICAgJiMzNDttYWNiX3RjX3F1ZXJ5X2NhcHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBDQlMgKENyZWRpdC1CYXNlZCBTaGFwZXIpIGFuZCBNUVBSSU8gKE11bHRpcGxlIFF1ZXVlIFByaW9yaXR5KSB0cmFmZmljIGNvbnRyb2wgb2ZmbG9hZHMgdG8gdGhlIENhZGVuY2UgTUFDQiBFdGhlcm5ldCBkcml2ZXIuIFRoZXNlIGZlYXR1cmVzIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgKHRjIHFkaXNjKSBhbmQgaW50cm9kdWNlIG5ldyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGxvZ2ljIHRoYXQgY2FuIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY2NGEyOWMzOWVlN2ZjNzU3ZTE3MjAyZGNmNTJhOWM3YmI4ZmM0ZmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDEyOjE4OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaAppbmRleCBhMTEwNTI1NjU0MzZhLi5kNWIyODQ1OWZkNzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaApAQCAtMTg0LDYgJiM0MzsxODQsOSBAQAogI2RlZmluZSBHRU1fRENGRzgJCTB4MDI5QyAvKiBEZXNpZ24gQ29uZmlnIDggKi8KICNkZWZpbmUgR0VNX0RDRkcxMAkJMHgwMkE0IC8qIERlc2lnbiBDb25maWcgMTAgKi8KICNkZWZpbmUgR0VNX0RDRkcxMgkJMHgwMkFDIC8qIERlc2lnbiBDb25maWcgMTIgKi8KJiM0MzsjZGVmaW5lIEdFTV9DQlNfQ09OVFJPTAkJMHgwNEJDIC8qIENCUyBDb250cm9sIFJlZ2lzdGVyICovCiYjNDM7I2RlZmluZSBHRU1fQ0JTX0lETEVTTE9QRV9RX0EJMHgwNEMwIC8qIENCUyBJZGxlU2xvcGUgUXVldWUgQSAqLwomIzQzOyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9CCTB4MDRDNCAvKiBDQlMgSWRsZVNsb3BlIFF1ZXVlIEIgKi8KICNkZWZpbmUgR0VNX0VOU1RfQ09OVFJPTAkweDA4ODAgLyogRU5TVCBjb250cm9sIHJlZ2lzdGVyICovCiAjZGVmaW5lIEdFTV9VU1hfQ09OVFJPTAkJMHgwQTgwIC8qIEhpZ2ggc3BlZWQgUENTIGNvbnRyb2wgcmVnaXN0ZXIgKi8KICNkZWZpbmUgR0VNX1VTWF9TVEFUVVMJCTB4MEE4OCAvKiBIaWdoIHNwZWVkIFBDUyBzdGF0dXMgcmVnaXN0ZXIgKi8KQEAgLTIyNCw2ICYjNDM7MjI3LDEyIEBACiAjZGVmaW5lIEdFTV9FTlNUX09OX1RJTUUoaHdfcSkJCSgweDA4MjAgJiM0MzsgKChod19xKSAmbHQ7Jmx0OyAyKSkKICNkZWZpbmUgR0VNX0VOU1RfT0ZGX1RJTUUoaHdfcSkJCSgweDA4NDAgJiM0MzsgKChod19xKSAmbHQ7Jmx0OyAyKSkKIAomIzQzOy8qIEJpdGZpZWxkcyBpbiBDQlNfQ09OVFJPTCAqLwomIzQzOyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9PRkZTRVQJMAomIzQzOyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9TSVpFCTEKJiM0MzsjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0JfT0ZGU0VUCTEKJiM0MzsjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0JfU0laRQkxCiYjNDM7CiAvKiBCaXRmaWVsZHMgaW4gRU5TVF9DT05UUk9MICovCiAjZGVmaW5lIEdFTV9FTlNUX0RJU0FCTEVfUVVFVUVfT0ZGU0VUCTE2CiAKQEAgLTc2OCw3ICYjNDM7Nzc3LDcgQEAKICNkZWZpbmUgTUFDQl9DQVBTX01JSU9OUkdNSUkJCQlCSVQoOSkKICNkZWZpbmUgTUFDQl9DQVBTX05FRURfVFNVQ0xLCQkJQklUKDEwKQogI2RlZmluZSBNQUNCX0NBUFNfUVVFVUVfRElTQUJMRQkJCUJJVCgxMSkKLSNkZWZpbmUgTUFDQl9DQVBTX1FCVgkJCQlCSVQoMTIpCiYjNDM7I2RlZmluZSBNQUNCX0NBUFNfVEMJCQkJQklUKDEyKQogI2RlZmluZSBNQUNCX0NBUFNfUENTCQkJCUJJVCgxMykKICNkZWZpbmUgTUFDQl9DQVBTX0hJR0hfU1BFRUQJCQlCSVQoMTQpCiAjZGVmaW5lIE1BQ0JfQ0FQU19DTEtfSFdfQ0hHCQkJQklUKDE1KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMKaW5kZXggZDM5NGYxZjQzYjY4NS4uYTBhNjg0OTA1MTllNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jCkBAIC05OSw2ICYjNDM7OTksMTAgQEAgc3RydWN0IHNpZml2ZV9mdTU0MF9tYWNiX21nbXQgewogCiAjZGVmaW5lIE1BQ0JfTURJT19USU1FT1VUCTEwMDAwMDAgLyogaW4gdXNlY3MgKi8KIAomIzQzOy8qIENCUyBwb3J0IHRyYW5zbWl0IHJhdGUgZmFjdG9yczogMTAwMC9pbnRlcmZhY2Vfd2lkdGggKi8KJiM0MzsjZGVmaW5lIE1BQ0JfQ0JTX1BPUlRfUkFURV8xRwkJMTI1CS8qIDEwMDAvOCBmb3IgR01JSSAoOC1iaXQpICovCiYjNDM7I2RlZmluZSBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTQkyNTAJLyogMTAwMC80IGZvciBNSUkgKDQtYml0KSAqLwomIzQzOwogLyogRE1BIGJ1ZmZlciBkZXNjcmlwdG9yIG1pZ2h0IGJlIGRpZmZlcmVudCBzaXplCiAgKiBkZXBlbmRzIG9uIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb246CiAgKgpAQCAtNDQ5OSwxOCAmIzQzOzQ1MDMsOCBAQCBzdGF0aWMgdm9pZCBtYWNiX3RhcHJpb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogc3RhdGljIGludCBtYWNiX3NldHVwX3RhcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAkJCSAgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnRhcHJpbykKIHsKLQlzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlpbnQgZXJyID0gMDsKIAotCWlmICh1bmxpa2VseSghKG5kZXYtJmd0O2h3X2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfVEMpKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JLyogQ2hlY2sgaWYgRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZCAqLwotCWlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZCgmYW1wO2JwLSZndDtwZGV2LSZndDtkZXYpKSkgewotCQluZXRkZXZfZXJyKG5kZXYsICYjMzQ7RGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxuJiMzNDspOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCiAJc3dpdGNoICh0YXByaW8tJmd0O2NtZCkgewogCWNhc2UgVEFQUklPX0NNRF9SRVBMQUNFOgogCQllcnIgPSBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKG5kZXYsIHRhcHJpbyk7CkBAIC00NTI1LDEzICYjNDM7NDUxOSwyMDIgQEAgc3RhdGljIGludCBtYWNiX3NldHVwX3RhcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RhdGljIGludCBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKHN0cnVjdCBtYWNiICpicCwgdTggcXVldWVfbnVtLAomIzQzOwkJCQkgICAgIHUzMiAqZW5hYmxlX2JpdCwgYm9vbCAqaXNfcXVldWVfYSkKJiM0Mzt7CiYjNDM7CS8qIFF1ZXVlIEEgaXMgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDEpICovCiYjNDM7CWlmIChxdWV1ZV9udW0gPT0gYnAtJmd0O251bV9xdWV1ZXMgLSAxKSB7CiYjNDM7CQkqZW5hYmxlX2JpdCA9IEdFTV9CSVQoQ0JTX0VOQUJMRV9RVUVVRV9BKTsKJiM0MzsJCSppc19xdWV1ZV9hID0gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFF1ZXVlIEIgaXMgc2Vjb25kIGhpZ2hlc3QgcHJpb3JpdHkgKG51bV9xdWV1ZXMgLSAyKSAqLwomIzQzOwlpZiAocXVldWVfbnVtID09IGJwLSZndDtudW1fcXVldWVzIC0gMikgewomIzQzOwkJKmVuYWJsZV9iaXQgPSBHRU1fQklUKENCU19FTkFCTEVfUVVFVUVfQik7CiYjNDM7CQkqaXNfcXVldWVfYSA9IGZhbHNlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWFjYl9jYnNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAomIzQzOwkJCXN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KQomIzQzO3sKJiM0MzsJdTMyIGVuYWJsZV9iaXQsIGlkbGVzbG9wZSwgc3BlZWRfa2JwcywgY3RybDsKJiM0MzsJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CXN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQ7CiYjNDM7CWJvb2wgaXNfcXVldWVfYTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtcyhicCwgcW9wdC0mZ3Q7cXVldWUsICZhbXA7ZW5hYmxlX2JpdCwgJmFtcDtpc19xdWV1ZV9hKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O0NCUzogUXVldWUgJWQgbm90IGVsaWdpYmxlIChvbmx5IHRvcCAyIHF1ZXVlcyBzdXBwb3J0IENCUylcbiYjMzQ7LAomIzQzOwkJCSAgIHFvcHQtJmd0O3F1ZXVlKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGlkbGVzbG9wZSBpcyBjYWxpYnJhdGVkIGZvciB0aGUgY3VycmVudCBsaW5rIHNwZWVkOyBDQlMgaXMgbm90CiYjNDM7CSAqIHJlcHJvZ3JhbW1lZCBvbiBsaW5rLXNwZWVkIGNoYW5nZXMsIHNvIGl0IG11c3QgYmUgcmVjb25maWd1cmVkCiYjNDM7CSAqIGlmIHRoZSBsaW5rIHNwZWVkIGNoYW5nZXMuCiYjNDM7CSAqLwomIzQzOwlwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldChicC0mZ3Q7cGh5bGluaywgJmFtcDtrc2V0KTsKJiM0MzsKJiM0MzsJaWYgKCFrc2V0LmJhc2Uuc3BlZWQgfHwga3NldC5iYXNlLnNwZWVkID09IFNQRUVEX1VOS05PV04pIHsKJiM0MzsJCW5ldGRldl9lcnIobmRldiwgJiMzNDtDQlM6IEludmFsaWQgbGluayBzcGVlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3BlZWRfa2JwcyA9IGtzZXQuYmFzZS5zcGVlZCAqIDEwMDA7CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtpZGxlc2xvcGUgJmx0Oz0gMCB8fCAodTMyKXFvcHQtJmd0O2lkbGVzbG9wZSAmZ3Q7IHNwZWVkX2ticHMpIHsKJiM0MzsJCW5ldGRldl9lcnIobmRldiwgJiMzNDtDQlM6IGludmFsaWQgaWRsZXNsb3BlICVkIChtdXN0IGJlIDEuLiV1IGticHMpXG4mIzM0OywKJiM0MzsJCQkgICBxb3B0LSZndDtpZGxlc2xvcGUsIHNwZWVkX2ticHMpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ2FsY3VsYXRlIGlkbGVzbG9wZSBmb3IgaGFyZHdhcmUgcmVnaXN0ZXI6CiYjNDM7CSAqIC0gSGlnaC1zcGVlZCBHRU06IHNjYWxlIHRvIGZ1bGwgMzItYml0IHJlZ2lzdGVyIHJhbmdlCiYjNDM7CSAqIC0gU3RhbmRhcmQgTUFDQjogbXVsdGlwbHkgYnkgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvcgomIzQzOwkgKi8KJiM0MzsJaWYgKGJwLSZndDtjYXBzICZhbXA7IE1BQ0JfQ0FQU19ISUdIX1NQRUVEKQomIzQzOwkJaWRsZXNsb3BlID0gRElWX1JPVU5EX1VQX1VMTCgodTY0KXFvcHQtJmd0O2lkbGVzbG9wZSAqIFUzMl9NQVgsIHNwZWVkX2ticHMpOwomIzQzOwllbHNlCiYjNDM7CQlpZGxlc2xvcGUgPSAodTMyKXFvcHQtJmd0O2lkbGVzbG9wZSAqIChrc2V0LmJhc2Uuc3BlZWQgJmd0Oz0gMTAwMCA/CiYjNDM7CQkJCQkgICAgICAgTUFDQl9DQlNfUE9SVF9SQVRFXzFHIDogTUFDQl9DQlNfUE9SVF9SQVRFXzEwXzEwME0pOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDticC0mZ3Q7bG9jaykgewomIzQzOwkJLyogRGlzYWJsZSBDQlMgZm9yIHRoZSBxdWV1ZSBiZWZvcmUgdXBkYXRpbmcgaWRsZXNsb3BlICovCiYjNDM7CQljdHJsID0gZ2VtX3JlYWRsKGJwLCBDQlNfQ09OVFJPTCkgJmFtcDsgfmVuYWJsZV9iaXQ7CiYjNDM7CQlnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCk7CiYjNDM7CQkvKiBVcGRhdGUgaWRsZXNsb3BlIGZvciB0aGUgcXVldWUgKi8KJiM0MzsJCWlmIChpc19xdWV1ZV9hKQomIzQzOwkJCWdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9BLCBpZGxlc2xvcGUpOwomIzQzOwkJZWxzZQomIzQzOwkJCWdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9CLCBpZGxlc2xvcGUpOwomIzQzOwomIzQzOwkJLyogUmUtZW5hYmxlIENCUyBmb3IgdGhlIHF1ZXVlIHdpdGggbmV3IGlkbGVzbG9wZSAqLwomIzQzOwkJZ2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGN0cmwgfCBlbmFibGVfYml0KTsKJiM0MzsJfQomIzQzOwomIzQzOwluZXRkZXZfZGJnKG5kZXYsICYjMzQ7Q0JTOiBDb25maWd1cmVkIHF1ZXVlICVkIHdpdGggaWRsZXNsb3BlIDB4JXhcbiYjMzQ7LAomIzQzOwkJICAgcW9wdC0mZ3Q7cXVldWUsIGlkbGVzbG9wZSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtYWNiX2Nic19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1OCBxdWV1ZV9udW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJYm9vbCBpc19xdWV1ZV9hOwomIzQzOwl1MzIgZW5hYmxlX2JpdDsKJiM0MzsKJiM0MzsJaWYgKG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoYnAsIHF1ZXVlX251bSwgJmFtcDtlbmFibGVfYml0LCAmYW1wO2lzX3F1ZXVlX2EpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDticC0mZ3Q7bG9jaykgewomIzQzOwkJZ2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGdlbV9yZWFkbChicCwgQ0JTX0NPTlRST0wpICZhbXA7IH5lbmFibGVfYml0KTsKJiM0MzsJCWlmIChpc19xdWV1ZV9hKQomIzQzOwkJCWdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9BLCAwKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlnZW1fd3JpdGVsKGJwLCBDQlNfSURMRVNMT1BFX1FfQiwgMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0ZGV2X2RiZyhuZGV2LCAmIzM0O0NCUzogRGlzYWJsZWQgcXVldWUgJWRcbiYjMzQ7LCBxdWV1ZV9udW0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1hY2Jfc2V0dXBfY2JzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAomIzQzOwkJCSAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpCiYjNDM7ewomIzQzOwlpZiAocW9wdC0mZ3Q7ZW5hYmxlKQomIzQzOwkJcmV0dXJuIG1hY2JfY2JzX2FkZChuZGV2LCBxb3B0KTsKJiM0MzsKJiM0MzsJbWFjYl9jYnNfZGVzdHJveShuZGV2LCBxb3B0LSZndDtxdWV1ZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1hY2Jfc2V0dXBfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAomIzQzOwkJCSAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwl1OCBudW1fdGMgPSBxb3B0LSZndDtudW1fdGM7CiYjNDM7CWludCBlcnI7CiYjNDM7CXU4IGk7CiYjNDM7CiYjNDM7CS8qIEhhbmRsZSByZXNldCBjYXNlIGVhcmx5ICovCiYjNDM7CWlmICghbnVtX3RjKSB7CiYjNDM7CQluZXRkZXZfcmVzZXRfdGMobmRldik7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzc2VzICovCiYjNDM7CXFvcHQtJmd0O2h3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTOwomIzQzOwomIzQzOwllcnIgPSBuZXRkZXZfc2V0X251bV90YyhuZGV2LCBudW1fdGMpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV90YzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IG5ldGRldl9zZXRfdGNfcXVldWUobmRldiwgaSwgcW9wdC0mZ3Q7Y291bnRbaV0sCiYjNDM7CQkJCQkgIHFvcHQtJmd0O29mZnNldFtpXSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZXJyX3Jlc2V0X3RjOwomIzQzOwomIzQzOwkJbmV0ZGV2X2RiZyhuZGV2LCAmIzM0O01RUFJJTzogVEMlZCAtJmd0OyBxdWV1ZSAldSAoY291bnQ9JXUpXG4mIzM0OywKJiM0MzsJCQkgICBpLCBxb3B0LSZndDtvZmZzZXRbaV0sIHFvcHQtJmd0O2NvdW50W2ldKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcmVzZXRfdGM6CiYjNDM7CW5ldGRldl9yZXNldF90YyhuZGV2KTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtYWNiX3RjX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChiYXNlLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOiB7CiYjNDM7CQlzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLSZndDtjYXBzOwomIzQzOwomIzQzOwkJY2Fwcy0mZ3Q7dmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiAJCQkgdm9pZCAqdHlwZV9kYXRhKQogewomIzQzOwlzdHJ1Y3QgbWFjYiAqYnA7CiYjNDM7CiAJaWYgKCFkZXYgfHwgIXR5cGVfZGF0YSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKHR5cGUgPT0gVENfUVVFUllfQ0FQUykKJiM0MzsJCXJldHVybiBtYWNiX3RjX3F1ZXJ5X2NhcHMoZGV2LCB0eXBlX2RhdGEpOwomIzQzOwomIzQzOwlicCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghKGRldi0mZ3Q7aHdfZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9IV19UQykpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkvKiBDaGVjayBpZiBEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kICovCiYjNDM7CWlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZCgmYW1wO2JwLSZndDtwZGV2LSZndDtkZXYpKSkgewomIzQzOwkJbmV0ZGV2X2VycihkZXYsICYjMzQ7RGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOgomIzQzOwkJcmV0dXJuIG1hY2Jfc2V0dXBfbXFwcmlvKGRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9RRElTQ19DQlM6CiYjNDM7CQlyZXR1cm4gbWFjYl9zZXR1cF9jYnMoZGV2LCB0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfUURJU0NfVEFQUklPOgogCQlyZXR1cm4gbWFjYl9zZXR1cF90YXByaW8oZGV2LCB0eXBlX2RhdGEpOwogCWRlZmF1bHQ6CkBAIC00ODQ2LDggJiM0Mzs1MDI5LDggQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQlkZXYtJmd0O2h3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNOwogCWlmIChicC0mZ3Q7Y2FwcyAmYW1wOyBNQUNCX0NBUFNfU0dfRElTQUJMRUQpCiAJCWRldi0mZ3Q7aHdfZmVhdHVyZXMgJmFtcDs9IH5ORVRJRl9GX1NHOwotCS8qIEVuYWJsZSBIV19UQyBpZiBoYXJkd2FyZSBzdXBwb3J0cyBRQlYgKi8KLQlpZiAoYnAtJmd0O2NhcHMgJmFtcDsgTUFDQl9DQVBTX1FCVikKJiM0MzsJLyogRW5hYmxlIFRDIG9mZmxvYWQgZm9yIFRTTi1jYXBhYmxlIGhhcmR3YXJlICovCiYjNDM7CWlmIChicC0mZ3Q7Y2FwcyAmYW1wOyBNQUNCX0NBUFNfVEMpCiAJCWRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQzsKIAogCWRldi0mZ3Q7ZmVhdHVyZXMgPSBkZXYtJmd0O2h3X2ZlYXR1cmVzOwpAQCAtNTY3OCw3ICYjNDM7NTg2MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgdmVyc2FsX2NvbmZpZyA9IHsKIAkuY2FwcyA9IE1BQ0JfQ0FQU19HSUdBQklUX01PREVfQVZBSUxBQkxFIHwgTUFDQl9DQVBTX0pVTUJPIHwKIAkJTUFDQl9DQVBTX0dFTV9IQVNfUFRQIHwgTUFDQl9DQVBTX0JEX1JEX1BSRUZFVENIIHwKIAkJTUFDQl9DQVBTX05FRURfVFNVQ0xLIHwgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEUgfAotCQlNQUNCX0NBUFNfUUJWIHwKJiM0MzsJCU1BQ0JfQ0FQU19UQyB8CiAJCU1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLAogCS5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsCiAJLmluaXQgPSBpbml0X3Jlc2V0X29wdGlvbmFsLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzcxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgb2YgdGhlIE1BQ0IgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCYjMzk7cyBmdXp6aW5nIGltcGxpY2F0aW9ucy4gVGhlIGNvcmUgb2YgdGhpcyByZXZvbHZlcyBhcm91bmQgaWRlbnRpZnlpbmcgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AgYW5kIGBtYWNiLmhgLCB3aGljaCBpbW1lZGlhdGVseSBwb2ludHMgdG8gbmV0d29yayBkcml2ZXIgdGVycml0b3J5LiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBzdXBwb3J0IGZvciBDQlMgYW5kIE1RUFJJTyB0cmFmZmljIGNvbnRyb2wgb2ZmbG9hZHMgd2l0aGluIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyLiBJbnRlcmVzdGluZywgYW5kIHBvdGVudGlhbGx5IGNvbXBsZXguCgpSZW5hbWluZyBgTUFDQl9DQVBTX1FCVmAgdG8gYE1BQ0JfQ0FQU19UQ2AgYW5kIGVuYWJsaW5nIGBORVRJRl9GX0hXX1RDYCBzaWduYWxzIGEgY2xlYXIgc2hpZnQgdG93YXJkIHRyYWZmaWMgY29udHJvbCBjYXBhYmlsaXRpZXMuIFRoZSBhZGRpdGlvbiBvZiBmdW5jdGlvbnMgbGlrZSBgbWFjYl9zZXR1cF9jYnNgLCBgbWFjYl9jYnNfYWRkYCwgYW5kIHNvIG9uLCBhbGwgcmVhY2hhYmxlIHRocm91Z2ggYG1hY2Jfc2V0dXBfdGNgICh0aGUgYC5uZG9fc2V0dXBfdGNgIGNhbGxiYWNrKSwgbWFrZXMgaXQgc2VlbSBsaWtlIHRoaXMgaXMgYSBzdWJzdGFudGlhbCBhZGRpdGlvbiB0byB0aGUgZnVuY3Rpb25hbGl0eS4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIGlzIGRyaXZlciBhY2Nlc3NpYmlsaXR5LCBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBwYXRjaCBpbnZvbHZlcyB0aGUgQ2FkZW5jZSBNQUNCLCB3aGljaCBJIGtub3cgaXMgdXNlZCBpbiBBdG1lbC9DYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGNvbnRyb2xsZXJzLiBRRU1VIG9mdGVuIHN1cHBvcnRzIENhZGVuY2UgR0VNLCBlc3BlY2lhbGx5IGluIHBsYXRmb3JtcyBsaWtlIFhpbGlueCBaeW5xIGFuZCBTaUZpdmUgVS4gVGhhdCYjMzk7cyBnb29kOyBpdCYjMzk7cyBsaWtlbHkgd2UgY2FuIGdldCBjb3ZlcmFnZSB0aGVyZS4KCkJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBBcmUgdGhlcmUgZXZlbiBvdGhlciBlZmZvcnRzIG9uIHRoaXMgZHJpdmVyPyBJcyB0aGlzIGRyaXZlciAqY29tbW9ubHkqIGZ1enplZD8gTGV0JiMzOTtzIGNoZWNrIGZvciBleGlzdGluZyBjb25maWcgZmxhZ3MgdG8gcXVpY2tseSBnYXVnZSB1c2FnZSBhbmQgZnV6emluZyBoaXN0b3J5LiBgQ09ORklHX01BQ0JgIGlzIHRoZSBrZXkgY29uZmlnIGZvciB0aGlzLCBzbyBJIHdpbGwgc2VhcmNoIGl0IGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgbG9vayBhdCB3aGV0aGVyIHRoZSBkcml2ZXIgaGFzIGJlZW4gZnV6emVkIGJlZm9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9MjA9aWYgTkVUX1ZFTkRPUl9DQURFTkNFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6MjI6Y29uZmlnIE1BQ0JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O0NhZGVuY2UgTUFDQi9HRU0gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzozNzpjb25maWcgTUFDQl9VU0VfSFdTVEFNUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM4LVx0Ym9vbCBcJiMzNDtVc2UgSUVFRSAxNTg4IGh3c3RhbXBcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6NDU6Y29uZmlnIE1BQ0JfUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIFBDSSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc2OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBDYWRlbmNlIEdFTSBNQUNCIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGFib3V0IGZ1enppbmcgdGhpcyBgQ09ORklHX01BQ0JgIGRyaXZlci4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwcmVyZXF1aXNpdGVzLCBzbyBJJiMzOTtsbCBjaGVjayBpZiBpdCYjMzk7cyB0eXBpY2FsbHkgZW5hYmxlZCBvciBlYXNpbHkgZW5hYmxlZCBpbiBvdXIgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuIEl0IGxvb2tzIGxpa2UgaXQgaGluZ2VzIG9uIGBORVRfVkVORE9SX0NBREVOQ0VgLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgZG9lcyBRRU1VIGV2ZW4gc3VwcG9ydCB0aGlzIENhZGVuY2UgR0VNIGhhcmR3YXJlPyBZZXAsIHRoZXJlJiMzOTtzIGEgYGh3L25ldC9jYWRlbmNlX2dlbS5jYCBmaWxlLCBzbyB0aGF0JiMzOTtzIGEgcG9zaXRpdmUuCgpUaGUgbmV4dCBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0JiMzOTtzIGZ1enphYmxlLiBJdCYjMzk7cyBhIG5ldHdvcmsgZHJpdmVyLCBzbyB0aGF0JiMzOTtzIGluaGVyZW50bHkgcHJvbWlzaW5nLiBXZSBzaG91bGQgYmUgYWJsZSB0byBpbnRlcmFjdCB3aXRoIGl0IHVzaW5nIG5ldGxpbmssIHNwZWNpZmljYWxseSB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGB0YyBxZGlzYyBhZGQuLi5gLiBUaGF0IHNvdW5kcyBmZWFzaWJsZS4gTm93LCB3aGF0IGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgYWRkZWQgYW5kIGV4cG9zZWQgZm9yIHRoaXM/IEkgc2VlIGBtYWNiX3NldHVwX2Nic2AsIGBtYWNiX3NldHVwX21xcHJpb2AsIGFuZCBgbWFjYl90Y19xdWVyeV9jYXBzYC4gVGhlc2UgYXJlIGFsbCBjYWxsZWQgZnJvbSBgbWFjYl9zZXR1cF90Y2AsIHNvIHRoYXQmIzM5O3MgdGhlIGtleSBmdW5jdGlvbiB0byBleGFtaW5lLiBUaW1lIHRvIGRpZyBpbnRvIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYCBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBoYW5kbGVzIFRyYWZmaWMgQ29udHJvbCAoVEMpIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY2Jfc2V0dXBfdGMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDY3NT1zdGF0aWMgaW50IG1hY2JfdGNfcXVlcnlfY2FwcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDY5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NDY5MTpzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ2OTItXHRcdFx0IHZvaWQgKnR5cGVfZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTQ3MzI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtYWNiX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00NzQ4LVx0Lm5kb19od3RzdGFtcF9nZXRcdD0gbWFjYl9od3RzdGFtcF9nZXQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjQ3NDk6XHQubmRvX3NldHVwX3RjXHRcdD0gbWFjYl9zZXR1cF90YyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDc1MC1cdC5uZG9fdHhfdGltZW91dFx0XHQ9IG1hY2JfdHhfdGltZW91dCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTg4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1BQ0IgRHJpdmVyIFNldHVwKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZXNlIE1BQ0IgZHJpdmVyIHNldHVwIGZ1bmN0aW9ucy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBsb2dpYyByZXZvbHZlcyBhcm91bmQgYG1hY2Jfc2V0dXBfY2JzYCBhbmQgYG1hY2Jfc2V0dXBfbXFwcmlvYC4gQWgsIHdhaXQgYSBtaW51dGUsIGBtYWNiX3NldHVwX2Nic2AgaW50ZXJuYWxseSB1c2VzIGBtYWNiX2Nic19hZGRgIGFuZCBgbWFjYl9jYnNfZGVzdHJveWAuIEkgc2VlIGBtYWNiX3NldHVwX21xcHJpb2AgaW4gdGhlIG1peCB0b28uCgpMZXQgbWUgb3JnYW5pemUgdGhpcyBmb3IgY2xhcml0eS4gU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGFyZToKCiogICBgbWFjYl9zZXR1cF9jYnNgCiogICBgbWFjYl9jYnNfYWRkYAoqICAgYG1hY2JfY2JzX2Rlc3Ryb3lgCiogICBgbWFjYl9zZXR1cF9tcXByaW9gCiogICBgbWFjYl90Y19xdWVyeV9jYXBzYAoKSG1tLCBgbWFjYl9jYnNfYWRkYCBhbmQgYG1hY2JfY2JzX2Rlc3Ryb3lgIGFyZSAqc3RhdGljKiwgaW50ZXJlc3RpbmcuIEJ1dCB0aGV5IGFyZW4mIzM5O3QgZXhwbGljaXRseSBpbmxpbmVkLiBBbHJpZ2h0LCBsZXQmIzM5O3Mga2VlcCB0aGUgZm9jdXMgb24gdGhlIGVudHJ5IHBvaW50cywgdGhlIGV4dGVybmFsIGZhY2luZyBmdW5jdGlvbiBjYWxsczoKCiogICBgbWFjYl9zZXR1cF90Y2AgKEFscmVhZHkgdGhlcmUhKQoqICAgYG1hY2Jfc2V0dXBfY2JzYAoqICAgYG1hY2Jfc2V0dXBfbXFwcmlvYAoqICAgYG1hY2JfdGNfcXVlcnlfY2Fwc2AKClJpZ2h0LCB0aGUgYG1hY2Jfc2V0dXBfdGNgIGlzIGFscmVhZHkgcHJlc2VudCwgdGhlIG90aGVycyBhcmUgbmV3IGFkZGl0aW9ucy4gTm93LCBmb3IgdGVzdGluZywgSSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIHdpbGwgd29yayBpbiBRRU1VLiBJIG5lZWQgdG8gcXVpY2tseSBhbmQgZWFzaWx5IGRlYnVnIGl0LCBzbyBsZXQmIzM5O3Mgc2VlIGlmIGBNQUNCX1BDSWAgaXMgcmVsZXZhbnQgZm9yIGVhc3kgdGVzdGluZyBpbiBRRU1VLiBRRU1VJiMzOTtzIENhZGVuY2UgR0VNIHVzdWFsbHkgZW11bGF0ZXMgYSBwbGF0Zm9ybSBkZXZpY2UgKHN5c2J1cyksIGJ1dCBkb2VzIGl0IHN1cHBvcnQgUENJIGFzIHdlbGw/IEkgd2lsbCBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNiX3BjaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZz00NT1jb25maWcgTUFDQl9QQ0lcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNTEtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzo1MjpcdCAgd2lsbCBiZSBjYWxsZWQgbWFjYl9wY2kuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNTMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZT0xMT1vYmotJChDT05GSUdfTUFDQikgJiM0Mzs9IG1hY2Iub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfTUFDQl9QQ0kpICYjNDM7PSBtYWNiX3BjaS5vXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjE5OiNkZWZpbmUgUENJX0RSSVZFUl9OQU1FIFwmIzM0O21hY2JfcGNpXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMjAtI2RlZmluZSBQTEFUX0RSSVZFUl9OQU1FIFwmIzM0O21hY2JcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM9MTIwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBkZXZfaWRfdGFibGVbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjEyNTpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFjYl9wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEyNi1cdC5uYW1lICAgICA9IFBDSV9EUklWRVJfTkFNRSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTMxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjEzMjptb2R1bGVfcGNpX2RyaXZlcihtYWNiX3BjaV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEzMy1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZGV2X2lkX3RhYmxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODY0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVuYWJsaW5nIE1BQ0IgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gaW1wcm92ZSBvdXIgZnV6emluZyBjb3ZlcmFnZSBmb3IgdGhlIGBNQUNCYCBldGhlcm5ldCBkcml2ZXIuIElmIHdlIGVuYWJsZSBib3RoIGBNQUNCYCBhbmQgYE1BQ0JfUENJYCwgaXQgKm1pZ2h0KiBtYWtlIGZ1enppbmcgZWFzaWVyLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgZWl0aGVyIFFFTVUgbWlnaHQgZXhwb3NlIGl0IHRocm91Z2ggUENJLCBvciBzeXprYWxsZXIgY291bGQgcG90ZW50aWFsbHkgaW5zdGFudGlhdGUgaXQgdmlhIGEgcGxhdGZvcm0gZGV2aWNlLiBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIHBsYXRmb3JtIGRldmljZSBzdXBwb3J0IOKAkyBvciBhdCBsZWFzdCwgSSYjMzk7dmUgc2VlbiBpdCB1c2VkIHdpdGggdmlydHVhbCBkZXZpY2VzLiBOb3cgd2FpdCBhIG1pbnV0ZSwgSSBzZWVtIHRvIHJlbWVtYmVyIHRoYXQgc3l6a2FsbGVyICpjYW4qIHRlc3QgYG1hY2JgIGlmIGl0JiMzOTtzIGluc3RhbnRpYXRlZC4gVGhhdCBjaGFuZ2VzIHRoaW5ncy4KCkFscmlnaHQsIHNvIHRoZSBwbGFuIGlzIHRvIGRlZmluaXRlbHkgaW5jbHVkZSBgTUFDQmAgYW5kIGBNQUNCX1BDSWAgaW4gdGhlIGNvbmZpZ3MuIEkga25vdyB3ZSYjMzk7bGwgYWxzbyBuZWVkIGBORVRfVkVORE9SX0NBREVOQ0VgIGFzIGEgZGVwZW5kZW5jeS4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkmIzM5O20gbWlzc2luZy4gVGhpcyB3aWxsIHN0cmVhbWxpbmUgdGhlIGZ1enppbmcgcHJvY2VzcywgYW5kIGhvcGVmdWxseSBnaXZlIHVzIG1vcmUgY292ZXJhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTY9Y29uZmlnIE5FVF9WRU5ET1JfQ0FERU5DRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTctXHRib29sIFwmIzM0O0NhZGVuY2UgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjg6XHRkZXBlbmRzIG9uIEhBU19JT01FTVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTktXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9MjI9Y29uZmlnIE1BQ0JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O0NhZGVuY2UgTUFDQi9HRU0gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjI0Olx0ZGVwZW5kcyBvbiBIQVNfRE1BIFx1MDAyNlx1MDAyNiBDT01NT05fQ0xLXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6MjU6XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjYtXHRzZWxlY3QgUEhZTElOS1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZz0zNz1jb25maWcgTUFDQl9VU0VfSFdTVEFNUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM4LVx0Ym9vbCBcJiMzNDtVc2UgSUVFRSAxNTg4IGh3c3RhbXBcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzozOTpcdGRlcGVuZHMgb24gTUFDQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQwOlx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQxLVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTQ1PWNvbmZpZyBNQUNCX1BDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ2LVx0dHJpc3RhdGUgXCYjMzQ7Q2FkZW5jZSBQQ0kgTUFDQi9HRU0gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQ3Olx0ZGVwZW5kcyBvbiBNQUNCIFx1MDAyNlx1MDAyNiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00OC1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTczMQoJCQkJCQkJb3V0cHV0OiAxNjIKCQkJCQkJCXRob3VnaHRzOiA1MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgQ2FkZW5jZSBNQUNCIFRyYWZmaWMgQ29udHJvbCBPZmZsb2FkcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbnRyb2R1Y2luZyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQ2FkZW5jZSBNQUNCIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0cmFmZmljIGNvbnRyb2wgc2V0dXAsIGVuYWJsaW5nIENCUyBhbmQgTVFQUklPLiBUaGVzZSBmZWF0dXJlcywgcmVhY2hhYmxlIHZpYSBgdGMgcWRpc2MgYWRkIGRldiBldGhYIHJvb3QgbXFwcmlvIC4uLmAgb3IgYHRjIHFkaXNjIGFkZCBkZXYgZXRoWCByb290IGNicyAuLi5gLCBhcmUgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgbmV0bGluayBpbnRlcmZhY2UgaXMgYSBwcmltZSB0YXJnZXQgaGVyZS4KCk15IGZvY3VzIHNob3VsZCBiZSBvbjoKCiogICBgbWFjYl9zZXR1cF9jYnNgCiogICBgbWFjYl9jYnNfYWRkYAoqICAgYG1hY2JfY2JzX2Rlc3Ryb3lgCiogICBgbWFjYl9zZXR1cF9tcXByaW9gCiogICBgbWFjYl90Y19xdWVyeV9jYXBzYAoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbWFjYl9jYnNfYWRkYCBhbmQgYG1hY2JfY2JzX2Rlc3Ryb3lgIGFyZW4mIzM5O3QgaW5saW5lZCwgYXMgdGhleSBhcHBlYXIgdG8gYmUgc3RhdGljLiBUaGV5JiMzOTtyZSBub3QgaW5saW5lLCBhbmQgc2luY2UgdGhleSBhcmUgY2FsbGVkIGZyb20gYG1hY2Jfc2V0dXBfY2JzYCwgaXQmIzM5O3MgYWNjZXB0YWJsZSB0byBsaXN0IHRoZW0uIEFsc28sIGBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zYCBpcyBhIHNtYWxsIGhlbHBlciBmdW5jdGlvbiwgYW5kIEkmIzM5O20gZ3Vlc3NpbmcgaXQgbWlnaHQgYmUgaW5saW5lZC4gYG1hY2Jfc2V0dXBfdGNgIGlzIG1vZGlmaWVkLCBidXQgaXQmIzM5O3MgYW4gZXhpc3RpbmcgZnVuY3Rpb24uCgpUaGUga2V5IGNvbmZpZ3MgdG8ga2VlcCBpbiBtaW5kIGFyZSBgTkVUX1ZFTkRPUl9DQURFTkNFYCwgYE1BQ0JgLCBhbmQgYE1BQ0JfUENJYC4KClRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIENCUyBhbmQgTVFQUklPIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkcyB0byB0aGUgQ2FkZW5jZSBNQUNCIEV0aGVybmV0IGRyaXZlci4gVGhlc2UgZmVhdHVyZXMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayAodGMgcWRpc2MpLCBhbmQgdGhleSBpbnRyb2R1Y2UgbmV3IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gbG9naWMgdGhhdCB3b3VsZCBiZSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgZnV6emluZy4KCkkmIzM5O20gY29uZmlkZW50IHRoYXQgYE1BQ0JfUENJYCBpcyBzdWZmaWNpZW50IHRvIGdldCBhIGRldmljZSBpbnN0YW50aWF0ZWQgaW4gUUVNVS4gUUVNVSBjYW4gZW11bGF0ZSBQQ0kgZGV2aWNlcywgYW5kIGlmIGBNQUNCX1BDSWAgaXMgZW5hYmxlZCwgc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gaW5qZWN0IGl0IG9yIFFFTVUgbWlnaHQgaGF2ZSBpdC4gRXZlbiBpZiB0aGF0IGlzbiYjMzk7dCB0aGUgY2FzZSwgc3l6a2FsbGVyIGNhbiBzdGlsbCBmdXp6IHRoZSBuZXRsaW5rIGludGVyZmFjZS4KCk5vdywgbGV0JiMzOTtzIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfQ0FERU5DRSYjMzQ7LAogICAgJiMzNDtNQUNCJiMzNDssCiAgICAmIzM0O01BQ0JfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjYl9zZXR1cF9jYnMmIzM0OywKICAgICYjMzQ7bWFjYl9jYnNfYWRkJiMzNDssCiAgICAmIzM0O21hY2JfY2JzX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWFjYl9zZXR1cF9tcXByaW8mIzM0OywKICAgICYjMzQ7bWFjYl90Y19xdWVyeV9jYXBzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQ0JTIChDcmVkaXQtQmFzZWQgU2hhcGVyKSBhbmQgTVFQUklPIChNdWx0aXBsZSBRdWV1ZSBQcmlvcml0eSkgdHJhZmZpYyBjb250cm9sIG9mZmxvYWRzIHRvIHRoZSBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyLiBUaGVzZSBmZWF0dXJlcyBhcmUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rICh0YyBxZGlzYykgYW5kIGludHJvZHVjZSBuZXcgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBsb2dpYyB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfQ0FERU5DRSYjMzQ7LAogICAgJiMzNDtNQUNCJiMzNDssCiAgICAmIzM0O01BQ0JfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjYl9zZXR1cF9jYnMmIzM0OywKICAgICYjMzQ7bWFjYl9jYnNfYWRkJiMzNDssCiAgICAmIzM0O21hY2JfY2JzX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWFjYl9zZXR1cF9tcXByaW8mIzM0OywKICAgICYjMzQ7bWFjYl90Y19xdWVyeV9jYXBzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQ0JTIChDcmVkaXQtQmFzZWQgU2hhcGVyKSBhbmQgTVFQUklPIChNdWx0aXBsZSBRdWV1ZSBQcmlvcml0eSkgdHJhZmZpYyBjb250cm9sIG9mZmxvYWRzIHRvIHRoZSBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyLiBUaGVzZSBmZWF0dXJlcyBhcmUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rICh0YyBxZGlzYykgYW5kIGludHJvZHVjZSBuZXcgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBsb2dpYyB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBvZmZsb2FkIHN1cHBvcnQgZm9yIENCUyBhbmQgTVFQUklPIHRyYWZmaWMgY29udHJvbCBpbiB0aGUgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEl0IHJlYWRzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgbmV0d29ya2luZyBjb3JlIGFuZCBwcm9ncmFtcyBoYXJkd2FyZSByZWdpc3RlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlIHZhcmlhYmxlcyBwYXNzZWQgYnkgcmVmZXJlbmNlIChgZW5hYmxlX2JpdGAsIGBpc19xdWV1ZV9hYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY2NGEyOWMzOWVlN2ZjNzU3ZTE3MjAyZGNmNTJhOWM3YmI4ZmM0ZmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDEyOjE4OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaAppbmRleCBhMTEwNTI1NjU0MzZhLi5kNWIyODQ1OWZkNzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaApAQCAtMTg0LDYgJiM0MzsxODQsOSBAQAogI2RlZmluZSBHRU1fRENGRzgJCTB4MDI5QyAvKiBEZXNpZ24gQ29uZmlnIDggKi8KICNkZWZpbmUgR0VNX0RDRkcxMAkJMHgwMkE0IC8qIERlc2lnbiBDb25maWcgMTAgKi8KICNkZWZpbmUgR0VNX0RDRkcxMgkJMHgwMkFDIC8qIERlc2lnbiBDb25maWcgMTIgKi8KJiM0MzsjZGVmaW5lIEdFTV9DQlNfQ09OVFJPTAkJMHgwNEJDIC8qIENCUyBDb250cm9sIFJlZ2lzdGVyICovCiYjNDM7I2RlZmluZSBHRU1fQ0JTX0lETEVTTE9QRV9RX0EJMHgwNEMwIC8qIENCUyBJZGxlU2xvcGUgUXVldWUgQSAqLwomIzQzOyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9CCTB4MDRDNCAvKiBDQlMgSWRsZVNsb3BlIFF1ZXVlIEIgKi8KICNkZWZpbmUgR0VNX0VOU1RfQ09OVFJPTAkweDA4ODAgLyogRU5TVCBjb250cm9sIHJlZ2lzdGVyICovCiAjZGVmaW5lIEdFTV9VU1hfQ09OVFJPTAkJMHgwQTgwIC8qIEhpZ2ggc3BlZWQgUENTIGNvbnRyb2wgcmVnaXN0ZXIgKi8KICNkZWZpbmUgR0VNX1VTWF9TVEFUVVMJCTB4MEE4OCAvKiBIaWdoIHNwZWVkIFBDUyBzdGF0dXMgcmVnaXN0ZXIgKi8KQEAgLTIyNCw2ICYjNDM7MjI3LDEyIEBACiAjZGVmaW5lIEdFTV9FTlNUX09OX1RJTUUoaHdfcSkJCSgweDA4MjAgJiM0MzsgKChod19xKSAmbHQ7Jmx0OyAyKSkKICNkZWZpbmUgR0VNX0VOU1RfT0ZGX1RJTUUoaHdfcSkJCSgweDA4NDAgJiM0MzsgKChod19xKSAmbHQ7Jmx0OyAyKSkKIAomIzQzOy8qIEJpdGZpZWxkcyBpbiBDQlNfQ09OVFJPTCAqLwomIzQzOyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9PRkZTRVQJMAomIzQzOyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9TSVpFCTEKJiM0MzsjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0JfT0ZGU0VUCTEKJiM0MzsjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0JfU0laRQkxCiYjNDM7CiAvKiBCaXRmaWVsZHMgaW4gRU5TVF9DT05UUk9MICovCiAjZGVmaW5lIEdFTV9FTlNUX0RJU0FCTEVfUVVFVUVfT0ZGU0VUCTE2CiAKQEAgLTc2OCw3ICYjNDM7Nzc3LDcgQEAKICNkZWZpbmUgTUFDQl9DQVBTX01JSU9OUkdNSUkJCQlCSVQoOSkKICNkZWZpbmUgTUFDQl9DQVBTX05FRURfVFNVQ0xLCQkJQklUKDEwKQogI2RlZmluZSBNQUNCX0NBUFNfUVVFVUVfRElTQUJMRQkJCUJJVCgxMSkKLSNkZWZpbmUgTUFDQl9DQVBTX1FCVgkJCQlCSVQoMTIpCiYjNDM7I2RlZmluZSBNQUNCX0NBUFNfVEMJCQkJQklUKDEyKQogI2RlZmluZSBNQUNCX0NBUFNfUENTCQkJCUJJVCgxMykKICNkZWZpbmUgTUFDQl9DQVBTX0hJR0hfU1BFRUQJCQlCSVQoMTQpCiAjZGVmaW5lIE1BQ0JfQ0FQU19DTEtfSFdfQ0hHCQkJQklUKDE1KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMKaW5kZXggZDM5NGYxZjQzYjY4NS4uYTBhNjg0OTA1MTllNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jCkBAIC05OSw2ICYjNDM7OTksMTAgQEAgc3RydWN0IHNpZml2ZV9mdTU0MF9tYWNiX21nbXQgewogCiAjZGVmaW5lIE1BQ0JfTURJT19USU1FT1VUCTEwMDAwMDAgLyogaW4gdXNlY3MgKi8KIAomIzQzOy8qIENCUyBwb3J0IHRyYW5zbWl0IHJhdGUgZmFjdG9yczogMTAwMC9pbnRlcmZhY2Vfd2lkdGggKi8KJiM0MzsjZGVmaW5lIE1BQ0JfQ0JTX1BPUlRfUkFURV8xRwkJMTI1CS8qIDEwMDAvOCBmb3IgR01JSSAoOC1iaXQpICovCiYjNDM7I2RlZmluZSBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTQkyNTAJLyogMTAwMC80IGZvciBNSUkgKDQtYml0KSAqLwomIzQzOwogLyogRE1BIGJ1ZmZlciBkZXNjcmlwdG9yIG1pZ2h0IGJlIGRpZmZlcmVudCBzaXplCiAgKiBkZXBlbmRzIG9uIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb246CiAgKgpAQCAtNDQ5OSwxOCAmIzQzOzQ1MDMsOCBAQCBzdGF0aWMgdm9pZCBtYWNiX3RhcHJpb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogc3RhdGljIGludCBtYWNiX3NldHVwX3RhcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAkJCSAgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnRhcHJpbykKIHsKLQlzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlpbnQgZXJyID0gMDsKIAotCWlmICh1bmxpa2VseSghKG5kZXYtJmd0O2h3X2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfVEMpKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JLyogQ2hlY2sgaWYgRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZCAqLwotCWlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZCgmYW1wO2JwLSZndDtwZGV2LSZndDtkZXYpKSkgewotCQluZXRkZXZfZXJyKG5kZXYsICYjMzQ7RGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxuJiMzNDspOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCiAJc3dpdGNoICh0YXByaW8tJmd0O2NtZCkgewogCWNhc2UgVEFQUklPX0NNRF9SRVBMQUNFOgogCQllcnIgPSBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKG5kZXYsIHRhcHJpbyk7CkBAIC00NTI1LDEzICYjNDM7NDUxOSwyMDIgQEAgc3RhdGljIGludCBtYWNiX3NldHVwX3RhcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RhdGljIGludCBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKHN0cnVjdCBtYWNiICpicCwgdTggcXVldWVfbnVtLAomIzQzOwkJCQkgICAgIHUzMiAqZW5hYmxlX2JpdCwgYm9vbCAqaXNfcXVldWVfYSkKJiM0Mzt7CiYjNDM7CS8qIFF1ZXVlIEEgaXMgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDEpICovCiYjNDM7CWlmIChxdWV1ZV9udW0gPT0gYnAtJmd0O251bV9xdWV1ZXMgLSAxKSB7CiYjNDM7CQkqZW5hYmxlX2JpdCA9IEdFTV9CSVQoQ0JTX0VOQUJMRV9RVUVVRV9BKTsKJiM0MzsJCSppc19xdWV1ZV9hID0gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFF1ZXVlIEIgaXMgc2Vjb25kIGhpZ2hlc3QgcHJpb3JpdHkgKG51bV9xdWV1ZXMgLSAyKSAqLwomIzQzOwlpZiAocXVldWVfbnVtID09IGJwLSZndDtudW1fcXVldWVzIC0gMikgewomIzQzOwkJKmVuYWJsZV9iaXQgPSBHRU1fQklUKENCU19FTkFCTEVfUVVFVUVfQik7CiYjNDM7CQkqaXNfcXVldWVfYSA9IGZhbHNlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWFjYl9jYnNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAomIzQzOwkJCXN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KQomIzQzO3sKJiM0MzsJdTMyIGVuYWJsZV9iaXQsIGlkbGVzbG9wZSwgc3BlZWRfa2JwcywgY3RybDsKJiM0MzsJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CXN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQ7CiYjNDM7CWJvb2wgaXNfcXVldWVfYTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtcyhicCwgcW9wdC0mZ3Q7cXVldWUsICZhbXA7ZW5hYmxlX2JpdCwgJmFtcDtpc19xdWV1ZV9hKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O0NCUzogUXVldWUgJWQgbm90IGVsaWdpYmxlIChvbmx5IHRvcCAyIHF1ZXVlcyBzdXBwb3J0IENCUylcbiYjMzQ7LAomIzQzOwkJCSAgIHFvcHQtJmd0O3F1ZXVlKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGlkbGVzbG9wZSBpcyBjYWxpYnJhdGVkIGZvciB0aGUgY3VycmVudCBsaW5rIHNwZWVkOyBDQlMgaXMgbm90CiYjNDM7CSAqIHJlcHJvZ3JhbW1lZCBvbiBsaW5rLXNwZWVkIGNoYW5nZXMsIHNvIGl0IG11c3QgYmUgcmVjb25maWd1cmVkCiYjNDM7CSAqIGlmIHRoZSBsaW5rIHNwZWVkIGNoYW5nZXMuCiYjNDM7CSAqLwomIzQzOwlwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldChicC0mZ3Q7cGh5bGluaywgJmFtcDtrc2V0KTsKJiM0MzsKJiM0MzsJaWYgKCFrc2V0LmJhc2Uuc3BlZWQgfHwga3NldC5iYXNlLnNwZWVkID09IFNQRUVEX1VOS05PV04pIHsKJiM0MzsJCW5ldGRldl9lcnIobmRldiwgJiMzNDtDQlM6IEludmFsaWQgbGluayBzcGVlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3BlZWRfa2JwcyA9IGtzZXQuYmFzZS5zcGVlZCAqIDEwMDA7CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtpZGxlc2xvcGUgJmx0Oz0gMCB8fCAodTMyKXFvcHQtJmd0O2lkbGVzbG9wZSAmZ3Q7IHNwZWVkX2ticHMpIHsKJiM0MzsJCW5ldGRldl9lcnIobmRldiwgJiMzNDtDQlM6IGludmFsaWQgaWRsZXNsb3BlICVkIChtdXN0IGJlIDEuLiV1IGticHMpXG4mIzM0OywKJiM0MzsJCQkgICBxb3B0LSZndDtpZGxlc2xvcGUsIHNwZWVkX2ticHMpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ2FsY3VsYXRlIGlkbGVzbG9wZSBmb3IgaGFyZHdhcmUgcmVnaXN0ZXI6CiYjNDM7CSAqIC0gSGlnaC1zcGVlZCBHRU06IHNjYWxlIHRvIGZ1bGwgMzItYml0IHJlZ2lzdGVyIHJhbmdlCiYjNDM7CSAqIC0gU3RhbmRhcmQgTUFDQjogbXVsdGlwbHkgYnkgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvcgomIzQzOwkgKi8KJiM0MzsJaWYgKGJwLSZndDtjYXBzICZhbXA7IE1BQ0JfQ0FQU19ISUdIX1NQRUVEKQomIzQzOwkJaWRsZXNsb3BlID0gRElWX1JPVU5EX1VQX1VMTCgodTY0KXFvcHQtJmd0O2lkbGVzbG9wZSAqIFUzMl9NQVgsIHNwZWVkX2ticHMpOwomIzQzOwllbHNlCiYjNDM7CQlpZGxlc2xvcGUgPSAodTMyKXFvcHQtJmd0O2lkbGVzbG9wZSAqIChrc2V0LmJhc2Uuc3BlZWQgJmd0Oz0gMTAwMCA/CiYjNDM7CQkJCQkgICAgICAgTUFDQl9DQlNfUE9SVF9SQVRFXzFHIDogTUFDQl9DQlNfUE9SVF9SQVRFXzEwXzEwME0pOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDticC0mZ3Q7bG9jaykgewomIzQzOwkJLyogRGlzYWJsZSBDQlMgZm9yIHRoZSBxdWV1ZSBiZWZvcmUgdXBkYXRpbmcgaWRsZXNsb3BlICovCiYjNDM7CQljdHJsID0gZ2VtX3JlYWRsKGJwLCBDQlNfQ09OVFJPTCkgJmFtcDsgfmVuYWJsZV9iaXQ7CiYjNDM7CQlnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCk7CiYjNDM7CQkvKiBVcGRhdGUgaWRsZXNsb3BlIGZvciB0aGUgcXVldWUgKi8KJiM0MzsJCWlmIChpc19xdWV1ZV9hKQomIzQzOwkJCWdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9BLCBpZGxlc2xvcGUpOwomIzQzOwkJZWxzZQomIzQzOwkJCWdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9CLCBpZGxlc2xvcGUpOwomIzQzOwomIzQzOwkJLyogUmUtZW5hYmxlIENCUyBmb3IgdGhlIHF1ZXVlIHdpdGggbmV3IGlkbGVzbG9wZSAqLwomIzQzOwkJZ2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGN0cmwgfCBlbmFibGVfYml0KTsKJiM0MzsJfQomIzQzOwomIzQzOwluZXRkZXZfZGJnKG5kZXYsICYjMzQ7Q0JTOiBDb25maWd1cmVkIHF1ZXVlICVkIHdpdGggaWRsZXNsb3BlIDB4JXhcbiYjMzQ7LAomIzQzOwkJICAgcW9wdC0mZ3Q7cXVldWUsIGlkbGVzbG9wZSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtYWNiX2Nic19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1OCBxdWV1ZV9udW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJYm9vbCBpc19xdWV1ZV9hOwomIzQzOwl1MzIgZW5hYmxlX2JpdDsKJiM0MzsKJiM0MzsJaWYgKG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoYnAsIHF1ZXVlX251bSwgJmFtcDtlbmFibGVfYml0LCAmYW1wO2lzX3F1ZXVlX2EpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDticC0mZ3Q7bG9jaykgewomIzQzOwkJZ2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGdlbV9yZWFkbChicCwgQ0JTX0NPTlRST0wpICZhbXA7IH5lbmFibGVfYml0KTsKJiM0MzsJCWlmIChpc19xdWV1ZV9hKQomIzQzOwkJCWdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9BLCAwKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlnZW1fd3JpdGVsKGJwLCBDQlNfSURMRVNMT1BFX1FfQiwgMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0ZGV2X2RiZyhuZGV2LCAmIzM0O0NCUzogRGlzYWJsZWQgcXVldWUgJWRcbiYjMzQ7LCBxdWV1ZV9udW0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1hY2Jfc2V0dXBfY2JzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAomIzQzOwkJCSAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpCiYjNDM7ewomIzQzOwlpZiAocW9wdC0mZ3Q7ZW5hYmxlKQomIzQzOwkJcmV0dXJuIG1hY2JfY2JzX2FkZChuZGV2LCBxb3B0KTsKJiM0MzsKJiM0MzsJbWFjYl9jYnNfZGVzdHJveShuZGV2LCBxb3B0LSZndDtxdWV1ZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1hY2Jfc2V0dXBfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAomIzQzOwkJCSAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwl1OCBudW1fdGMgPSBxb3B0LSZndDtudW1fdGM7CiYjNDM7CWludCBlcnI7CiYjNDM7CXU4IGk7CiYjNDM7CiYjNDM7CS8qIEhhbmRsZSByZXNldCBjYXNlIGVhcmx5ICovCiYjNDM7CWlmICghbnVtX3RjKSB7CiYjNDM7CQluZXRkZXZfcmVzZXRfdGMobmRldik7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzc2VzICovCiYjNDM7CXFvcHQtJmd0O2h3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTOwomIzQzOwomIzQzOwllcnIgPSBuZXRkZXZfc2V0X251bV90YyhuZGV2LCBudW1fdGMpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV90YzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IG5ldGRldl9zZXRfdGNfcXVldWUobmRldiwgaSwgcW9wdC0mZ3Q7Y291bnRbaV0sCiYjNDM7CQkJCQkgIHFvcHQtJmd0O29mZnNldFtpXSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZXJyX3Jlc2V0X3RjOwomIzQzOwomIzQzOwkJbmV0ZGV2X2RiZyhuZGV2LCAmIzM0O01RUFJJTzogVEMlZCAtJmd0OyBxdWV1ZSAldSAoY291bnQ9JXUpXG4mIzM0OywKJiM0MzsJCQkgICBpLCBxb3B0LSZndDtvZmZzZXRbaV0sIHFvcHQtJmd0O2NvdW50W2ldKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcmVzZXRfdGM6CiYjNDM7CW5ldGRldl9yZXNldF90YyhuZGV2KTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtYWNiX3RjX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChiYXNlLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOiB7CiYjNDM7CQlzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLSZndDtjYXBzOwomIzQzOwomIzQzOwkJY2Fwcy0mZ3Q7dmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiAJCQkgdm9pZCAqdHlwZV9kYXRhKQogewomIzQzOwlzdHJ1Y3QgbWFjYiAqYnA7CiYjNDM7CiAJaWYgKCFkZXYgfHwgIXR5cGVfZGF0YSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKHR5cGUgPT0gVENfUVVFUllfQ0FQUykKJiM0MzsJCXJldHVybiBtYWNiX3RjX3F1ZXJ5X2NhcHMoZGV2LCB0eXBlX2RhdGEpOwomIzQzOwomIzQzOwlicCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghKGRldi0mZ3Q7aHdfZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9IV19UQykpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkvKiBDaGVjayBpZiBEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kICovCiYjNDM7CWlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZCgmYW1wO2JwLSZndDtwZGV2LSZndDtkZXYpKSkgewomIzQzOwkJbmV0ZGV2X2VycihkZXYsICYjMzQ7RGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOgomIzQzOwkJcmV0dXJuIG1hY2Jfc2V0dXBfbXFwcmlvKGRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9RRElTQ19DQlM6CiYjNDM7CQlyZXR1cm4gbWFjYl9zZXR1cF9jYnMoZGV2LCB0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfUURJU0NfVEFQUklPOgogCQlyZXR1cm4gbWFjYl9zZXR1cF90YXByaW8oZGV2LCB0eXBlX2RhdGEpOwogCWRlZmF1bHQ6CkBAIC00ODQ2LDggJiM0Mzs1MDI5LDggQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQlkZXYtJmd0O2h3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNOwogCWlmIChicC0mZ3Q7Y2FwcyAmYW1wOyBNQUNCX0NBUFNfU0dfRElTQUJMRUQpCiAJCWRldi0mZ3Q7aHdfZmVhdHVyZXMgJmFtcDs9IH5ORVRJRl9GX1NHOwotCS8qIEVuYWJsZSBIV19UQyBpZiBoYXJkd2FyZSBzdXBwb3J0cyBRQlYgKi8KLQlpZiAoYnAtJmd0O2NhcHMgJmFtcDsgTUFDQl9DQVBTX1FCVikKJiM0MzsJLyogRW5hYmxlIFRDIG9mZmxvYWQgZm9yIFRTTi1jYXBhYmxlIGhhcmR3YXJlICovCiYjNDM7CWlmIChicC0mZ3Q7Y2FwcyAmYW1wOyBNQUNCX0NBUFNfVEMpCiAJCWRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQzsKIAogCWRldi0mZ3Q7ZmVhdHVyZXMgPSBkZXYtJmd0O2h3X2ZlYXR1cmVzOwpAQCAtNTY3OCw3ICYjNDM7NTg2MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgdmVyc2FsX2NvbmZpZyA9IHsKIAkuY2FwcyA9IE1BQ0JfQ0FQU19HSUdBQklUX01PREVfQVZBSUxBQkxFIHwgTUFDQl9DQVBTX0pVTUJPIHwKIAkJTUFDQl9DQVBTX0dFTV9IQVNfUFRQIHwgTUFDQl9DQVBTX0JEX1JEX1BSRUZFVENIIHwKIAkJTUFDQl9DQVBTX05FRURfVFNVQ0xLIHwgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEUgfAotCQlNQUNCX0NBUFNfUUJWIHwKJiM0MzsJCU1BQ0JfQ0FQU19UQyB8CiAJCU1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLAogCS5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsCiAJLmluaXQgPSBpbml0X3Jlc2V0X29wdGlvbmFsLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc2OAoJCQkJCQkJb3V0cHV0OiAxNTAKCQkJCQkJCXRob3VnaHRzOiAxMTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IENhZGVuY2UgTUFDQiBFdGhlcm5ldCBEcml2ZXIgVHJhZmZpYyBDb250cm9sIE9mZmxvYWRzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgYWRkaW5nIENCUyAoQ3JlZGl0LUJhc2VkIFNoYXBlcikgYW5kIE1RUFJJTyB0cmFmZmljIGNvbnRyb2wgb2ZmbG9hZCBzdXBwb3J0IHRvIHRoZSBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyLiBFc3NlbnRpYWxseSwgaXQgaW50cm9kdWNlcyBmdW5jdGlvbnMgbGlrZSBgbWFjYl9zZXR1cF9jYnNgIGFuZCBgbWFjYl9zZXR1cF9tcXByaW9gLCBjYWxsZWQgZnJvbSBgbWFjYl9zZXR1cF90Y2AsIGFuZCBhbHNvIGFkZHMgYG1hY2JfdGNfcXVlcnlfY2Fwc2AuIE15IHByaW1hcnkgY29uY2VybiB3aXRoIHRoZXNlIHR5cGVzIG9mIHBhdGNoZXMgaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgZGF0YSBmbG93LgoKSSBzZWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHN0cnVjdHVyZXMgbGlrZSBgdGNfY2JzX3FvcHRfb2ZmbG9hZGAsIGB0Y19tcXByaW9fcW9wdF9vZmZsb2FkYCwgYW5kIGB0Y19xdWVyeV9jYXBzX2Jhc2VgLiBUaGVzZSBhcmUgcGFzc2VkIHRvIHRoZSBkcml2ZXIgZnVuY3Rpb25zIGZyb20gdGhlIG5ldHdvcmtpbmcgY29yZSwgdGhpbmdzIGxpa2UgYHRjX3NldHVwX2NiX2NhbGxgLCBgdGNfc2V0dXBfcWRpc2NfY2JzYCwgZXRjLiBUaGUgbmV0d29ya2luZyBjb3JlLCBzcGVjaWZpY2FsbHkgYG5ldC9zY2hlZC9zY2hfY2JzLmNgIGFuZCBgbmV0L3NjaGVkL3NjaF9tcXByaW8uY2AsIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGFuZCBwb3B1bGF0aW5nIHRoZXNlIHN0cnVjdHVyZXMuCgpOb3csIHRoZSBkcml2ZXIgKnJlYWRzKiBmcm9tIHRoZXNlIHN0cnVjdHVyZXMgdG8gY29uZmlndXJlIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIEltcG9ydGFudGx5LCBpdCBkb2VzbiYjMzk7dCB3cml0ZSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIGJhY2sgaW50byB0aGVzZSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgdGhlbiBiZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gT2theSwgd2FpdCwgYG1hY2JfdGNfcXVlcnlfY2Fwc2AgZG9lcyB3cml0ZSB0byBgYmFzZS0mZ3Q7Y2Fwc2AuLi4gYnV0IHRoaXMgaXMgc3RhbmRhcmQgZm9yIGBUQ19RVUVSWV9DQVBTYCwgYW5kIHRoZSBgY2Fwc2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBieSB0aGUgY2FsbGVyIChlLmcuLCBpbiBgbXFwcmlvX2luaXRgKSBhbmQgbm90IGNvcGllZCBkaXJlY3RseSB0byB1c2VyIHNwYWNlLiBJdCYjMzk7cyB1c2VkIGludGVybmFsbHkgZm9yIHZhbGlkYXRpb24gb2YgdXNlciBpbnB1dC4gTm8gaXNzdWUgdGhlcmUuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgZGF0YSBiZWluZyByZWFkIG1vcmUgY2xvc2VseS4gSW4gYG1hY2Jfc2V0dXBfY2JzYCwgaXQgcmVhZHMgYHFvcHQtJmd0O3F1ZXVlYCwgYHFvcHQtJmd0O2lkbGVzbG9wZWAsIGFuZCBgcW9wdC0mZ3Q7ZW5hYmxlYC4gVGhlbiBpdCBjYWxjdWxhdGVzIGFuZCB3cml0ZXMgdG8gaGFyZHdhcmUgcmVnaXN0ZXJzLiBJbiBgbWFjYl9zZXR1cF9tcXByaW9gLCBpdCByZWFkcyBgbXFwcmlvLSZndDtxb3B0Lm51bV90Y2AsIGBtcXByaW8tJmd0O3FvcHQuY291bnRbaV1gLCBhbmQgYG1xcHJpby0mZ3Q7cW9wdC5vZmZzZXRbaV1gLCBhbmQgaXQgY2FsbHMgYG5ldGRldl9zZXRfbnVtX3RjYCBhbmQgYG5ldGRldl9zZXRfdGNfcXVldWVgLgoKQ3J1Y2lhbGx5LCB0aGVyZSBpcyBubyBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCB1c2VyLXNwYWNlIGJ1ZmZlcnMsIGFuZCBubyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgY29waWVkICp0byogdXNlciBzcGFjZS4gTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCB3aGVyZSB3ZSBtaWdodCBpbmFkdmVydGVudGx5IHJlYWQgdW5pbml0aWFsaXplZCBmaWVsZHMgbGF0ZXIuIEkgYWxzbyBkb24mIzM5O3Qgc2VlIGFueSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aCBtb2RpZmljYXRpb25zIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSBleGlzdGluZyBidWZmZXJzLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggaXMgc3RyaWN0bHkgYWJvdXQgYWRkaW5nIGhhcmR3YXJlIG9mZmxvYWQgc3VwcG9ydC4gQW55IGJ1Z3Mgd291bGQgbGlrZWx5IGJlIGxvZ2ljIGVycm9ycywgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzZXMgKGVzcGVjaWFsbHkgd2l0aCBgbnVtX3RjYCwgYnV0IGNvcmUgbmV0d29ya2luZyBzZWVtcyB0byB2YWxpZGF0ZSB0aG9zZSksIG9yIG1pc2NvbmZpZ3VyYXRpb24gb2YgdGhlIGhhcmR3YXJlLiBUaGVzZSBkb24mIzM5O3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4KCkdpdmVuIHRoYXQsIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHByb2JsZW1zLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtc2A6IFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRvIGAqZW5hYmxlX2JpdGAgYW5kIGAqaXNfcXVldWVfYWAgaWYgaXQgcmV0dXJucyAwLiBJIHNlZSB0aGF0IHRoZXJlIGFyZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGluIGBtYWNiX2Nic19hZGRgLCBhbmQgaW4gYG1hY2JfY2JzX2Rlc3Ryb3lgLiBUaGVyZSBpcyBhbHNvIGFuIGVycm9yIGNoZWNrLiBUaGUgY2FsbHMgaW4gdGhvc2UgZnVuY3Rpb25zIGNoZWNrIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgMCwgc28gYm90aCBvZiB0aG9zZSB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGV5IGFyZSByZWFkLgoKU28sICpkZWZpbml0ZWx5KiBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlIHRoZXJlLgoKKipDb25jbHVzaW9uOiBOZWVkc0tNU0FOID0gZmFsc2UuKioKCioqUmVhc29uaW5nOioqIFRoaXMgcGF0Y2ggYWRkcyBoYXJkd2FyZSBvZmZsb2FkIHN1cHBvcnQgZm9yIENCUyBhbmQgTVFQUklPIHRyYWZmaWMgY29udHJvbCBpbiB0aGUgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEl0IHJlYWRzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgbmV0d29ya2luZyBjb3JlIGFuZCBwcm9ncmFtcyBoYXJkd2FyZSByZWdpc3RlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gUG90ZW50aWFsIG1lbW9yeSBlcnJvcnMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd2lsbCBiZSBjYXVnaHQgYnkgS0FTQU4uIFdlIGFyZSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIG9mZmxvYWQgc3VwcG9ydCBmb3IgQ0JTIGFuZCBNUVBSSU8gdHJhZmZpYyBjb250cm9sIGluIHRoZSBNQUNCIGV0aGVybmV0IGRyaXZlci4gSXQgcmVhZHMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHByb3ZpZGVkIGJ5IHRoZSBuZXR3b3JraW5nIGNvcmUgYW5kIHByb2dyYW1zIGhhcmR3YXJlIHJlZ2lzdGVycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgbGVha2VkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgdmFyaWFibGVzIHBhc3NlZCBieSByZWZlcmVuY2UgKGBlbmFibGVfYml0YCwgYGlzX3F1ZXVlX2FgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0IGZvciBDQlMgYW5kIE1RUFJJTyB0cmFmZmljIGNvbnRyb2wgaW4gdGhlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyLiBJdCByZWFkcyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgdGhlIG5ldHdvcmtpbmcgY29yZSBhbmQgcHJvZ3JhbXMgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSB2YXJpYWJsZXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSAoYGVuYWJsZV9iaXRgLCBgaXNfcXVldWVfYWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBlcnJvcnMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxODozNC45NDQ4MDEzODRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzQ2MjM3MjIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0NBREVOQ0VcIixcbiAgICBcIk1BQ0JcIixcbiAgICBcIk1BQ0JfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFjYl9zZXR1cF9jYnNcIixcbiAgICBcIm1hY2JfY2JzX2FkZFwiLFxuICAgIFwibWFjYl9jYnNfZGVzdHJveVwiLFxuICAgIFwibWFjYl9zZXR1cF9tcXByaW9cIixcbiAgICBcIm1hY2JfdGNfcXVlcnlfY2Fwc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBvZmZsb2FkIHN1cHBvcnQgZm9yIENCUyBhbmQgTVFQUklPIHRyYWZmaWMgY29udHJvbCBpbiB0aGUgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEl0IHJlYWRzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgbmV0d29ya2luZyBjb3JlIGFuZCBwcm9ncmFtcyBoYXJkd2FyZSByZWdpc3RlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlIHZhcmlhYmxlcyBwYXNzZWQgYnkgcmVmZXJlbmNlIChgZW5hYmxlX2JpdGAsIGBpc19xdWV1ZV9hYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBDQlMgKENyZWRpdC1CYXNlZCBTaGFwZXIpIGFuZCBNUVBSSU8gKE11bHRpcGxlIFF1ZXVlIFByaW9yaXR5KSB0cmFmZmljIGNvbnRyb2wgb2ZmbG9hZHMgdG8gdGhlIENhZGVuY2UgTUFDQiBFdGhlcm5ldCBkcml2ZXIuIFRoZXNlIGZlYXR1cmVzIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgKHRjIHFkaXNjKSBhbmQgaW50cm9kdWNlIG5ldyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGxvZ2ljIHRoYXQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6MzQuOTQ0ODA3Njc0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTQzNDI3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2NjRhMjljMzllZTdmYzc1N2UxNzIwMmRjZjUyYTljN2JiOGZjNGZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTI6MTg6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaFxcbmluZGV4IGExMTA1MjU2NTQzNmEuLmQ1YjI4NDU5ZmQ3NWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaFxcbkBAIC0xODQsNiArMTg0LDkgQEBcXG4gI2RlZmluZSBHRU1fRENGRzhcXHRcXHQweDAyOUMgLyogRGVzaWduIENvbmZpZyA4ICovXFxuICNkZWZpbmUgR0VNX0RDRkcxMFxcdFxcdDB4MDJBNCAvKiBEZXNpZ24gQ29uZmlnIDEwICovXFxuICNkZWZpbmUgR0VNX0RDRkcxMlxcdFxcdDB4MDJBQyAvKiBEZXNpZ24gQ29uZmlnIDEyICovXFxuKyNkZWZpbmUgR0VNX0NCU19DT05UUk9MXFx0XFx0MHgwNEJDIC8qIENCUyBDb250cm9sIFJlZ2lzdGVyICovXFxuKyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9BXFx0MHgwNEMwIC8qIENCUyBJZGxlU2xvcGUgUXVldWUgQSAqL1xcbisjZGVmaW5lIEdFTV9DQlNfSURMRVNMT1BFX1FfQlxcdDB4MDRDNCAvKiBDQlMgSWRsZVNsb3BlIFF1ZXVlIEIgKi9cXG4gI2RlZmluZSBHRU1fRU5TVF9DT05UUk9MXFx0MHgwODgwIC8qIEVOU1QgY29udHJvbCByZWdpc3RlciAqL1xcbiAjZGVmaW5lIEdFTV9VU1hfQ09OVFJPTFxcdFxcdDB4MEE4MCAvKiBIaWdoIHNwZWVkIFBDUyBjb250cm9sIHJlZ2lzdGVyICovXFxuICNkZWZpbmUgR0VNX1VTWF9TVEFUVVNcXHRcXHQweDBBODggLyogSGlnaCBzcGVlZCBQQ1Mgc3RhdHVzIHJlZ2lzdGVyICovXFxuQEAgLTIyNCw2ICsyMjcsMTIgQEBcXG4gI2RlZmluZSBHRU1fRU5TVF9PTl9USU1FKGh3X3EpXFx0XFx0KDB4MDgyMCArICgoaHdfcSkgXFx1MDAzY1xcdTAwM2MgMikpXFxuICNkZWZpbmUgR0VNX0VOU1RfT0ZGX1RJTUUoaHdfcSlcXHRcXHQoMHgwODQwICsgKChod19xKSBcXHUwMDNjXFx1MDAzYyAyKSlcXG4gXFxuKy8qIEJpdGZpZWxkcyBpbiBDQlNfQ09OVFJPTCAqL1xcbisjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0FfT0ZGU0VUXFx0MFxcbisjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0FfU0laRVxcdDFcXG4rI2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9CX09GRlNFVFxcdDFcXG4rI2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9CX1NJWkVcXHQxXFxuK1xcbiAvKiBCaXRmaWVsZHMgaW4gRU5TVF9DT05UUk9MICovXFxuICNkZWZpbmUgR0VNX0VOU1RfRElTQUJMRV9RVUVVRV9PRkZTRVRcXHQxNlxcbiBcXG5AQCAtNzY4LDcgKzc3Nyw3IEBAXFxuICNkZWZpbmUgTUFDQl9DQVBTX01JSU9OUkdNSUlcXHRcXHRcXHRCSVQoOSlcXG4gI2RlZmluZSBNQUNCX0NBUFNfTkVFRF9UU1VDTEtcXHRcXHRcXHRCSVQoMTApXFxuICNkZWZpbmUgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEVcXHRcXHRcXHRCSVQoMTEpXFxuLSNkZWZpbmUgTUFDQl9DQVBTX1FCVlxcdFxcdFxcdFxcdEJJVCgxMilcXG4rI2RlZmluZSBNQUNCX0NBUFNfVENcXHRcXHRcXHRcXHRCSVQoMTIpXFxuICNkZWZpbmUgTUFDQl9DQVBTX1BDU1xcdFxcdFxcdFxcdEJJVCgxMylcXG4gI2RlZmluZSBNQUNCX0NBUFNfSElHSF9TUEVFRFxcdFxcdFxcdEJJVCgxNClcXG4gI2RlZmluZSBNQUNCX0NBUFNfQ0xLX0hXX0NIR1xcdFxcdFxcdEJJVCgxNSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG5pbmRleCBkMzk0ZjFmNDNiNjg1Li5hMGE2ODQ5MDUxOWU0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXFxuQEAgLTk5LDYgKzk5LDEwIEBAIHN0cnVjdCBzaWZpdmVfZnU1NDBfbWFjYl9tZ210IHtcXG4gXFxuICNkZWZpbmUgTUFDQl9NRElPX1RJTUVPVVRcXHQxMDAwMDAwIC8qIGluIHVzZWNzICovXFxuIFxcbisvKiBDQlMgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvcnM6IDEwMDAvaW50ZXJmYWNlX3dpZHRoICovXFxuKyNkZWZpbmUgTUFDQl9DQlNfUE9SVF9SQVRFXzFHXFx0XFx0MTI1XFx0LyogMTAwMC84IGZvciBHTUlJICg4LWJpdCkgKi9cXG4rI2RlZmluZSBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTVxcdDI1MFxcdC8qIDEwMDAvNCBmb3IgTUlJICg0LWJpdCkgKi9cXG4rXFxuIC8qIERNQSBidWZmZXIgZGVzY3JpcHRvciBtaWdodCBiZSBkaWZmZXJlbnQgc2l6ZVxcbiAgKiBkZXBlbmRzIG9uIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb246XFxuICAqXFxuQEAgLTQ0OTksMTggKzQ1MDMsOCBAQCBzdGF0aWMgdm9pZCBtYWNiX3RhcHJpb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICp0YXByaW8pXFxuIHtcXG4tXFx0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KCEobmRldi1cXHUwMDNlaHdfZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1RDKSkpXFxuLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tXFxuLVxcdC8qIENoZWNrIGlmIERldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmQgKi9cXG4tXFx0aWYgKHVubGlrZWx5KHBtX3J1bnRpbWVfc3VzcGVuZGVkKFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KSkpIHtcXG4tXFx0XFx0bmV0ZGV2X2VycihuZGV2LCBcXFwiRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tXFx0fVxcbi1cXG4gXFx0c3dpdGNoICh0YXByaW8tXFx1MDAzZWNtZCkge1xcbiBcXHRjYXNlIFRBUFJJT19DTURfUkVQTEFDRTpcXG4gXFx0XFx0ZXJyID0gbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShuZGV2LCB0YXByaW8pO1xcbkBAIC00NTI1LDEzICs0NTE5LDIwMiBAQCBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoc3RydWN0IG1hY2IgKmJwLCB1OCBxdWV1ZV9udW0sXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyICplbmFibGVfYml0LCBib29sICppc19xdWV1ZV9hKVxcbit7XFxuK1xcdC8qIFF1ZXVlIEEgaXMgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDEpICovXFxuK1xcdGlmIChxdWV1ZV9udW0gPT0gYnAtXFx1MDAzZW51bV9xdWV1ZXMgLSAxKSB7XFxuK1xcdFxcdCplbmFibGVfYml0ID0gR0VNX0JJVChDQlNfRU5BQkxFX1FVRVVFX0EpO1xcbitcXHRcXHQqaXNfcXVldWVfYSA9IHRydWU7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBRdWV1ZSBCIGlzIHNlY29uZCBoaWdoZXN0IHByaW9yaXR5IChudW1fcXVldWVzIC0gMikgKi9cXG4rXFx0aWYgKHF1ZXVlX251bSA9PSBicC1cXHUwMDNlbnVtX3F1ZXVlcyAtIDIpIHtcXG4rXFx0XFx0KmVuYWJsZV9iaXQgPSBHRU1fQklUKENCU19FTkFCTEVfUVVFVUVfQik7XFxuK1xcdFxcdCppc19xdWV1ZV9hID0gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gLUVJTlZBTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtYWNiX2Nic19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuK1xcdFxcdFxcdHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KVxcbit7XFxuK1xcdHUzMiBlbmFibGVfYml0LCBpZGxlc2xvcGUsIHNwZWVkX2ticHMsIGN0cmw7XFxuK1xcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBrc2V0O1xcbitcXHRib29sIGlzX3F1ZXVlX2E7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKGJwLCBxb3B0LVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmVuYWJsZV9iaXQsIFxcdTAwMjZpc19xdWV1ZV9hKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJDQlM6IFF1ZXVlICVkIG5vdCBlbGlnaWJsZSAob25seSB0b3AgMiBxdWV1ZXMgc3VwcG9ydCBDQlMpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBxb3B0LVxcdTAwM2VxdWV1ZSk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHQvKiBpZGxlc2xvcGUgaXMgY2FsaWJyYXRlZCBmb3IgdGhlIGN1cnJlbnQgbGluayBzcGVlZDsgQ0JTIGlzIG5vdFxcbitcXHQgKiByZXByb2dyYW1tZWQgb24gbGluay1zcGVlZCBjaGFuZ2VzLCBzbyBpdCBtdXN0IGJlIHJlY29uZmlndXJlZFxcbitcXHQgKiBpZiB0aGUgbGluayBzcGVlZCBjaGFuZ2VzLlxcbitcXHQgKi9cXG4rXFx0cGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQoYnAtXFx1MDAzZXBoeWxpbmssIFxcdTAwMjZrc2V0KTtcXG4rXFxuK1xcdGlmICgha3NldC5iYXNlLnNwZWVkIHx8IGtzZXQuYmFzZS5zcGVlZCA9PSBTUEVFRF9VTktOT1dOKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcIkNCUzogSW52YWxpZCBsaW5rIHNwZWVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHNwZWVkX2ticHMgPSBrc2V0LmJhc2Uuc3BlZWQgKiAxMDAwO1xcbitcXG4rXFx0aWYgKHFvcHQtXFx1MDAzZWlkbGVzbG9wZSBcXHUwMDNjPSAwIHx8ICh1MzIpcW9wdC1cXHUwMDNlaWRsZXNsb3BlIFxcdTAwM2Ugc3BlZWRfa2Jwcykge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJDQlM6IGludmFsaWQgaWRsZXNsb3BlICVkIChtdXN0IGJlIDEuLiV1IGticHMpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBxb3B0LVxcdTAwM2VpZGxlc2xvcGUsIHNwZWVkX2ticHMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogQ2FsY3VsYXRlIGlkbGVzbG9wZSBmb3IgaGFyZHdhcmUgcmVnaXN0ZXI6XFxuK1xcdCAqIC0gSGlnaC1zcGVlZCBHRU06IHNjYWxlIHRvIGZ1bGwgMzItYml0IHJlZ2lzdGVyIHJhbmdlXFxuK1xcdCAqIC0gU3RhbmRhcmQgTUFDQjogbXVsdGlwbHkgYnkgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvclxcbitcXHQgKi9cXG4rXFx0aWYgKGJwLVxcdTAwM2VjYXBzIFxcdTAwMjYgTUFDQl9DQVBTX0hJR0hfU1BFRUQpXFxuK1xcdFxcdGlkbGVzbG9wZSA9IERJVl9ST1VORF9VUF9VTEwoKHU2NClxb3B0LVxcdTAwM2VpZGxlc2xvcGUgKiBVMzJfTUFYLCBzcGVlZF9rYnBzKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRpZGxlc2xvcGUgPSAodTMyKXFvcHQtXFx1MDAzZWlkbGVzbG9wZSAqIChrc2V0LmJhc2Uuc3BlZWQgXFx1MDAzZT0gMTAwMCA/XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBNQUNCX0NCU19QT1JUX1JBVEVfMUcgOiBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTSk7XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNmJwLVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdC8qIERpc2FibGUgQ0JTIGZvciB0aGUgcXVldWUgYmVmb3JlIHVwZGF0aW5nIGlkbGVzbG9wZSAqL1xcbitcXHRcXHRjdHJsID0gZ2VtX3JlYWRsKGJwLCBDQlNfQ09OVFJPTCkgXFx1MDAyNiB+ZW5hYmxlX2JpdDtcXG4rXFx0XFx0Z2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGN0cmwpO1xcbitcXHRcXHQvKiBVcGRhdGUgaWRsZXNsb3BlIGZvciB0aGUgcXVldWUgKi9cXG4rXFx0XFx0aWYgKGlzX3F1ZXVlX2EpXFxuK1xcdFxcdFxcdGdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9BLCBpZGxlc2xvcGUpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9CLCBpZGxlc2xvcGUpO1xcbitcXG4rXFx0XFx0LyogUmUtZW5hYmxlIENCUyBmb3IgdGhlIHF1ZXVlIHdpdGggbmV3IGlkbGVzbG9wZSAqL1xcbitcXHRcXHRnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCB8IGVuYWJsZV9iaXQpO1xcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfZGJnKG5kZXYsIFxcXCJDQlM6IENvbmZpZ3VyZWQgcXVldWUgJWQgd2l0aCBpZGxlc2xvcGUgMHgleFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgcW9wdC1cXHUwMDNlcXVldWUsIGlkbGVzbG9wZSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWFjYl9jYnNfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTggcXVldWVfbnVtKVxcbit7XFxuK1xcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHRib29sIGlzX3F1ZXVlX2E7XFxuK1xcdHUzMiBlbmFibGVfYml0O1xcbitcXG4rXFx0aWYgKG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoYnAsIHF1ZXVlX251bSwgXFx1MDAyNmVuYWJsZV9iaXQsIFxcdTAwMjZpc19xdWV1ZV9hKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFxcdTAwMjZicC1cXHUwMDNlbG9jaykge1xcbitcXHRcXHRnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgZ2VtX3JlYWRsKGJwLCBDQlNfQ09OVFJPTCkgXFx1MDAyNiB+ZW5hYmxlX2JpdCk7XFxuK1xcdFxcdGlmIChpc19xdWV1ZV9hKVxcbitcXHRcXHRcXHRnZW1fd3JpdGVsKGJwLCBDQlNfSURMRVNMT1BFX1FfQSwgMCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0Z2VtX3dyaXRlbChicCwgQ0JTX0lETEVTTE9QRV9RX0IsIDApO1xcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfZGJnKG5kZXYsIFxcXCJDQlM6IERpc2FibGVkIHF1ZXVlICVkXFxcXG5cXFwiLCBxdWV1ZV9udW0pO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1hY2Jfc2V0dXBfY2JzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHQgIHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KVxcbit7XFxuK1xcdGlmIChxb3B0LVxcdTAwM2VlbmFibGUpXFxuK1xcdFxcdHJldHVybiBtYWNiX2Nic19hZGQobmRldiwgcW9wdCk7XFxuK1xcbitcXHRtYWNiX2Nic19kZXN0cm95KG5kZXYsIHFvcHQtXFx1MDAzZXF1ZXVlKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWFjYl9zZXR1cF9tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHR1OCBudW1fdGMgPSBxb3B0LVxcdTAwM2VudW1fdGM7XFxuK1xcdGludCBlcnI7XFxuK1xcdHU4IGk7XFxuK1xcbitcXHQvKiBIYW5kbGUgcmVzZXQgY2FzZSBlYXJseSAqL1xcbitcXHRpZiAoIW51bV90Yykge1xcbitcXHRcXHRuZXRkZXZfcmVzZXRfdGMobmRldik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzc2VzICovXFxuK1xcdHFvcHQtXFx1MDAzZWh3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTO1xcbitcXG4rXFx0ZXJyID0gbmV0ZGV2X3NldF9udW1fdGMobmRldiwgbnVtX3RjKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fdGM7IGkrKykge1xcbitcXHRcXHRlcnIgPSBuZXRkZXZfc2V0X3RjX3F1ZXVlKG5kZXYsIGksIHFvcHQtXFx1MDAzZWNvdW50W2ldLFxcbitcXHRcXHRcXHRcXHRcXHQgIHFvcHQtXFx1MDAzZW9mZnNldFtpXSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc2V0X3RjO1xcbitcXG4rXFx0XFx0bmV0ZGV2X2RiZyhuZGV2LCBcXFwiTVFQUklPOiBUQyVkIC1cXHUwMDNlIHF1ZXVlICV1IChjb3VudD0ldSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGksIHFvcHQtXFx1MDAzZW9mZnNldFtpXSwgcW9wdC1cXHUwMDNlY291bnRbaV0pO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9yZXNldF90YzpcXG4rXFx0bmV0ZGV2X3Jlc2V0X3RjKG5kZXYpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1hY2JfdGNfcXVlcnlfY2FwcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKVxcbit7XFxuK1xcdHN3aXRjaCAoYmFzZS1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoge1xcbitcXHRcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXG4rXFx0XFx0Y2Fwcy1cXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcXG4rXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdCB2b2lkICp0eXBlX2RhdGEpXFxuIHtcXG4rXFx0c3RydWN0IG1hY2IgKmJwO1xcbitcXG4gXFx0aWYgKCFkZXYgfHwgIXR5cGVfZGF0YSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRpZiAodHlwZSA9PSBUQ19RVUVSWV9DQVBTKVxcbitcXHRcXHRyZXR1cm4gbWFjYl90Y19xdWVyeV9jYXBzKGRldiwgdHlwZV9kYXRhKTtcXG4rXFxuK1xcdGJwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghKGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1RDKSkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdC8qIENoZWNrIGlmIERldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KHBtX3J1bnRpbWVfc3VzcGVuZGVkKFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KSkpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XFxuK1xcdFxcdHJldHVybiBtYWNiX3NldHVwX21xcHJpbyhkZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfQ0JTOlxcbitcXHRcXHRyZXR1cm4gbWFjYl9zZXR1cF9jYnMoZGV2LCB0eXBlX2RhdGEpO1xcbiBcXHRjYXNlIFRDX1NFVFVQX1FESVNDX1RBUFJJTzpcXG4gXFx0XFx0cmV0dXJuIG1hY2Jfc2V0dXBfdGFwcmlvKGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0ZGVmYXVsdDpcXG5AQCAtNDg0Niw4ICs1MDI5LDggQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRcXHRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNO1xcbiBcXHRpZiAoYnAtXFx1MDAzZWNhcHMgXFx1MDAyNiBNQUNCX0NBUFNfU0dfRElTQUJMRUQpXFxuIFxcdFxcdGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgXFx1MDAyNj0gfk5FVElGX0ZfU0c7XFxuLVxcdC8qIEVuYWJsZSBIV19UQyBpZiBoYXJkd2FyZSBzdXBwb3J0cyBRQlYgKi9cXG4tXFx0aWYgKGJwLVxcdTAwM2VjYXBzIFxcdTAwMjYgTUFDQl9DQVBTX1FCVilcXG4rXFx0LyogRW5hYmxlIFRDIG9mZmxvYWQgZm9yIFRTTi1jYXBhYmxlIGhhcmR3YXJlICovXFxuK1xcdGlmIChicC1cXHUwMDNlY2FwcyBcXHUwMDI2IE1BQ0JfQ0FQU19UQylcXG4gXFx0XFx0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xcbiBcXG4gXFx0ZGV2LVxcdTAwM2VmZWF0dXJlcyA9IGRldi1cXHUwMDNlaHdfZmVhdHVyZXM7XFxuQEAgLTU2NzgsNyArNTg2MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgdmVyc2FsX2NvbmZpZyA9IHtcXG4gXFx0LmNhcHMgPSBNQUNCX0NBUFNfR0lHQUJJVF9NT0RFX0FWQUlMQUJMRSB8IE1BQ0JfQ0FQU19KVU1CTyB8XFxuIFxcdFxcdE1BQ0JfQ0FQU19HRU1fSEFTX1BUUCB8IE1BQ0JfQ0FQU19CRF9SRF9QUkVGRVRDSCB8XFxuIFxcdFxcdE1BQ0JfQ0FQU19ORUVEX1RTVUNMSyB8IE1BQ0JfQ0FQU19RVUVVRV9ESVNBQkxFIHxcXG4tXFx0XFx0TUFDQl9DQVBTX1FCViB8XFxuK1xcdFxcdE1BQ0JfQ0FQU19UQyB8XFxuIFxcdFxcdE1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLFxcbiBcXHQuZG1hX2J1cnN0X2xlbmd0aCA9IDE2LFxcbiBcXHQuaW5pdCA9IGluaXRfcmVzZXRfb3B0aW9uYWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE4OjM1LjM1OTg4Mzk5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMzNTM2MDM1NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfQ0FERU5DRVwiLFxuICAgIFwiTUFDQlwiLFxuICAgIFwiTUFDQl9QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWNiX3NldHVwX2Nic1wiLFxuICAgIFwibWFjYl9jYnNfYWRkXCIsXG4gICAgXCJtYWNiX2Nic19kZXN0cm95XCIsXG4gICAgXCJtYWNiX3NldHVwX21xcHJpb1wiLFxuICAgIFwibWFjYl90Y19xdWVyeV9jYXBzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBDQlMgKENyZWRpdC1CYXNlZCBTaGFwZXIpIGFuZCBNUVBSSU8gKE11bHRpcGxlIFF1ZXVlIFByaW9yaXR5KSB0cmFmZmljIGNvbnRyb2wgb2ZmbG9hZHMgdG8gdGhlIENhZGVuY2UgTUFDQiBFdGhlcm5ldCBkcml2ZXIuIFRoZXNlIGZlYXR1cmVzIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgKHRjIHFkaXNjKSBhbmQgaW50cm9kdWNlIG5ldyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGxvZ2ljIHRoYXQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjY0YTI5YzM5ZWU3ZmM3NTdlMTcyMDJkY2Y1MmE5YzdiYjhmYzRmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTI6MTg6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG5pbmRleCBhMTEwNTI1NjU0MzZhLi5kNWIyODQ1OWZkNzVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG5AQCAtMTg0LDYgKzE4NCw5IEBAXG4gI2RlZmluZSBHRU1fRENGRzhcdFx0MHgwMjlDIC8qIERlc2lnbiBDb25maWcgOCAqL1xuICNkZWZpbmUgR0VNX0RDRkcxMFx0XHQweDAyQTQgLyogRGVzaWduIENvbmZpZyAxMCAqL1xuICNkZWZpbmUgR0VNX0RDRkcxMlx0XHQweDAyQUMgLyogRGVzaWduIENvbmZpZyAxMiAqL1xuKyNkZWZpbmUgR0VNX0NCU19DT05UUk9MXHRcdDB4MDRCQyAvKiBDQlMgQ29udHJvbCBSZWdpc3RlciAqL1xuKyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9BXHQweDA0QzAgLyogQ0JTIElkbGVTbG9wZSBRdWV1ZSBBICovXG4rI2RlZmluZSBHRU1fQ0JTX0lETEVTTE9QRV9RX0JcdDB4MDRDNCAvKiBDQlMgSWRsZVNsb3BlIFF1ZXVlIEIgKi9cbiAjZGVmaW5lIEdFTV9FTlNUX0NPTlRST0xcdDB4MDg4MCAvKiBFTlNUIGNvbnRyb2wgcmVnaXN0ZXIgKi9cbiAjZGVmaW5lIEdFTV9VU1hfQ09OVFJPTFx0XHQweDBBODAgLyogSGlnaCBzcGVlZCBQQ1MgY29udHJvbCByZWdpc3RlciAqL1xuICNkZWZpbmUgR0VNX1VTWF9TVEFUVVNcdFx0MHgwQTg4IC8qIEhpZ2ggc3BlZWQgUENTIHN0YXR1cyByZWdpc3RlciAqL1xuQEAgLTIyNCw2ICsyMjcsMTIgQEBcbiAjZGVmaW5lIEdFTV9FTlNUX09OX1RJTUUoaHdfcSlcdFx0KDB4MDgyMCArICgoaHdfcSkgXHUwMDNjXHUwMDNjIDIpKVxuICNkZWZpbmUgR0VNX0VOU1RfT0ZGX1RJTUUoaHdfcSlcdFx0KDB4MDg0MCArICgoaHdfcSkgXHUwMDNjXHUwMDNjIDIpKVxuIFxuKy8qIEJpdGZpZWxkcyBpbiBDQlNfQ09OVFJPTCAqL1xuKyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9PRkZTRVRcdDBcbisjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0FfU0laRVx0MVxuKyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQl9PRkZTRVRcdDFcbisjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0JfU0laRVx0MVxuK1xuIC8qIEJpdGZpZWxkcyBpbiBFTlNUX0NPTlRST0wgKi9cbiAjZGVmaW5lIEdFTV9FTlNUX0RJU0FCTEVfUVVFVUVfT0ZGU0VUXHQxNlxuIFxuQEAgLTc2OCw3ICs3NzcsNyBAQFxuICNkZWZpbmUgTUFDQl9DQVBTX01JSU9OUkdNSUlcdFx0XHRCSVQoOSlcbiAjZGVmaW5lIE1BQ0JfQ0FQU19ORUVEX1RTVUNMS1x0XHRcdEJJVCgxMClcbiAjZGVmaW5lIE1BQ0JfQ0FQU19RVUVVRV9ESVNBQkxFXHRcdFx0QklUKDExKVxuLSNkZWZpbmUgTUFDQl9DQVBTX1FCVlx0XHRcdFx0QklUKDEyKVxuKyNkZWZpbmUgTUFDQl9DQVBTX1RDXHRcdFx0XHRCSVQoMTIpXG4gI2RlZmluZSBNQUNCX0NBUFNfUENTXHRcdFx0XHRCSVQoMTMpXG4gI2RlZmluZSBNQUNCX0NBUFNfSElHSF9TUEVFRFx0XHRcdEJJVCgxNClcbiAjZGVmaW5lIE1BQ0JfQ0FQU19DTEtfSFdfQ0hHXHRcdFx0QklUKDE1KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5pbmRleCBkMzk0ZjFmNDNiNjg1Li5hMGE2ODQ5MDUxOWU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuQEAgLTk5LDYgKzk5LDEwIEBAIHN0cnVjdCBzaWZpdmVfZnU1NDBfbWFjYl9tZ210IHtcbiBcbiAjZGVmaW5lIE1BQ0JfTURJT19USU1FT1VUXHQxMDAwMDAwIC8qIGluIHVzZWNzICovXG4gXG4rLyogQ0JTIHBvcnQgdHJhbnNtaXQgcmF0ZSBmYWN0b3JzOiAxMDAwL2ludGVyZmFjZV93aWR0aCAqL1xuKyNkZWZpbmUgTUFDQl9DQlNfUE9SVF9SQVRFXzFHXHRcdDEyNVx0LyogMTAwMC84IGZvciBHTUlJICg4LWJpdCkgKi9cbisjZGVmaW5lIE1BQ0JfQ0JTX1BPUlRfUkFURV8xMF8xMDBNXHQyNTBcdC8qIDEwMDAvNCBmb3IgTUlJICg0LWJpdCkgKi9cbitcbiAvKiBETUEgYnVmZmVyIGRlc2NyaXB0b3IgbWlnaHQgYmUgZGlmZmVyZW50IHNpemVcbiAgKiBkZXBlbmRzIG9uIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb246XG4gICpcbkBAIC00NDk5LDE4ICs0NTAzLDggQEAgc3RhdGljIHZvaWQgbWFjYl90YXByaW9fZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRcdCAgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnRhcHJpbylcbiB7XG4tXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGludCBlcnIgPSAwO1xuIFxuLVx0aWYgKHVubGlrZWx5KCEobmRldi1cdTAwM2Vod19mZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19UQykpKVxuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tXG4tXHQvKiBDaGVjayBpZiBEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kICovXG4tXHRpZiAodW5saWtlbHkocG1fcnVudGltZV9zdXNwZW5kZWQoXHUwMDI2YnAtXHUwMDNlcGRldi1cdTAwM2VkZXYpKSkge1xuLVx0XHRuZXRkZXZfZXJyKG5kZXYsIFwiRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxcblwiKTtcbi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLVx0fVxuLVxuIFx0c3dpdGNoICh0YXByaW8tXHUwMDNlY21kKSB7XG4gXHRjYXNlIFRBUFJJT19DTURfUkVQTEFDRTpcbiBcdFx0ZXJyID0gbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShuZGV2LCB0YXByaW8pO1xuQEAgLTQ1MjUsMTMgKzQ1MTksMjAyIEBAIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgaW50IG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoc3RydWN0IG1hY2IgKmJwLCB1OCBxdWV1ZV9udW0sXG4rXHRcdFx0XHQgICAgIHUzMiAqZW5hYmxlX2JpdCwgYm9vbCAqaXNfcXVldWVfYSlcbit7XG4rXHQvKiBRdWV1ZSBBIGlzIGhpZ2hlc3QgcHJpb3JpdHkgKG51bV9xdWV1ZXMgLSAxKSAqL1xuK1x0aWYgKHF1ZXVlX251bSA9PSBicC1cdTAwM2VudW1fcXVldWVzIC0gMSkge1xuK1x0XHQqZW5hYmxlX2JpdCA9IEdFTV9CSVQoQ0JTX0VOQUJMRV9RVUVVRV9BKTtcbitcdFx0KmlzX3F1ZXVlX2EgPSB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qIFF1ZXVlIEIgaXMgc2Vjb25kIGhpZ2hlc3QgcHJpb3JpdHkgKG51bV9xdWV1ZXMgLSAyKSAqL1xuK1x0aWYgKHF1ZXVlX251bSA9PSBicC1cdTAwM2VudW1fcXVldWVzIC0gMikge1xuK1x0XHQqZW5hYmxlX2JpdCA9IEdFTV9CSVQoQ0JTX0VOQUJMRV9RVUVVRV9CKTtcbitcdFx0KmlzX3F1ZXVlX2EgPSBmYWxzZTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rc3RhdGljIGludCBtYWNiX2Nic19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0c3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpXG4re1xuK1x0dTMyIGVuYWJsZV9iaXQsIGlkbGVzbG9wZSwgc3BlZWRfa2JwcywgY3RybDtcbitcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3Mga3NldDtcbitcdGJvb2wgaXNfcXVldWVfYTtcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKGJwLCBxb3B0LVx1MDAzZXF1ZXVlLCBcdTAwMjZlbmFibGVfYml0LCBcdTAwMjZpc19xdWV1ZV9hKTtcbitcdGlmIChlcnIpIHtcbitcdFx0bmV0ZGV2X2VycihuZGV2LCBcIkNCUzogUXVldWUgJWQgbm90IGVsaWdpYmxlIChvbmx5IHRvcCAyIHF1ZXVlcyBzdXBwb3J0IENCUylcXG5cIixcbitcdFx0XHQgICBxb3B0LVx1MDAzZXF1ZXVlKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHQvKiBpZGxlc2xvcGUgaXMgY2FsaWJyYXRlZCBmb3IgdGhlIGN1cnJlbnQgbGluayBzcGVlZDsgQ0JTIGlzIG5vdFxuK1x0ICogcmVwcm9ncmFtbWVkIG9uIGxpbmstc3BlZWQgY2hhbmdlcywgc28gaXQgbXVzdCBiZSByZWNvbmZpZ3VyZWRcbitcdCAqIGlmIHRoZSBsaW5rIHNwZWVkIGNoYW5nZXMuXG4rXHQgKi9cbitcdHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KGJwLVx1MDAzZXBoeWxpbmssIFx1MDAyNmtzZXQpO1xuK1xuK1x0aWYgKCFrc2V0LmJhc2Uuc3BlZWQgfHwga3NldC5iYXNlLnNwZWVkID09IFNQRUVEX1VOS05PV04pIHtcbitcdFx0bmV0ZGV2X2VycihuZGV2LCBcIkNCUzogSW52YWxpZCBsaW5rIHNwZWVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHNwZWVkX2ticHMgPSBrc2V0LmJhc2Uuc3BlZWQgKiAxMDAwO1xuK1xuK1x0aWYgKHFvcHQtXHUwMDNlaWRsZXNsb3BlIFx1MDAzYz0gMCB8fCAodTMyKXFvcHQtXHUwMDNlaWRsZXNsb3BlIFx1MDAzZSBzcGVlZF9rYnBzKSB7XG4rXHRcdG5ldGRldl9lcnIobmRldiwgXCJDQlM6IGludmFsaWQgaWRsZXNsb3BlICVkIChtdXN0IGJlIDEuLiV1IGticHMpXFxuXCIsXG4rXHRcdFx0ICAgcW9wdC1cdTAwM2VpZGxlc2xvcGUsIHNwZWVkX2ticHMpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdC8qIENhbGN1bGF0ZSBpZGxlc2xvcGUgZm9yIGhhcmR3YXJlIHJlZ2lzdGVyOlxuK1x0ICogLSBIaWdoLXNwZWVkIEdFTTogc2NhbGUgdG8gZnVsbCAzMi1iaXQgcmVnaXN0ZXIgcmFuZ2VcbitcdCAqIC0gU3RhbmRhcmQgTUFDQjogbXVsdGlwbHkgYnkgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvclxuK1x0ICovXG4rXHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX0hJR0hfU1BFRUQpXG4rXHRcdGlkbGVzbG9wZSA9IERJVl9ST1VORF9VUF9VTEwoKHU2NClxb3B0LVx1MDAzZWlkbGVzbG9wZSAqIFUzMl9NQVgsIHNwZWVkX2ticHMpO1xuK1x0ZWxzZVxuK1x0XHRpZGxlc2xvcGUgPSAodTMyKXFvcHQtXHUwMDNlaWRsZXNsb3BlICogKGtzZXQuYmFzZS5zcGVlZCBcdTAwM2U9IDEwMDAgP1xuK1x0XHRcdFx0XHQgICAgICAgTUFDQl9DQlNfUE9SVF9SQVRFXzFHIDogTUFDQl9DQlNfUE9SVF9SQVRFXzEwXzEwME0pO1xuK1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmJwLVx1MDAzZWxvY2spIHtcbitcdFx0LyogRGlzYWJsZSBDQlMgZm9yIHRoZSBxdWV1ZSBiZWZvcmUgdXBkYXRpbmcgaWRsZXNsb3BlICovXG4rXHRcdGN0cmwgPSBnZW1fcmVhZGwoYnAsIENCU19DT05UUk9MKSBcdTAwMjYgfmVuYWJsZV9iaXQ7XG4rXHRcdGdlbV93cml0ZWwoYnAsIENCU19DT05UUk9MLCBjdHJsKTtcbitcdFx0LyogVXBkYXRlIGlkbGVzbG9wZSBmb3IgdGhlIHF1ZXVlICovXG4rXHRcdGlmIChpc19xdWV1ZV9hKVxuK1x0XHRcdGdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9BLCBpZGxlc2xvcGUpO1xuK1x0XHRlbHNlXG4rXHRcdFx0Z2VtX3dyaXRlbChicCwgQ0JTX0lETEVTTE9QRV9RX0IsIGlkbGVzbG9wZSk7XG4rXG4rXHRcdC8qIFJlLWVuYWJsZSBDQlMgZm9yIHRoZSBxdWV1ZSB3aXRoIG5ldyBpZGxlc2xvcGUgKi9cbitcdFx0Z2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGN0cmwgfCBlbmFibGVfYml0KTtcbitcdH1cbitcbitcdG5ldGRldl9kYmcobmRldiwgXCJDQlM6IENvbmZpZ3VyZWQgcXVldWUgJWQgd2l0aCBpZGxlc2xvcGUgMHgleFxcblwiLFxuK1x0XHQgICBxb3B0LVx1MDAzZXF1ZXVlLCBpZGxlc2xvcGUpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1hY2JfY2JzX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHU4IHF1ZXVlX251bSlcbit7XG4rXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdGJvb2wgaXNfcXVldWVfYTtcbitcdHUzMiBlbmFibGVfYml0O1xuK1xuK1x0aWYgKG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoYnAsIHF1ZXVlX251bSwgXHUwMDI2ZW5hYmxlX2JpdCwgXHUwMDI2aXNfcXVldWVfYSkpXG4rXHRcdHJldHVybjtcbitcbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZicC1cdTAwM2Vsb2NrKSB7XG4rXHRcdGdlbV93cml0ZWwoYnAsIENCU19DT05UUk9MLCBnZW1fcmVhZGwoYnAsIENCU19DT05UUk9MKSBcdTAwMjYgfmVuYWJsZV9iaXQpO1xuK1x0XHRpZiAoaXNfcXVldWVfYSlcbitcdFx0XHRnZW1fd3JpdGVsKGJwLCBDQlNfSURMRVNMT1BFX1FfQSwgMCk7XG4rXHRcdGVsc2VcbitcdFx0XHRnZW1fd3JpdGVsKGJwLCBDQlNfSURMRVNMT1BFX1FfQiwgMCk7XG4rXHR9XG4rXG4rXHRuZXRkZXZfZGJnKG5kZXYsIFwiQ0JTOiBEaXNhYmxlZCBxdWV1ZSAlZFxcblwiLCBxdWV1ZV9udW0pO1xuK31cbitcbitzdGF0aWMgaW50IG1hY2Jfc2V0dXBfY2JzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuK1x0XHRcdCAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpXG4re1xuK1x0aWYgKHFvcHQtXHUwMDNlZW5hYmxlKVxuK1x0XHRyZXR1cm4gbWFjYl9jYnNfYWRkKG5kZXYsIHFvcHQpO1xuK1xuK1x0bWFjYl9jYnNfZGVzdHJveShuZGV2LCBxb3B0LVx1MDAzZXF1ZXVlKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG1hY2Jfc2V0dXBfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuK1x0XHRcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbit7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdHU4IG51bV90YyA9IHFvcHQtXHUwMDNlbnVtX3RjO1xuK1x0aW50IGVycjtcbitcdHU4IGk7XG4rXG4rXHQvKiBIYW5kbGUgcmVzZXQgY2FzZSBlYXJseSAqL1xuK1x0aWYgKCFudW1fdGMpIHtcbitcdFx0bmV0ZGV2X3Jlc2V0X3RjKG5kZXYpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qIENvbmZpZ3VyZSB0cmFmZmljIGNsYXNzZXMgKi9cbitcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4rXG4rXHRlcnIgPSBuZXRkZXZfc2V0X251bV90YyhuZGV2LCBudW1fdGMpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV90YzsgaSsrKSB7XG4rXHRcdGVyciA9IG5ldGRldl9zZXRfdGNfcXVldWUobmRldiwgaSwgcW9wdC1cdTAwM2Vjb3VudFtpXSxcbitcdFx0XHRcdFx0ICBxb3B0LVx1MDAzZW9mZnNldFtpXSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBlcnJfcmVzZXRfdGM7XG4rXG4rXHRcdG5ldGRldl9kYmcobmRldiwgXCJNUVBSSU86IFRDJWQgLVx1MDAzZSBxdWV1ZSAldSAoY291bnQ9JXUpXFxuXCIsXG4rXHRcdFx0ICAgaSwgcW9wdC1cdTAwM2VvZmZzZXRbaV0sIHFvcHQtXHUwMDNlY291bnRbaV0pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3Jlc2V0X3RjOlxuK1x0bmV0ZGV2X3Jlc2V0X3RjKG5kZXYpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBtYWNiX3RjX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHQgICAgICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKVxuK3tcbitcdHN3aXRjaCAoYmFzZS1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoge1xuK1x0XHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4rXG4rXHRcdGNhcHMtXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcbitcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0XHQgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbitcdHN0cnVjdCBtYWNiICpicDtcbitcbiBcdGlmICghZGV2IHx8ICF0eXBlX2RhdGEpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0aWYgKHR5cGUgPT0gVENfUVVFUllfQ0FQUylcbitcdFx0cmV0dXJuIG1hY2JfdGNfcXVlcnlfY2FwcyhkZXYsIHR5cGVfZGF0YSk7XG4rXG4rXHRicCA9IG5ldGRldl9wcml2KGRldik7XG4rXG4rXHRpZiAodW5saWtlbHkoIShkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfVEMpKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogQ2hlY2sgaWYgRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZCAqL1xuK1x0aWYgKHVubGlrZWx5KHBtX3J1bnRpbWVfc3VzcGVuZGVkKFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2KSkpIHtcbitcdFx0bmV0ZGV2X2VycihkZXYsIFwiRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcbitcdFx0cmV0dXJuIG1hY2Jfc2V0dXBfbXFwcmlvKGRldiwgdHlwZV9kYXRhKTtcbitcdGNhc2UgVENfU0VUVVBfUURJU0NfQ0JTOlxuK1x0XHRyZXR1cm4gbWFjYl9zZXR1cF9jYnMoZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19UQVBSSU86XG4gXHRcdHJldHVybiBtYWNiX3NldHVwX3RhcHJpbyhkZXYsIHR5cGVfZGF0YSk7XG4gXHRkZWZhdWx0OlxuQEAgLTQ4NDYsOCArNTAyOSw4IEBAIHN0YXRpYyBpbnQgbWFjYl9pbml0X2RmbHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNO1xuIFx0aWYgKGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19TR19ESVNBQkxFRClcbiBcdFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIFx1MDAyNj0gfk5FVElGX0ZfU0c7XG4tXHQvKiBFbmFibGUgSFdfVEMgaWYgaGFyZHdhcmUgc3VwcG9ydHMgUUJWICovXG4tXHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1FCVilcbitcdC8qIEVuYWJsZSBUQyBvZmZsb2FkIGZvciBUU04tY2FwYWJsZSBoYXJkd2FyZSAqL1xuK1x0aWYgKGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19UQylcbiBcdFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVEM7XG4gXG4gXHRkZXYtXHUwMDNlZmVhdHVyZXMgPSBkZXYtXHUwMDNlaHdfZmVhdHVyZXM7XG5AQCAtNTY3OCw3ICs1ODYxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB2ZXJzYWxfY29uZmlnID0ge1xuIFx0LmNhcHMgPSBNQUNCX0NBUFNfR0lHQUJJVF9NT0RFX0FWQUlMQUJMRSB8IE1BQ0JfQ0FQU19KVU1CTyB8XG4gXHRcdE1BQ0JfQ0FQU19HRU1fSEFTX1BUUCB8IE1BQ0JfQ0FQU19CRF9SRF9QUkVGRVRDSCB8XG4gXHRcdE1BQ0JfQ0FQU19ORUVEX1RTVUNMSyB8IE1BQ0JfQ0FQU19RVUVVRV9ESVNBQkxFIHxcbi1cdFx0TUFDQl9DQVBTX1FCViB8XG4rXHRcdE1BQ0JfQ0FQU19UQyB8XG4gXHRcdE1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLFxuIFx0LmRtYV9idXJzdF9sZW5ndGggPSAxNixcbiBcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE4OjM1LjM1OTg4NTAzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NDIzNjM0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBvZiB0aGUgTUFDQiBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gYXNzZXNzIHRoaXMgcGF0Y2gncyBmdXp6aW5nIGltcGxpY2F0aW9ucy4gVGhlIGNvcmUgb2YgdGhpcyByZXZvbHZlcyBhcm91bmQgaWRlbnRpZnlpbmcgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AgYW5kIGBtYWNiLmhgLCB3aGljaCBpbW1lZGlhdGVseSBwb2ludHMgdG8gbmV0d29yayBkcml2ZXIgdGVycml0b3J5LiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIHN1cHBvcnQgZm9yIENCUyBhbmQgTVFQUklPIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkcyB3aXRoaW4gdGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgY29tcGxleC5cblxuUmVuYW1pbmcgYE1BQ0JfQ0FQU19RQlZgIHRvIGBNQUNCX0NBUFNfVENgIGFuZCBlbmFibGluZyBgTkVUSUZfRl9IV19UQ2Agc2lnbmFscyBhIGNsZWFyIHNoaWZ0IHRvd2FyZCB0cmFmZmljIGNvbnRyb2wgY2FwYWJpbGl0aWVzLiBUaGUgYWRkaXRpb24gb2YgZnVuY3Rpb25zIGxpa2UgYG1hY2Jfc2V0dXBfY2JzYCwgYG1hY2JfY2JzX2FkZGAsIGFuZCBzbyBvbiwgYWxsIHJlYWNoYWJsZSB0aHJvdWdoIGBtYWNiX3NldHVwX3RjYCAodGhlIGAubmRvX3NldHVwX3RjYCBjYWxsYmFjayksIG1ha2VzIGl0IHNlZW0gbGlrZSB0aGlzIGlzIGEgc3Vic3RhbnRpYWwgYWRkaXRpb24gdG8gdGhlIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIGlzIGRyaXZlciBhY2Nlc3NpYmlsaXR5LCBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBwYXRjaCBpbnZvbHZlcyB0aGUgQ2FkZW5jZSBNQUNCLCB3aGljaCBJIGtub3cgaXMgdXNlZCBpbiBBdG1lbC9DYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGNvbnRyb2xsZXJzLiBRRU1VIG9mdGVuIHN1cHBvcnRzIENhZGVuY2UgR0VNLCBlc3BlY2lhbGx5IGluIHBsYXRmb3JtcyBsaWtlIFhpbGlueCBaeW5xIGFuZCBTaUZpdmUgVS4gVGhhdCdzIGdvb2Q7IGl0J3MgbGlrZWx5IHdlIGNhbiBnZXQgY292ZXJhZ2UgdGhlcmUuXG5cbkJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBBcmUgdGhlcmUgZXZlbiBvdGhlciBlZmZvcnRzIG9uIHRoaXMgZHJpdmVyPyBJcyB0aGlzIGRyaXZlciAqY29tbW9ubHkqIGZ1enplZD8gTGV0J3MgY2hlY2sgZm9yIGV4aXN0aW5nIGNvbmZpZyBmbGFncyB0byBxdWlja2x5IGdhdWdlIHVzYWdlIGFuZCBmdXp6aW5nIGhpc3RvcnkuIGBDT05GSUdfTUFDQmAgaXMgdGhlIGtleSBjb25maWcgZm9yIHRoaXMsIHNvIEkgd2lsbCBzZWFyY2ggaXQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBsb29rIGF0IHdoZXRoZXIgdGhlIGRyaXZlciBoYXMgYmVlbiBmdXp6ZWQgYmVmb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzcxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6NDIuMjAyMjUxNDI5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDYxOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUNCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9MjA9aWYgTkVUX1ZFTkRPUl9DQURFTkNFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzoyMjpjb25maWcgTUFDQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzozNzpjb25maWcgTUFDQl9VU0VfSFdTVEFNUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zOC1cXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQ1OmNvbmZpZyBNQUNCX1BDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBQQ0kgTUFDQi9HRU0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6NDIuMjQ1MzE5NDM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3ODE2OTM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBDYWRlbmNlIEdFTSBNQUNCIERyaXZlcioqXG5cbk9rYXksIGxldCdzIHNlZSBhYm91dCBmdXp6aW5nIHRoaXMgYENPTkZJR19NQUNCYCBkcml2ZXIuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHJlcmVxdWlzaXRlcywgc28gSSdsbCBjaGVjayBpZiBpdCdzIHR5cGljYWxseSBlbmFibGVkIG9yIGVhc2lseSBlbmFibGVkIGluIG91ciBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy4gSXQgbG9va3MgbGlrZSBpdCBoaW5nZXMgb24gYE5FVF9WRU5ET1JfQ0FERU5DRWAsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBkb2VzIFFFTVUgZXZlbiBzdXBwb3J0IHRoaXMgQ2FkZW5jZSBHRU0gaGFyZHdhcmU/IFllcCwgdGhlcmUncyBhIGBody9uZXQvY2FkZW5jZV9nZW0uY2AgZmlsZSwgc28gdGhhdCdzIGEgcG9zaXRpdmUuXG5cblRoZSBuZXh0IGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgaXQncyBmdXp6YWJsZS4gSXQncyBhIG5ldHdvcmsgZHJpdmVyLCBzbyB0aGF0J3MgaW5oZXJlbnRseSBwcm9taXNpbmcuIFdlIHNob3VsZCBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGggaXQgdXNpbmcgbmV0bGluaywgc3BlY2lmaWNhbGx5IHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYHRjIHFkaXNjIGFkZC4uLmAuIFRoYXQgc291bmRzIGZlYXNpYmxlLiBOb3csIHdoYXQgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBhZGRlZCBhbmQgZXhwb3NlZCBmb3IgdGhpcz8gSSBzZWUgYG1hY2Jfc2V0dXBfY2JzYCwgYG1hY2Jfc2V0dXBfbXFwcmlvYCwgYW5kIGBtYWNiX3RjX3F1ZXJ5X2NhcHNgLiBUaGVzZSBhcmUgYWxsIGNhbGxlZCBmcm9tIGBtYWNiX3NldHVwX3RjYCwgc28gdGhhdCdzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZXhhbWluZS4gVGltZSB0byBkaWcgaW50byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBUcmFmZmljIENvbnRyb2wgKFRDKSBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc2OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxODo0Ny42MjM0OTEzNzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5NzM2NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjYl9zZXR1cF90Y1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDY3NT1zdGF0aWMgaW50IG1hY2JfdGNfcXVlcnlfY2FwcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00NjkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NDY5MTpzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00NjkyLVxcdFxcdFxcdCB2b2lkICp0eXBlX2RhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTQ3MzI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtYWNiX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ3NDgtXFx0Lm5kb19od3RzdGFtcF9nZXRcXHQ9IG1hY2JfaHd0c3RhbXBfZ2V0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NDc0OTpcXHQubmRvX3NldHVwX3RjXFx0XFx0PSBtYWNiX3NldHVwX3RjLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDc1MC1cXHQubmRvX3R4X3RpbWVvdXRcXHRcXHQ9IG1hY2JfdHhfdGltZW91dCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6NDcuNjY3NDkxNDk3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg0NDgzNjI0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNQUNCIERyaXZlciBTZXR1cCoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gdGhlc2UgTUFDQiBkcml2ZXIgc2V0dXAgZnVuY3Rpb25zLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGxvZ2ljIHJldm9sdmVzIGFyb3VuZCBgbWFjYl9zZXR1cF9jYnNgIGFuZCBgbWFjYl9zZXR1cF9tcXByaW9gLiBBaCwgd2FpdCBhIG1pbnV0ZSwgYG1hY2Jfc2V0dXBfY2JzYCBpbnRlcm5hbGx5IHVzZXMgYG1hY2JfY2JzX2FkZGAgYW5kIGBtYWNiX2Nic19kZXN0cm95YC4gSSBzZWUgYG1hY2Jfc2V0dXBfbXFwcmlvYCBpbiB0aGUgbWl4IHRvby5cblxuTGV0IG1lIG9yZ2FuaXplIHRoaXMgZm9yIGNsYXJpdHkuIFNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0byBpbnZlc3RpZ2F0ZSBhcmU6XG5cbiogICBgbWFjYl9zZXR1cF9jYnNgXG4qICAgYG1hY2JfY2JzX2FkZGBcbiogICBgbWFjYl9jYnNfZGVzdHJveWBcbiogICBgbWFjYl9zZXR1cF9tcXByaW9gXG4qICAgYG1hY2JfdGNfcXVlcnlfY2Fwc2BcblxuSG1tLCBgbWFjYl9jYnNfYWRkYCBhbmQgYG1hY2JfY2JzX2Rlc3Ryb3lgIGFyZSAqc3RhdGljKiwgaW50ZXJlc3RpbmcuIEJ1dCB0aGV5IGFyZW4ndCBleHBsaWNpdGx5IGlubGluZWQuIEFscmlnaHQsIGxldCdzIGtlZXAgdGhlIGZvY3VzIG9uIHRoZSBlbnRyeSBwb2ludHMsIHRoZSBleHRlcm5hbCBmYWNpbmcgZnVuY3Rpb24gY2FsbHM6XG5cbiogICBgbWFjYl9zZXR1cF90Y2AgKEFscmVhZHkgdGhlcmUhKVxuKiAgIGBtYWNiX3NldHVwX2Nic2BcbiogICBgbWFjYl9zZXR1cF9tcXByaW9gXG4qICAgYG1hY2JfdGNfcXVlcnlfY2Fwc2BcblxuUmlnaHQsIHRoZSBgbWFjYl9zZXR1cF90Y2AgaXMgYWxyZWFkeSBwcmVzZW50LCB0aGUgb3RoZXJzIGFyZSBuZXcgYWRkaXRpb25zLiBOb3csIGZvciB0ZXN0aW5nLCBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgd2lsbCB3b3JrIGluIFFFTVUuIEkgbmVlZCB0byBxdWlja2x5IGFuZCBlYXNpbHkgZGVidWcgaXQsIHNvIGxldCdzIHNlZSBpZiBgTUFDQl9QQ0lgIGlzIHJlbGV2YW50IGZvciBlYXN5IHRlc3RpbmcgaW4gUUVNVS4gUUVNVSdzIENhZGVuY2UgR0VNIHVzdWFsbHkgZW11bGF0ZXMgYSBwbGF0Zm9ybSBkZXZpY2UgKHN5c2J1cyksIGJ1dCBkb2VzIGl0IHN1cHBvcnQgUENJIGFzIHdlbGw/IEkgd2lsbCBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU4OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxODo1NC41MTIzMjk0MzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE5MTMwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjYl9wY2lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTQ1PWNvbmZpZyBNQUNCX1BDSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTUxLVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzo1MjpcXHQgIHdpbGwgYmUgY2FsbGVkIG1hY2JfcGNpLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy01My1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX01BQ0IpICs9IG1hY2Iub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX01BQ0JfUENJKSArPSBtYWNiX3BjaS5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjE5OiNkZWZpbmUgUENJX0RSSVZFUl9OQU1FIFxcXCJtYWNiX3BjaVxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMjAtI2RlZmluZSBQTEFUX0RSSVZFUl9OQU1FIFxcXCJtYWNiXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jPTEyMD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkX3RhYmxlW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTI0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoxMjU6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG1hY2JfcGNpX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTI2LVxcdC5uYW1lICAgICA9IFBDSV9EUklWRVJfTkFNRSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjEzMjptb2R1bGVfcGNpX2RyaXZlcihtYWNiX3BjaV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMzMtTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRldl9pZF90YWJsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE4OjU0LjU1NDI1MzQzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ2NDQ5MDA5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFbmFibGluZyBNQUNCIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBpbXByb3ZlIG91ciBmdXp6aW5nIGNvdmVyYWdlIGZvciB0aGUgYE1BQ0JgIGV0aGVybmV0IGRyaXZlci4gSWYgd2UgZW5hYmxlIGJvdGggYE1BQ0JgIGFuZCBgTUFDQl9QQ0lgLCBpdCAqbWlnaHQqIG1ha2UgZnV6emluZyBlYXNpZXIuIFRoZSByZWFzb25pbmcgaXMgdGhhdCBlaXRoZXIgUUVNVSBtaWdodCBleHBvc2UgaXQgdGhyb3VnaCBQQ0ksIG9yIHN5emthbGxlciBjb3VsZCBwb3RlbnRpYWxseSBpbnN0YW50aWF0ZSBpdCB2aWEgYSBwbGF0Zm9ybSBkZXZpY2UuIEkga25vdyBzeXprYWxsZXIgaGFzIHNvbWUgcGxhdGZvcm0gZGV2aWNlIHN1cHBvcnQg4oCTIG9yIGF0IGxlYXN0LCBJJ3ZlIHNlZW4gaXQgdXNlZCB3aXRoIHZpcnR1YWwgZGV2aWNlcy4gTm93IHdhaXQgYSBtaW51dGUsIEkgc2VlbSB0byByZW1lbWJlciB0aGF0IHN5emthbGxlciAqY2FuKiB0ZXN0IGBtYWNiYCBpZiBpdCdzIGluc3RhbnRpYXRlZC4gVGhhdCBjaGFuZ2VzIHRoaW5ncy5cblxuQWxyaWdodCwgc28gdGhlIHBsYW4gaXMgdG8gZGVmaW5pdGVseSBpbmNsdWRlIGBNQUNCYCBhbmQgYE1BQ0JfUENJYCBpbiB0aGUgY29uZmlncy4gSSBrbm93IHdlJ2xsIGFsc28gbmVlZCBgTkVUX1ZFTkRPUl9DQURFTkNFYCBhcyBhIGRlcGVuZGVuY3kuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ2AgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEknbSBtaXNzaW5nLiBUaGlzIHdpbGwgc3RyZWFtbGluZSB0aGUgZnV6emluZyBwcm9jZXNzLCBhbmQgaG9wZWZ1bGx5IGdpdmUgdXMgbW9yZSBjb3ZlcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxODo1OS4wMTg3NDU5OTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjgwMzU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9Nj1jb25maWcgTkVUX1ZFTkRPUl9DQURFTkNFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTctXFx0Ym9vbCBcXFwiQ2FkZW5jZSBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzo4OlxcdGRlcGVuZHMgb24gSEFTX0lPTUVNXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTktXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9MjI9Y29uZmlnIE1BQ0JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjMtXFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgTUFDQi9HRU0gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6MjQ6XFx0ZGVwZW5kcyBvbiBIQVNfRE1BIFxcdTAwMjZcXHUwMDI2IENPTU1PTl9DTEtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6MjU6XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yNi1cXHRzZWxlY3QgUEhZTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTM3PWNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM4LVxcdGJvb2wgXFxcIlVzZSBJRUVFIDE1ODggaHdzdGFtcFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6Mzk6XFx0ZGVwZW5kcyBvbiBNQUNCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQwOlxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDEtXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9NDU9Y29uZmlnIE1BQ0JfUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ2LVxcdHRyaXN0YXRlIFxcXCJDYWRlbmNlIFBDSSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzo0NzpcXHRkZXBlbmRzIG9uIE1BQ0IgXFx1MDAyNlxcdTAwMjYgUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ4LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6NTkuMjUxNTU1NTQ4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1NTkwMDgwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQ2FkZW5jZSBNQUNCIFRyYWZmaWMgQ29udHJvbCBPZmZsb2FkcyoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgaXQncyBpbnRyb2R1Y2luZyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQ2FkZW5jZSBNQUNCIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0cmFmZmljIGNvbnRyb2wgc2V0dXAsIGVuYWJsaW5nIENCUyBhbmQgTVFQUklPLiBUaGVzZSBmZWF0dXJlcywgcmVhY2hhYmxlIHZpYSBgdGMgcWRpc2MgYWRkIGRldiBldGhYIHJvb3QgbXFwcmlvIC4uLmAgb3IgYHRjIHFkaXNjIGFkZCBkZXYgZXRoWCByb290IGNicyAuLi5gLCBhcmUgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgbmV0bGluayBpbnRlcmZhY2UgaXMgYSBwcmltZSB0YXJnZXQgaGVyZS5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uOlxuXG4qICAgYG1hY2Jfc2V0dXBfY2JzYFxuKiAgIGBtYWNiX2Nic19hZGRgXG4qICAgYG1hY2JfY2JzX2Rlc3Ryb3lgXG4qICAgYG1hY2Jfc2V0dXBfbXFwcmlvYFxuKiAgIGBtYWNiX3RjX3F1ZXJ5X2NhcHNgXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgYG1hY2JfY2JzX2FkZGAgYW5kIGBtYWNiX2Nic19kZXN0cm95YCBhcmVuJ3QgaW5saW5lZCwgYXMgdGhleSBhcHBlYXIgdG8gYmUgc3RhdGljLiBUaGV5J3JlIG5vdCBpbmxpbmUsIGFuZCBzaW5jZSB0aGV5IGFyZSBjYWxsZWQgZnJvbSBgbWFjYl9zZXR1cF9jYnNgLCBpdCdzIGFjY2VwdGFibGUgdG8gbGlzdCB0aGVtLiBBbHNvLCBgbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtc2AgaXMgYSBzbWFsbCBoZWxwZXIgZnVuY3Rpb24sIGFuZCBJJ20gZ3Vlc3NpbmcgaXQgbWlnaHQgYmUgaW5saW5lZC4gYG1hY2Jfc2V0dXBfdGNgIGlzIG1vZGlmaWVkLCBidXQgaXQncyBhbiBleGlzdGluZyBmdW5jdGlvbi5cblxuVGhlIGtleSBjb25maWdzIHRvIGtlZXAgaW4gbWluZCBhcmUgYE5FVF9WRU5ET1JfQ0FERU5DRWAsIGBNQUNCYCwgYW5kIGBNQUNCX1BDSWAuXG5cblRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIENCUyBhbmQgTVFQUklPIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkcyB0byB0aGUgQ2FkZW5jZSBNQUNCIEV0aGVybmV0IGRyaXZlci4gVGhlc2UgZmVhdHVyZXMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayAodGMgcWRpc2MpLCBhbmQgdGhleSBpbnRyb2R1Y2UgbmV3IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gbG9naWMgdGhhdCB3b3VsZCBiZSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgZnV6emluZy5cblxuSSdtIGNvbmZpZGVudCB0aGF0IGBNQUNCX1BDSWAgaXMgc3VmZmljaWVudCB0byBnZXQgYSBkZXZpY2UgaW5zdGFudGlhdGVkIGluIFFFTVUuIFFFTVUgY2FuIGVtdWxhdGUgUENJIGRldmljZXMsIGFuZCBpZiBgTUFDQl9QQ0lgIGlzIGVuYWJsZWQsIHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGluamVjdCBpdCBvciBRRU1VIG1pZ2h0IGhhdmUgaXQuIEV2ZW4gaWYgdGhhdCBpc24ndCB0aGUgY2FzZSwgc3l6a2FsbGVyIGNhbiBzdGlsbCBmdXp6IHRoZSBuZXRsaW5rIGludGVyZmFjZS5cblxuTm93LCBsZXQncyBzZXQgdGhlIHJlc3VsdHMgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MzEsIk91dHB1dFRva2VucyI6MTYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjA4LjgxMDU2NjgyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MzUwMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0NBREVOQ0VcIixcbiAgICBcIk1BQ0JcIixcbiAgICBcIk1BQ0JfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFjYl9zZXR1cF9jYnNcIixcbiAgICBcIm1hY2JfY2JzX2FkZFwiLFxuICAgIFwibWFjYl9jYnNfZGVzdHJveVwiLFxuICAgIFwibWFjYl9zZXR1cF9tcXByaW9cIixcbiAgICBcIm1hY2JfdGNfcXVlcnlfY2Fwc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQ0JTIChDcmVkaXQtQmFzZWQgU2hhcGVyKSBhbmQgTVFQUklPIChNdWx0aXBsZSBRdWV1ZSBQcmlvcml0eSkgdHJhZmZpYyBjb250cm9sIG9mZmxvYWRzIHRvIHRoZSBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyLiBUaGVzZSBmZWF0dXJlcyBhcmUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rICh0YyBxZGlzYykgYW5kIGludHJvZHVjZSBuZXcgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBsb2dpYyB0aGF0IGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9DQURFTkNFXCIsXG4gICAgXCJNQUNCXCIsXG4gICAgXCJNQUNCX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY2Jfc2V0dXBfY2JzXCIsXG4gICAgXCJtYWNiX2Nic19hZGRcIixcbiAgICBcIm1hY2JfY2JzX2Rlc3Ryb3lcIixcbiAgICBcIm1hY2Jfc2V0dXBfbXFwcmlvXCIsXG4gICAgXCJtYWNiX3RjX3F1ZXJ5X2NhcHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIENCUyAoQ3JlZGl0LUJhc2VkIFNoYXBlcikgYW5kIE1RUFJJTyAoTXVsdGlwbGUgUXVldWUgUHJpb3JpdHkpIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkcyB0byB0aGUgQ2FkZW5jZSBNQUNCIEV0aGVybmV0IGRyaXZlci4gVGhlc2UgZmVhdHVyZXMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayAodGMgcWRpc2MpIGFuZCBpbnRyb2R1Y2UgbmV3IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gbG9naWMgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxOTowOC44OTU5MjMxNDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTExMjQwNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6MDguODk2NDUzNjg3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIzNTEwNzA1ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIG9mZmxvYWQgc3VwcG9ydCBmb3IgQ0JTIGFuZCBNUVBSSU8gdHJhZmZpYyBjb250cm9sIGluIHRoZSBNQUNCIGV0aGVybmV0IGRyaXZlci4gSXQgcmVhZHMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHByb3ZpZGVkIGJ5IHRoZSBuZXR3b3JraW5nIGNvcmUgYW5kIHByb2dyYW1zIGhhcmR3YXJlIHJlZ2lzdGVycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgbGVha2VkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgdmFyaWFibGVzIHBhc3NlZCBieSByZWZlcmVuY2UgKGBlbmFibGVfYml0YCwgYGlzX3F1ZXVlX2FgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NjRhMjljMzllZTdmYzc1N2UxNzIwMmRjZjUyYTljN2JiOGZjNGZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMjoxODozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcbmluZGV4IGExMTA1MjU2NTQzNmEuLmQ1YjI4NDU5ZmQ3NWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcbkBAIC0xODQsNiArMTg0LDkgQEBcbiAjZGVmaW5lIEdFTV9EQ0ZHOFx0XHQweDAyOUMgLyogRGVzaWduIENvbmZpZyA4ICovXG4gI2RlZmluZSBHRU1fRENGRzEwXHRcdDB4MDJBNCAvKiBEZXNpZ24gQ29uZmlnIDEwICovXG4gI2RlZmluZSBHRU1fRENGRzEyXHRcdDB4MDJBQyAvKiBEZXNpZ24gQ29uZmlnIDEyICovXG4rI2RlZmluZSBHRU1fQ0JTX0NPTlRST0xcdFx0MHgwNEJDIC8qIENCUyBDb250cm9sIFJlZ2lzdGVyICovXG4rI2RlZmluZSBHRU1fQ0JTX0lETEVTTE9QRV9RX0FcdDB4MDRDMCAvKiBDQlMgSWRsZVNsb3BlIFF1ZXVlIEEgKi9cbisjZGVmaW5lIEdFTV9DQlNfSURMRVNMT1BFX1FfQlx0MHgwNEM0IC8qIENCUyBJZGxlU2xvcGUgUXVldWUgQiAqL1xuICNkZWZpbmUgR0VNX0VOU1RfQ09OVFJPTFx0MHgwODgwIC8qIEVOU1QgY29udHJvbCByZWdpc3RlciAqL1xuICNkZWZpbmUgR0VNX1VTWF9DT05UUk9MXHRcdDB4MEE4MCAvKiBIaWdoIHNwZWVkIFBDUyBjb250cm9sIHJlZ2lzdGVyICovXG4gI2RlZmluZSBHRU1fVVNYX1NUQVRVU1x0XHQweDBBODggLyogSGlnaCBzcGVlZCBQQ1Mgc3RhdHVzIHJlZ2lzdGVyICovXG5AQCAtMjI0LDYgKzIyNywxMiBAQFxuICNkZWZpbmUgR0VNX0VOU1RfT05fVElNRShod19xKVx0XHQoMHgwODIwICsgKChod19xKSBcdTAwM2NcdTAwM2MgMikpXG4gI2RlZmluZSBHRU1fRU5TVF9PRkZfVElNRShod19xKVx0XHQoMHgwODQwICsgKChod19xKSBcdTAwM2NcdTAwM2MgMikpXG4gXG4rLyogQml0ZmllbGRzIGluIENCU19DT05UUk9MICovXG4rI2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9BX09GRlNFVFx0MFxuKyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9TSVpFXHQxXG4rI2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9CX09GRlNFVFx0MVxuKyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQl9TSVpFXHQxXG4rXG4gLyogQml0ZmllbGRzIGluIEVOU1RfQ09OVFJPTCAqL1xuICNkZWZpbmUgR0VNX0VOU1RfRElTQUJMRV9RVUVVRV9PRkZTRVRcdDE2XG4gXG5AQCAtNzY4LDcgKzc3Nyw3IEBAXG4gI2RlZmluZSBNQUNCX0NBUFNfTUlJT05SR01JSVx0XHRcdEJJVCg5KVxuICNkZWZpbmUgTUFDQl9DQVBTX05FRURfVFNVQ0xLXHRcdFx0QklUKDEwKVxuICNkZWZpbmUgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEVcdFx0XHRCSVQoMTEpXG4tI2RlZmluZSBNQUNCX0NBUFNfUUJWXHRcdFx0XHRCSVQoMTIpXG4rI2RlZmluZSBNQUNCX0NBUFNfVENcdFx0XHRcdEJJVCgxMilcbiAjZGVmaW5lIE1BQ0JfQ0FQU19QQ1NcdFx0XHRcdEJJVCgxMylcbiAjZGVmaW5lIE1BQ0JfQ0FQU19ISUdIX1NQRUVEXHRcdFx0QklUKDE0KVxuICNkZWZpbmUgTUFDQl9DQVBTX0NMS19IV19DSEdcdFx0XHRCSVQoMTUpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbmluZGV4IGQzOTRmMWY0M2I2ODUuLmEwYTY4NDkwNTE5ZTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5AQCAtOTksNiArOTksMTAgQEAgc3RydWN0IHNpZml2ZV9mdTU0MF9tYWNiX21nbXQge1xuIFxuICNkZWZpbmUgTUFDQl9NRElPX1RJTUVPVVRcdDEwMDAwMDAgLyogaW4gdXNlY3MgKi9cbiBcbisvKiBDQlMgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvcnM6IDEwMDAvaW50ZXJmYWNlX3dpZHRoICovXG4rI2RlZmluZSBNQUNCX0NCU19QT1JUX1JBVEVfMUdcdFx0MTI1XHQvKiAxMDAwLzggZm9yIEdNSUkgKDgtYml0KSAqL1xuKyNkZWZpbmUgTUFDQl9DQlNfUE9SVF9SQVRFXzEwXzEwME1cdDI1MFx0LyogMTAwMC80IGZvciBNSUkgKDQtYml0KSAqL1xuK1xuIC8qIERNQSBidWZmZXIgZGVzY3JpcHRvciBtaWdodCBiZSBkaWZmZXJlbnQgc2l6ZVxuICAqIGRlcGVuZHMgb24gaGFyZHdhcmUgY29uZmlndXJhdGlvbjpcbiAgKlxuQEAgLTQ0OTksMTggKzQ1MDMsOCBAQCBzdGF0aWMgdm9pZCBtYWNiX3RhcHJpb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqdGFwcmlvKVxuIHtcbi1cdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0aW50IGVyciA9IDA7XG4gXG4tXHRpZiAodW5saWtlbHkoIShuZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1RDKSkpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cbi1cdC8qIENoZWNrIGlmIERldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmQgKi9cbi1cdGlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZChcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldikpKSB7XG4tXHRcdG5ldGRldl9lcnIobmRldiwgXCJEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kXFxuXCIpO1xuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tXHR9XG4tXG4gXHRzd2l0Y2ggKHRhcHJpby1cdTAwM2VjbWQpIHtcbiBcdGNhc2UgVEFQUklPX0NNRF9SRVBMQUNFOlxuIFx0XHRlcnIgPSBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKG5kZXYsIHRhcHJpbyk7XG5AQCAtNDUyNSwxMyArNDUxOSwyMDIgQEAgc3RhdGljIGludCBtYWNiX3NldHVwX3RhcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtcyhzdHJ1Y3QgbWFjYiAqYnAsIHU4IHF1ZXVlX251bSxcbitcdFx0XHRcdCAgICAgdTMyICplbmFibGVfYml0LCBib29sICppc19xdWV1ZV9hKVxuK3tcbitcdC8qIFF1ZXVlIEEgaXMgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDEpICovXG4rXHRpZiAocXVldWVfbnVtID09IGJwLVx1MDAzZW51bV9xdWV1ZXMgLSAxKSB7XG4rXHRcdCplbmFibGVfYml0ID0gR0VNX0JJVChDQlNfRU5BQkxFX1FVRVVFX0EpO1xuK1x0XHQqaXNfcXVldWVfYSA9IHRydWU7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0LyogUXVldWUgQiBpcyBzZWNvbmQgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDIpICovXG4rXHRpZiAocXVldWVfbnVtID09IGJwLVx1MDAzZW51bV9xdWV1ZXMgLSAyKSB7XG4rXHRcdCplbmFibGVfYml0ID0gR0VNX0JJVChDQlNfRU5BQkxFX1FVRVVFX0IpO1xuK1x0XHQqaXNfcXVldWVfYSA9IGZhbHNlO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHJldHVybiAtRUlOVkFMO1xuK31cbitcbitzdGF0aWMgaW50IG1hY2JfY2JzX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbitcdFx0XHRzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdClcbit7XG4rXHR1MzIgZW5hYmxlX2JpdCwgaWRsZXNsb3BlLCBzcGVlZF9rYnBzLCBjdHJsO1xuK1x0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBrc2V0O1xuK1x0Ym9vbCBpc19xdWV1ZV9hO1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoYnAsIHFvcHQtXHUwMDNlcXVldWUsIFx1MDAyNmVuYWJsZV9iaXQsIFx1MDAyNmlzX3F1ZXVlX2EpO1xuK1x0aWYgKGVycikge1xuK1x0XHRuZXRkZXZfZXJyKG5kZXYsIFwiQ0JTOiBRdWV1ZSAlZCBub3QgZWxpZ2libGUgKG9ubHkgdG9wIDIgcXVldWVzIHN1cHBvcnQgQ0JTKVxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlcXVldWUpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdC8qIGlkbGVzbG9wZSBpcyBjYWxpYnJhdGVkIGZvciB0aGUgY3VycmVudCBsaW5rIHNwZWVkOyBDQlMgaXMgbm90XG4rXHQgKiByZXByb2dyYW1tZWQgb24gbGluay1zcGVlZCBjaGFuZ2VzLCBzbyBpdCBtdXN0IGJlIHJlY29uZmlndXJlZFxuK1x0ICogaWYgdGhlIGxpbmsgc3BlZWQgY2hhbmdlcy5cbitcdCAqL1xuK1x0cGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQoYnAtXHUwMDNlcGh5bGluaywgXHUwMDI2a3NldCk7XG4rXG4rXHRpZiAoIWtzZXQuYmFzZS5zcGVlZCB8fCBrc2V0LmJhc2Uuc3BlZWQgPT0gU1BFRURfVU5LTk9XTikge1xuK1x0XHRuZXRkZXZfZXJyKG5kZXYsIFwiQ0JTOiBJbnZhbGlkIGxpbmsgc3BlZWRcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3BlZWRfa2JwcyA9IGtzZXQuYmFzZS5zcGVlZCAqIDEwMDA7XG4rXG4rXHRpZiAocW9wdC1cdTAwM2VpZGxlc2xvcGUgXHUwMDNjPSAwIHx8ICh1MzIpcW9wdC1cdTAwM2VpZGxlc2xvcGUgXHUwMDNlIHNwZWVkX2ticHMpIHtcbitcdFx0bmV0ZGV2X2VycihuZGV2LCBcIkNCUzogaW52YWxpZCBpZGxlc2xvcGUgJWQgKG11c3QgYmUgMS4uJXUga2JwcylcXG5cIixcbitcdFx0XHQgICBxb3B0LVx1MDAzZWlkbGVzbG9wZSwgc3BlZWRfa2Jwcyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0LyogQ2FsY3VsYXRlIGlkbGVzbG9wZSBmb3IgaGFyZHdhcmUgcmVnaXN0ZXI6XG4rXHQgKiAtIEhpZ2gtc3BlZWQgR0VNOiBzY2FsZSB0byBmdWxsIDMyLWJpdCByZWdpc3RlciByYW5nZVxuK1x0ICogLSBTdGFuZGFyZCBNQUNCOiBtdWx0aXBseSBieSBwb3J0IHRyYW5zbWl0IHJhdGUgZmFjdG9yXG4rXHQgKi9cbitcdGlmIChicC1cdTAwM2VjYXBzIFx1MDAyNiBNQUNCX0NBUFNfSElHSF9TUEVFRClcbitcdFx0aWRsZXNsb3BlID0gRElWX1JPVU5EX1VQX1VMTCgodTY0KXFvcHQtXHUwMDNlaWRsZXNsb3BlICogVTMyX01BWCwgc3BlZWRfa2Jwcyk7XG4rXHRlbHNlXG4rXHRcdGlkbGVzbG9wZSA9ICh1MzIpcW9wdC1cdTAwM2VpZGxlc2xvcGUgKiAoa3NldC5iYXNlLnNwZWVkIFx1MDAzZT0gMTAwMCA/XG4rXHRcdFx0XHRcdCAgICAgICBNQUNCX0NCU19QT1JUX1JBVEVfMUcgOiBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTSk7XG4rXG4rXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2YnAtXHUwMDNlbG9jaykge1xuK1x0XHQvKiBEaXNhYmxlIENCUyBmb3IgdGhlIHF1ZXVlIGJlZm9yZSB1cGRhdGluZyBpZGxlc2xvcGUgKi9cbitcdFx0Y3RybCA9IGdlbV9yZWFkbChicCwgQ0JTX0NPTlRST0wpIFx1MDAyNiB+ZW5hYmxlX2JpdDtcbitcdFx0Z2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGN0cmwpO1xuK1x0XHQvKiBVcGRhdGUgaWRsZXNsb3BlIGZvciB0aGUgcXVldWUgKi9cbitcdFx0aWYgKGlzX3F1ZXVlX2EpXG4rXHRcdFx0Z2VtX3dyaXRlbChicCwgQ0JTX0lETEVTTE9QRV9RX0EsIGlkbGVzbG9wZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRnZW1fd3JpdGVsKGJwLCBDQlNfSURMRVNMT1BFX1FfQiwgaWRsZXNsb3BlKTtcbitcbitcdFx0LyogUmUtZW5hYmxlIENCUyBmb3IgdGhlIHF1ZXVlIHdpdGggbmV3IGlkbGVzbG9wZSAqL1xuK1x0XHRnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCB8IGVuYWJsZV9iaXQpO1xuK1x0fVxuK1xuK1x0bmV0ZGV2X2RiZyhuZGV2LCBcIkNCUzogQ29uZmlndXJlZCBxdWV1ZSAlZCB3aXRoIGlkbGVzbG9wZSAweCV4XFxuXCIsXG4rXHRcdCAgIHFvcHQtXHUwMDNlcXVldWUsIGlkbGVzbG9wZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWFjYl9jYnNfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTggcXVldWVfbnVtKVxuK3tcbitcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0Ym9vbCBpc19xdWV1ZV9hO1xuK1x0dTMyIGVuYWJsZV9iaXQ7XG4rXG4rXHRpZiAobWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtcyhicCwgcXVldWVfbnVtLCBcdTAwMjZlbmFibGVfYml0LCBcdTAwMjZpc19xdWV1ZV9hKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmJwLVx1MDAzZWxvY2spIHtcbitcdFx0Z2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGdlbV9yZWFkbChicCwgQ0JTX0NPTlRST0wpIFx1MDAyNiB+ZW5hYmxlX2JpdCk7XG4rXHRcdGlmIChpc19xdWV1ZV9hKVxuK1x0XHRcdGdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9BLCAwKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9CLCAwKTtcbitcdH1cbitcbitcdG5ldGRldl9kYmcobmRldiwgXCJDQlM6IERpc2FibGVkIHF1ZXVlICVkXFxuXCIsIHF1ZXVlX251bSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWFjYl9zZXR1cF9jYnMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0ICBzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdClcbit7XG4rXHRpZiAocW9wdC1cdTAwM2VlbmFibGUpXG4rXHRcdHJldHVybiBtYWNiX2Nic19hZGQobmRldiwgcW9wdCk7XG4rXG4rXHRtYWNiX2Nic19kZXN0cm95KG5kZXYsIHFvcHQtXHUwMDNlcXVldWUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWFjYl9zZXR1cF9tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0dTggbnVtX3RjID0gcW9wdC1cdTAwM2VudW1fdGM7XG4rXHRpbnQgZXJyO1xuK1x0dTggaTtcbitcbitcdC8qIEhhbmRsZSByZXNldCBjYXNlIGVhcmx5ICovXG4rXHRpZiAoIW51bV90Yykge1xuK1x0XHRuZXRkZXZfcmVzZXRfdGMobmRldik7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0LyogQ29uZmlndXJlIHRyYWZmaWMgY2xhc3NlcyAqL1xuK1x0cW9wdC1cdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcbitcbitcdGVyciA9IG5ldGRldl9zZXRfbnVtX3RjKG5kZXYsIG51bV90Yyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3RjOyBpKyspIHtcbitcdFx0ZXJyID0gbmV0ZGV2X3NldF90Y19xdWV1ZShuZGV2LCBpLCBxb3B0LVx1MDAzZWNvdW50W2ldLFxuK1x0XHRcdFx0XHQgIHFvcHQtXHUwMDNlb2Zmc2V0W2ldKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGVycl9yZXNldF90YztcbitcbitcdFx0bmV0ZGV2X2RiZyhuZGV2LCBcIk1RUFJJTzogVEMlZCAtXHUwMDNlIHF1ZXVlICV1IChjb3VudD0ldSlcXG5cIixcbitcdFx0XHQgICBpLCBxb3B0LVx1MDAzZW9mZnNldFtpXSwgcW9wdC1cdTAwM2Vjb3VudFtpXSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJfcmVzZXRfdGM6XG4rXHRuZXRkZXZfcmVzZXRfdGMobmRldik7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IG1hY2JfdGNfcXVlcnlfY2FwcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdCAgICAgIHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UpXG4re1xuK1x0c3dpdGNoIChiYXNlLVx1MDAzZXR5cGUpIHtcbitcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOiB7XG4rXHRcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbitcbitcdFx0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuK1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBtYWNiX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuIFx0XHRcdCB2b2lkICp0eXBlX2RhdGEpXG4ge1xuK1x0c3RydWN0IG1hY2IgKmJwO1xuK1xuIFx0aWYgKCFkZXYgfHwgIXR5cGVfZGF0YSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRpZiAodHlwZSA9PSBUQ19RVUVSWV9DQVBTKVxuK1x0XHRyZXR1cm4gbWFjYl90Y19xdWVyeV9jYXBzKGRldiwgdHlwZV9kYXRhKTtcbitcbitcdGJwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdGlmICh1bmxpa2VseSghKGRldi1cdTAwM2Vod19mZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19UQykpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHQvKiBDaGVjayBpZiBEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kICovXG4rXHRpZiAodW5saWtlbHkocG1fcnVudGltZV9zdXNwZW5kZWQoXHUwMDI2YnAtXHUwMDNlcGRldi1cdTAwM2VkZXYpKSkge1xuK1x0XHRuZXRkZXZfZXJyKGRldiwgXCJEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxuK1x0XHRyZXR1cm4gbWFjYl9zZXR1cF9tcXByaW8oZGV2LCB0eXBlX2RhdGEpO1xuK1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19DQlM6XG4rXHRcdHJldHVybiBtYWNiX3NldHVwX2NicyhkZXYsIHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX1FESVNDX1RBUFJJTzpcbiBcdFx0cmV0dXJuIG1hY2Jfc2V0dXBfdGFwcmlvKGRldiwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG5AQCAtNDg0Niw4ICs1MDI5LDggQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9SWENTVU07XG4gXHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1NHX0RJU0FCTEVEKVxuIFx0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9TRztcbi1cdC8qIEVuYWJsZSBIV19UQyBpZiBoYXJkd2FyZSBzdXBwb3J0cyBRQlYgKi9cbi1cdGlmIChicC1cdTAwM2VjYXBzIFx1MDAyNiBNQUNCX0NBUFNfUUJWKVxuK1x0LyogRW5hYmxlIFRDIG9mZmxvYWQgZm9yIFRTTi1jYXBhYmxlIGhhcmR3YXJlICovXG4rXHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1RDKVxuIFx0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcbiBcbiBcdGRldi1cdTAwM2VmZWF0dXJlcyA9IGRldi1cdTAwM2Vod19mZWF0dXJlcztcbkBAIC01Njc4LDcgKzU4NjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIHZlcnNhbF9jb25maWcgPSB7XG4gXHQuY2FwcyA9IE1BQ0JfQ0FQU19HSUdBQklUX01PREVfQVZBSUxBQkxFIHwgTUFDQl9DQVBTX0pVTUJPIHxcbiBcdFx0TUFDQl9DQVBTX0dFTV9IQVNfUFRQIHwgTUFDQl9DQVBTX0JEX1JEX1BSRUZFVENIIHxcbiBcdFx0TUFDQl9DQVBTX05FRURfVFNVQ0xLIHwgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEUgfFxuLVx0XHRNQUNCX0NBUFNfUUJWIHxcbitcdFx0TUFDQl9DQVBTX1RDIHxcbiBcdFx0TUFDQl9DQVBTX1VTUklPX0hBU19NSUksXG4gXHQuZG1hX2J1cnN0X2xlbmd0aCA9IDE2LFxuIFx0LmluaXQgPSBpbml0X3Jlc2V0X29wdGlvbmFsLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6MDguODk2NDU2NDA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNTEwNjc5NTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IENhZGVuY2UgTUFDQiBFdGhlcm5ldCBEcml2ZXIgVHJhZmZpYyBDb250cm9sIE9mZmxvYWRzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGFkZGluZyBDQlMgKENyZWRpdC1CYXNlZCBTaGFwZXIpIGFuZCBNUVBSSU8gdHJhZmZpYyBjb250cm9sIG9mZmxvYWQgc3VwcG9ydCB0byB0aGUgQ2FkZW5jZSBNQUNCIEV0aGVybmV0IGRyaXZlci4gRXNzZW50aWFsbHksIGl0IGludHJvZHVjZXMgZnVuY3Rpb25zIGxpa2UgYG1hY2Jfc2V0dXBfY2JzYCBhbmQgYG1hY2Jfc2V0dXBfbXFwcmlvYCwgY2FsbGVkIGZyb20gYG1hY2Jfc2V0dXBfdGNgLCBhbmQgYWxzbyBhZGRzIGBtYWNiX3RjX3F1ZXJ5X2NhcHNgLiBNeSBwcmltYXJ5IGNvbmNlcm4gd2l0aCB0aGVzZSB0eXBlcyBvZiBwYXRjaGVzIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSB0byB1c2VyIHNwYWNlLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRhdGEgZmxvdy5cblxuSSBzZWUgaXQncyBkZWFsaW5nIHdpdGggc3RydWN0dXJlcyBsaWtlIGB0Y19jYnNfcW9wdF9vZmZsb2FkYCwgYHRjX21xcHJpb19xb3B0X29mZmxvYWRgLCBhbmQgYHRjX3F1ZXJ5X2NhcHNfYmFzZWAuIFRoZXNlIGFyZSBwYXNzZWQgdG8gdGhlIGRyaXZlciBmdW5jdGlvbnMgZnJvbSB0aGUgbmV0d29ya2luZyBjb3JlLCB0aGluZ3MgbGlrZSBgdGNfc2V0dXBfY2JfY2FsbGAsIGB0Y19zZXR1cF9xZGlzY19jYnNgLCBldGMuIFRoZSBuZXR3b3JraW5nIGNvcmUsIHNwZWNpZmljYWxseSBgbmV0L3NjaGVkL3NjaF9jYnMuY2AgYW5kIGBuZXQvc2NoZWQvc2NoX21xcHJpby5jYCwgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgYW5kIHBvcHVsYXRpbmcgdGhlc2Ugc3RydWN0dXJlcy5cblxuTm93LCB0aGUgZHJpdmVyICpyZWFkcyogZnJvbSB0aGVzZSBzdHJ1Y3R1cmVzIHRvIGNvbmZpZ3VyZSB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJbXBvcnRhbnRseSwgaXQgZG9lc24ndCB3cml0ZSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIGJhY2sgaW50byB0aGVzZSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgdGhlbiBiZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gT2theSwgd2FpdCwgYG1hY2JfdGNfcXVlcnlfY2Fwc2AgZG9lcyB3cml0ZSB0byBgYmFzZS1cdTAwM2VjYXBzYC4uLiBidXQgdGhpcyBpcyBzdGFuZGFyZCBmb3IgYFRDX1FVRVJZX0NBUFNgLCBhbmQgdGhlIGBjYXBzYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZXIgKGUuZy4sIGluIGBtcXByaW9faW5pdGApIGFuZCBub3QgY29waWVkIGRpcmVjdGx5IHRvIHVzZXIgc3BhY2UuIEl0J3MgdXNlZCBpbnRlcm5hbGx5IGZvciB2YWxpZGF0aW9uIG9mIHVzZXIgaW5wdXQuIE5vIGlzc3VlIHRoZXJlLlxuXG5MZXQncyBsb29rIGF0IHRoZSBkYXRhIGJlaW5nIHJlYWQgbW9yZSBjbG9zZWx5LiBJbiBgbWFjYl9zZXR1cF9jYnNgLCBpdCByZWFkcyBgcW9wdC1cdTAwM2VxdWV1ZWAsIGBxb3B0LVx1MDAzZWlkbGVzbG9wZWAsIGFuZCBgcW9wdC1cdTAwM2VlbmFibGVgLiBUaGVuIGl0IGNhbGN1bGF0ZXMgYW5kIHdyaXRlcyB0byBoYXJkd2FyZSByZWdpc3RlcnMuIEluIGBtYWNiX3NldHVwX21xcHJpb2AsIGl0IHJlYWRzIGBtcXByaW8tXHUwMDNlcW9wdC5udW1fdGNgLCBgbXFwcmlvLVx1MDAzZXFvcHQuY291bnRbaV1gLCBhbmQgYG1xcHJpby1cdTAwM2Vxb3B0Lm9mZnNldFtpXWAsIGFuZCBpdCBjYWxscyBgbmV0ZGV2X3NldF9udW1fdGNgIGFuZCBgbmV0ZGV2X3NldF90Y19xdWV1ZWAuXG5cbkNydWNpYWxseSwgdGhlcmUgaXMgbm8gZGlyZWN0IGludGVyYWN0aW9uIHdpdGggdXNlci1zcGFjZSBidWZmZXJzLCBhbmQgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIGNvcGllZCAqdG8qIHVzZXIgc3BhY2UuIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgd2hlcmUgd2UgbWlnaHQgaW5hZHZlcnRlbnRseSByZWFkIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGxhdGVyLiBJIGFsc28gZG9uJ3Qgc2VlIGFueSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aCBtb2RpZmljYXRpb25zIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSBleGlzdGluZyBidWZmZXJzLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCBpcyBzdHJpY3RseSBhYm91dCBhZGRpbmcgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0LiBBbnkgYnVncyB3b3VsZCBsaWtlbHkgYmUgbG9naWMgZXJyb3JzLCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcyAoZXNwZWNpYWxseSB3aXRoIGBudW1fdGNgLCBidXQgY29yZSBuZXR3b3JraW5nIHNlZW1zIHRvIHZhbGlkYXRlIHRob3NlKSwgb3IgbWlzY29uZmlndXJhdGlvbiBvZiB0aGUgaGFyZHdhcmUuIFRoZXNlIGRvbid0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cbkdpdmVuIHRoYXQsIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgcHJvYmxlbXMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtc2A6IFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRvIGAqZW5hYmxlX2JpdGAgYW5kIGAqaXNfcXVldWVfYWAgaWYgaXQgcmV0dXJucyAwLiBJIHNlZSB0aGF0IHRoZXJlIGFyZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGluIGBtYWNiX2Nic19hZGRgLCBhbmQgaW4gYG1hY2JfY2JzX2Rlc3Ryb3lgLiBUaGVyZSBpcyBhbHNvIGFuIGVycm9yIGNoZWNrLiBUaGUgY2FsbHMgaW4gdGhvc2UgZnVuY3Rpb25zIGNoZWNrIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgMCwgc28gYm90aCBvZiB0aG9zZSB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGV5IGFyZSByZWFkLlxuXG5TbywgKmRlZmluaXRlbHkqIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UgdGhlcmUuXG5cbioqQ29uY2x1c2lvbjogTmVlZHNLTVNBTiA9IGZhbHNlLioqXG5cbioqUmVhc29uaW5nOioqIFRoaXMgcGF0Y2ggYWRkcyBoYXJkd2FyZSBvZmZsb2FkIHN1cHBvcnQgZm9yIENCUyBhbmQgTVFQUklPIHRyYWZmaWMgY29udHJvbCBpbiB0aGUgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEl0IHJlYWRzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgbmV0d29ya2luZyBjb3JlIGFuZCBwcm9ncmFtcyBoYXJkd2FyZSByZWdpc3RlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gUG90ZW50aWFsIG1lbW9yeSBlcnJvcnMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd2lsbCBiZSBjYXVnaHQgYnkgS0FTQU4uIFdlIGFyZSBnb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzY4LCJPdXRwdXRUb2tlbnMiOjE1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxOTozMi40MDcxMzk3MDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0IGZvciBDQlMgYW5kIE1RUFJJTyB0cmFmZmljIGNvbnRyb2wgaW4gdGhlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyLiBJdCByZWFkcyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgdGhlIG5ldHdvcmtpbmcgY29yZSBhbmQgcHJvZ3JhbXMgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSB2YXJpYWJsZXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSAoYGVuYWJsZV9iaXRgLCBgaXNfcXVldWVfYWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBlcnJvcnMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0IGZvciBDQlMgYW5kIE1RUFJJTyB0cmFmZmljIGNvbnRyb2wgaW4gdGhlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyLiBJdCByZWFkcyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgdGhlIG5ldHdvcmtpbmcgY29yZSBhbmQgcHJvZ3JhbXMgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSB2YXJpYWJsZXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSAoYGVuYWJsZV9iaXRgLCBgaXNfcXVldWVfYWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBlcnJvcnMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz8f7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 12:01:38 +0000 UTC FinishedAt: 2026-08-07 12:36:32 +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": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_CADENCE", "MACB", "MACB_PCI" ], "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": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_CADENCE", "MACB", "MACB_PCI" ], "series_id": "8d580efd-687a-492b-a0af-e386b41047e3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "macb_setup_cbs", "macb_cbs_add", "macb_cbs_destroy", "macb_setup_mqprio", "macb_tc_query_caps" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfQ0FERU5DRSYjMzQ7LAogICAgJiMzNDtNQUNCJiMzNDssCiAgICAmIzM0O01BQ0JfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjYl9zZXR1cF9jYnMmIzM0OywKICAgICYjMzQ7bWFjYl9jYnNfYWRkJiMzNDssCiAgICAmIzM0O21hY2JfY2JzX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWFjYl9zZXR1cF9tcXByaW8mIzM0OywKICAgICYjMzQ7bWFjYl90Y19xdWVyeV9jYXBzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBvZmZsb2FkIHN1cHBvcnQgZm9yIENCUyBhbmQgTVFQUklPIHRyYWZmaWMgY29udHJvbCBpbiB0aGUgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEl0IHJlYWRzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgbmV0d29ya2luZyBjb3JlIGFuZCBwcm9ncmFtcyBoYXJkd2FyZSByZWdpc3RlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlIHZhcmlhYmxlcyBwYXNzZWQgYnkgcmVmZXJlbmNlIChgZW5hYmxlX2JpdGAsIGBpc19xdWV1ZV9hYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQ0JTIChDcmVkaXQtQmFzZWQgU2hhcGVyKSBhbmQgTVFQUklPIChNdWx0aXBsZSBRdWV1ZSBQcmlvcml0eSkgdHJhZmZpYyBjb250cm9sIG9mZmxvYWRzIHRvIHRoZSBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyLiBUaGVzZSBmZWF0dXJlcyBhcmUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rICh0YyBxZGlzYykgYW5kIGludHJvZHVjZSBuZXcgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBsb2dpYyB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NjRhMjljMzllZTdmYzc1N2UxNzIwMmRjZjUyYTljN2JiOGZjNGZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMjoxODozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG5pbmRleCBhMTEwNTI1NjU0MzZhLi5kNWIyODQ1OWZkNzVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG5AQCAtMTg0LDYgJiM0MzsxODQsOSBAQFxuICNkZWZpbmUgR0VNX0RDRkc4XHRcdDB4MDI5QyAvKiBEZXNpZ24gQ29uZmlnIDggKi9cbiAjZGVmaW5lIEdFTV9EQ0ZHMTBcdFx0MHgwMkE0IC8qIERlc2lnbiBDb25maWcgMTAgKi9cbiAjZGVmaW5lIEdFTV9EQ0ZHMTJcdFx0MHgwMkFDIC8qIERlc2lnbiBDb25maWcgMTIgKi9cbiYjNDM7I2RlZmluZSBHRU1fQ0JTX0NPTlRST0xcdFx0MHgwNEJDIC8qIENCUyBDb250cm9sIFJlZ2lzdGVyICovXG4mIzQzOyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9BXHQweDA0QzAgLyogQ0JTIElkbGVTbG9wZSBRdWV1ZSBBICovXG4mIzQzOyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9CXHQweDA0QzQgLyogQ0JTIElkbGVTbG9wZSBRdWV1ZSBCICovXG4gI2RlZmluZSBHRU1fRU5TVF9DT05UUk9MXHQweDA4ODAgLyogRU5TVCBjb250cm9sIHJlZ2lzdGVyICovXG4gI2RlZmluZSBHRU1fVVNYX0NPTlRST0xcdFx0MHgwQTgwIC8qIEhpZ2ggc3BlZWQgUENTIGNvbnRyb2wgcmVnaXN0ZXIgKi9cbiAjZGVmaW5lIEdFTV9VU1hfU1RBVFVTXHRcdDB4MEE4OCAvKiBIaWdoIHNwZWVkIFBDUyBzdGF0dXMgcmVnaXN0ZXIgKi9cbkBAIC0yMjQsNiAmIzQzOzIyNywxMiBAQFxuICNkZWZpbmUgR0VNX0VOU1RfT05fVElNRShod19xKVx0XHQoMHgwODIwICYjNDM7ICgoaHdfcSkgXHUwMDNjXHUwMDNjIDIpKVxuICNkZWZpbmUgR0VNX0VOU1RfT0ZGX1RJTUUoaHdfcSlcdFx0KDB4MDg0MCAmIzQzOyAoKGh3X3EpIFx1MDAzY1x1MDAzYyAyKSlcbiBcbiYjNDM7LyogQml0ZmllbGRzIGluIENCU19DT05UUk9MICovXG4mIzQzOyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9PRkZTRVRcdDBcbiYjNDM7I2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9BX1NJWkVcdDFcbiYjNDM7I2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9CX09GRlNFVFx0MVxuJiM0MzsjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0JfU0laRVx0MVxuJiM0MztcbiAvKiBCaXRmaWVsZHMgaW4gRU5TVF9DT05UUk9MICovXG4gI2RlZmluZSBHRU1fRU5TVF9ESVNBQkxFX1FVRVVFX09GRlNFVFx0MTZcbiBcbkBAIC03NjgsNyAmIzQzOzc3Nyw3IEBAXG4gI2RlZmluZSBNQUNCX0NBUFNfTUlJT05SR01JSVx0XHRcdEJJVCg5KVxuICNkZWZpbmUgTUFDQl9DQVBTX05FRURfVFNVQ0xLXHRcdFx0QklUKDEwKVxuICNkZWZpbmUgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEVcdFx0XHRCSVQoMTEpXG4tI2RlZmluZSBNQUNCX0NBUFNfUUJWXHRcdFx0XHRCSVQoMTIpXG4mIzQzOyNkZWZpbmUgTUFDQl9DQVBTX1RDXHRcdFx0XHRCSVQoMTIpXG4gI2RlZmluZSBNQUNCX0NBUFNfUENTXHRcdFx0XHRCSVQoMTMpXG4gI2RlZmluZSBNQUNCX0NBUFNfSElHSF9TUEVFRFx0XHRcdEJJVCgxNClcbiAjZGVmaW5lIE1BQ0JfQ0FQU19DTEtfSFdfQ0hHXHRcdFx0QklUKDE1KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5pbmRleCBkMzk0ZjFmNDNiNjg1Li5hMGE2ODQ5MDUxOWU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuQEAgLTk5LDYgJiM0Mzs5OSwxMCBAQCBzdHJ1Y3Qgc2lmaXZlX2Z1NTQwX21hY2JfbWdtdCB7XG4gXG4gI2RlZmluZSBNQUNCX01ESU9fVElNRU9VVFx0MTAwMDAwMCAvKiBpbiB1c2VjcyAqL1xuIFxuJiM0MzsvKiBDQlMgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvcnM6IDEwMDAvaW50ZXJmYWNlX3dpZHRoICovXG4mIzQzOyNkZWZpbmUgTUFDQl9DQlNfUE9SVF9SQVRFXzFHXHRcdDEyNVx0LyogMTAwMC84IGZvciBHTUlJICg4LWJpdCkgKi9cbiYjNDM7I2RlZmluZSBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTVx0MjUwXHQvKiAxMDAwLzQgZm9yIE1JSSAoNC1iaXQpICovXG4mIzQzO1xuIC8qIERNQSBidWZmZXIgZGVzY3JpcHRvciBtaWdodCBiZSBkaWZmZXJlbnQgc2l6ZVxuICAqIGRlcGVuZHMgb24gaGFyZHdhcmUgY29uZmlndXJhdGlvbjpcbiAgKlxuQEAgLTQ0OTksMTggJiM0Mzs0NTAzLDggQEAgc3RhdGljIHZvaWQgbWFjYl90YXByaW9fZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRcdCAgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnRhcHJpbylcbiB7XG4tXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGludCBlcnIgPSAwO1xuIFxuLVx0aWYgKHVubGlrZWx5KCEobmRldi1cdTAwM2Vod19mZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19UQykpKVxuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tXG4tXHQvKiBDaGVjayBpZiBEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kICovXG4tXHRpZiAodW5saWtlbHkocG1fcnVudGltZV9zdXNwZW5kZWQoXHUwMDI2YnAtXHUwMDNlcGRldi1cdTAwM2VkZXYpKSkge1xuLVx0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O0RldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmRcXG5cJiMzNDspO1xuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tXHR9XG4tXG4gXHRzd2l0Y2ggKHRhcHJpby1cdTAwM2VjbWQpIHtcbiBcdGNhc2UgVEFQUklPX0NNRF9SRVBMQUNFOlxuIFx0XHRlcnIgPSBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKG5kZXYsIHRhcHJpbyk7XG5AQCAtNDUyNSwxMyAmIzQzOzQ1MTksMjAyIEBAIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKHN0cnVjdCBtYWNiICpicCwgdTggcXVldWVfbnVtLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyICplbmFibGVfYml0LCBib29sICppc19xdWV1ZV9hKVxuJiM0Mzt7XG4mIzQzO1x0LyogUXVldWUgQSBpcyBoaWdoZXN0IHByaW9yaXR5IChudW1fcXVldWVzIC0gMSkgKi9cbiYjNDM7XHRpZiAocXVldWVfbnVtID09IGJwLVx1MDAzZW51bV9xdWV1ZXMgLSAxKSB7XG4mIzQzO1x0XHQqZW5hYmxlX2JpdCA9IEdFTV9CSVQoQ0JTX0VOQUJMRV9RVUVVRV9BKTtcbiYjNDM7XHRcdCppc19xdWV1ZV9hID0gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUXVldWUgQiBpcyBzZWNvbmQgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDIpICovXG4mIzQzO1x0aWYgKHF1ZXVlX251bSA9PSBicC1cdTAwM2VudW1fcXVldWVzIC0gMikge1xuJiM0MztcdFx0KmVuYWJsZV9iaXQgPSBHRU1fQklUKENCU19FTkFCTEVfUVVFVUVfQik7XG4mIzQzO1x0XHQqaXNfcXVldWVfYSA9IGZhbHNlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtYWNiX2Nic19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4mIzQzO1x0XHRcdHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGVuYWJsZV9iaXQsIGlkbGVzbG9wZSwgc3BlZWRfa2JwcywgY3RybDtcbiYjNDM7XHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBrc2V0O1xuJiM0MztcdGJvb2wgaXNfcXVldWVfYTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKGJwLCBxb3B0LVx1MDAzZXF1ZXVlLCBcdTAwMjZlbmFibGVfYml0LCBcdTAwMjZpc19xdWV1ZV9hKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O0NCUzogUXVldWUgJWQgbm90IGVsaWdpYmxlIChvbmx5IHRvcCAyIHF1ZXVlcyBzdXBwb3J0IENCUylcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHFvcHQtXHUwMDNlcXVldWUpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBpZGxlc2xvcGUgaXMgY2FsaWJyYXRlZCBmb3IgdGhlIGN1cnJlbnQgbGluayBzcGVlZDsgQ0JTIGlzIG5vdFxuJiM0MztcdCAqIHJlcHJvZ3JhbW1lZCBvbiBsaW5rLXNwZWVkIGNoYW5nZXMsIHNvIGl0IG11c3QgYmUgcmVjb25maWd1cmVkXG4mIzQzO1x0ICogaWYgdGhlIGxpbmsgc3BlZWQgY2hhbmdlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldChicC1cdTAwM2VwaHlsaW5rLCBcdTAwMjZrc2V0KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFrc2V0LmJhc2Uuc3BlZWQgfHwga3NldC5iYXNlLnNwZWVkID09IFNQRUVEX1VOS05PV04pIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmRldiwgXCYjMzQ7Q0JTOiBJbnZhbGlkIGxpbmsgc3BlZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzcGVlZF9rYnBzID0ga3NldC5iYXNlLnNwZWVkICogMTAwMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHFvcHQtXHUwMDNlaWRsZXNsb3BlIFx1MDAzYz0gMCB8fCAodTMyKXFvcHQtXHUwMDNlaWRsZXNsb3BlIFx1MDAzZSBzcGVlZF9rYnBzKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O0NCUzogaW52YWxpZCBpZGxlc2xvcGUgJWQgKG11c3QgYmUgMS4uJXUga2JwcylcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHFvcHQtXHUwMDNlaWRsZXNsb3BlLCBzcGVlZF9rYnBzKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQ2FsY3VsYXRlIGlkbGVzbG9wZSBmb3IgaGFyZHdhcmUgcmVnaXN0ZXI6XG4mIzQzO1x0ICogLSBIaWdoLXNwZWVkIEdFTTogc2NhbGUgdG8gZnVsbCAzMi1iaXQgcmVnaXN0ZXIgcmFuZ2VcbiYjNDM7XHQgKiAtIFN0YW5kYXJkIE1BQ0I6IG11bHRpcGx5IGJ5IHBvcnQgdHJhbnNtaXQgcmF0ZSBmYWN0b3JcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX0hJR0hfU1BFRUQpXG4mIzQzO1x0XHRpZGxlc2xvcGUgPSBESVZfUk9VTkRfVVBfVUxMKCh1NjQpcW9wdC1cdTAwM2VpZGxlc2xvcGUgKiBVMzJfTUFYLCBzcGVlZF9rYnBzKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRpZGxlc2xvcGUgPSAodTMyKXFvcHQtXHUwMDNlaWRsZXNsb3BlICogKGtzZXQuYmFzZS5zcGVlZCBcdTAwM2U9IDEwMDAgP1xuJiM0MztcdFx0XHRcdFx0ICAgICAgIE1BQ0JfQ0JTX1BPUlRfUkFURV8xRyA6IE1BQ0JfQ0JTX1BPUlRfUkFURV8xMF8xMDBNKTtcbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmJwLVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdC8qIERpc2FibGUgQ0JTIGZvciB0aGUgcXVldWUgYmVmb3JlIHVwZGF0aW5nIGlkbGVzbG9wZSAqL1xuJiM0MztcdFx0Y3RybCA9IGdlbV9yZWFkbChicCwgQ0JTX0NPTlRST0wpIFx1MDAyNiB+ZW5hYmxlX2JpdDtcbiYjNDM7XHRcdGdlbV93cml0ZWwoYnAsIENCU19DT05UUk9MLCBjdHJsKTtcbiYjNDM7XHRcdC8qIFVwZGF0ZSBpZGxlc2xvcGUgZm9yIHRoZSBxdWV1ZSAqL1xuJiM0MztcdFx0aWYgKGlzX3F1ZXVlX2EpXG4mIzQzO1x0XHRcdGdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9BLCBpZGxlc2xvcGUpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRnZW1fd3JpdGVsKGJwLCBDQlNfSURMRVNMT1BFX1FfQiwgaWRsZXNsb3BlKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSZS1lbmFibGUgQ0JTIGZvciB0aGUgcXVldWUgd2l0aCBuZXcgaWRsZXNsb3BlICovXG4mIzQzO1x0XHRnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCB8IGVuYWJsZV9iaXQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2RiZyhuZGV2LCBcJiMzNDtDQlM6IENvbmZpZ3VyZWQgcXVldWUgJWQgd2l0aCBpZGxlc2xvcGUgMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIHFvcHQtXHUwMDNlcXVldWUsIGlkbGVzbG9wZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtYWNiX2Nic19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1OCBxdWV1ZV9udW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRib29sIGlzX3F1ZXVlX2E7XG4mIzQzO1x0dTMyIGVuYWJsZV9iaXQ7XG4mIzQzO1xuJiM0MztcdGlmIChtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKGJwLCBxdWV1ZV9udW0sIFx1MDAyNmVuYWJsZV9iaXQsIFx1MDAyNmlzX3F1ZXVlX2EpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2YnAtXHUwMDNlbG9jaykge1xuJiM0MztcdFx0Z2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGdlbV9yZWFkbChicCwgQ0JTX0NPTlRST0wpIFx1MDAyNiB+ZW5hYmxlX2JpdCk7XG4mIzQzO1x0XHRpZiAoaXNfcXVldWVfYSlcbiYjNDM7XHRcdFx0Z2VtX3dyaXRlbChicCwgQ0JTX0lETEVTTE9QRV9RX0EsIDApO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRnZW1fd3JpdGVsKGJwLCBDQlNfSURMRVNMT1BFX1FfQiwgMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRkZXZfZGJnKG5kZXYsIFwmIzM0O0NCUzogRGlzYWJsZWQgcXVldWUgJWRcXG5cJiMzNDssIHF1ZXVlX251bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWFjYl9zZXR1cF9jYnMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpXG4mIzQzO3tcbiYjNDM7XHRpZiAocW9wdC1cdTAwM2VlbmFibGUpXG4mIzQzO1x0XHRyZXR1cm4gbWFjYl9jYnNfYWRkKG5kZXYsIHFvcHQpO1xuJiM0MztcbiYjNDM7XHRtYWNiX2Nic19kZXN0cm95KG5kZXYsIHFvcHQtXHUwMDNlcXVldWUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1hY2Jfc2V0dXBfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHR1OCBudW1fdGMgPSBxb3B0LVx1MDAzZW51bV90YztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdHU4IGk7XG4mIzQzO1xuJiM0MztcdC8qIEhhbmRsZSByZXNldCBjYXNlIGVhcmx5ICovXG4mIzQzO1x0aWYgKCFudW1fdGMpIHtcbiYjNDM7XHRcdG5ldGRldl9yZXNldF90YyhuZGV2KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQ29uZmlndXJlIHRyYWZmaWMgY2xhc3NlcyAqL1xuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4mIzQzO1xuJiM0MztcdGVyciA9IG5ldGRldl9zZXRfbnVtX3RjKG5kZXYsIG51bV90Yyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV90YzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGVyciA9IG5ldGRldl9zZXRfdGNfcXVldWUobmRldiwgaSwgcW9wdC1cdTAwM2Vjb3VudFtpXSxcbiYjNDM7XHRcdFx0XHRcdCAgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzZXRfdGM7XG4mIzQzO1xuJiM0MztcdFx0bmV0ZGV2X2RiZyhuZGV2LCBcJiMzNDtNUVBSSU86IFRDJWQgLVx1MDAzZSBxdWV1ZSAldSAoY291bnQ9JXUpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBpLCBxb3B0LVx1MDAzZW9mZnNldFtpXSwgcW9wdC1cdTAwM2Vjb3VudFtpXSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9yZXNldF90YzpcbiYjNDM7XHRuZXRkZXZfcmVzZXRfdGMobmRldik7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtYWNiX3RjX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoYmFzZS1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86IHtcbiYjNDM7XHRcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbiYjNDM7XG4mIzQzO1x0XHRjYXBzLVx1MDAzZXZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0XHQgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbWFjYiAqYnA7XG4mIzQzO1xuIFx0aWYgKCFkZXYgfHwgIXR5cGVfZGF0YSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0aWYgKHR5cGUgPT0gVENfUVVFUllfQ0FQUylcbiYjNDM7XHRcdHJldHVybiBtYWNiX3RjX3F1ZXJ5X2NhcHMoZGV2LCB0eXBlX2RhdGEpO1xuJiM0MztcbiYjNDM7XHRicCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghKGRldi1cdTAwM2Vod19mZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19UQykpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKiBDaGVjayBpZiBEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KHBtX3J1bnRpbWVfc3VzcGVuZGVkKFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2KSkpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4mIzQzO1x0XHRyZXR1cm4gbWFjYl9zZXR1cF9tcXByaW8oZGV2LCB0eXBlX2RhdGEpO1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfQ0JTOlxuJiM0MztcdFx0cmV0dXJuIG1hY2Jfc2V0dXBfY2JzKGRldiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfVEFQUklPOlxuIFx0XHRyZXR1cm4gbWFjYl9zZXR1cF90YXByaW8oZGV2LCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbkBAIC00ODQ2LDggJiM0Mzs1MDI5LDggQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9SWENTVU07XG4gXHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1NHX0RJU0FCTEVEKVxuIFx0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9TRztcbi1cdC8qIEVuYWJsZSBIV19UQyBpZiBoYXJkd2FyZSBzdXBwb3J0cyBRQlYgKi9cbi1cdGlmIChicC1cdTAwM2VjYXBzIFx1MDAyNiBNQUNCX0NBUFNfUUJWKVxuJiM0MztcdC8qIEVuYWJsZSBUQyBvZmZsb2FkIGZvciBUU04tY2FwYWJsZSBoYXJkd2FyZSAqL1xuJiM0MztcdGlmIChicC1cdTAwM2VjYXBzIFx1MDAyNiBNQUNCX0NBUFNfVEMpXG4gXHRcdGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xuIFxuIFx0ZGV2LVx1MDAzZWZlYXR1cmVzID0gZGV2LVx1MDAzZWh3X2ZlYXR1cmVzO1xuQEAgLTU2NzgsNyAmIzQzOzU4NjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIHZlcnNhbF9jb25maWcgPSB7XG4gXHQuY2FwcyA9IE1BQ0JfQ0FQU19HSUdBQklUX01PREVfQVZBSUxBQkxFIHwgTUFDQl9DQVBTX0pVTUJPIHxcbiBcdFx0TUFDQl9DQVBTX0dFTV9IQVNfUFRQIHwgTUFDQl9DQVBTX0JEX1JEX1BSRUZFVENIIHxcbiBcdFx0TUFDQl9DQVBTX05FRURfVFNVQ0xLIHwgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEUgfFxuLVx0XHRNQUNCX0NBUFNfUUJWIHxcbiYjNDM7XHRcdE1BQ0JfQ0FQU19UQyB8XG4gXHRcdE1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLFxuIFx0LmRtYV9idXJzdF9sZW5ndGggPSAxNixcbiBcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9DQURFTkNFJiMzNDssCiAgICAmIzM0O01BQ0ImIzM0OywKICAgICYjMzQ7TUFDQl9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWNiX3NldHVwX2NicyYjMzQ7LAogICAgJiMzNDttYWNiX2Nic19hZGQmIzM0OywKICAgICYjMzQ7bWFjYl9jYnNfZGVzdHJveSYjMzQ7LAogICAgJiMzNDttYWNiX3NldHVwX21xcHJpbyYjMzQ7LAogICAgJiMzNDttYWNiX3RjX3F1ZXJ5X2NhcHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBDQlMgKENyZWRpdC1CYXNlZCBTaGFwZXIpIGFuZCBNUVBSSU8gKE11bHRpcGxlIFF1ZXVlIFByaW9yaXR5KSB0cmFmZmljIGNvbnRyb2wgb2ZmbG9hZHMgdG8gdGhlIENhZGVuY2UgTUFDQiBFdGhlcm5ldCBkcml2ZXIuIFRoZXNlIGZlYXR1cmVzIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgKHRjIHFkaXNjKSBhbmQgaW50cm9kdWNlIG5ldyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGxvZ2ljIHRoYXQgY2FuIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY2NGEyOWMzOWVlN2ZjNzU3ZTE3MjAyZGNmNTJhOWM3YmI4ZmM0ZmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDEyOjE4OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaAppbmRleCBhMTEwNTI1NjU0MzZhLi5kNWIyODQ1OWZkNzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaApAQCAtMTg0LDYgJiM0MzsxODQsOSBAQAogI2RlZmluZSBHRU1fRENGRzgJCTB4MDI5QyAvKiBEZXNpZ24gQ29uZmlnIDggKi8KICNkZWZpbmUgR0VNX0RDRkcxMAkJMHgwMkE0IC8qIERlc2lnbiBDb25maWcgMTAgKi8KICNkZWZpbmUgR0VNX0RDRkcxMgkJMHgwMkFDIC8qIERlc2lnbiBDb25maWcgMTIgKi8KJiM0MzsjZGVmaW5lIEdFTV9DQlNfQ09OVFJPTAkJMHgwNEJDIC8qIENCUyBDb250cm9sIFJlZ2lzdGVyICovCiYjNDM7I2RlZmluZSBHRU1fQ0JTX0lETEVTTE9QRV9RX0EJMHgwNEMwIC8qIENCUyBJZGxlU2xvcGUgUXVldWUgQSAqLwomIzQzOyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9CCTB4MDRDNCAvKiBDQlMgSWRsZVNsb3BlIFF1ZXVlIEIgKi8KICNkZWZpbmUgR0VNX0VOU1RfQ09OVFJPTAkweDA4ODAgLyogRU5TVCBjb250cm9sIHJlZ2lzdGVyICovCiAjZGVmaW5lIEdFTV9VU1hfQ09OVFJPTAkJMHgwQTgwIC8qIEhpZ2ggc3BlZWQgUENTIGNvbnRyb2wgcmVnaXN0ZXIgKi8KICNkZWZpbmUgR0VNX1VTWF9TVEFUVVMJCTB4MEE4OCAvKiBIaWdoIHNwZWVkIFBDUyBzdGF0dXMgcmVnaXN0ZXIgKi8KQEAgLTIyNCw2ICYjNDM7MjI3LDEyIEBACiAjZGVmaW5lIEdFTV9FTlNUX09OX1RJTUUoaHdfcSkJCSgweDA4MjAgJiM0MzsgKChod19xKSAmbHQ7Jmx0OyAyKSkKICNkZWZpbmUgR0VNX0VOU1RfT0ZGX1RJTUUoaHdfcSkJCSgweDA4NDAgJiM0MzsgKChod19xKSAmbHQ7Jmx0OyAyKSkKIAomIzQzOy8qIEJpdGZpZWxkcyBpbiBDQlNfQ09OVFJPTCAqLwomIzQzOyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9PRkZTRVQJMAomIzQzOyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9TSVpFCTEKJiM0MzsjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0JfT0ZGU0VUCTEKJiM0MzsjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0JfU0laRQkxCiYjNDM7CiAvKiBCaXRmaWVsZHMgaW4gRU5TVF9DT05UUk9MICovCiAjZGVmaW5lIEdFTV9FTlNUX0RJU0FCTEVfUVVFVUVfT0ZGU0VUCTE2CiAKQEAgLTc2OCw3ICYjNDM7Nzc3LDcgQEAKICNkZWZpbmUgTUFDQl9DQVBTX01JSU9OUkdNSUkJCQlCSVQoOSkKICNkZWZpbmUgTUFDQl9DQVBTX05FRURfVFNVQ0xLCQkJQklUKDEwKQogI2RlZmluZSBNQUNCX0NBUFNfUVVFVUVfRElTQUJMRQkJCUJJVCgxMSkKLSNkZWZpbmUgTUFDQl9DQVBTX1FCVgkJCQlCSVQoMTIpCiYjNDM7I2RlZmluZSBNQUNCX0NBUFNfVEMJCQkJQklUKDEyKQogI2RlZmluZSBNQUNCX0NBUFNfUENTCQkJCUJJVCgxMykKICNkZWZpbmUgTUFDQl9DQVBTX0hJR0hfU1BFRUQJCQlCSVQoMTQpCiAjZGVmaW5lIE1BQ0JfQ0FQU19DTEtfSFdfQ0hHCQkJQklUKDE1KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMKaW5kZXggZDM5NGYxZjQzYjY4NS4uYTBhNjg0OTA1MTllNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jCkBAIC05OSw2ICYjNDM7OTksMTAgQEAgc3RydWN0IHNpZml2ZV9mdTU0MF9tYWNiX21nbXQgewogCiAjZGVmaW5lIE1BQ0JfTURJT19USU1FT1VUCTEwMDAwMDAgLyogaW4gdXNlY3MgKi8KIAomIzQzOy8qIENCUyBwb3J0IHRyYW5zbWl0IHJhdGUgZmFjdG9yczogMTAwMC9pbnRlcmZhY2Vfd2lkdGggKi8KJiM0MzsjZGVmaW5lIE1BQ0JfQ0JTX1BPUlRfUkFURV8xRwkJMTI1CS8qIDEwMDAvOCBmb3IgR01JSSAoOC1iaXQpICovCiYjNDM7I2RlZmluZSBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTQkyNTAJLyogMTAwMC80IGZvciBNSUkgKDQtYml0KSAqLwomIzQzOwogLyogRE1BIGJ1ZmZlciBkZXNjcmlwdG9yIG1pZ2h0IGJlIGRpZmZlcmVudCBzaXplCiAgKiBkZXBlbmRzIG9uIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb246CiAgKgpAQCAtNDQ5OSwxOCAmIzQzOzQ1MDMsOCBAQCBzdGF0aWMgdm9pZCBtYWNiX3RhcHJpb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogc3RhdGljIGludCBtYWNiX3NldHVwX3RhcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAkJCSAgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnRhcHJpbykKIHsKLQlzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlpbnQgZXJyID0gMDsKIAotCWlmICh1bmxpa2VseSghKG5kZXYtJmd0O2h3X2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfVEMpKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JLyogQ2hlY2sgaWYgRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZCAqLwotCWlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZCgmYW1wO2JwLSZndDtwZGV2LSZndDtkZXYpKSkgewotCQluZXRkZXZfZXJyKG5kZXYsICYjMzQ7RGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxuJiMzNDspOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCiAJc3dpdGNoICh0YXByaW8tJmd0O2NtZCkgewogCWNhc2UgVEFQUklPX0NNRF9SRVBMQUNFOgogCQllcnIgPSBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKG5kZXYsIHRhcHJpbyk7CkBAIC00NTI1LDEzICYjNDM7NDUxOSwyMDIgQEAgc3RhdGljIGludCBtYWNiX3NldHVwX3RhcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RhdGljIGludCBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKHN0cnVjdCBtYWNiICpicCwgdTggcXVldWVfbnVtLAomIzQzOwkJCQkgICAgIHUzMiAqZW5hYmxlX2JpdCwgYm9vbCAqaXNfcXVldWVfYSkKJiM0Mzt7CiYjNDM7CS8qIFF1ZXVlIEEgaXMgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDEpICovCiYjNDM7CWlmIChxdWV1ZV9udW0gPT0gYnAtJmd0O251bV9xdWV1ZXMgLSAxKSB7CiYjNDM7CQkqZW5hYmxlX2JpdCA9IEdFTV9CSVQoQ0JTX0VOQUJMRV9RVUVVRV9BKTsKJiM0MzsJCSppc19xdWV1ZV9hID0gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFF1ZXVlIEIgaXMgc2Vjb25kIGhpZ2hlc3QgcHJpb3JpdHkgKG51bV9xdWV1ZXMgLSAyKSAqLwomIzQzOwlpZiAocXVldWVfbnVtID09IGJwLSZndDtudW1fcXVldWVzIC0gMikgewomIzQzOwkJKmVuYWJsZV9iaXQgPSBHRU1fQklUKENCU19FTkFCTEVfUVVFVUVfQik7CiYjNDM7CQkqaXNfcXVldWVfYSA9IGZhbHNlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWFjYl9jYnNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAomIzQzOwkJCXN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KQomIzQzO3sKJiM0MzsJdTMyIGVuYWJsZV9iaXQsIGlkbGVzbG9wZSwgc3BlZWRfa2JwcywgY3RybDsKJiM0MzsJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CXN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQ7CiYjNDM7CWJvb2wgaXNfcXVldWVfYTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtcyhicCwgcW9wdC0mZ3Q7cXVldWUsICZhbXA7ZW5hYmxlX2JpdCwgJmFtcDtpc19xdWV1ZV9hKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O0NCUzogUXVldWUgJWQgbm90IGVsaWdpYmxlIChvbmx5IHRvcCAyIHF1ZXVlcyBzdXBwb3J0IENCUylcbiYjMzQ7LAomIzQzOwkJCSAgIHFvcHQtJmd0O3F1ZXVlKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGlkbGVzbG9wZSBpcyBjYWxpYnJhdGVkIGZvciB0aGUgY3VycmVudCBsaW5rIHNwZWVkOyBDQlMgaXMgbm90CiYjNDM7CSAqIHJlcHJvZ3JhbW1lZCBvbiBsaW5rLXNwZWVkIGNoYW5nZXMsIHNvIGl0IG11c3QgYmUgcmVjb25maWd1cmVkCiYjNDM7CSAqIGlmIHRoZSBsaW5rIHNwZWVkIGNoYW5nZXMuCiYjNDM7CSAqLwomIzQzOwlwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldChicC0mZ3Q7cGh5bGluaywgJmFtcDtrc2V0KTsKJiM0MzsKJiM0MzsJaWYgKCFrc2V0LmJhc2Uuc3BlZWQgfHwga3NldC5iYXNlLnNwZWVkID09IFNQRUVEX1VOS05PV04pIHsKJiM0MzsJCW5ldGRldl9lcnIobmRldiwgJiMzNDtDQlM6IEludmFsaWQgbGluayBzcGVlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3BlZWRfa2JwcyA9IGtzZXQuYmFzZS5zcGVlZCAqIDEwMDA7CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtpZGxlc2xvcGUgJmx0Oz0gMCB8fCAodTMyKXFvcHQtJmd0O2lkbGVzbG9wZSAmZ3Q7IHNwZWVkX2ticHMpIHsKJiM0MzsJCW5ldGRldl9lcnIobmRldiwgJiMzNDtDQlM6IGludmFsaWQgaWRsZXNsb3BlICVkIChtdXN0IGJlIDEuLiV1IGticHMpXG4mIzM0OywKJiM0MzsJCQkgICBxb3B0LSZndDtpZGxlc2xvcGUsIHNwZWVkX2ticHMpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ2FsY3VsYXRlIGlkbGVzbG9wZSBmb3IgaGFyZHdhcmUgcmVnaXN0ZXI6CiYjNDM7CSAqIC0gSGlnaC1zcGVlZCBHRU06IHNjYWxlIHRvIGZ1bGwgMzItYml0IHJlZ2lzdGVyIHJhbmdlCiYjNDM7CSAqIC0gU3RhbmRhcmQgTUFDQjogbXVsdGlwbHkgYnkgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvcgomIzQzOwkgKi8KJiM0MzsJaWYgKGJwLSZndDtjYXBzICZhbXA7IE1BQ0JfQ0FQU19ISUdIX1NQRUVEKQomIzQzOwkJaWRsZXNsb3BlID0gRElWX1JPVU5EX1VQX1VMTCgodTY0KXFvcHQtJmd0O2lkbGVzbG9wZSAqIFUzMl9NQVgsIHNwZWVkX2ticHMpOwomIzQzOwllbHNlCiYjNDM7CQlpZGxlc2xvcGUgPSAodTMyKXFvcHQtJmd0O2lkbGVzbG9wZSAqIChrc2V0LmJhc2Uuc3BlZWQgJmd0Oz0gMTAwMCA/CiYjNDM7CQkJCQkgICAgICAgTUFDQl9DQlNfUE9SVF9SQVRFXzFHIDogTUFDQl9DQlNfUE9SVF9SQVRFXzEwXzEwME0pOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDticC0mZ3Q7bG9jaykgewomIzQzOwkJLyogRGlzYWJsZSBDQlMgZm9yIHRoZSBxdWV1ZSBiZWZvcmUgdXBkYXRpbmcgaWRsZXNsb3BlICovCiYjNDM7CQljdHJsID0gZ2VtX3JlYWRsKGJwLCBDQlNfQ09OVFJPTCkgJmFtcDsgfmVuYWJsZV9iaXQ7CiYjNDM7CQlnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCk7CiYjNDM7CQkvKiBVcGRhdGUgaWRsZXNsb3BlIGZvciB0aGUgcXVldWUgKi8KJiM0MzsJCWlmIChpc19xdWV1ZV9hKQomIzQzOwkJCWdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9BLCBpZGxlc2xvcGUpOwomIzQzOwkJZWxzZQomIzQzOwkJCWdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9CLCBpZGxlc2xvcGUpOwomIzQzOwomIzQzOwkJLyogUmUtZW5hYmxlIENCUyBmb3IgdGhlIHF1ZXVlIHdpdGggbmV3IGlkbGVzbG9wZSAqLwomIzQzOwkJZ2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGN0cmwgfCBlbmFibGVfYml0KTsKJiM0MzsJfQomIzQzOwomIzQzOwluZXRkZXZfZGJnKG5kZXYsICYjMzQ7Q0JTOiBDb25maWd1cmVkIHF1ZXVlICVkIHdpdGggaWRsZXNsb3BlIDB4JXhcbiYjMzQ7LAomIzQzOwkJICAgcW9wdC0mZ3Q7cXVldWUsIGlkbGVzbG9wZSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtYWNiX2Nic19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1OCBxdWV1ZV9udW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJYm9vbCBpc19xdWV1ZV9hOwomIzQzOwl1MzIgZW5hYmxlX2JpdDsKJiM0MzsKJiM0MzsJaWYgKG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoYnAsIHF1ZXVlX251bSwgJmFtcDtlbmFibGVfYml0LCAmYW1wO2lzX3F1ZXVlX2EpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDticC0mZ3Q7bG9jaykgewomIzQzOwkJZ2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGdlbV9yZWFkbChicCwgQ0JTX0NPTlRST0wpICZhbXA7IH5lbmFibGVfYml0KTsKJiM0MzsJCWlmIChpc19xdWV1ZV9hKQomIzQzOwkJCWdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9BLCAwKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlnZW1fd3JpdGVsKGJwLCBDQlNfSURMRVNMT1BFX1FfQiwgMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0ZGV2X2RiZyhuZGV2LCAmIzM0O0NCUzogRGlzYWJsZWQgcXVldWUgJWRcbiYjMzQ7LCBxdWV1ZV9udW0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1hY2Jfc2V0dXBfY2JzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAomIzQzOwkJCSAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpCiYjNDM7ewomIzQzOwlpZiAocW9wdC0mZ3Q7ZW5hYmxlKQomIzQzOwkJcmV0dXJuIG1hY2JfY2JzX2FkZChuZGV2LCBxb3B0KTsKJiM0MzsKJiM0MzsJbWFjYl9jYnNfZGVzdHJveShuZGV2LCBxb3B0LSZndDtxdWV1ZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1hY2Jfc2V0dXBfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAomIzQzOwkJCSAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwl1OCBudW1fdGMgPSBxb3B0LSZndDtudW1fdGM7CiYjNDM7CWludCBlcnI7CiYjNDM7CXU4IGk7CiYjNDM7CiYjNDM7CS8qIEhhbmRsZSByZXNldCBjYXNlIGVhcmx5ICovCiYjNDM7CWlmICghbnVtX3RjKSB7CiYjNDM7CQluZXRkZXZfcmVzZXRfdGMobmRldik7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzc2VzICovCiYjNDM7CXFvcHQtJmd0O2h3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTOwomIzQzOwomIzQzOwllcnIgPSBuZXRkZXZfc2V0X251bV90YyhuZGV2LCBudW1fdGMpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV90YzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IG5ldGRldl9zZXRfdGNfcXVldWUobmRldiwgaSwgcW9wdC0mZ3Q7Y291bnRbaV0sCiYjNDM7CQkJCQkgIHFvcHQtJmd0O29mZnNldFtpXSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZXJyX3Jlc2V0X3RjOwomIzQzOwomIzQzOwkJbmV0ZGV2X2RiZyhuZGV2LCAmIzM0O01RUFJJTzogVEMlZCAtJmd0OyBxdWV1ZSAldSAoY291bnQ9JXUpXG4mIzM0OywKJiM0MzsJCQkgICBpLCBxb3B0LSZndDtvZmZzZXRbaV0sIHFvcHQtJmd0O2NvdW50W2ldKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcmVzZXRfdGM6CiYjNDM7CW5ldGRldl9yZXNldF90YyhuZGV2KTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtYWNiX3RjX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChiYXNlLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOiB7CiYjNDM7CQlzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLSZndDtjYXBzOwomIzQzOwomIzQzOwkJY2Fwcy0mZ3Q7dmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiAJCQkgdm9pZCAqdHlwZV9kYXRhKQogewomIzQzOwlzdHJ1Y3QgbWFjYiAqYnA7CiYjNDM7CiAJaWYgKCFkZXYgfHwgIXR5cGVfZGF0YSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKHR5cGUgPT0gVENfUVVFUllfQ0FQUykKJiM0MzsJCXJldHVybiBtYWNiX3RjX3F1ZXJ5X2NhcHMoZGV2LCB0eXBlX2RhdGEpOwomIzQzOwomIzQzOwlicCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghKGRldi0mZ3Q7aHdfZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9IV19UQykpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkvKiBDaGVjayBpZiBEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kICovCiYjNDM7CWlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZCgmYW1wO2JwLSZndDtwZGV2LSZndDtkZXYpKSkgewomIzQzOwkJbmV0ZGV2X2VycihkZXYsICYjMzQ7RGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOgomIzQzOwkJcmV0dXJuIG1hY2Jfc2V0dXBfbXFwcmlvKGRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9RRElTQ19DQlM6CiYjNDM7CQlyZXR1cm4gbWFjYl9zZXR1cF9jYnMoZGV2LCB0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfUURJU0NfVEFQUklPOgogCQlyZXR1cm4gbWFjYl9zZXR1cF90YXByaW8oZGV2LCB0eXBlX2RhdGEpOwogCWRlZmF1bHQ6CkBAIC00ODQ2LDggJiM0Mzs1MDI5LDggQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQlkZXYtJmd0O2h3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNOwogCWlmIChicC0mZ3Q7Y2FwcyAmYW1wOyBNQUNCX0NBUFNfU0dfRElTQUJMRUQpCiAJCWRldi0mZ3Q7aHdfZmVhdHVyZXMgJmFtcDs9IH5ORVRJRl9GX1NHOwotCS8qIEVuYWJsZSBIV19UQyBpZiBoYXJkd2FyZSBzdXBwb3J0cyBRQlYgKi8KLQlpZiAoYnAtJmd0O2NhcHMgJmFtcDsgTUFDQl9DQVBTX1FCVikKJiM0MzsJLyogRW5hYmxlIFRDIG9mZmxvYWQgZm9yIFRTTi1jYXBhYmxlIGhhcmR3YXJlICovCiYjNDM7CWlmIChicC0mZ3Q7Y2FwcyAmYW1wOyBNQUNCX0NBUFNfVEMpCiAJCWRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQzsKIAogCWRldi0mZ3Q7ZmVhdHVyZXMgPSBkZXYtJmd0O2h3X2ZlYXR1cmVzOwpAQCAtNTY3OCw3ICYjNDM7NTg2MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgdmVyc2FsX2NvbmZpZyA9IHsKIAkuY2FwcyA9IE1BQ0JfQ0FQU19HSUdBQklUX01PREVfQVZBSUxBQkxFIHwgTUFDQl9DQVBTX0pVTUJPIHwKIAkJTUFDQl9DQVBTX0dFTV9IQVNfUFRQIHwgTUFDQl9DQVBTX0JEX1JEX1BSRUZFVENIIHwKIAkJTUFDQl9DQVBTX05FRURfVFNVQ0xLIHwgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEUgfAotCQlNQUNCX0NBUFNfUUJWIHwKJiM0MzsJCU1BQ0JfQ0FQU19UQyB8CiAJCU1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLAogCS5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsCiAJLmluaXQgPSBpbml0X3Jlc2V0X29wdGlvbmFsLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzcxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgb2YgdGhlIE1BQ0IgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCYjMzk7cyBmdXp6aW5nIGltcGxpY2F0aW9ucy4gVGhlIGNvcmUgb2YgdGhpcyByZXZvbHZlcyBhcm91bmQgaWRlbnRpZnlpbmcgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AgYW5kIGBtYWNiLmhgLCB3aGljaCBpbW1lZGlhdGVseSBwb2ludHMgdG8gbmV0d29yayBkcml2ZXIgdGVycml0b3J5LiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBzdXBwb3J0IGZvciBDQlMgYW5kIE1RUFJJTyB0cmFmZmljIGNvbnRyb2wgb2ZmbG9hZHMgd2l0aGluIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyLiBJbnRlcmVzdGluZywgYW5kIHBvdGVudGlhbGx5IGNvbXBsZXguCgpSZW5hbWluZyBgTUFDQl9DQVBTX1FCVmAgdG8gYE1BQ0JfQ0FQU19UQ2AgYW5kIGVuYWJsaW5nIGBORVRJRl9GX0hXX1RDYCBzaWduYWxzIGEgY2xlYXIgc2hpZnQgdG93YXJkIHRyYWZmaWMgY29udHJvbCBjYXBhYmlsaXRpZXMuIFRoZSBhZGRpdGlvbiBvZiBmdW5jdGlvbnMgbGlrZSBgbWFjYl9zZXR1cF9jYnNgLCBgbWFjYl9jYnNfYWRkYCwgYW5kIHNvIG9uLCBhbGwgcmVhY2hhYmxlIHRocm91Z2ggYG1hY2Jfc2V0dXBfdGNgICh0aGUgYC5uZG9fc2V0dXBfdGNgIGNhbGxiYWNrKSwgbWFrZXMgaXQgc2VlbSBsaWtlIHRoaXMgaXMgYSBzdWJzdGFudGlhbCBhZGRpdGlvbiB0byB0aGUgZnVuY3Rpb25hbGl0eS4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIGlzIGRyaXZlciBhY2Nlc3NpYmlsaXR5LCBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBwYXRjaCBpbnZvbHZlcyB0aGUgQ2FkZW5jZSBNQUNCLCB3aGljaCBJIGtub3cgaXMgdXNlZCBpbiBBdG1lbC9DYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGNvbnRyb2xsZXJzLiBRRU1VIG9mdGVuIHN1cHBvcnRzIENhZGVuY2UgR0VNLCBlc3BlY2lhbGx5IGluIHBsYXRmb3JtcyBsaWtlIFhpbGlueCBaeW5xIGFuZCBTaUZpdmUgVS4gVGhhdCYjMzk7cyBnb29kOyBpdCYjMzk7cyBsaWtlbHkgd2UgY2FuIGdldCBjb3ZlcmFnZSB0aGVyZS4KCkJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBBcmUgdGhlcmUgZXZlbiBvdGhlciBlZmZvcnRzIG9uIHRoaXMgZHJpdmVyPyBJcyB0aGlzIGRyaXZlciAqY29tbW9ubHkqIGZ1enplZD8gTGV0JiMzOTtzIGNoZWNrIGZvciBleGlzdGluZyBjb25maWcgZmxhZ3MgdG8gcXVpY2tseSBnYXVnZSB1c2FnZSBhbmQgZnV6emluZyBoaXN0b3J5LiBgQ09ORklHX01BQ0JgIGlzIHRoZSBrZXkgY29uZmlnIGZvciB0aGlzLCBzbyBJIHdpbGwgc2VhcmNoIGl0IGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgbG9vayBhdCB3aGV0aGVyIHRoZSBkcml2ZXIgaGFzIGJlZW4gZnV6emVkIGJlZm9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9MjA9aWYgTkVUX1ZFTkRPUl9DQURFTkNFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6MjI6Y29uZmlnIE1BQ0JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O0NhZGVuY2UgTUFDQi9HRU0gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzozNzpjb25maWcgTUFDQl9VU0VfSFdTVEFNUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM4LVx0Ym9vbCBcJiMzNDtVc2UgSUVFRSAxNTg4IGh3c3RhbXBcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6NDU6Y29uZmlnIE1BQ0JfUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIFBDSSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc2OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBDYWRlbmNlIEdFTSBNQUNCIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGFib3V0IGZ1enppbmcgdGhpcyBgQ09ORklHX01BQ0JgIGRyaXZlci4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwcmVyZXF1aXNpdGVzLCBzbyBJJiMzOTtsbCBjaGVjayBpZiBpdCYjMzk7cyB0eXBpY2FsbHkgZW5hYmxlZCBvciBlYXNpbHkgZW5hYmxlZCBpbiBvdXIgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuIEl0IGxvb2tzIGxpa2UgaXQgaGluZ2VzIG9uIGBORVRfVkVORE9SX0NBREVOQ0VgLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgZG9lcyBRRU1VIGV2ZW4gc3VwcG9ydCB0aGlzIENhZGVuY2UgR0VNIGhhcmR3YXJlPyBZZXAsIHRoZXJlJiMzOTtzIGEgYGh3L25ldC9jYWRlbmNlX2dlbS5jYCBmaWxlLCBzbyB0aGF0JiMzOTtzIGEgcG9zaXRpdmUuCgpUaGUgbmV4dCBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0JiMzOTtzIGZ1enphYmxlLiBJdCYjMzk7cyBhIG5ldHdvcmsgZHJpdmVyLCBzbyB0aGF0JiMzOTtzIGluaGVyZW50bHkgcHJvbWlzaW5nLiBXZSBzaG91bGQgYmUgYWJsZSB0byBpbnRlcmFjdCB3aXRoIGl0IHVzaW5nIG5ldGxpbmssIHNwZWNpZmljYWxseSB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGB0YyBxZGlzYyBhZGQuLi5gLiBUaGF0IHNvdW5kcyBmZWFzaWJsZS4gTm93LCB3aGF0IGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgYWRkZWQgYW5kIGV4cG9zZWQgZm9yIHRoaXM/IEkgc2VlIGBtYWNiX3NldHVwX2Nic2AsIGBtYWNiX3NldHVwX21xcHJpb2AsIGFuZCBgbWFjYl90Y19xdWVyeV9jYXBzYC4gVGhlc2UgYXJlIGFsbCBjYWxsZWQgZnJvbSBgbWFjYl9zZXR1cF90Y2AsIHNvIHRoYXQmIzM5O3MgdGhlIGtleSBmdW5jdGlvbiB0byBleGFtaW5lLiBUaW1lIHRvIGRpZyBpbnRvIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYCBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBoYW5kbGVzIFRyYWZmaWMgQ29udHJvbCAoVEMpIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY2Jfc2V0dXBfdGMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDY3NT1zdGF0aWMgaW50IG1hY2JfdGNfcXVlcnlfY2FwcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDY5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NDY5MTpzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ2OTItXHRcdFx0IHZvaWQgKnR5cGVfZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTQ3MzI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtYWNiX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00NzQ4LVx0Lm5kb19od3RzdGFtcF9nZXRcdD0gbWFjYl9od3RzdGFtcF9nZXQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjQ3NDk6XHQubmRvX3NldHVwX3RjXHRcdD0gbWFjYl9zZXR1cF90YyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDc1MC1cdC5uZG9fdHhfdGltZW91dFx0XHQ9IG1hY2JfdHhfdGltZW91dCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTg4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1BQ0IgRHJpdmVyIFNldHVwKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZXNlIE1BQ0IgZHJpdmVyIHNldHVwIGZ1bmN0aW9ucy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBsb2dpYyByZXZvbHZlcyBhcm91bmQgYG1hY2Jfc2V0dXBfY2JzYCBhbmQgYG1hY2Jfc2V0dXBfbXFwcmlvYC4gQWgsIHdhaXQgYSBtaW51dGUsIGBtYWNiX3NldHVwX2Nic2AgaW50ZXJuYWxseSB1c2VzIGBtYWNiX2Nic19hZGRgIGFuZCBgbWFjYl9jYnNfZGVzdHJveWAuIEkgc2VlIGBtYWNiX3NldHVwX21xcHJpb2AgaW4gdGhlIG1peCB0b28uCgpMZXQgbWUgb3JnYW5pemUgdGhpcyBmb3IgY2xhcml0eS4gU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGFyZToKCiogICBgbWFjYl9zZXR1cF9jYnNgCiogICBgbWFjYl9jYnNfYWRkYAoqICAgYG1hY2JfY2JzX2Rlc3Ryb3lgCiogICBgbWFjYl9zZXR1cF9tcXByaW9gCiogICBgbWFjYl90Y19xdWVyeV9jYXBzYAoKSG1tLCBgbWFjYl9jYnNfYWRkYCBhbmQgYG1hY2JfY2JzX2Rlc3Ryb3lgIGFyZSAqc3RhdGljKiwgaW50ZXJlc3RpbmcuIEJ1dCB0aGV5IGFyZW4mIzM5O3QgZXhwbGljaXRseSBpbmxpbmVkLiBBbHJpZ2h0LCBsZXQmIzM5O3Mga2VlcCB0aGUgZm9jdXMgb24gdGhlIGVudHJ5IHBvaW50cywgdGhlIGV4dGVybmFsIGZhY2luZyBmdW5jdGlvbiBjYWxsczoKCiogICBgbWFjYl9zZXR1cF90Y2AgKEFscmVhZHkgdGhlcmUhKQoqICAgYG1hY2Jfc2V0dXBfY2JzYAoqICAgYG1hY2Jfc2V0dXBfbXFwcmlvYAoqICAgYG1hY2JfdGNfcXVlcnlfY2Fwc2AKClJpZ2h0LCB0aGUgYG1hY2Jfc2V0dXBfdGNgIGlzIGFscmVhZHkgcHJlc2VudCwgdGhlIG90aGVycyBhcmUgbmV3IGFkZGl0aW9ucy4gTm93LCBmb3IgdGVzdGluZywgSSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIHdpbGwgd29yayBpbiBRRU1VLiBJIG5lZWQgdG8gcXVpY2tseSBhbmQgZWFzaWx5IGRlYnVnIGl0LCBzbyBsZXQmIzM5O3Mgc2VlIGlmIGBNQUNCX1BDSWAgaXMgcmVsZXZhbnQgZm9yIGVhc3kgdGVzdGluZyBpbiBRRU1VLiBRRU1VJiMzOTtzIENhZGVuY2UgR0VNIHVzdWFsbHkgZW11bGF0ZXMgYSBwbGF0Zm9ybSBkZXZpY2UgKHN5c2J1cyksIGJ1dCBkb2VzIGl0IHN1cHBvcnQgUENJIGFzIHdlbGw/IEkgd2lsbCBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNiX3BjaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZz00NT1jb25maWcgTUFDQl9QQ0lcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNTEtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzo1MjpcdCAgd2lsbCBiZSBjYWxsZWQgbWFjYl9wY2kuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNTMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZT0xMT1vYmotJChDT05GSUdfTUFDQikgJiM0Mzs9IG1hY2Iub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfTUFDQl9QQ0kpICYjNDM7PSBtYWNiX3BjaS5vXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjE5OiNkZWZpbmUgUENJX0RSSVZFUl9OQU1FIFwmIzM0O21hY2JfcGNpXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMjAtI2RlZmluZSBQTEFUX0RSSVZFUl9OQU1FIFwmIzM0O21hY2JcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM9MTIwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBkZXZfaWRfdGFibGVbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjEyNTpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFjYl9wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEyNi1cdC5uYW1lICAgICA9IFBDSV9EUklWRVJfTkFNRSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTMxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjEzMjptb2R1bGVfcGNpX2RyaXZlcihtYWNiX3BjaV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEzMy1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZGV2X2lkX3RhYmxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODY0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVuYWJsaW5nIE1BQ0IgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gaW1wcm92ZSBvdXIgZnV6emluZyBjb3ZlcmFnZSBmb3IgdGhlIGBNQUNCYCBldGhlcm5ldCBkcml2ZXIuIElmIHdlIGVuYWJsZSBib3RoIGBNQUNCYCBhbmQgYE1BQ0JfUENJYCwgaXQgKm1pZ2h0KiBtYWtlIGZ1enppbmcgZWFzaWVyLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgZWl0aGVyIFFFTVUgbWlnaHQgZXhwb3NlIGl0IHRocm91Z2ggUENJLCBvciBzeXprYWxsZXIgY291bGQgcG90ZW50aWFsbHkgaW5zdGFudGlhdGUgaXQgdmlhIGEgcGxhdGZvcm0gZGV2aWNlLiBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIHBsYXRmb3JtIGRldmljZSBzdXBwb3J0IOKAkyBvciBhdCBsZWFzdCwgSSYjMzk7dmUgc2VlbiBpdCB1c2VkIHdpdGggdmlydHVhbCBkZXZpY2VzLiBOb3cgd2FpdCBhIG1pbnV0ZSwgSSBzZWVtIHRvIHJlbWVtYmVyIHRoYXQgc3l6a2FsbGVyICpjYW4qIHRlc3QgYG1hY2JgIGlmIGl0JiMzOTtzIGluc3RhbnRpYXRlZC4gVGhhdCBjaGFuZ2VzIHRoaW5ncy4KCkFscmlnaHQsIHNvIHRoZSBwbGFuIGlzIHRvIGRlZmluaXRlbHkgaW5jbHVkZSBgTUFDQmAgYW5kIGBNQUNCX1BDSWAgaW4gdGhlIGNvbmZpZ3MuIEkga25vdyB3ZSYjMzk7bGwgYWxzbyBuZWVkIGBORVRfVkVORE9SX0NBREVOQ0VgIGFzIGEgZGVwZW5kZW5jeS4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkmIzM5O20gbWlzc2luZy4gVGhpcyB3aWxsIHN0cmVhbWxpbmUgdGhlIGZ1enppbmcgcHJvY2VzcywgYW5kIGhvcGVmdWxseSBnaXZlIHVzIG1vcmUgY292ZXJhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTY9Y29uZmlnIE5FVF9WRU5ET1JfQ0FERU5DRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTctXHRib29sIFwmIzM0O0NhZGVuY2UgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjg6XHRkZXBlbmRzIG9uIEhBU19JT01FTVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTktXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9MjI9Y29uZmlnIE1BQ0JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O0NhZGVuY2UgTUFDQi9HRU0gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjI0Olx0ZGVwZW5kcyBvbiBIQVNfRE1BIFx1MDAyNlx1MDAyNiBDT01NT05fQ0xLXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6MjU6XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjYtXHRzZWxlY3QgUEhZTElOS1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZz0zNz1jb25maWcgTUFDQl9VU0VfSFdTVEFNUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM4LVx0Ym9vbCBcJiMzNDtVc2UgSUVFRSAxNTg4IGh3c3RhbXBcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzozOTpcdGRlcGVuZHMgb24gTUFDQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQwOlx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQxLVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTQ1PWNvbmZpZyBNQUNCX1BDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ2LVx0dHJpc3RhdGUgXCYjMzQ7Q2FkZW5jZSBQQ0kgTUFDQi9HRU0gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQ3Olx0ZGVwZW5kcyBvbiBNQUNCIFx1MDAyNlx1MDAyNiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00OC1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTczMQoJCQkJCQkJb3V0cHV0OiAxNjIKCQkJCQkJCXRob3VnaHRzOiA1MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgQ2FkZW5jZSBNQUNCIFRyYWZmaWMgQ29udHJvbCBPZmZsb2FkcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbnRyb2R1Y2luZyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQ2FkZW5jZSBNQUNCIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0cmFmZmljIGNvbnRyb2wgc2V0dXAsIGVuYWJsaW5nIENCUyBhbmQgTVFQUklPLiBUaGVzZSBmZWF0dXJlcywgcmVhY2hhYmxlIHZpYSBgdGMgcWRpc2MgYWRkIGRldiBldGhYIHJvb3QgbXFwcmlvIC4uLmAgb3IgYHRjIHFkaXNjIGFkZCBkZXYgZXRoWCByb290IGNicyAuLi5gLCBhcmUgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgbmV0bGluayBpbnRlcmZhY2UgaXMgYSBwcmltZSB0YXJnZXQgaGVyZS4KCk15IGZvY3VzIHNob3VsZCBiZSBvbjoKCiogICBgbWFjYl9zZXR1cF9jYnNgCiogICBgbWFjYl9jYnNfYWRkYAoqICAgYG1hY2JfY2JzX2Rlc3Ryb3lgCiogICBgbWFjYl9zZXR1cF9tcXByaW9gCiogICBgbWFjYl90Y19xdWVyeV9jYXBzYAoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbWFjYl9jYnNfYWRkYCBhbmQgYG1hY2JfY2JzX2Rlc3Ryb3lgIGFyZW4mIzM5O3QgaW5saW5lZCwgYXMgdGhleSBhcHBlYXIgdG8gYmUgc3RhdGljLiBUaGV5JiMzOTtyZSBub3QgaW5saW5lLCBhbmQgc2luY2UgdGhleSBhcmUgY2FsbGVkIGZyb20gYG1hY2Jfc2V0dXBfY2JzYCwgaXQmIzM5O3MgYWNjZXB0YWJsZSB0byBsaXN0IHRoZW0uIEFsc28sIGBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zYCBpcyBhIHNtYWxsIGhlbHBlciBmdW5jdGlvbiwgYW5kIEkmIzM5O20gZ3Vlc3NpbmcgaXQgbWlnaHQgYmUgaW5saW5lZC4gYG1hY2Jfc2V0dXBfdGNgIGlzIG1vZGlmaWVkLCBidXQgaXQmIzM5O3MgYW4gZXhpc3RpbmcgZnVuY3Rpb24uCgpUaGUga2V5IGNvbmZpZ3MgdG8ga2VlcCBpbiBtaW5kIGFyZSBgTkVUX1ZFTkRPUl9DQURFTkNFYCwgYE1BQ0JgLCBhbmQgYE1BQ0JfUENJYC4KClRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIENCUyBhbmQgTVFQUklPIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkcyB0byB0aGUgQ2FkZW5jZSBNQUNCIEV0aGVybmV0IGRyaXZlci4gVGhlc2UgZmVhdHVyZXMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayAodGMgcWRpc2MpLCBhbmQgdGhleSBpbnRyb2R1Y2UgbmV3IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gbG9naWMgdGhhdCB3b3VsZCBiZSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgZnV6emluZy4KCkkmIzM5O20gY29uZmlkZW50IHRoYXQgYE1BQ0JfUENJYCBpcyBzdWZmaWNpZW50IHRvIGdldCBhIGRldmljZSBpbnN0YW50aWF0ZWQgaW4gUUVNVS4gUUVNVSBjYW4gZW11bGF0ZSBQQ0kgZGV2aWNlcywgYW5kIGlmIGBNQUNCX1BDSWAgaXMgZW5hYmxlZCwgc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gaW5qZWN0IGl0IG9yIFFFTVUgbWlnaHQgaGF2ZSBpdC4gRXZlbiBpZiB0aGF0IGlzbiYjMzk7dCB0aGUgY2FzZSwgc3l6a2FsbGVyIGNhbiBzdGlsbCBmdXp6IHRoZSBuZXRsaW5rIGludGVyZmFjZS4KCk5vdywgbGV0JiMzOTtzIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfQ0FERU5DRSYjMzQ7LAogICAgJiMzNDtNQUNCJiMzNDssCiAgICAmIzM0O01BQ0JfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjYl9zZXR1cF9jYnMmIzM0OywKICAgICYjMzQ7bWFjYl9jYnNfYWRkJiMzNDssCiAgICAmIzM0O21hY2JfY2JzX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWFjYl9zZXR1cF9tcXByaW8mIzM0OywKICAgICYjMzQ7bWFjYl90Y19xdWVyeV9jYXBzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQ0JTIChDcmVkaXQtQmFzZWQgU2hhcGVyKSBhbmQgTVFQUklPIChNdWx0aXBsZSBRdWV1ZSBQcmlvcml0eSkgdHJhZmZpYyBjb250cm9sIG9mZmxvYWRzIHRvIHRoZSBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyLiBUaGVzZSBmZWF0dXJlcyBhcmUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rICh0YyBxZGlzYykgYW5kIGludHJvZHVjZSBuZXcgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBsb2dpYyB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfQ0FERU5DRSYjMzQ7LAogICAgJiMzNDtNQUNCJiMzNDssCiAgICAmIzM0O01BQ0JfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjYl9zZXR1cF9jYnMmIzM0OywKICAgICYjMzQ7bWFjYl9jYnNfYWRkJiMzNDssCiAgICAmIzM0O21hY2JfY2JzX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWFjYl9zZXR1cF9tcXByaW8mIzM0OywKICAgICYjMzQ7bWFjYl90Y19xdWVyeV9jYXBzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQ0JTIChDcmVkaXQtQmFzZWQgU2hhcGVyKSBhbmQgTVFQUklPIChNdWx0aXBsZSBRdWV1ZSBQcmlvcml0eSkgdHJhZmZpYyBjb250cm9sIG9mZmxvYWRzIHRvIHRoZSBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyLiBUaGVzZSBmZWF0dXJlcyBhcmUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rICh0YyBxZGlzYykgYW5kIGludHJvZHVjZSBuZXcgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBsb2dpYyB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBvZmZsb2FkIHN1cHBvcnQgZm9yIENCUyBhbmQgTVFQUklPIHRyYWZmaWMgY29udHJvbCBpbiB0aGUgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEl0IHJlYWRzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgbmV0d29ya2luZyBjb3JlIGFuZCBwcm9ncmFtcyBoYXJkd2FyZSByZWdpc3RlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlIHZhcmlhYmxlcyBwYXNzZWQgYnkgcmVmZXJlbmNlIChgZW5hYmxlX2JpdGAsIGBpc19xdWV1ZV9hYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY2NGEyOWMzOWVlN2ZjNzU3ZTE3MjAyZGNmNTJhOWM3YmI4ZmM0ZmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDEyOjE4OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaAppbmRleCBhMTEwNTI1NjU0MzZhLi5kNWIyODQ1OWZkNzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaApAQCAtMTg0LDYgJiM0MzsxODQsOSBAQAogI2RlZmluZSBHRU1fRENGRzgJCTB4MDI5QyAvKiBEZXNpZ24gQ29uZmlnIDggKi8KICNkZWZpbmUgR0VNX0RDRkcxMAkJMHgwMkE0IC8qIERlc2lnbiBDb25maWcgMTAgKi8KICNkZWZpbmUgR0VNX0RDRkcxMgkJMHgwMkFDIC8qIERlc2lnbiBDb25maWcgMTIgKi8KJiM0MzsjZGVmaW5lIEdFTV9DQlNfQ09OVFJPTAkJMHgwNEJDIC8qIENCUyBDb250cm9sIFJlZ2lzdGVyICovCiYjNDM7I2RlZmluZSBHRU1fQ0JTX0lETEVTTE9QRV9RX0EJMHgwNEMwIC8qIENCUyBJZGxlU2xvcGUgUXVldWUgQSAqLwomIzQzOyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9CCTB4MDRDNCAvKiBDQlMgSWRsZVNsb3BlIFF1ZXVlIEIgKi8KICNkZWZpbmUgR0VNX0VOU1RfQ09OVFJPTAkweDA4ODAgLyogRU5TVCBjb250cm9sIHJlZ2lzdGVyICovCiAjZGVmaW5lIEdFTV9VU1hfQ09OVFJPTAkJMHgwQTgwIC8qIEhpZ2ggc3BlZWQgUENTIGNvbnRyb2wgcmVnaXN0ZXIgKi8KICNkZWZpbmUgR0VNX1VTWF9TVEFUVVMJCTB4MEE4OCAvKiBIaWdoIHNwZWVkIFBDUyBzdGF0dXMgcmVnaXN0ZXIgKi8KQEAgLTIyNCw2ICYjNDM7MjI3LDEyIEBACiAjZGVmaW5lIEdFTV9FTlNUX09OX1RJTUUoaHdfcSkJCSgweDA4MjAgJiM0MzsgKChod19xKSAmbHQ7Jmx0OyAyKSkKICNkZWZpbmUgR0VNX0VOU1RfT0ZGX1RJTUUoaHdfcSkJCSgweDA4NDAgJiM0MzsgKChod19xKSAmbHQ7Jmx0OyAyKSkKIAomIzQzOy8qIEJpdGZpZWxkcyBpbiBDQlNfQ09OVFJPTCAqLwomIzQzOyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9PRkZTRVQJMAomIzQzOyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9TSVpFCTEKJiM0MzsjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0JfT0ZGU0VUCTEKJiM0MzsjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0JfU0laRQkxCiYjNDM7CiAvKiBCaXRmaWVsZHMgaW4gRU5TVF9DT05UUk9MICovCiAjZGVmaW5lIEdFTV9FTlNUX0RJU0FCTEVfUVVFVUVfT0ZGU0VUCTE2CiAKQEAgLTc2OCw3ICYjNDM7Nzc3LDcgQEAKICNkZWZpbmUgTUFDQl9DQVBTX01JSU9OUkdNSUkJCQlCSVQoOSkKICNkZWZpbmUgTUFDQl9DQVBTX05FRURfVFNVQ0xLCQkJQklUKDEwKQogI2RlZmluZSBNQUNCX0NBUFNfUVVFVUVfRElTQUJMRQkJCUJJVCgxMSkKLSNkZWZpbmUgTUFDQl9DQVBTX1FCVgkJCQlCSVQoMTIpCiYjNDM7I2RlZmluZSBNQUNCX0NBUFNfVEMJCQkJQklUKDEyKQogI2RlZmluZSBNQUNCX0NBUFNfUENTCQkJCUJJVCgxMykKICNkZWZpbmUgTUFDQl9DQVBTX0hJR0hfU1BFRUQJCQlCSVQoMTQpCiAjZGVmaW5lIE1BQ0JfQ0FQU19DTEtfSFdfQ0hHCQkJQklUKDE1KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMKaW5kZXggZDM5NGYxZjQzYjY4NS4uYTBhNjg0OTA1MTllNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jCkBAIC05OSw2ICYjNDM7OTksMTAgQEAgc3RydWN0IHNpZml2ZV9mdTU0MF9tYWNiX21nbXQgewogCiAjZGVmaW5lIE1BQ0JfTURJT19USU1FT1VUCTEwMDAwMDAgLyogaW4gdXNlY3MgKi8KIAomIzQzOy8qIENCUyBwb3J0IHRyYW5zbWl0IHJhdGUgZmFjdG9yczogMTAwMC9pbnRlcmZhY2Vfd2lkdGggKi8KJiM0MzsjZGVmaW5lIE1BQ0JfQ0JTX1BPUlRfUkFURV8xRwkJMTI1CS8qIDEwMDAvOCBmb3IgR01JSSAoOC1iaXQpICovCiYjNDM7I2RlZmluZSBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTQkyNTAJLyogMTAwMC80IGZvciBNSUkgKDQtYml0KSAqLwomIzQzOwogLyogRE1BIGJ1ZmZlciBkZXNjcmlwdG9yIG1pZ2h0IGJlIGRpZmZlcmVudCBzaXplCiAgKiBkZXBlbmRzIG9uIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb246CiAgKgpAQCAtNDQ5OSwxOCAmIzQzOzQ1MDMsOCBAQCBzdGF0aWMgdm9pZCBtYWNiX3RhcHJpb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogc3RhdGljIGludCBtYWNiX3NldHVwX3RhcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAkJCSAgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnRhcHJpbykKIHsKLQlzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlpbnQgZXJyID0gMDsKIAotCWlmICh1bmxpa2VseSghKG5kZXYtJmd0O2h3X2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfVEMpKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JLyogQ2hlY2sgaWYgRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZCAqLwotCWlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZCgmYW1wO2JwLSZndDtwZGV2LSZndDtkZXYpKSkgewotCQluZXRkZXZfZXJyKG5kZXYsICYjMzQ7RGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxuJiMzNDspOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCiAJc3dpdGNoICh0YXByaW8tJmd0O2NtZCkgewogCWNhc2UgVEFQUklPX0NNRF9SRVBMQUNFOgogCQllcnIgPSBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKG5kZXYsIHRhcHJpbyk7CkBAIC00NTI1LDEzICYjNDM7NDUxOSwyMDIgQEAgc3RhdGljIGludCBtYWNiX3NldHVwX3RhcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RhdGljIGludCBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKHN0cnVjdCBtYWNiICpicCwgdTggcXVldWVfbnVtLAomIzQzOwkJCQkgICAgIHUzMiAqZW5hYmxlX2JpdCwgYm9vbCAqaXNfcXVldWVfYSkKJiM0Mzt7CiYjNDM7CS8qIFF1ZXVlIEEgaXMgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDEpICovCiYjNDM7CWlmIChxdWV1ZV9udW0gPT0gYnAtJmd0O251bV9xdWV1ZXMgLSAxKSB7CiYjNDM7CQkqZW5hYmxlX2JpdCA9IEdFTV9CSVQoQ0JTX0VOQUJMRV9RVUVVRV9BKTsKJiM0MzsJCSppc19xdWV1ZV9hID0gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFF1ZXVlIEIgaXMgc2Vjb25kIGhpZ2hlc3QgcHJpb3JpdHkgKG51bV9xdWV1ZXMgLSAyKSAqLwomIzQzOwlpZiAocXVldWVfbnVtID09IGJwLSZndDtudW1fcXVldWVzIC0gMikgewomIzQzOwkJKmVuYWJsZV9iaXQgPSBHRU1fQklUKENCU19FTkFCTEVfUVVFVUVfQik7CiYjNDM7CQkqaXNfcXVldWVfYSA9IGZhbHNlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWFjYl9jYnNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAomIzQzOwkJCXN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KQomIzQzO3sKJiM0MzsJdTMyIGVuYWJsZV9iaXQsIGlkbGVzbG9wZSwgc3BlZWRfa2JwcywgY3RybDsKJiM0MzsJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CXN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQ7CiYjNDM7CWJvb2wgaXNfcXVldWVfYTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtcyhicCwgcW9wdC0mZ3Q7cXVldWUsICZhbXA7ZW5hYmxlX2JpdCwgJmFtcDtpc19xdWV1ZV9hKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O0NCUzogUXVldWUgJWQgbm90IGVsaWdpYmxlIChvbmx5IHRvcCAyIHF1ZXVlcyBzdXBwb3J0IENCUylcbiYjMzQ7LAomIzQzOwkJCSAgIHFvcHQtJmd0O3F1ZXVlKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGlkbGVzbG9wZSBpcyBjYWxpYnJhdGVkIGZvciB0aGUgY3VycmVudCBsaW5rIHNwZWVkOyBDQlMgaXMgbm90CiYjNDM7CSAqIHJlcHJvZ3JhbW1lZCBvbiBsaW5rLXNwZWVkIGNoYW5nZXMsIHNvIGl0IG11c3QgYmUgcmVjb25maWd1cmVkCiYjNDM7CSAqIGlmIHRoZSBsaW5rIHNwZWVkIGNoYW5nZXMuCiYjNDM7CSAqLwomIzQzOwlwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldChicC0mZ3Q7cGh5bGluaywgJmFtcDtrc2V0KTsKJiM0MzsKJiM0MzsJaWYgKCFrc2V0LmJhc2Uuc3BlZWQgfHwga3NldC5iYXNlLnNwZWVkID09IFNQRUVEX1VOS05PV04pIHsKJiM0MzsJCW5ldGRldl9lcnIobmRldiwgJiMzNDtDQlM6IEludmFsaWQgbGluayBzcGVlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3BlZWRfa2JwcyA9IGtzZXQuYmFzZS5zcGVlZCAqIDEwMDA7CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtpZGxlc2xvcGUgJmx0Oz0gMCB8fCAodTMyKXFvcHQtJmd0O2lkbGVzbG9wZSAmZ3Q7IHNwZWVkX2ticHMpIHsKJiM0MzsJCW5ldGRldl9lcnIobmRldiwgJiMzNDtDQlM6IGludmFsaWQgaWRsZXNsb3BlICVkIChtdXN0IGJlIDEuLiV1IGticHMpXG4mIzM0OywKJiM0MzsJCQkgICBxb3B0LSZndDtpZGxlc2xvcGUsIHNwZWVkX2ticHMpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ2FsY3VsYXRlIGlkbGVzbG9wZSBmb3IgaGFyZHdhcmUgcmVnaXN0ZXI6CiYjNDM7CSAqIC0gSGlnaC1zcGVlZCBHRU06IHNjYWxlIHRvIGZ1bGwgMzItYml0IHJlZ2lzdGVyIHJhbmdlCiYjNDM7CSAqIC0gU3RhbmRhcmQgTUFDQjogbXVsdGlwbHkgYnkgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvcgomIzQzOwkgKi8KJiM0MzsJaWYgKGJwLSZndDtjYXBzICZhbXA7IE1BQ0JfQ0FQU19ISUdIX1NQRUVEKQomIzQzOwkJaWRsZXNsb3BlID0gRElWX1JPVU5EX1VQX1VMTCgodTY0KXFvcHQtJmd0O2lkbGVzbG9wZSAqIFUzMl9NQVgsIHNwZWVkX2ticHMpOwomIzQzOwllbHNlCiYjNDM7CQlpZGxlc2xvcGUgPSAodTMyKXFvcHQtJmd0O2lkbGVzbG9wZSAqIChrc2V0LmJhc2Uuc3BlZWQgJmd0Oz0gMTAwMCA/CiYjNDM7CQkJCQkgICAgICAgTUFDQl9DQlNfUE9SVF9SQVRFXzFHIDogTUFDQl9DQlNfUE9SVF9SQVRFXzEwXzEwME0pOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDticC0mZ3Q7bG9jaykgewomIzQzOwkJLyogRGlzYWJsZSBDQlMgZm9yIHRoZSBxdWV1ZSBiZWZvcmUgdXBkYXRpbmcgaWRsZXNsb3BlICovCiYjNDM7CQljdHJsID0gZ2VtX3JlYWRsKGJwLCBDQlNfQ09OVFJPTCkgJmFtcDsgfmVuYWJsZV9iaXQ7CiYjNDM7CQlnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCk7CiYjNDM7CQkvKiBVcGRhdGUgaWRsZXNsb3BlIGZvciB0aGUgcXVldWUgKi8KJiM0MzsJCWlmIChpc19xdWV1ZV9hKQomIzQzOwkJCWdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9BLCBpZGxlc2xvcGUpOwomIzQzOwkJZWxzZQomIzQzOwkJCWdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9CLCBpZGxlc2xvcGUpOwomIzQzOwomIzQzOwkJLyogUmUtZW5hYmxlIENCUyBmb3IgdGhlIHF1ZXVlIHdpdGggbmV3IGlkbGVzbG9wZSAqLwomIzQzOwkJZ2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGN0cmwgfCBlbmFibGVfYml0KTsKJiM0MzsJfQomIzQzOwomIzQzOwluZXRkZXZfZGJnKG5kZXYsICYjMzQ7Q0JTOiBDb25maWd1cmVkIHF1ZXVlICVkIHdpdGggaWRsZXNsb3BlIDB4JXhcbiYjMzQ7LAomIzQzOwkJICAgcW9wdC0mZ3Q7cXVldWUsIGlkbGVzbG9wZSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtYWNiX2Nic19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1OCBxdWV1ZV9udW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJYm9vbCBpc19xdWV1ZV9hOwomIzQzOwl1MzIgZW5hYmxlX2JpdDsKJiM0MzsKJiM0MzsJaWYgKG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoYnAsIHF1ZXVlX251bSwgJmFtcDtlbmFibGVfYml0LCAmYW1wO2lzX3F1ZXVlX2EpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDticC0mZ3Q7bG9jaykgewomIzQzOwkJZ2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGdlbV9yZWFkbChicCwgQ0JTX0NPTlRST0wpICZhbXA7IH5lbmFibGVfYml0KTsKJiM0MzsJCWlmIChpc19xdWV1ZV9hKQomIzQzOwkJCWdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9BLCAwKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlnZW1fd3JpdGVsKGJwLCBDQlNfSURMRVNMT1BFX1FfQiwgMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0ZGV2X2RiZyhuZGV2LCAmIzM0O0NCUzogRGlzYWJsZWQgcXVldWUgJWRcbiYjMzQ7LCBxdWV1ZV9udW0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1hY2Jfc2V0dXBfY2JzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAomIzQzOwkJCSAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpCiYjNDM7ewomIzQzOwlpZiAocW9wdC0mZ3Q7ZW5hYmxlKQomIzQzOwkJcmV0dXJuIG1hY2JfY2JzX2FkZChuZGV2LCBxb3B0KTsKJiM0MzsKJiM0MzsJbWFjYl9jYnNfZGVzdHJveShuZGV2LCBxb3B0LSZndDtxdWV1ZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1hY2Jfc2V0dXBfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAomIzQzOwkJCSAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwl1OCBudW1fdGMgPSBxb3B0LSZndDtudW1fdGM7CiYjNDM7CWludCBlcnI7CiYjNDM7CXU4IGk7CiYjNDM7CiYjNDM7CS8qIEhhbmRsZSByZXNldCBjYXNlIGVhcmx5ICovCiYjNDM7CWlmICghbnVtX3RjKSB7CiYjNDM7CQluZXRkZXZfcmVzZXRfdGMobmRldik7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzc2VzICovCiYjNDM7CXFvcHQtJmd0O2h3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTOwomIzQzOwomIzQzOwllcnIgPSBuZXRkZXZfc2V0X251bV90YyhuZGV2LCBudW1fdGMpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV90YzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IG5ldGRldl9zZXRfdGNfcXVldWUobmRldiwgaSwgcW9wdC0mZ3Q7Y291bnRbaV0sCiYjNDM7CQkJCQkgIHFvcHQtJmd0O29mZnNldFtpXSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZXJyX3Jlc2V0X3RjOwomIzQzOwomIzQzOwkJbmV0ZGV2X2RiZyhuZGV2LCAmIzM0O01RUFJJTzogVEMlZCAtJmd0OyBxdWV1ZSAldSAoY291bnQ9JXUpXG4mIzM0OywKJiM0MzsJCQkgICBpLCBxb3B0LSZndDtvZmZzZXRbaV0sIHFvcHQtJmd0O2NvdW50W2ldKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcmVzZXRfdGM6CiYjNDM7CW5ldGRldl9yZXNldF90YyhuZGV2KTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtYWNiX3RjX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChiYXNlLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOiB7CiYjNDM7CQlzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLSZndDtjYXBzOwomIzQzOwomIzQzOwkJY2Fwcy0mZ3Q7dmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiAJCQkgdm9pZCAqdHlwZV9kYXRhKQogewomIzQzOwlzdHJ1Y3QgbWFjYiAqYnA7CiYjNDM7CiAJaWYgKCFkZXYgfHwgIXR5cGVfZGF0YSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKHR5cGUgPT0gVENfUVVFUllfQ0FQUykKJiM0MzsJCXJldHVybiBtYWNiX3RjX3F1ZXJ5X2NhcHMoZGV2LCB0eXBlX2RhdGEpOwomIzQzOwomIzQzOwlicCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghKGRldi0mZ3Q7aHdfZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9IV19UQykpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkvKiBDaGVjayBpZiBEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kICovCiYjNDM7CWlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZCgmYW1wO2JwLSZndDtwZGV2LSZndDtkZXYpKSkgewomIzQzOwkJbmV0ZGV2X2VycihkZXYsICYjMzQ7RGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOgomIzQzOwkJcmV0dXJuIG1hY2Jfc2V0dXBfbXFwcmlvKGRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9RRElTQ19DQlM6CiYjNDM7CQlyZXR1cm4gbWFjYl9zZXR1cF9jYnMoZGV2LCB0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfUURJU0NfVEFQUklPOgogCQlyZXR1cm4gbWFjYl9zZXR1cF90YXByaW8oZGV2LCB0eXBlX2RhdGEpOwogCWRlZmF1bHQ6CkBAIC00ODQ2LDggJiM0Mzs1MDI5LDggQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQlkZXYtJmd0O2h3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNOwogCWlmIChicC0mZ3Q7Y2FwcyAmYW1wOyBNQUNCX0NBUFNfU0dfRElTQUJMRUQpCiAJCWRldi0mZ3Q7aHdfZmVhdHVyZXMgJmFtcDs9IH5ORVRJRl9GX1NHOwotCS8qIEVuYWJsZSBIV19UQyBpZiBoYXJkd2FyZSBzdXBwb3J0cyBRQlYgKi8KLQlpZiAoYnAtJmd0O2NhcHMgJmFtcDsgTUFDQl9DQVBTX1FCVikKJiM0MzsJLyogRW5hYmxlIFRDIG9mZmxvYWQgZm9yIFRTTi1jYXBhYmxlIGhhcmR3YXJlICovCiYjNDM7CWlmIChicC0mZ3Q7Y2FwcyAmYW1wOyBNQUNCX0NBUFNfVEMpCiAJCWRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQzsKIAogCWRldi0mZ3Q7ZmVhdHVyZXMgPSBkZXYtJmd0O2h3X2ZlYXR1cmVzOwpAQCAtNTY3OCw3ICYjNDM7NTg2MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgdmVyc2FsX2NvbmZpZyA9IHsKIAkuY2FwcyA9IE1BQ0JfQ0FQU19HSUdBQklUX01PREVfQVZBSUxBQkxFIHwgTUFDQl9DQVBTX0pVTUJPIHwKIAkJTUFDQl9DQVBTX0dFTV9IQVNfUFRQIHwgTUFDQl9DQVBTX0JEX1JEX1BSRUZFVENIIHwKIAkJTUFDQl9DQVBTX05FRURfVFNVQ0xLIHwgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEUgfAotCQlNQUNCX0NBUFNfUUJWIHwKJiM0MzsJCU1BQ0JfQ0FQU19UQyB8CiAJCU1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLAogCS5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsCiAJLmluaXQgPSBpbml0X3Jlc2V0X29wdGlvbmFsLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc2OAoJCQkJCQkJb3V0cHV0OiAxNTAKCQkJCQkJCXRob3VnaHRzOiAxMTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IENhZGVuY2UgTUFDQiBFdGhlcm5ldCBEcml2ZXIgVHJhZmZpYyBDb250cm9sIE9mZmxvYWRzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgYWRkaW5nIENCUyAoQ3JlZGl0LUJhc2VkIFNoYXBlcikgYW5kIE1RUFJJTyB0cmFmZmljIGNvbnRyb2wgb2ZmbG9hZCBzdXBwb3J0IHRvIHRoZSBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyLiBFc3NlbnRpYWxseSwgaXQgaW50cm9kdWNlcyBmdW5jdGlvbnMgbGlrZSBgbWFjYl9zZXR1cF9jYnNgIGFuZCBgbWFjYl9zZXR1cF9tcXByaW9gLCBjYWxsZWQgZnJvbSBgbWFjYl9zZXR1cF90Y2AsIGFuZCBhbHNvIGFkZHMgYG1hY2JfdGNfcXVlcnlfY2Fwc2AuIE15IHByaW1hcnkgY29uY2VybiB3aXRoIHRoZXNlIHR5cGVzIG9mIHBhdGNoZXMgaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgZGF0YSBmbG93LgoKSSBzZWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHN0cnVjdHVyZXMgbGlrZSBgdGNfY2JzX3FvcHRfb2ZmbG9hZGAsIGB0Y19tcXByaW9fcW9wdF9vZmZsb2FkYCwgYW5kIGB0Y19xdWVyeV9jYXBzX2Jhc2VgLiBUaGVzZSBhcmUgcGFzc2VkIHRvIHRoZSBkcml2ZXIgZnVuY3Rpb25zIGZyb20gdGhlIG5ldHdvcmtpbmcgY29yZSwgdGhpbmdzIGxpa2UgYHRjX3NldHVwX2NiX2NhbGxgLCBgdGNfc2V0dXBfcWRpc2NfY2JzYCwgZXRjLiBUaGUgbmV0d29ya2luZyBjb3JlLCBzcGVjaWZpY2FsbHkgYG5ldC9zY2hlZC9zY2hfY2JzLmNgIGFuZCBgbmV0L3NjaGVkL3NjaF9tcXByaW8uY2AsIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGFuZCBwb3B1bGF0aW5nIHRoZXNlIHN0cnVjdHVyZXMuCgpOb3csIHRoZSBkcml2ZXIgKnJlYWRzKiBmcm9tIHRoZXNlIHN0cnVjdHVyZXMgdG8gY29uZmlndXJlIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIEltcG9ydGFudGx5LCBpdCBkb2VzbiYjMzk7dCB3cml0ZSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIGJhY2sgaW50byB0aGVzZSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgdGhlbiBiZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gT2theSwgd2FpdCwgYG1hY2JfdGNfcXVlcnlfY2Fwc2AgZG9lcyB3cml0ZSB0byBgYmFzZS0mZ3Q7Y2Fwc2AuLi4gYnV0IHRoaXMgaXMgc3RhbmRhcmQgZm9yIGBUQ19RVUVSWV9DQVBTYCwgYW5kIHRoZSBgY2Fwc2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBieSB0aGUgY2FsbGVyIChlLmcuLCBpbiBgbXFwcmlvX2luaXRgKSBhbmQgbm90IGNvcGllZCBkaXJlY3RseSB0byB1c2VyIHNwYWNlLiBJdCYjMzk7cyB1c2VkIGludGVybmFsbHkgZm9yIHZhbGlkYXRpb24gb2YgdXNlciBpbnB1dC4gTm8gaXNzdWUgdGhlcmUuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgZGF0YSBiZWluZyByZWFkIG1vcmUgY2xvc2VseS4gSW4gYG1hY2Jfc2V0dXBfY2JzYCwgaXQgcmVhZHMgYHFvcHQtJmd0O3F1ZXVlYCwgYHFvcHQtJmd0O2lkbGVzbG9wZWAsIGFuZCBgcW9wdC0mZ3Q7ZW5hYmxlYC4gVGhlbiBpdCBjYWxjdWxhdGVzIGFuZCB3cml0ZXMgdG8gaGFyZHdhcmUgcmVnaXN0ZXJzLiBJbiBgbWFjYl9zZXR1cF9tcXByaW9gLCBpdCByZWFkcyBgbXFwcmlvLSZndDtxb3B0Lm51bV90Y2AsIGBtcXByaW8tJmd0O3FvcHQuY291bnRbaV1gLCBhbmQgYG1xcHJpby0mZ3Q7cW9wdC5vZmZzZXRbaV1gLCBhbmQgaXQgY2FsbHMgYG5ldGRldl9zZXRfbnVtX3RjYCBhbmQgYG5ldGRldl9zZXRfdGNfcXVldWVgLgoKQ3J1Y2lhbGx5LCB0aGVyZSBpcyBubyBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCB1c2VyLXNwYWNlIGJ1ZmZlcnMsIGFuZCBubyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgY29waWVkICp0byogdXNlciBzcGFjZS4gTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCB3aGVyZSB3ZSBtaWdodCBpbmFkdmVydGVudGx5IHJlYWQgdW5pbml0aWFsaXplZCBmaWVsZHMgbGF0ZXIuIEkgYWxzbyBkb24mIzM5O3Qgc2VlIGFueSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aCBtb2RpZmljYXRpb25zIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSBleGlzdGluZyBidWZmZXJzLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggaXMgc3RyaWN0bHkgYWJvdXQgYWRkaW5nIGhhcmR3YXJlIG9mZmxvYWQgc3VwcG9ydC4gQW55IGJ1Z3Mgd291bGQgbGlrZWx5IGJlIGxvZ2ljIGVycm9ycywgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzZXMgKGVzcGVjaWFsbHkgd2l0aCBgbnVtX3RjYCwgYnV0IGNvcmUgbmV0d29ya2luZyBzZWVtcyB0byB2YWxpZGF0ZSB0aG9zZSksIG9yIG1pc2NvbmZpZ3VyYXRpb24gb2YgdGhlIGhhcmR3YXJlLiBUaGVzZSBkb24mIzM5O3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4KCkdpdmVuIHRoYXQsIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHByb2JsZW1zLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtc2A6IFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRvIGAqZW5hYmxlX2JpdGAgYW5kIGAqaXNfcXVldWVfYWAgaWYgaXQgcmV0dXJucyAwLiBJIHNlZSB0aGF0IHRoZXJlIGFyZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGluIGBtYWNiX2Nic19hZGRgLCBhbmQgaW4gYG1hY2JfY2JzX2Rlc3Ryb3lgLiBUaGVyZSBpcyBhbHNvIGFuIGVycm9yIGNoZWNrLiBUaGUgY2FsbHMgaW4gdGhvc2UgZnVuY3Rpb25zIGNoZWNrIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgMCwgc28gYm90aCBvZiB0aG9zZSB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGV5IGFyZSByZWFkLgoKU28sICpkZWZpbml0ZWx5KiBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlIHRoZXJlLgoKKipDb25jbHVzaW9uOiBOZWVkc0tNU0FOID0gZmFsc2UuKioKCioqUmVhc29uaW5nOioqIFRoaXMgcGF0Y2ggYWRkcyBoYXJkd2FyZSBvZmZsb2FkIHN1cHBvcnQgZm9yIENCUyBhbmQgTVFQUklPIHRyYWZmaWMgY29udHJvbCBpbiB0aGUgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEl0IHJlYWRzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgbmV0d29ya2luZyBjb3JlIGFuZCBwcm9ncmFtcyBoYXJkd2FyZSByZWdpc3RlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gUG90ZW50aWFsIG1lbW9yeSBlcnJvcnMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd2lsbCBiZSBjYXVnaHQgYnkgS0FTQU4uIFdlIGFyZSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIG9mZmxvYWQgc3VwcG9ydCBmb3IgQ0JTIGFuZCBNUVBSSU8gdHJhZmZpYyBjb250cm9sIGluIHRoZSBNQUNCIGV0aGVybmV0IGRyaXZlci4gSXQgcmVhZHMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHByb3ZpZGVkIGJ5IHRoZSBuZXR3b3JraW5nIGNvcmUgYW5kIHByb2dyYW1zIGhhcmR3YXJlIHJlZ2lzdGVycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgbGVha2VkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgdmFyaWFibGVzIHBhc3NlZCBieSByZWZlcmVuY2UgKGBlbmFibGVfYml0YCwgYGlzX3F1ZXVlX2FgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0IGZvciBDQlMgYW5kIE1RUFJJTyB0cmFmZmljIGNvbnRyb2wgaW4gdGhlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyLiBJdCByZWFkcyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgdGhlIG5ldHdvcmtpbmcgY29yZSBhbmQgcHJvZ3JhbXMgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSB2YXJpYWJsZXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSAoYGVuYWJsZV9iaXRgLCBgaXNfcXVldWVfYWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBlcnJvcnMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxODozNC45NDQ4MDEzODRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzQ2MjM3MjIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0NBREVOQ0VcIixcbiAgICBcIk1BQ0JcIixcbiAgICBcIk1BQ0JfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFjYl9zZXR1cF9jYnNcIixcbiAgICBcIm1hY2JfY2JzX2FkZFwiLFxuICAgIFwibWFjYl9jYnNfZGVzdHJveVwiLFxuICAgIFwibWFjYl9zZXR1cF9tcXByaW9cIixcbiAgICBcIm1hY2JfdGNfcXVlcnlfY2Fwc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBvZmZsb2FkIHN1cHBvcnQgZm9yIENCUyBhbmQgTVFQUklPIHRyYWZmaWMgY29udHJvbCBpbiB0aGUgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEl0IHJlYWRzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgbmV0d29ya2luZyBjb3JlIGFuZCBwcm9ncmFtcyBoYXJkd2FyZSByZWdpc3RlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlIHZhcmlhYmxlcyBwYXNzZWQgYnkgcmVmZXJlbmNlIChgZW5hYmxlX2JpdGAsIGBpc19xdWV1ZV9hYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBDQlMgKENyZWRpdC1CYXNlZCBTaGFwZXIpIGFuZCBNUVBSSU8gKE11bHRpcGxlIFF1ZXVlIFByaW9yaXR5KSB0cmFmZmljIGNvbnRyb2wgb2ZmbG9hZHMgdG8gdGhlIENhZGVuY2UgTUFDQiBFdGhlcm5ldCBkcml2ZXIuIFRoZXNlIGZlYXR1cmVzIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgKHRjIHFkaXNjKSBhbmQgaW50cm9kdWNlIG5ldyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGxvZ2ljIHRoYXQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6MzQuOTQ0ODA3Njc0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTQzNDI3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2NjRhMjljMzllZTdmYzc1N2UxNzIwMmRjZjUyYTljN2JiOGZjNGZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTI6MTg6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaFxcbmluZGV4IGExMTA1MjU2NTQzNmEuLmQ1YjI4NDU5ZmQ3NWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaFxcbkBAIC0xODQsNiArMTg0LDkgQEBcXG4gI2RlZmluZSBHRU1fRENGRzhcXHRcXHQweDAyOUMgLyogRGVzaWduIENvbmZpZyA4ICovXFxuICNkZWZpbmUgR0VNX0RDRkcxMFxcdFxcdDB4MDJBNCAvKiBEZXNpZ24gQ29uZmlnIDEwICovXFxuICNkZWZpbmUgR0VNX0RDRkcxMlxcdFxcdDB4MDJBQyAvKiBEZXNpZ24gQ29uZmlnIDEyICovXFxuKyNkZWZpbmUgR0VNX0NCU19DT05UUk9MXFx0XFx0MHgwNEJDIC8qIENCUyBDb250cm9sIFJlZ2lzdGVyICovXFxuKyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9BXFx0MHgwNEMwIC8qIENCUyBJZGxlU2xvcGUgUXVldWUgQSAqL1xcbisjZGVmaW5lIEdFTV9DQlNfSURMRVNMT1BFX1FfQlxcdDB4MDRDNCAvKiBDQlMgSWRsZVNsb3BlIFF1ZXVlIEIgKi9cXG4gI2RlZmluZSBHRU1fRU5TVF9DT05UUk9MXFx0MHgwODgwIC8qIEVOU1QgY29udHJvbCByZWdpc3RlciAqL1xcbiAjZGVmaW5lIEdFTV9VU1hfQ09OVFJPTFxcdFxcdDB4MEE4MCAvKiBIaWdoIHNwZWVkIFBDUyBjb250cm9sIHJlZ2lzdGVyICovXFxuICNkZWZpbmUgR0VNX1VTWF9TVEFUVVNcXHRcXHQweDBBODggLyogSGlnaCBzcGVlZCBQQ1Mgc3RhdHVzIHJlZ2lzdGVyICovXFxuQEAgLTIyNCw2ICsyMjcsMTIgQEBcXG4gI2RlZmluZSBHRU1fRU5TVF9PTl9USU1FKGh3X3EpXFx0XFx0KDB4MDgyMCArICgoaHdfcSkgXFx1MDAzY1xcdTAwM2MgMikpXFxuICNkZWZpbmUgR0VNX0VOU1RfT0ZGX1RJTUUoaHdfcSlcXHRcXHQoMHgwODQwICsgKChod19xKSBcXHUwMDNjXFx1MDAzYyAyKSlcXG4gXFxuKy8qIEJpdGZpZWxkcyBpbiBDQlNfQ09OVFJPTCAqL1xcbisjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0FfT0ZGU0VUXFx0MFxcbisjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0FfU0laRVxcdDFcXG4rI2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9CX09GRlNFVFxcdDFcXG4rI2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9CX1NJWkVcXHQxXFxuK1xcbiAvKiBCaXRmaWVsZHMgaW4gRU5TVF9DT05UUk9MICovXFxuICNkZWZpbmUgR0VNX0VOU1RfRElTQUJMRV9RVUVVRV9PRkZTRVRcXHQxNlxcbiBcXG5AQCAtNzY4LDcgKzc3Nyw3IEBAXFxuICNkZWZpbmUgTUFDQl9DQVBTX01JSU9OUkdNSUlcXHRcXHRcXHRCSVQoOSlcXG4gI2RlZmluZSBNQUNCX0NBUFNfTkVFRF9UU1VDTEtcXHRcXHRcXHRCSVQoMTApXFxuICNkZWZpbmUgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEVcXHRcXHRcXHRCSVQoMTEpXFxuLSNkZWZpbmUgTUFDQl9DQVBTX1FCVlxcdFxcdFxcdFxcdEJJVCgxMilcXG4rI2RlZmluZSBNQUNCX0NBUFNfVENcXHRcXHRcXHRcXHRCSVQoMTIpXFxuICNkZWZpbmUgTUFDQl9DQVBTX1BDU1xcdFxcdFxcdFxcdEJJVCgxMylcXG4gI2RlZmluZSBNQUNCX0NBUFNfSElHSF9TUEVFRFxcdFxcdFxcdEJJVCgxNClcXG4gI2RlZmluZSBNQUNCX0NBUFNfQ0xLX0hXX0NIR1xcdFxcdFxcdEJJVCgxNSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG5pbmRleCBkMzk0ZjFmNDNiNjg1Li5hMGE2ODQ5MDUxOWU0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXFxuQEAgLTk5LDYgKzk5LDEwIEBAIHN0cnVjdCBzaWZpdmVfZnU1NDBfbWFjYl9tZ210IHtcXG4gXFxuICNkZWZpbmUgTUFDQl9NRElPX1RJTUVPVVRcXHQxMDAwMDAwIC8qIGluIHVzZWNzICovXFxuIFxcbisvKiBDQlMgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvcnM6IDEwMDAvaW50ZXJmYWNlX3dpZHRoICovXFxuKyNkZWZpbmUgTUFDQl9DQlNfUE9SVF9SQVRFXzFHXFx0XFx0MTI1XFx0LyogMTAwMC84IGZvciBHTUlJICg4LWJpdCkgKi9cXG4rI2RlZmluZSBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTVxcdDI1MFxcdC8qIDEwMDAvNCBmb3IgTUlJICg0LWJpdCkgKi9cXG4rXFxuIC8qIERNQSBidWZmZXIgZGVzY3JpcHRvciBtaWdodCBiZSBkaWZmZXJlbnQgc2l6ZVxcbiAgKiBkZXBlbmRzIG9uIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb246XFxuICAqXFxuQEAgLTQ0OTksMTggKzQ1MDMsOCBAQCBzdGF0aWMgdm9pZCBtYWNiX3RhcHJpb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICp0YXByaW8pXFxuIHtcXG4tXFx0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KCEobmRldi1cXHUwMDNlaHdfZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1RDKSkpXFxuLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tXFxuLVxcdC8qIENoZWNrIGlmIERldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmQgKi9cXG4tXFx0aWYgKHVubGlrZWx5KHBtX3J1bnRpbWVfc3VzcGVuZGVkKFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KSkpIHtcXG4tXFx0XFx0bmV0ZGV2X2VycihuZGV2LCBcXFwiRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tXFx0fVxcbi1cXG4gXFx0c3dpdGNoICh0YXByaW8tXFx1MDAzZWNtZCkge1xcbiBcXHRjYXNlIFRBUFJJT19DTURfUkVQTEFDRTpcXG4gXFx0XFx0ZXJyID0gbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShuZGV2LCB0YXByaW8pO1xcbkBAIC00NTI1LDEzICs0NTE5LDIwMiBAQCBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoc3RydWN0IG1hY2IgKmJwLCB1OCBxdWV1ZV9udW0sXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyICplbmFibGVfYml0LCBib29sICppc19xdWV1ZV9hKVxcbit7XFxuK1xcdC8qIFF1ZXVlIEEgaXMgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDEpICovXFxuK1xcdGlmIChxdWV1ZV9udW0gPT0gYnAtXFx1MDAzZW51bV9xdWV1ZXMgLSAxKSB7XFxuK1xcdFxcdCplbmFibGVfYml0ID0gR0VNX0JJVChDQlNfRU5BQkxFX1FVRVVFX0EpO1xcbitcXHRcXHQqaXNfcXVldWVfYSA9IHRydWU7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBRdWV1ZSBCIGlzIHNlY29uZCBoaWdoZXN0IHByaW9yaXR5IChudW1fcXVldWVzIC0gMikgKi9cXG4rXFx0aWYgKHF1ZXVlX251bSA9PSBicC1cXHUwMDNlbnVtX3F1ZXVlcyAtIDIpIHtcXG4rXFx0XFx0KmVuYWJsZV9iaXQgPSBHRU1fQklUKENCU19FTkFCTEVfUVVFVUVfQik7XFxuK1xcdFxcdCppc19xdWV1ZV9hID0gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gLUVJTlZBTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtYWNiX2Nic19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuK1xcdFxcdFxcdHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KVxcbit7XFxuK1xcdHUzMiBlbmFibGVfYml0LCBpZGxlc2xvcGUsIHNwZWVkX2ticHMsIGN0cmw7XFxuK1xcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBrc2V0O1xcbitcXHRib29sIGlzX3F1ZXVlX2E7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKGJwLCBxb3B0LVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmVuYWJsZV9iaXQsIFxcdTAwMjZpc19xdWV1ZV9hKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJDQlM6IFF1ZXVlICVkIG5vdCBlbGlnaWJsZSAob25seSB0b3AgMiBxdWV1ZXMgc3VwcG9ydCBDQlMpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBxb3B0LVxcdTAwM2VxdWV1ZSk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHQvKiBpZGxlc2xvcGUgaXMgY2FsaWJyYXRlZCBmb3IgdGhlIGN1cnJlbnQgbGluayBzcGVlZDsgQ0JTIGlzIG5vdFxcbitcXHQgKiByZXByb2dyYW1tZWQgb24gbGluay1zcGVlZCBjaGFuZ2VzLCBzbyBpdCBtdXN0IGJlIHJlY29uZmlndXJlZFxcbitcXHQgKiBpZiB0aGUgbGluayBzcGVlZCBjaGFuZ2VzLlxcbitcXHQgKi9cXG4rXFx0cGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQoYnAtXFx1MDAzZXBoeWxpbmssIFxcdTAwMjZrc2V0KTtcXG4rXFxuK1xcdGlmICgha3NldC5iYXNlLnNwZWVkIHx8IGtzZXQuYmFzZS5zcGVlZCA9PSBTUEVFRF9VTktOT1dOKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcIkNCUzogSW52YWxpZCBsaW5rIHNwZWVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHNwZWVkX2ticHMgPSBrc2V0LmJhc2Uuc3BlZWQgKiAxMDAwO1xcbitcXG4rXFx0aWYgKHFvcHQtXFx1MDAzZWlkbGVzbG9wZSBcXHUwMDNjPSAwIHx8ICh1MzIpcW9wdC1cXHUwMDNlaWRsZXNsb3BlIFxcdTAwM2Ugc3BlZWRfa2Jwcykge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJDQlM6IGludmFsaWQgaWRsZXNsb3BlICVkIChtdXN0IGJlIDEuLiV1IGticHMpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBxb3B0LVxcdTAwM2VpZGxlc2xvcGUsIHNwZWVkX2ticHMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogQ2FsY3VsYXRlIGlkbGVzbG9wZSBmb3IgaGFyZHdhcmUgcmVnaXN0ZXI6XFxuK1xcdCAqIC0gSGlnaC1zcGVlZCBHRU06IHNjYWxlIHRvIGZ1bGwgMzItYml0IHJlZ2lzdGVyIHJhbmdlXFxuK1xcdCAqIC0gU3RhbmRhcmQgTUFDQjogbXVsdGlwbHkgYnkgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvclxcbitcXHQgKi9cXG4rXFx0aWYgKGJwLVxcdTAwM2VjYXBzIFxcdTAwMjYgTUFDQl9DQVBTX0hJR0hfU1BFRUQpXFxuK1xcdFxcdGlkbGVzbG9wZSA9IERJVl9ST1VORF9VUF9VTEwoKHU2NClxb3B0LVxcdTAwM2VpZGxlc2xvcGUgKiBVMzJfTUFYLCBzcGVlZF9rYnBzKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRpZGxlc2xvcGUgPSAodTMyKXFvcHQtXFx1MDAzZWlkbGVzbG9wZSAqIChrc2V0LmJhc2Uuc3BlZWQgXFx1MDAzZT0gMTAwMCA/XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBNQUNCX0NCU19QT1JUX1JBVEVfMUcgOiBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTSk7XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNmJwLVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdC8qIERpc2FibGUgQ0JTIGZvciB0aGUgcXVldWUgYmVmb3JlIHVwZGF0aW5nIGlkbGVzbG9wZSAqL1xcbitcXHRcXHRjdHJsID0gZ2VtX3JlYWRsKGJwLCBDQlNfQ09OVFJPTCkgXFx1MDAyNiB+ZW5hYmxlX2JpdDtcXG4rXFx0XFx0Z2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGN0cmwpO1xcbitcXHRcXHQvKiBVcGRhdGUgaWRsZXNsb3BlIGZvciB0aGUgcXVldWUgKi9cXG4rXFx0XFx0aWYgKGlzX3F1ZXVlX2EpXFxuK1xcdFxcdFxcdGdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9BLCBpZGxlc2xvcGUpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9CLCBpZGxlc2xvcGUpO1xcbitcXG4rXFx0XFx0LyogUmUtZW5hYmxlIENCUyBmb3IgdGhlIHF1ZXVlIHdpdGggbmV3IGlkbGVzbG9wZSAqL1xcbitcXHRcXHRnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCB8IGVuYWJsZV9iaXQpO1xcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfZGJnKG5kZXYsIFxcXCJDQlM6IENvbmZpZ3VyZWQgcXVldWUgJWQgd2l0aCBpZGxlc2xvcGUgMHgleFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgcW9wdC1cXHUwMDNlcXVldWUsIGlkbGVzbG9wZSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWFjYl9jYnNfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTggcXVldWVfbnVtKVxcbit7XFxuK1xcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHRib29sIGlzX3F1ZXVlX2E7XFxuK1xcdHUzMiBlbmFibGVfYml0O1xcbitcXG4rXFx0aWYgKG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoYnAsIHF1ZXVlX251bSwgXFx1MDAyNmVuYWJsZV9iaXQsIFxcdTAwMjZpc19xdWV1ZV9hKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFxcdTAwMjZicC1cXHUwMDNlbG9jaykge1xcbitcXHRcXHRnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgZ2VtX3JlYWRsKGJwLCBDQlNfQ09OVFJPTCkgXFx1MDAyNiB+ZW5hYmxlX2JpdCk7XFxuK1xcdFxcdGlmIChpc19xdWV1ZV9hKVxcbitcXHRcXHRcXHRnZW1fd3JpdGVsKGJwLCBDQlNfSURMRVNMT1BFX1FfQSwgMCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0Z2VtX3dyaXRlbChicCwgQ0JTX0lETEVTTE9QRV9RX0IsIDApO1xcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfZGJnKG5kZXYsIFxcXCJDQlM6IERpc2FibGVkIHF1ZXVlICVkXFxcXG5cXFwiLCBxdWV1ZV9udW0pO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1hY2Jfc2V0dXBfY2JzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHQgIHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KVxcbit7XFxuK1xcdGlmIChxb3B0LVxcdTAwM2VlbmFibGUpXFxuK1xcdFxcdHJldHVybiBtYWNiX2Nic19hZGQobmRldiwgcW9wdCk7XFxuK1xcbitcXHRtYWNiX2Nic19kZXN0cm95KG5kZXYsIHFvcHQtXFx1MDAzZXF1ZXVlKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWFjYl9zZXR1cF9tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHR1OCBudW1fdGMgPSBxb3B0LVxcdTAwM2VudW1fdGM7XFxuK1xcdGludCBlcnI7XFxuK1xcdHU4IGk7XFxuK1xcbitcXHQvKiBIYW5kbGUgcmVzZXQgY2FzZSBlYXJseSAqL1xcbitcXHRpZiAoIW51bV90Yykge1xcbitcXHRcXHRuZXRkZXZfcmVzZXRfdGMobmRldik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzc2VzICovXFxuK1xcdHFvcHQtXFx1MDAzZWh3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTO1xcbitcXG4rXFx0ZXJyID0gbmV0ZGV2X3NldF9udW1fdGMobmRldiwgbnVtX3RjKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fdGM7IGkrKykge1xcbitcXHRcXHRlcnIgPSBuZXRkZXZfc2V0X3RjX3F1ZXVlKG5kZXYsIGksIHFvcHQtXFx1MDAzZWNvdW50W2ldLFxcbitcXHRcXHRcXHRcXHRcXHQgIHFvcHQtXFx1MDAzZW9mZnNldFtpXSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc2V0X3RjO1xcbitcXG4rXFx0XFx0bmV0ZGV2X2RiZyhuZGV2LCBcXFwiTVFQUklPOiBUQyVkIC1cXHUwMDNlIHF1ZXVlICV1IChjb3VudD0ldSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGksIHFvcHQtXFx1MDAzZW9mZnNldFtpXSwgcW9wdC1cXHUwMDNlY291bnRbaV0pO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9yZXNldF90YzpcXG4rXFx0bmV0ZGV2X3Jlc2V0X3RjKG5kZXYpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1hY2JfdGNfcXVlcnlfY2FwcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKVxcbit7XFxuK1xcdHN3aXRjaCAoYmFzZS1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoge1xcbitcXHRcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXG4rXFx0XFx0Y2Fwcy1cXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcXG4rXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdCB2b2lkICp0eXBlX2RhdGEpXFxuIHtcXG4rXFx0c3RydWN0IG1hY2IgKmJwO1xcbitcXG4gXFx0aWYgKCFkZXYgfHwgIXR5cGVfZGF0YSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRpZiAodHlwZSA9PSBUQ19RVUVSWV9DQVBTKVxcbitcXHRcXHRyZXR1cm4gbWFjYl90Y19xdWVyeV9jYXBzKGRldiwgdHlwZV9kYXRhKTtcXG4rXFxuK1xcdGJwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghKGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1RDKSkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdC8qIENoZWNrIGlmIERldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KHBtX3J1bnRpbWVfc3VzcGVuZGVkKFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KSkpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XFxuK1xcdFxcdHJldHVybiBtYWNiX3NldHVwX21xcHJpbyhkZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfQ0JTOlxcbitcXHRcXHRyZXR1cm4gbWFjYl9zZXR1cF9jYnMoZGV2LCB0eXBlX2RhdGEpO1xcbiBcXHRjYXNlIFRDX1NFVFVQX1FESVNDX1RBUFJJTzpcXG4gXFx0XFx0cmV0dXJuIG1hY2Jfc2V0dXBfdGFwcmlvKGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0ZGVmYXVsdDpcXG5AQCAtNDg0Niw4ICs1MDI5LDggQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRcXHRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNO1xcbiBcXHRpZiAoYnAtXFx1MDAzZWNhcHMgXFx1MDAyNiBNQUNCX0NBUFNfU0dfRElTQUJMRUQpXFxuIFxcdFxcdGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgXFx1MDAyNj0gfk5FVElGX0ZfU0c7XFxuLVxcdC8qIEVuYWJsZSBIV19UQyBpZiBoYXJkd2FyZSBzdXBwb3J0cyBRQlYgKi9cXG4tXFx0aWYgKGJwLVxcdTAwM2VjYXBzIFxcdTAwMjYgTUFDQl9DQVBTX1FCVilcXG4rXFx0LyogRW5hYmxlIFRDIG9mZmxvYWQgZm9yIFRTTi1jYXBhYmxlIGhhcmR3YXJlICovXFxuK1xcdGlmIChicC1cXHUwMDNlY2FwcyBcXHUwMDI2IE1BQ0JfQ0FQU19UQylcXG4gXFx0XFx0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xcbiBcXG4gXFx0ZGV2LVxcdTAwM2VmZWF0dXJlcyA9IGRldi1cXHUwMDNlaHdfZmVhdHVyZXM7XFxuQEAgLTU2NzgsNyArNTg2MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgdmVyc2FsX2NvbmZpZyA9IHtcXG4gXFx0LmNhcHMgPSBNQUNCX0NBUFNfR0lHQUJJVF9NT0RFX0FWQUlMQUJMRSB8IE1BQ0JfQ0FQU19KVU1CTyB8XFxuIFxcdFxcdE1BQ0JfQ0FQU19HRU1fSEFTX1BUUCB8IE1BQ0JfQ0FQU19CRF9SRF9QUkVGRVRDSCB8XFxuIFxcdFxcdE1BQ0JfQ0FQU19ORUVEX1RTVUNMSyB8IE1BQ0JfQ0FQU19RVUVVRV9ESVNBQkxFIHxcXG4tXFx0XFx0TUFDQl9DQVBTX1FCViB8XFxuK1xcdFxcdE1BQ0JfQ0FQU19UQyB8XFxuIFxcdFxcdE1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLFxcbiBcXHQuZG1hX2J1cnN0X2xlbmd0aCA9IDE2LFxcbiBcXHQuaW5pdCA9IGluaXRfcmVzZXRfb3B0aW9uYWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE4OjM1LjM1OTg4Mzk5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMzNTM2MDM1NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfQ0FERU5DRVwiLFxuICAgIFwiTUFDQlwiLFxuICAgIFwiTUFDQl9QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWNiX3NldHVwX2Nic1wiLFxuICAgIFwibWFjYl9jYnNfYWRkXCIsXG4gICAgXCJtYWNiX2Nic19kZXN0cm95XCIsXG4gICAgXCJtYWNiX3NldHVwX21xcHJpb1wiLFxuICAgIFwibWFjYl90Y19xdWVyeV9jYXBzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBDQlMgKENyZWRpdC1CYXNlZCBTaGFwZXIpIGFuZCBNUVBSSU8gKE11bHRpcGxlIFF1ZXVlIFByaW9yaXR5KSB0cmFmZmljIGNvbnRyb2wgb2ZmbG9hZHMgdG8gdGhlIENhZGVuY2UgTUFDQiBFdGhlcm5ldCBkcml2ZXIuIFRoZXNlIGZlYXR1cmVzIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgKHRjIHFkaXNjKSBhbmQgaW50cm9kdWNlIG5ldyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGxvZ2ljIHRoYXQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjY0YTI5YzM5ZWU3ZmM3NTdlMTcyMDJkY2Y1MmE5YzdiYjhmYzRmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTI6MTg6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG5pbmRleCBhMTEwNTI1NjU0MzZhLi5kNWIyODQ1OWZkNzVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG5AQCAtMTg0LDYgKzE4NCw5IEBAXG4gI2RlZmluZSBHRU1fRENGRzhcdFx0MHgwMjlDIC8qIERlc2lnbiBDb25maWcgOCAqL1xuICNkZWZpbmUgR0VNX0RDRkcxMFx0XHQweDAyQTQgLyogRGVzaWduIENvbmZpZyAxMCAqL1xuICNkZWZpbmUgR0VNX0RDRkcxMlx0XHQweDAyQUMgLyogRGVzaWduIENvbmZpZyAxMiAqL1xuKyNkZWZpbmUgR0VNX0NCU19DT05UUk9MXHRcdDB4MDRCQyAvKiBDQlMgQ29udHJvbCBSZWdpc3RlciAqL1xuKyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9BXHQweDA0QzAgLyogQ0JTIElkbGVTbG9wZSBRdWV1ZSBBICovXG4rI2RlZmluZSBHRU1fQ0JTX0lETEVTTE9QRV9RX0JcdDB4MDRDNCAvKiBDQlMgSWRsZVNsb3BlIFF1ZXVlIEIgKi9cbiAjZGVmaW5lIEdFTV9FTlNUX0NPTlRST0xcdDB4MDg4MCAvKiBFTlNUIGNvbnRyb2wgcmVnaXN0ZXIgKi9cbiAjZGVmaW5lIEdFTV9VU1hfQ09OVFJPTFx0XHQweDBBODAgLyogSGlnaCBzcGVlZCBQQ1MgY29udHJvbCByZWdpc3RlciAqL1xuICNkZWZpbmUgR0VNX1VTWF9TVEFUVVNcdFx0MHgwQTg4IC8qIEhpZ2ggc3BlZWQgUENTIHN0YXR1cyByZWdpc3RlciAqL1xuQEAgLTIyNCw2ICsyMjcsMTIgQEBcbiAjZGVmaW5lIEdFTV9FTlNUX09OX1RJTUUoaHdfcSlcdFx0KDB4MDgyMCArICgoaHdfcSkgXHUwMDNjXHUwMDNjIDIpKVxuICNkZWZpbmUgR0VNX0VOU1RfT0ZGX1RJTUUoaHdfcSlcdFx0KDB4MDg0MCArICgoaHdfcSkgXHUwMDNjXHUwMDNjIDIpKVxuIFxuKy8qIEJpdGZpZWxkcyBpbiBDQlNfQ09OVFJPTCAqL1xuKyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9PRkZTRVRcdDBcbisjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0FfU0laRVx0MVxuKyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQl9PRkZTRVRcdDFcbisjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0JfU0laRVx0MVxuK1xuIC8qIEJpdGZpZWxkcyBpbiBFTlNUX0NPTlRST0wgKi9cbiAjZGVmaW5lIEdFTV9FTlNUX0RJU0FCTEVfUVVFVUVfT0ZGU0VUXHQxNlxuIFxuQEAgLTc2OCw3ICs3NzcsNyBAQFxuICNkZWZpbmUgTUFDQl9DQVBTX01JSU9OUkdNSUlcdFx0XHRCSVQoOSlcbiAjZGVmaW5lIE1BQ0JfQ0FQU19ORUVEX1RTVUNMS1x0XHRcdEJJVCgxMClcbiAjZGVmaW5lIE1BQ0JfQ0FQU19RVUVVRV9ESVNBQkxFXHRcdFx0QklUKDExKVxuLSNkZWZpbmUgTUFDQl9DQVBTX1FCVlx0XHRcdFx0QklUKDEyKVxuKyNkZWZpbmUgTUFDQl9DQVBTX1RDXHRcdFx0XHRCSVQoMTIpXG4gI2RlZmluZSBNQUNCX0NBUFNfUENTXHRcdFx0XHRCSVQoMTMpXG4gI2RlZmluZSBNQUNCX0NBUFNfSElHSF9TUEVFRFx0XHRcdEJJVCgxNClcbiAjZGVmaW5lIE1BQ0JfQ0FQU19DTEtfSFdfQ0hHXHRcdFx0QklUKDE1KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5pbmRleCBkMzk0ZjFmNDNiNjg1Li5hMGE2ODQ5MDUxOWU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuQEAgLTk5LDYgKzk5LDEwIEBAIHN0cnVjdCBzaWZpdmVfZnU1NDBfbWFjYl9tZ210IHtcbiBcbiAjZGVmaW5lIE1BQ0JfTURJT19USU1FT1VUXHQxMDAwMDAwIC8qIGluIHVzZWNzICovXG4gXG4rLyogQ0JTIHBvcnQgdHJhbnNtaXQgcmF0ZSBmYWN0b3JzOiAxMDAwL2ludGVyZmFjZV93aWR0aCAqL1xuKyNkZWZpbmUgTUFDQl9DQlNfUE9SVF9SQVRFXzFHXHRcdDEyNVx0LyogMTAwMC84IGZvciBHTUlJICg4LWJpdCkgKi9cbisjZGVmaW5lIE1BQ0JfQ0JTX1BPUlRfUkFURV8xMF8xMDBNXHQyNTBcdC8qIDEwMDAvNCBmb3IgTUlJICg0LWJpdCkgKi9cbitcbiAvKiBETUEgYnVmZmVyIGRlc2NyaXB0b3IgbWlnaHQgYmUgZGlmZmVyZW50IHNpemVcbiAgKiBkZXBlbmRzIG9uIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb246XG4gICpcbkBAIC00NDk5LDE4ICs0NTAzLDggQEAgc3RhdGljIHZvaWQgbWFjYl90YXByaW9fZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRcdCAgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnRhcHJpbylcbiB7XG4tXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGludCBlcnIgPSAwO1xuIFxuLVx0aWYgKHVubGlrZWx5KCEobmRldi1cdTAwM2Vod19mZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19UQykpKVxuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tXG4tXHQvKiBDaGVjayBpZiBEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kICovXG4tXHRpZiAodW5saWtlbHkocG1fcnVudGltZV9zdXNwZW5kZWQoXHUwMDI2YnAtXHUwMDNlcGRldi1cdTAwM2VkZXYpKSkge1xuLVx0XHRuZXRkZXZfZXJyKG5kZXYsIFwiRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxcblwiKTtcbi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLVx0fVxuLVxuIFx0c3dpdGNoICh0YXByaW8tXHUwMDNlY21kKSB7XG4gXHRjYXNlIFRBUFJJT19DTURfUkVQTEFDRTpcbiBcdFx0ZXJyID0gbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShuZGV2LCB0YXByaW8pO1xuQEAgLTQ1MjUsMTMgKzQ1MTksMjAyIEBAIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgaW50IG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoc3RydWN0IG1hY2IgKmJwLCB1OCBxdWV1ZV9udW0sXG4rXHRcdFx0XHQgICAgIHUzMiAqZW5hYmxlX2JpdCwgYm9vbCAqaXNfcXVldWVfYSlcbit7XG4rXHQvKiBRdWV1ZSBBIGlzIGhpZ2hlc3QgcHJpb3JpdHkgKG51bV9xdWV1ZXMgLSAxKSAqL1xuK1x0aWYgKHF1ZXVlX251bSA9PSBicC1cdTAwM2VudW1fcXVldWVzIC0gMSkge1xuK1x0XHQqZW5hYmxlX2JpdCA9IEdFTV9CSVQoQ0JTX0VOQUJMRV9RVUVVRV9BKTtcbitcdFx0KmlzX3F1ZXVlX2EgPSB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qIFF1ZXVlIEIgaXMgc2Vjb25kIGhpZ2hlc3QgcHJpb3JpdHkgKG51bV9xdWV1ZXMgLSAyKSAqL1xuK1x0aWYgKHF1ZXVlX251bSA9PSBicC1cdTAwM2VudW1fcXVldWVzIC0gMikge1xuK1x0XHQqZW5hYmxlX2JpdCA9IEdFTV9CSVQoQ0JTX0VOQUJMRV9RVUVVRV9CKTtcbitcdFx0KmlzX3F1ZXVlX2EgPSBmYWxzZTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rc3RhdGljIGludCBtYWNiX2Nic19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0c3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpXG4re1xuK1x0dTMyIGVuYWJsZV9iaXQsIGlkbGVzbG9wZSwgc3BlZWRfa2JwcywgY3RybDtcbitcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3Mga3NldDtcbitcdGJvb2wgaXNfcXVldWVfYTtcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKGJwLCBxb3B0LVx1MDAzZXF1ZXVlLCBcdTAwMjZlbmFibGVfYml0LCBcdTAwMjZpc19xdWV1ZV9hKTtcbitcdGlmIChlcnIpIHtcbitcdFx0bmV0ZGV2X2VycihuZGV2LCBcIkNCUzogUXVldWUgJWQgbm90IGVsaWdpYmxlIChvbmx5IHRvcCAyIHF1ZXVlcyBzdXBwb3J0IENCUylcXG5cIixcbitcdFx0XHQgICBxb3B0LVx1MDAzZXF1ZXVlKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHQvKiBpZGxlc2xvcGUgaXMgY2FsaWJyYXRlZCBmb3IgdGhlIGN1cnJlbnQgbGluayBzcGVlZDsgQ0JTIGlzIG5vdFxuK1x0ICogcmVwcm9ncmFtbWVkIG9uIGxpbmstc3BlZWQgY2hhbmdlcywgc28gaXQgbXVzdCBiZSByZWNvbmZpZ3VyZWRcbitcdCAqIGlmIHRoZSBsaW5rIHNwZWVkIGNoYW5nZXMuXG4rXHQgKi9cbitcdHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KGJwLVx1MDAzZXBoeWxpbmssIFx1MDAyNmtzZXQpO1xuK1xuK1x0aWYgKCFrc2V0LmJhc2Uuc3BlZWQgfHwga3NldC5iYXNlLnNwZWVkID09IFNQRUVEX1VOS05PV04pIHtcbitcdFx0bmV0ZGV2X2VycihuZGV2LCBcIkNCUzogSW52YWxpZCBsaW5rIHNwZWVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHNwZWVkX2ticHMgPSBrc2V0LmJhc2Uuc3BlZWQgKiAxMDAwO1xuK1xuK1x0aWYgKHFvcHQtXHUwMDNlaWRsZXNsb3BlIFx1MDAzYz0gMCB8fCAodTMyKXFvcHQtXHUwMDNlaWRsZXNsb3BlIFx1MDAzZSBzcGVlZF9rYnBzKSB7XG4rXHRcdG5ldGRldl9lcnIobmRldiwgXCJDQlM6IGludmFsaWQgaWRsZXNsb3BlICVkIChtdXN0IGJlIDEuLiV1IGticHMpXFxuXCIsXG4rXHRcdFx0ICAgcW9wdC1cdTAwM2VpZGxlc2xvcGUsIHNwZWVkX2ticHMpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdC8qIENhbGN1bGF0ZSBpZGxlc2xvcGUgZm9yIGhhcmR3YXJlIHJlZ2lzdGVyOlxuK1x0ICogLSBIaWdoLXNwZWVkIEdFTTogc2NhbGUgdG8gZnVsbCAzMi1iaXQgcmVnaXN0ZXIgcmFuZ2VcbitcdCAqIC0gU3RhbmRhcmQgTUFDQjogbXVsdGlwbHkgYnkgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvclxuK1x0ICovXG4rXHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX0hJR0hfU1BFRUQpXG4rXHRcdGlkbGVzbG9wZSA9IERJVl9ST1VORF9VUF9VTEwoKHU2NClxb3B0LVx1MDAzZWlkbGVzbG9wZSAqIFUzMl9NQVgsIHNwZWVkX2ticHMpO1xuK1x0ZWxzZVxuK1x0XHRpZGxlc2xvcGUgPSAodTMyKXFvcHQtXHUwMDNlaWRsZXNsb3BlICogKGtzZXQuYmFzZS5zcGVlZCBcdTAwM2U9IDEwMDAgP1xuK1x0XHRcdFx0XHQgICAgICAgTUFDQl9DQlNfUE9SVF9SQVRFXzFHIDogTUFDQl9DQlNfUE9SVF9SQVRFXzEwXzEwME0pO1xuK1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmJwLVx1MDAzZWxvY2spIHtcbitcdFx0LyogRGlzYWJsZSBDQlMgZm9yIHRoZSBxdWV1ZSBiZWZvcmUgdXBkYXRpbmcgaWRsZXNsb3BlICovXG4rXHRcdGN0cmwgPSBnZW1fcmVhZGwoYnAsIENCU19DT05UUk9MKSBcdTAwMjYgfmVuYWJsZV9iaXQ7XG4rXHRcdGdlbV93cml0ZWwoYnAsIENCU19DT05UUk9MLCBjdHJsKTtcbitcdFx0LyogVXBkYXRlIGlkbGVzbG9wZSBmb3IgdGhlIHF1ZXVlICovXG4rXHRcdGlmIChpc19xdWV1ZV9hKVxuK1x0XHRcdGdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9BLCBpZGxlc2xvcGUpO1xuK1x0XHRlbHNlXG4rXHRcdFx0Z2VtX3dyaXRlbChicCwgQ0JTX0lETEVTTE9QRV9RX0IsIGlkbGVzbG9wZSk7XG4rXG4rXHRcdC8qIFJlLWVuYWJsZSBDQlMgZm9yIHRoZSBxdWV1ZSB3aXRoIG5ldyBpZGxlc2xvcGUgKi9cbitcdFx0Z2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGN0cmwgfCBlbmFibGVfYml0KTtcbitcdH1cbitcbitcdG5ldGRldl9kYmcobmRldiwgXCJDQlM6IENvbmZpZ3VyZWQgcXVldWUgJWQgd2l0aCBpZGxlc2xvcGUgMHgleFxcblwiLFxuK1x0XHQgICBxb3B0LVx1MDAzZXF1ZXVlLCBpZGxlc2xvcGUpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1hY2JfY2JzX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHU4IHF1ZXVlX251bSlcbit7XG4rXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdGJvb2wgaXNfcXVldWVfYTtcbitcdHUzMiBlbmFibGVfYml0O1xuK1xuK1x0aWYgKG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoYnAsIHF1ZXVlX251bSwgXHUwMDI2ZW5hYmxlX2JpdCwgXHUwMDI2aXNfcXVldWVfYSkpXG4rXHRcdHJldHVybjtcbitcbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZicC1cdTAwM2Vsb2NrKSB7XG4rXHRcdGdlbV93cml0ZWwoYnAsIENCU19DT05UUk9MLCBnZW1fcmVhZGwoYnAsIENCU19DT05UUk9MKSBcdTAwMjYgfmVuYWJsZV9iaXQpO1xuK1x0XHRpZiAoaXNfcXVldWVfYSlcbitcdFx0XHRnZW1fd3JpdGVsKGJwLCBDQlNfSURMRVNMT1BFX1FfQSwgMCk7XG4rXHRcdGVsc2VcbitcdFx0XHRnZW1fd3JpdGVsKGJwLCBDQlNfSURMRVNMT1BFX1FfQiwgMCk7XG4rXHR9XG4rXG4rXHRuZXRkZXZfZGJnKG5kZXYsIFwiQ0JTOiBEaXNhYmxlZCBxdWV1ZSAlZFxcblwiLCBxdWV1ZV9udW0pO1xuK31cbitcbitzdGF0aWMgaW50IG1hY2Jfc2V0dXBfY2JzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuK1x0XHRcdCAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpXG4re1xuK1x0aWYgKHFvcHQtXHUwMDNlZW5hYmxlKVxuK1x0XHRyZXR1cm4gbWFjYl9jYnNfYWRkKG5kZXYsIHFvcHQpO1xuK1xuK1x0bWFjYl9jYnNfZGVzdHJveShuZGV2LCBxb3B0LVx1MDAzZXF1ZXVlKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG1hY2Jfc2V0dXBfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuK1x0XHRcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbit7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdHU4IG51bV90YyA9IHFvcHQtXHUwMDNlbnVtX3RjO1xuK1x0aW50IGVycjtcbitcdHU4IGk7XG4rXG4rXHQvKiBIYW5kbGUgcmVzZXQgY2FzZSBlYXJseSAqL1xuK1x0aWYgKCFudW1fdGMpIHtcbitcdFx0bmV0ZGV2X3Jlc2V0X3RjKG5kZXYpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qIENvbmZpZ3VyZSB0cmFmZmljIGNsYXNzZXMgKi9cbitcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4rXG4rXHRlcnIgPSBuZXRkZXZfc2V0X251bV90YyhuZGV2LCBudW1fdGMpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV90YzsgaSsrKSB7XG4rXHRcdGVyciA9IG5ldGRldl9zZXRfdGNfcXVldWUobmRldiwgaSwgcW9wdC1cdTAwM2Vjb3VudFtpXSxcbitcdFx0XHRcdFx0ICBxb3B0LVx1MDAzZW9mZnNldFtpXSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBlcnJfcmVzZXRfdGM7XG4rXG4rXHRcdG5ldGRldl9kYmcobmRldiwgXCJNUVBSSU86IFRDJWQgLVx1MDAzZSBxdWV1ZSAldSAoY291bnQ9JXUpXFxuXCIsXG4rXHRcdFx0ICAgaSwgcW9wdC1cdTAwM2VvZmZzZXRbaV0sIHFvcHQtXHUwMDNlY291bnRbaV0pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3Jlc2V0X3RjOlxuK1x0bmV0ZGV2X3Jlc2V0X3RjKG5kZXYpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBtYWNiX3RjX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHQgICAgICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKVxuK3tcbitcdHN3aXRjaCAoYmFzZS1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoge1xuK1x0XHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4rXG4rXHRcdGNhcHMtXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcbitcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0XHQgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbitcdHN0cnVjdCBtYWNiICpicDtcbitcbiBcdGlmICghZGV2IHx8ICF0eXBlX2RhdGEpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0aWYgKHR5cGUgPT0gVENfUVVFUllfQ0FQUylcbitcdFx0cmV0dXJuIG1hY2JfdGNfcXVlcnlfY2FwcyhkZXYsIHR5cGVfZGF0YSk7XG4rXG4rXHRicCA9IG5ldGRldl9wcml2KGRldik7XG4rXG4rXHRpZiAodW5saWtlbHkoIShkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfVEMpKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogQ2hlY2sgaWYgRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZCAqL1xuK1x0aWYgKHVubGlrZWx5KHBtX3J1bnRpbWVfc3VzcGVuZGVkKFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2KSkpIHtcbitcdFx0bmV0ZGV2X2VycihkZXYsIFwiRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcbitcdFx0cmV0dXJuIG1hY2Jfc2V0dXBfbXFwcmlvKGRldiwgdHlwZV9kYXRhKTtcbitcdGNhc2UgVENfU0VUVVBfUURJU0NfQ0JTOlxuK1x0XHRyZXR1cm4gbWFjYl9zZXR1cF9jYnMoZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19UQVBSSU86XG4gXHRcdHJldHVybiBtYWNiX3NldHVwX3RhcHJpbyhkZXYsIHR5cGVfZGF0YSk7XG4gXHRkZWZhdWx0OlxuQEAgLTQ4NDYsOCArNTAyOSw4IEBAIHN0YXRpYyBpbnQgbWFjYl9pbml0X2RmbHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNO1xuIFx0aWYgKGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19TR19ESVNBQkxFRClcbiBcdFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIFx1MDAyNj0gfk5FVElGX0ZfU0c7XG4tXHQvKiBFbmFibGUgSFdfVEMgaWYgaGFyZHdhcmUgc3VwcG9ydHMgUUJWICovXG4tXHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1FCVilcbitcdC8qIEVuYWJsZSBUQyBvZmZsb2FkIGZvciBUU04tY2FwYWJsZSBoYXJkd2FyZSAqL1xuK1x0aWYgKGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19UQylcbiBcdFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVEM7XG4gXG4gXHRkZXYtXHUwMDNlZmVhdHVyZXMgPSBkZXYtXHUwMDNlaHdfZmVhdHVyZXM7XG5AQCAtNTY3OCw3ICs1ODYxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB2ZXJzYWxfY29uZmlnID0ge1xuIFx0LmNhcHMgPSBNQUNCX0NBUFNfR0lHQUJJVF9NT0RFX0FWQUlMQUJMRSB8IE1BQ0JfQ0FQU19KVU1CTyB8XG4gXHRcdE1BQ0JfQ0FQU19HRU1fSEFTX1BUUCB8IE1BQ0JfQ0FQU19CRF9SRF9QUkVGRVRDSCB8XG4gXHRcdE1BQ0JfQ0FQU19ORUVEX1RTVUNMSyB8IE1BQ0JfQ0FQU19RVUVVRV9ESVNBQkxFIHxcbi1cdFx0TUFDQl9DQVBTX1FCViB8XG4rXHRcdE1BQ0JfQ0FQU19UQyB8XG4gXHRcdE1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLFxuIFx0LmRtYV9idXJzdF9sZW5ndGggPSAxNixcbiBcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE4OjM1LjM1OTg4NTAzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NDIzNjM0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBvZiB0aGUgTUFDQiBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gYXNzZXNzIHRoaXMgcGF0Y2gncyBmdXp6aW5nIGltcGxpY2F0aW9ucy4gVGhlIGNvcmUgb2YgdGhpcyByZXZvbHZlcyBhcm91bmQgaWRlbnRpZnlpbmcgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AgYW5kIGBtYWNiLmhgLCB3aGljaCBpbW1lZGlhdGVseSBwb2ludHMgdG8gbmV0d29yayBkcml2ZXIgdGVycml0b3J5LiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIHN1cHBvcnQgZm9yIENCUyBhbmQgTVFQUklPIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkcyB3aXRoaW4gdGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgY29tcGxleC5cblxuUmVuYW1pbmcgYE1BQ0JfQ0FQU19RQlZgIHRvIGBNQUNCX0NBUFNfVENgIGFuZCBlbmFibGluZyBgTkVUSUZfRl9IV19UQ2Agc2lnbmFscyBhIGNsZWFyIHNoaWZ0IHRvd2FyZCB0cmFmZmljIGNvbnRyb2wgY2FwYWJpbGl0aWVzLiBUaGUgYWRkaXRpb24gb2YgZnVuY3Rpb25zIGxpa2UgYG1hY2Jfc2V0dXBfY2JzYCwgYG1hY2JfY2JzX2FkZGAsIGFuZCBzbyBvbiwgYWxsIHJlYWNoYWJsZSB0aHJvdWdoIGBtYWNiX3NldHVwX3RjYCAodGhlIGAubmRvX3NldHVwX3RjYCBjYWxsYmFjayksIG1ha2VzIGl0IHNlZW0gbGlrZSB0aGlzIGlzIGEgc3Vic3RhbnRpYWwgYWRkaXRpb24gdG8gdGhlIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIGlzIGRyaXZlciBhY2Nlc3NpYmlsaXR5LCBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBwYXRjaCBpbnZvbHZlcyB0aGUgQ2FkZW5jZSBNQUNCLCB3aGljaCBJIGtub3cgaXMgdXNlZCBpbiBBdG1lbC9DYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGNvbnRyb2xsZXJzLiBRRU1VIG9mdGVuIHN1cHBvcnRzIENhZGVuY2UgR0VNLCBlc3BlY2lhbGx5IGluIHBsYXRmb3JtcyBsaWtlIFhpbGlueCBaeW5xIGFuZCBTaUZpdmUgVS4gVGhhdCdzIGdvb2Q7IGl0J3MgbGlrZWx5IHdlIGNhbiBnZXQgY292ZXJhZ2UgdGhlcmUuXG5cbkJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBBcmUgdGhlcmUgZXZlbiBvdGhlciBlZmZvcnRzIG9uIHRoaXMgZHJpdmVyPyBJcyB0aGlzIGRyaXZlciAqY29tbW9ubHkqIGZ1enplZD8gTGV0J3MgY2hlY2sgZm9yIGV4aXN0aW5nIGNvbmZpZyBmbGFncyB0byBxdWlja2x5IGdhdWdlIHVzYWdlIGFuZCBmdXp6aW5nIGhpc3RvcnkuIGBDT05GSUdfTUFDQmAgaXMgdGhlIGtleSBjb25maWcgZm9yIHRoaXMsIHNvIEkgd2lsbCBzZWFyY2ggaXQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBsb29rIGF0IHdoZXRoZXIgdGhlIGRyaXZlciBoYXMgYmVlbiBmdXp6ZWQgYmVmb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzcxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6NDIuMjAyMjUxNDI5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDYxOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUNCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9MjA9aWYgTkVUX1ZFTkRPUl9DQURFTkNFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzoyMjpjb25maWcgTUFDQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzozNzpjb25maWcgTUFDQl9VU0VfSFdTVEFNUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zOC1cXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQ1OmNvbmZpZyBNQUNCX1BDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBQQ0kgTUFDQi9HRU0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6NDIuMjQ1MzE5NDM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3ODE2OTM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBDYWRlbmNlIEdFTSBNQUNCIERyaXZlcioqXG5cbk9rYXksIGxldCdzIHNlZSBhYm91dCBmdXp6aW5nIHRoaXMgYENPTkZJR19NQUNCYCBkcml2ZXIuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHJlcmVxdWlzaXRlcywgc28gSSdsbCBjaGVjayBpZiBpdCdzIHR5cGljYWxseSBlbmFibGVkIG9yIGVhc2lseSBlbmFibGVkIGluIG91ciBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy4gSXQgbG9va3MgbGlrZSBpdCBoaW5nZXMgb24gYE5FVF9WRU5ET1JfQ0FERU5DRWAsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBkb2VzIFFFTVUgZXZlbiBzdXBwb3J0IHRoaXMgQ2FkZW5jZSBHRU0gaGFyZHdhcmU/IFllcCwgdGhlcmUncyBhIGBody9uZXQvY2FkZW5jZV9nZW0uY2AgZmlsZSwgc28gdGhhdCdzIGEgcG9zaXRpdmUuXG5cblRoZSBuZXh0IGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgaXQncyBmdXp6YWJsZS4gSXQncyBhIG5ldHdvcmsgZHJpdmVyLCBzbyB0aGF0J3MgaW5oZXJlbnRseSBwcm9taXNpbmcuIFdlIHNob3VsZCBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGggaXQgdXNpbmcgbmV0bGluaywgc3BlY2lmaWNhbGx5IHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYHRjIHFkaXNjIGFkZC4uLmAuIFRoYXQgc291bmRzIGZlYXNpYmxlLiBOb3csIHdoYXQgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBhZGRlZCBhbmQgZXhwb3NlZCBmb3IgdGhpcz8gSSBzZWUgYG1hY2Jfc2V0dXBfY2JzYCwgYG1hY2Jfc2V0dXBfbXFwcmlvYCwgYW5kIGBtYWNiX3RjX3F1ZXJ5X2NhcHNgLiBUaGVzZSBhcmUgYWxsIGNhbGxlZCBmcm9tIGBtYWNiX3NldHVwX3RjYCwgc28gdGhhdCdzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZXhhbWluZS4gVGltZSB0byBkaWcgaW50byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBUcmFmZmljIENvbnRyb2wgKFRDKSBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc2OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxODo0Ny42MjM0OTEzNzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5NzM2NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjYl9zZXR1cF90Y1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDY3NT1zdGF0aWMgaW50IG1hY2JfdGNfcXVlcnlfY2FwcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00NjkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NDY5MTpzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00NjkyLVxcdFxcdFxcdCB2b2lkICp0eXBlX2RhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTQ3MzI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtYWNiX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ3NDgtXFx0Lm5kb19od3RzdGFtcF9nZXRcXHQ9IG1hY2JfaHd0c3RhbXBfZ2V0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NDc0OTpcXHQubmRvX3NldHVwX3RjXFx0XFx0PSBtYWNiX3NldHVwX3RjLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDc1MC1cXHQubmRvX3R4X3RpbWVvdXRcXHRcXHQ9IG1hY2JfdHhfdGltZW91dCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6NDcuNjY3NDkxNDk3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg0NDgzNjI0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNQUNCIERyaXZlciBTZXR1cCoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gdGhlc2UgTUFDQiBkcml2ZXIgc2V0dXAgZnVuY3Rpb25zLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGxvZ2ljIHJldm9sdmVzIGFyb3VuZCBgbWFjYl9zZXR1cF9jYnNgIGFuZCBgbWFjYl9zZXR1cF9tcXByaW9gLiBBaCwgd2FpdCBhIG1pbnV0ZSwgYG1hY2Jfc2V0dXBfY2JzYCBpbnRlcm5hbGx5IHVzZXMgYG1hY2JfY2JzX2FkZGAgYW5kIGBtYWNiX2Nic19kZXN0cm95YC4gSSBzZWUgYG1hY2Jfc2V0dXBfbXFwcmlvYCBpbiB0aGUgbWl4IHRvby5cblxuTGV0IG1lIG9yZ2FuaXplIHRoaXMgZm9yIGNsYXJpdHkuIFNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0byBpbnZlc3RpZ2F0ZSBhcmU6XG5cbiogICBgbWFjYl9zZXR1cF9jYnNgXG4qICAgYG1hY2JfY2JzX2FkZGBcbiogICBgbWFjYl9jYnNfZGVzdHJveWBcbiogICBgbWFjYl9zZXR1cF9tcXByaW9gXG4qICAgYG1hY2JfdGNfcXVlcnlfY2Fwc2BcblxuSG1tLCBgbWFjYl9jYnNfYWRkYCBhbmQgYG1hY2JfY2JzX2Rlc3Ryb3lgIGFyZSAqc3RhdGljKiwgaW50ZXJlc3RpbmcuIEJ1dCB0aGV5IGFyZW4ndCBleHBsaWNpdGx5IGlubGluZWQuIEFscmlnaHQsIGxldCdzIGtlZXAgdGhlIGZvY3VzIG9uIHRoZSBlbnRyeSBwb2ludHMsIHRoZSBleHRlcm5hbCBmYWNpbmcgZnVuY3Rpb24gY2FsbHM6XG5cbiogICBgbWFjYl9zZXR1cF90Y2AgKEFscmVhZHkgdGhlcmUhKVxuKiAgIGBtYWNiX3NldHVwX2Nic2BcbiogICBgbWFjYl9zZXR1cF9tcXByaW9gXG4qICAgYG1hY2JfdGNfcXVlcnlfY2Fwc2BcblxuUmlnaHQsIHRoZSBgbWFjYl9zZXR1cF90Y2AgaXMgYWxyZWFkeSBwcmVzZW50LCB0aGUgb3RoZXJzIGFyZSBuZXcgYWRkaXRpb25zLiBOb3csIGZvciB0ZXN0aW5nLCBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgd2lsbCB3b3JrIGluIFFFTVUuIEkgbmVlZCB0byBxdWlja2x5IGFuZCBlYXNpbHkgZGVidWcgaXQsIHNvIGxldCdzIHNlZSBpZiBgTUFDQl9QQ0lgIGlzIHJlbGV2YW50IGZvciBlYXN5IHRlc3RpbmcgaW4gUUVNVS4gUUVNVSdzIENhZGVuY2UgR0VNIHVzdWFsbHkgZW11bGF0ZXMgYSBwbGF0Zm9ybSBkZXZpY2UgKHN5c2J1cyksIGJ1dCBkb2VzIGl0IHN1cHBvcnQgUENJIGFzIHdlbGw/IEkgd2lsbCBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU4OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxODo1NC41MTIzMjk0MzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE5MTMwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjYl9wY2lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTQ1PWNvbmZpZyBNQUNCX1BDSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTUxLVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzo1MjpcXHQgIHdpbGwgYmUgY2FsbGVkIG1hY2JfcGNpLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy01My1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX01BQ0IpICs9IG1hY2Iub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX01BQ0JfUENJKSArPSBtYWNiX3BjaS5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjE5OiNkZWZpbmUgUENJX0RSSVZFUl9OQU1FIFxcXCJtYWNiX3BjaVxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMjAtI2RlZmluZSBQTEFUX0RSSVZFUl9OQU1FIFxcXCJtYWNiXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jPTEyMD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkX3RhYmxlW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTI0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoxMjU6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG1hY2JfcGNpX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTI2LVxcdC5uYW1lICAgICA9IFBDSV9EUklWRVJfTkFNRSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjEzMjptb2R1bGVfcGNpX2RyaXZlcihtYWNiX3BjaV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMzMtTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRldl9pZF90YWJsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE4OjU0LjU1NDI1MzQzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ2NDQ5MDA5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFbmFibGluZyBNQUNCIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBpbXByb3ZlIG91ciBmdXp6aW5nIGNvdmVyYWdlIGZvciB0aGUgYE1BQ0JgIGV0aGVybmV0IGRyaXZlci4gSWYgd2UgZW5hYmxlIGJvdGggYE1BQ0JgIGFuZCBgTUFDQl9QQ0lgLCBpdCAqbWlnaHQqIG1ha2UgZnV6emluZyBlYXNpZXIuIFRoZSByZWFzb25pbmcgaXMgdGhhdCBlaXRoZXIgUUVNVSBtaWdodCBleHBvc2UgaXQgdGhyb3VnaCBQQ0ksIG9yIHN5emthbGxlciBjb3VsZCBwb3RlbnRpYWxseSBpbnN0YW50aWF0ZSBpdCB2aWEgYSBwbGF0Zm9ybSBkZXZpY2UuIEkga25vdyBzeXprYWxsZXIgaGFzIHNvbWUgcGxhdGZvcm0gZGV2aWNlIHN1cHBvcnQg4oCTIG9yIGF0IGxlYXN0LCBJJ3ZlIHNlZW4gaXQgdXNlZCB3aXRoIHZpcnR1YWwgZGV2aWNlcy4gTm93IHdhaXQgYSBtaW51dGUsIEkgc2VlbSB0byByZW1lbWJlciB0aGF0IHN5emthbGxlciAqY2FuKiB0ZXN0IGBtYWNiYCBpZiBpdCdzIGluc3RhbnRpYXRlZC4gVGhhdCBjaGFuZ2VzIHRoaW5ncy5cblxuQWxyaWdodCwgc28gdGhlIHBsYW4gaXMgdG8gZGVmaW5pdGVseSBpbmNsdWRlIGBNQUNCYCBhbmQgYE1BQ0JfUENJYCBpbiB0aGUgY29uZmlncy4gSSBrbm93IHdlJ2xsIGFsc28gbmVlZCBgTkVUX1ZFTkRPUl9DQURFTkNFYCBhcyBhIGRlcGVuZGVuY3kuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ2AgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEknbSBtaXNzaW5nLiBUaGlzIHdpbGwgc3RyZWFtbGluZSB0aGUgZnV6emluZyBwcm9jZXNzLCBhbmQgaG9wZWZ1bGx5IGdpdmUgdXMgbW9yZSBjb3ZlcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxODo1OS4wMTg3NDU5OTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjgwMzU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9Nj1jb25maWcgTkVUX1ZFTkRPUl9DQURFTkNFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTctXFx0Ym9vbCBcXFwiQ2FkZW5jZSBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzo4OlxcdGRlcGVuZHMgb24gSEFTX0lPTUVNXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTktXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9MjI9Y29uZmlnIE1BQ0JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjMtXFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgTUFDQi9HRU0gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6MjQ6XFx0ZGVwZW5kcyBvbiBIQVNfRE1BIFxcdTAwMjZcXHUwMDI2IENPTU1PTl9DTEtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6MjU6XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yNi1cXHRzZWxlY3QgUEhZTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTM3PWNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM4LVxcdGJvb2wgXFxcIlVzZSBJRUVFIDE1ODggaHdzdGFtcFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6Mzk6XFx0ZGVwZW5kcyBvbiBNQUNCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQwOlxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDEtXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9NDU9Y29uZmlnIE1BQ0JfUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ2LVxcdHRyaXN0YXRlIFxcXCJDYWRlbmNlIFBDSSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzo0NzpcXHRkZXBlbmRzIG9uIE1BQ0IgXFx1MDAyNlxcdTAwMjYgUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ4LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6NTkuMjUxNTU1NTQ4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1NTkwMDgwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQ2FkZW5jZSBNQUNCIFRyYWZmaWMgQ29udHJvbCBPZmZsb2FkcyoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgaXQncyBpbnRyb2R1Y2luZyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQ2FkZW5jZSBNQUNCIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0cmFmZmljIGNvbnRyb2wgc2V0dXAsIGVuYWJsaW5nIENCUyBhbmQgTVFQUklPLiBUaGVzZSBmZWF0dXJlcywgcmVhY2hhYmxlIHZpYSBgdGMgcWRpc2MgYWRkIGRldiBldGhYIHJvb3QgbXFwcmlvIC4uLmAgb3IgYHRjIHFkaXNjIGFkZCBkZXYgZXRoWCByb290IGNicyAuLi5gLCBhcmUgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgbmV0bGluayBpbnRlcmZhY2UgaXMgYSBwcmltZSB0YXJnZXQgaGVyZS5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uOlxuXG4qICAgYG1hY2Jfc2V0dXBfY2JzYFxuKiAgIGBtYWNiX2Nic19hZGRgXG4qICAgYG1hY2JfY2JzX2Rlc3Ryb3lgXG4qICAgYG1hY2Jfc2V0dXBfbXFwcmlvYFxuKiAgIGBtYWNiX3RjX3F1ZXJ5X2NhcHNgXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgYG1hY2JfY2JzX2FkZGAgYW5kIGBtYWNiX2Nic19kZXN0cm95YCBhcmVuJ3QgaW5saW5lZCwgYXMgdGhleSBhcHBlYXIgdG8gYmUgc3RhdGljLiBUaGV5J3JlIG5vdCBpbmxpbmUsIGFuZCBzaW5jZSB0aGV5IGFyZSBjYWxsZWQgZnJvbSBgbWFjYl9zZXR1cF9jYnNgLCBpdCdzIGFjY2VwdGFibGUgdG8gbGlzdCB0aGVtLiBBbHNvLCBgbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtc2AgaXMgYSBzbWFsbCBoZWxwZXIgZnVuY3Rpb24sIGFuZCBJJ20gZ3Vlc3NpbmcgaXQgbWlnaHQgYmUgaW5saW5lZC4gYG1hY2Jfc2V0dXBfdGNgIGlzIG1vZGlmaWVkLCBidXQgaXQncyBhbiBleGlzdGluZyBmdW5jdGlvbi5cblxuVGhlIGtleSBjb25maWdzIHRvIGtlZXAgaW4gbWluZCBhcmUgYE5FVF9WRU5ET1JfQ0FERU5DRWAsIGBNQUNCYCwgYW5kIGBNQUNCX1BDSWAuXG5cblRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIENCUyBhbmQgTVFQUklPIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkcyB0byB0aGUgQ2FkZW5jZSBNQUNCIEV0aGVybmV0IGRyaXZlci4gVGhlc2UgZmVhdHVyZXMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayAodGMgcWRpc2MpLCBhbmQgdGhleSBpbnRyb2R1Y2UgbmV3IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gbG9naWMgdGhhdCB3b3VsZCBiZSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgZnV6emluZy5cblxuSSdtIGNvbmZpZGVudCB0aGF0IGBNQUNCX1BDSWAgaXMgc3VmZmljaWVudCB0byBnZXQgYSBkZXZpY2UgaW5zdGFudGlhdGVkIGluIFFFTVUuIFFFTVUgY2FuIGVtdWxhdGUgUENJIGRldmljZXMsIGFuZCBpZiBgTUFDQl9QQ0lgIGlzIGVuYWJsZWQsIHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGluamVjdCBpdCBvciBRRU1VIG1pZ2h0IGhhdmUgaXQuIEV2ZW4gaWYgdGhhdCBpc24ndCB0aGUgY2FzZSwgc3l6a2FsbGVyIGNhbiBzdGlsbCBmdXp6IHRoZSBuZXRsaW5rIGludGVyZmFjZS5cblxuTm93LCBsZXQncyBzZXQgdGhlIHJlc3VsdHMgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MzEsIk91dHB1dFRva2VucyI6MTYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjA4LjgxMDU2NjgyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MzUwMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0NBREVOQ0VcIixcbiAgICBcIk1BQ0JcIixcbiAgICBcIk1BQ0JfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFjYl9zZXR1cF9jYnNcIixcbiAgICBcIm1hY2JfY2JzX2FkZFwiLFxuICAgIFwibWFjYl9jYnNfZGVzdHJveVwiLFxuICAgIFwibWFjYl9zZXR1cF9tcXByaW9cIixcbiAgICBcIm1hY2JfdGNfcXVlcnlfY2Fwc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQ0JTIChDcmVkaXQtQmFzZWQgU2hhcGVyKSBhbmQgTVFQUklPIChNdWx0aXBsZSBRdWV1ZSBQcmlvcml0eSkgdHJhZmZpYyBjb250cm9sIG9mZmxvYWRzIHRvIHRoZSBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyLiBUaGVzZSBmZWF0dXJlcyBhcmUgcmVhY2hhYmxlIHZpYSBuZXRsaW5rICh0YyBxZGlzYykgYW5kIGludHJvZHVjZSBuZXcgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBsb2dpYyB0aGF0IGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9DQURFTkNFXCIsXG4gICAgXCJNQUNCXCIsXG4gICAgXCJNQUNCX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY2Jfc2V0dXBfY2JzXCIsXG4gICAgXCJtYWNiX2Nic19hZGRcIixcbiAgICBcIm1hY2JfY2JzX2Rlc3Ryb3lcIixcbiAgICBcIm1hY2Jfc2V0dXBfbXFwcmlvXCIsXG4gICAgXCJtYWNiX3RjX3F1ZXJ5X2NhcHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIENCUyAoQ3JlZGl0LUJhc2VkIFNoYXBlcikgYW5kIE1RUFJJTyAoTXVsdGlwbGUgUXVldWUgUHJpb3JpdHkpIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkcyB0byB0aGUgQ2FkZW5jZSBNQUNCIEV0aGVybmV0IGRyaXZlci4gVGhlc2UgZmVhdHVyZXMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayAodGMgcWRpc2MpIGFuZCBpbnRyb2R1Y2UgbmV3IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gbG9naWMgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxOTowOC44OTU5MjMxNDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTExMjQwNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6MDguODk2NDUzNjg3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIzNTEwNzA1ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIG9mZmxvYWQgc3VwcG9ydCBmb3IgQ0JTIGFuZCBNUVBSSU8gdHJhZmZpYyBjb250cm9sIGluIHRoZSBNQUNCIGV0aGVybmV0IGRyaXZlci4gSXQgcmVhZHMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHByb3ZpZGVkIGJ5IHRoZSBuZXR3b3JraW5nIGNvcmUgYW5kIHByb2dyYW1zIGhhcmR3YXJlIHJlZ2lzdGVycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgbGVha2VkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgdmFyaWFibGVzIHBhc3NlZCBieSByZWZlcmVuY2UgKGBlbmFibGVfYml0YCwgYGlzX3F1ZXVlX2FgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NjRhMjljMzllZTdmYzc1N2UxNzIwMmRjZjUyYTljN2JiOGZjNGZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMjoxODozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcbmluZGV4IGExMTA1MjU2NTQzNmEuLmQ1YjI4NDU5ZmQ3NWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcbkBAIC0xODQsNiArMTg0LDkgQEBcbiAjZGVmaW5lIEdFTV9EQ0ZHOFx0XHQweDAyOUMgLyogRGVzaWduIENvbmZpZyA4ICovXG4gI2RlZmluZSBHRU1fRENGRzEwXHRcdDB4MDJBNCAvKiBEZXNpZ24gQ29uZmlnIDEwICovXG4gI2RlZmluZSBHRU1fRENGRzEyXHRcdDB4MDJBQyAvKiBEZXNpZ24gQ29uZmlnIDEyICovXG4rI2RlZmluZSBHRU1fQ0JTX0NPTlRST0xcdFx0MHgwNEJDIC8qIENCUyBDb250cm9sIFJlZ2lzdGVyICovXG4rI2RlZmluZSBHRU1fQ0JTX0lETEVTTE9QRV9RX0FcdDB4MDRDMCAvKiBDQlMgSWRsZVNsb3BlIFF1ZXVlIEEgKi9cbisjZGVmaW5lIEdFTV9DQlNfSURMRVNMT1BFX1FfQlx0MHgwNEM0IC8qIENCUyBJZGxlU2xvcGUgUXVldWUgQiAqL1xuICNkZWZpbmUgR0VNX0VOU1RfQ09OVFJPTFx0MHgwODgwIC8qIEVOU1QgY29udHJvbCByZWdpc3RlciAqL1xuICNkZWZpbmUgR0VNX1VTWF9DT05UUk9MXHRcdDB4MEE4MCAvKiBIaWdoIHNwZWVkIFBDUyBjb250cm9sIHJlZ2lzdGVyICovXG4gI2RlZmluZSBHRU1fVVNYX1NUQVRVU1x0XHQweDBBODggLyogSGlnaCBzcGVlZCBQQ1Mgc3RhdHVzIHJlZ2lzdGVyICovXG5AQCAtMjI0LDYgKzIyNywxMiBAQFxuICNkZWZpbmUgR0VNX0VOU1RfT05fVElNRShod19xKVx0XHQoMHgwODIwICsgKChod19xKSBcdTAwM2NcdTAwM2MgMikpXG4gI2RlZmluZSBHRU1fRU5TVF9PRkZfVElNRShod19xKVx0XHQoMHgwODQwICsgKChod19xKSBcdTAwM2NcdTAwM2MgMikpXG4gXG4rLyogQml0ZmllbGRzIGluIENCU19DT05UUk9MICovXG4rI2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9BX09GRlNFVFx0MFxuKyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9TSVpFXHQxXG4rI2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9CX09GRlNFVFx0MVxuKyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQl9TSVpFXHQxXG4rXG4gLyogQml0ZmllbGRzIGluIEVOU1RfQ09OVFJPTCAqL1xuICNkZWZpbmUgR0VNX0VOU1RfRElTQUJMRV9RVUVVRV9PRkZTRVRcdDE2XG4gXG5AQCAtNzY4LDcgKzc3Nyw3IEBAXG4gI2RlZmluZSBNQUNCX0NBUFNfTUlJT05SR01JSVx0XHRcdEJJVCg5KVxuICNkZWZpbmUgTUFDQl9DQVBTX05FRURfVFNVQ0xLXHRcdFx0QklUKDEwKVxuICNkZWZpbmUgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEVcdFx0XHRCSVQoMTEpXG4tI2RlZmluZSBNQUNCX0NBUFNfUUJWXHRcdFx0XHRCSVQoMTIpXG4rI2RlZmluZSBNQUNCX0NBUFNfVENcdFx0XHRcdEJJVCgxMilcbiAjZGVmaW5lIE1BQ0JfQ0FQU19QQ1NcdFx0XHRcdEJJVCgxMylcbiAjZGVmaW5lIE1BQ0JfQ0FQU19ISUdIX1NQRUVEXHRcdFx0QklUKDE0KVxuICNkZWZpbmUgTUFDQl9DQVBTX0NMS19IV19DSEdcdFx0XHRCSVQoMTUpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbmluZGV4IGQzOTRmMWY0M2I2ODUuLmEwYTY4NDkwNTE5ZTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5AQCAtOTksNiArOTksMTAgQEAgc3RydWN0IHNpZml2ZV9mdTU0MF9tYWNiX21nbXQge1xuIFxuICNkZWZpbmUgTUFDQl9NRElPX1RJTUVPVVRcdDEwMDAwMDAgLyogaW4gdXNlY3MgKi9cbiBcbisvKiBDQlMgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvcnM6IDEwMDAvaW50ZXJmYWNlX3dpZHRoICovXG4rI2RlZmluZSBNQUNCX0NCU19QT1JUX1JBVEVfMUdcdFx0MTI1XHQvKiAxMDAwLzggZm9yIEdNSUkgKDgtYml0KSAqL1xuKyNkZWZpbmUgTUFDQl9DQlNfUE9SVF9SQVRFXzEwXzEwME1cdDI1MFx0LyogMTAwMC80IGZvciBNSUkgKDQtYml0KSAqL1xuK1xuIC8qIERNQSBidWZmZXIgZGVzY3JpcHRvciBtaWdodCBiZSBkaWZmZXJlbnQgc2l6ZVxuICAqIGRlcGVuZHMgb24gaGFyZHdhcmUgY29uZmlndXJhdGlvbjpcbiAgKlxuQEAgLTQ0OTksMTggKzQ1MDMsOCBAQCBzdGF0aWMgdm9pZCBtYWNiX3RhcHJpb19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqdGFwcmlvKVxuIHtcbi1cdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0aW50IGVyciA9IDA7XG4gXG4tXHRpZiAodW5saWtlbHkoIShuZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1RDKSkpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cbi1cdC8qIENoZWNrIGlmIERldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmQgKi9cbi1cdGlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZChcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldikpKSB7XG4tXHRcdG5ldGRldl9lcnIobmRldiwgXCJEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kXFxuXCIpO1xuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tXHR9XG4tXG4gXHRzd2l0Y2ggKHRhcHJpby1cdTAwM2VjbWQpIHtcbiBcdGNhc2UgVEFQUklPX0NNRF9SRVBMQUNFOlxuIFx0XHRlcnIgPSBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKG5kZXYsIHRhcHJpbyk7XG5AQCAtNDUyNSwxMyArNDUxOSwyMDIgQEAgc3RhdGljIGludCBtYWNiX3NldHVwX3RhcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtcyhzdHJ1Y3QgbWFjYiAqYnAsIHU4IHF1ZXVlX251bSxcbitcdFx0XHRcdCAgICAgdTMyICplbmFibGVfYml0LCBib29sICppc19xdWV1ZV9hKVxuK3tcbitcdC8qIFF1ZXVlIEEgaXMgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDEpICovXG4rXHRpZiAocXVldWVfbnVtID09IGJwLVx1MDAzZW51bV9xdWV1ZXMgLSAxKSB7XG4rXHRcdCplbmFibGVfYml0ID0gR0VNX0JJVChDQlNfRU5BQkxFX1FVRVVFX0EpO1xuK1x0XHQqaXNfcXVldWVfYSA9IHRydWU7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0LyogUXVldWUgQiBpcyBzZWNvbmQgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDIpICovXG4rXHRpZiAocXVldWVfbnVtID09IGJwLVx1MDAzZW51bV9xdWV1ZXMgLSAyKSB7XG4rXHRcdCplbmFibGVfYml0ID0gR0VNX0JJVChDQlNfRU5BQkxFX1FVRVVFX0IpO1xuK1x0XHQqaXNfcXVldWVfYSA9IGZhbHNlO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHJldHVybiAtRUlOVkFMO1xuK31cbitcbitzdGF0aWMgaW50IG1hY2JfY2JzX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbitcdFx0XHRzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdClcbit7XG4rXHR1MzIgZW5hYmxlX2JpdCwgaWRsZXNsb3BlLCBzcGVlZF9rYnBzLCBjdHJsO1xuK1x0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBrc2V0O1xuK1x0Ym9vbCBpc19xdWV1ZV9hO1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoYnAsIHFvcHQtXHUwMDNlcXVldWUsIFx1MDAyNmVuYWJsZV9iaXQsIFx1MDAyNmlzX3F1ZXVlX2EpO1xuK1x0aWYgKGVycikge1xuK1x0XHRuZXRkZXZfZXJyKG5kZXYsIFwiQ0JTOiBRdWV1ZSAlZCBub3QgZWxpZ2libGUgKG9ubHkgdG9wIDIgcXVldWVzIHN1cHBvcnQgQ0JTKVxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlcXVldWUpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdC8qIGlkbGVzbG9wZSBpcyBjYWxpYnJhdGVkIGZvciB0aGUgY3VycmVudCBsaW5rIHNwZWVkOyBDQlMgaXMgbm90XG4rXHQgKiByZXByb2dyYW1tZWQgb24gbGluay1zcGVlZCBjaGFuZ2VzLCBzbyBpdCBtdXN0IGJlIHJlY29uZmlndXJlZFxuK1x0ICogaWYgdGhlIGxpbmsgc3BlZWQgY2hhbmdlcy5cbitcdCAqL1xuK1x0cGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQoYnAtXHUwMDNlcGh5bGluaywgXHUwMDI2a3NldCk7XG4rXG4rXHRpZiAoIWtzZXQuYmFzZS5zcGVlZCB8fCBrc2V0LmJhc2Uuc3BlZWQgPT0gU1BFRURfVU5LTk9XTikge1xuK1x0XHRuZXRkZXZfZXJyKG5kZXYsIFwiQ0JTOiBJbnZhbGlkIGxpbmsgc3BlZWRcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3BlZWRfa2JwcyA9IGtzZXQuYmFzZS5zcGVlZCAqIDEwMDA7XG4rXG4rXHRpZiAocW9wdC1cdTAwM2VpZGxlc2xvcGUgXHUwMDNjPSAwIHx8ICh1MzIpcW9wdC1cdTAwM2VpZGxlc2xvcGUgXHUwMDNlIHNwZWVkX2ticHMpIHtcbitcdFx0bmV0ZGV2X2VycihuZGV2LCBcIkNCUzogaW52YWxpZCBpZGxlc2xvcGUgJWQgKG11c3QgYmUgMS4uJXUga2JwcylcXG5cIixcbitcdFx0XHQgICBxb3B0LVx1MDAzZWlkbGVzbG9wZSwgc3BlZWRfa2Jwcyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0LyogQ2FsY3VsYXRlIGlkbGVzbG9wZSBmb3IgaGFyZHdhcmUgcmVnaXN0ZXI6XG4rXHQgKiAtIEhpZ2gtc3BlZWQgR0VNOiBzY2FsZSB0byBmdWxsIDMyLWJpdCByZWdpc3RlciByYW5nZVxuK1x0ICogLSBTdGFuZGFyZCBNQUNCOiBtdWx0aXBseSBieSBwb3J0IHRyYW5zbWl0IHJhdGUgZmFjdG9yXG4rXHQgKi9cbitcdGlmIChicC1cdTAwM2VjYXBzIFx1MDAyNiBNQUNCX0NBUFNfSElHSF9TUEVFRClcbitcdFx0aWRsZXNsb3BlID0gRElWX1JPVU5EX1VQX1VMTCgodTY0KXFvcHQtXHUwMDNlaWRsZXNsb3BlICogVTMyX01BWCwgc3BlZWRfa2Jwcyk7XG4rXHRlbHNlXG4rXHRcdGlkbGVzbG9wZSA9ICh1MzIpcW9wdC1cdTAwM2VpZGxlc2xvcGUgKiAoa3NldC5iYXNlLnNwZWVkIFx1MDAzZT0gMTAwMCA/XG4rXHRcdFx0XHRcdCAgICAgICBNQUNCX0NCU19QT1JUX1JBVEVfMUcgOiBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTSk7XG4rXG4rXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2YnAtXHUwMDNlbG9jaykge1xuK1x0XHQvKiBEaXNhYmxlIENCUyBmb3IgdGhlIHF1ZXVlIGJlZm9yZSB1cGRhdGluZyBpZGxlc2xvcGUgKi9cbitcdFx0Y3RybCA9IGdlbV9yZWFkbChicCwgQ0JTX0NPTlRST0wpIFx1MDAyNiB+ZW5hYmxlX2JpdDtcbitcdFx0Z2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGN0cmwpO1xuK1x0XHQvKiBVcGRhdGUgaWRsZXNsb3BlIGZvciB0aGUgcXVldWUgKi9cbitcdFx0aWYgKGlzX3F1ZXVlX2EpXG4rXHRcdFx0Z2VtX3dyaXRlbChicCwgQ0JTX0lETEVTTE9QRV9RX0EsIGlkbGVzbG9wZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRnZW1fd3JpdGVsKGJwLCBDQlNfSURMRVNMT1BFX1FfQiwgaWRsZXNsb3BlKTtcbitcbitcdFx0LyogUmUtZW5hYmxlIENCUyBmb3IgdGhlIHF1ZXVlIHdpdGggbmV3IGlkbGVzbG9wZSAqL1xuK1x0XHRnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCB8IGVuYWJsZV9iaXQpO1xuK1x0fVxuK1xuK1x0bmV0ZGV2X2RiZyhuZGV2LCBcIkNCUzogQ29uZmlndXJlZCBxdWV1ZSAlZCB3aXRoIGlkbGVzbG9wZSAweCV4XFxuXCIsXG4rXHRcdCAgIHFvcHQtXHUwMDNlcXVldWUsIGlkbGVzbG9wZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWFjYl9jYnNfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTggcXVldWVfbnVtKVxuK3tcbitcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0Ym9vbCBpc19xdWV1ZV9hO1xuK1x0dTMyIGVuYWJsZV9iaXQ7XG4rXG4rXHRpZiAobWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtcyhicCwgcXVldWVfbnVtLCBcdTAwMjZlbmFibGVfYml0LCBcdTAwMjZpc19xdWV1ZV9hKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmJwLVx1MDAzZWxvY2spIHtcbitcdFx0Z2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGdlbV9yZWFkbChicCwgQ0JTX0NPTlRST0wpIFx1MDAyNiB+ZW5hYmxlX2JpdCk7XG4rXHRcdGlmIChpc19xdWV1ZV9hKVxuK1x0XHRcdGdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9BLCAwKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGdlbV93cml0ZWwoYnAsIENCU19JRExFU0xPUEVfUV9CLCAwKTtcbitcdH1cbitcbitcdG5ldGRldl9kYmcobmRldiwgXCJDQlM6IERpc2FibGVkIHF1ZXVlICVkXFxuXCIsIHF1ZXVlX251bSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWFjYl9zZXR1cF9jYnMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0ICBzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdClcbit7XG4rXHRpZiAocW9wdC1cdTAwM2VlbmFibGUpXG4rXHRcdHJldHVybiBtYWNiX2Nic19hZGQobmRldiwgcW9wdCk7XG4rXG4rXHRtYWNiX2Nic19kZXN0cm95KG5kZXYsIHFvcHQtXHUwMDNlcXVldWUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWFjYl9zZXR1cF9tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0dTggbnVtX3RjID0gcW9wdC1cdTAwM2VudW1fdGM7XG4rXHRpbnQgZXJyO1xuK1x0dTggaTtcbitcbitcdC8qIEhhbmRsZSByZXNldCBjYXNlIGVhcmx5ICovXG4rXHRpZiAoIW51bV90Yykge1xuK1x0XHRuZXRkZXZfcmVzZXRfdGMobmRldik7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0LyogQ29uZmlndXJlIHRyYWZmaWMgY2xhc3NlcyAqL1xuK1x0cW9wdC1cdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcbitcbitcdGVyciA9IG5ldGRldl9zZXRfbnVtX3RjKG5kZXYsIG51bV90Yyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3RjOyBpKyspIHtcbitcdFx0ZXJyID0gbmV0ZGV2X3NldF90Y19xdWV1ZShuZGV2LCBpLCBxb3B0LVx1MDAzZWNvdW50W2ldLFxuK1x0XHRcdFx0XHQgIHFvcHQtXHUwMDNlb2Zmc2V0W2ldKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGVycl9yZXNldF90YztcbitcbitcdFx0bmV0ZGV2X2RiZyhuZGV2LCBcIk1RUFJJTzogVEMlZCAtXHUwMDNlIHF1ZXVlICV1IChjb3VudD0ldSlcXG5cIixcbitcdFx0XHQgICBpLCBxb3B0LVx1MDAzZW9mZnNldFtpXSwgcW9wdC1cdTAwM2Vjb3VudFtpXSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJfcmVzZXRfdGM6XG4rXHRuZXRkZXZfcmVzZXRfdGMobmRldik7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IG1hY2JfdGNfcXVlcnlfY2FwcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdCAgICAgIHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UpXG4re1xuK1x0c3dpdGNoIChiYXNlLVx1MDAzZXR5cGUpIHtcbitcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOiB7XG4rXHRcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbitcbitcdFx0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuK1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBtYWNiX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuIFx0XHRcdCB2b2lkICp0eXBlX2RhdGEpXG4ge1xuK1x0c3RydWN0IG1hY2IgKmJwO1xuK1xuIFx0aWYgKCFkZXYgfHwgIXR5cGVfZGF0YSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRpZiAodHlwZSA9PSBUQ19RVUVSWV9DQVBTKVxuK1x0XHRyZXR1cm4gbWFjYl90Y19xdWVyeV9jYXBzKGRldiwgdHlwZV9kYXRhKTtcbitcbitcdGJwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdGlmICh1bmxpa2VseSghKGRldi1cdTAwM2Vod19mZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19UQykpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHQvKiBDaGVjayBpZiBEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kICovXG4rXHRpZiAodW5saWtlbHkocG1fcnVudGltZV9zdXNwZW5kZWQoXHUwMDI2YnAtXHUwMDNlcGRldi1cdTAwM2VkZXYpKSkge1xuK1x0XHRuZXRkZXZfZXJyKGRldiwgXCJEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxuK1x0XHRyZXR1cm4gbWFjYl9zZXR1cF9tcXByaW8oZGV2LCB0eXBlX2RhdGEpO1xuK1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19DQlM6XG4rXHRcdHJldHVybiBtYWNiX3NldHVwX2NicyhkZXYsIHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX1FESVNDX1RBUFJJTzpcbiBcdFx0cmV0dXJuIG1hY2Jfc2V0dXBfdGFwcmlvKGRldiwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG5AQCAtNDg0Niw4ICs1MDI5LDggQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9SWENTVU07XG4gXHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1NHX0RJU0FCTEVEKVxuIFx0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9TRztcbi1cdC8qIEVuYWJsZSBIV19UQyBpZiBoYXJkd2FyZSBzdXBwb3J0cyBRQlYgKi9cbi1cdGlmIChicC1cdTAwM2VjYXBzIFx1MDAyNiBNQUNCX0NBUFNfUUJWKVxuK1x0LyogRW5hYmxlIFRDIG9mZmxvYWQgZm9yIFRTTi1jYXBhYmxlIGhhcmR3YXJlICovXG4rXHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1RDKVxuIFx0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcbiBcbiBcdGRldi1cdTAwM2VmZWF0dXJlcyA9IGRldi1cdTAwM2Vod19mZWF0dXJlcztcbkBAIC01Njc4LDcgKzU4NjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIHZlcnNhbF9jb25maWcgPSB7XG4gXHQuY2FwcyA9IE1BQ0JfQ0FQU19HSUdBQklUX01PREVfQVZBSUxBQkxFIHwgTUFDQl9DQVBTX0pVTUJPIHxcbiBcdFx0TUFDQl9DQVBTX0dFTV9IQVNfUFRQIHwgTUFDQl9DQVBTX0JEX1JEX1BSRUZFVENIIHxcbiBcdFx0TUFDQl9DQVBTX05FRURfVFNVQ0xLIHwgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEUgfFxuLVx0XHRNQUNCX0NBUFNfUUJWIHxcbitcdFx0TUFDQl9DQVBTX1RDIHxcbiBcdFx0TUFDQl9DQVBTX1VTUklPX0hBU19NSUksXG4gXHQuZG1hX2J1cnN0X2xlbmd0aCA9IDE2LFxuIFx0LmluaXQgPSBpbml0X3Jlc2V0X29wdGlvbmFsLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6MDguODk2NDU2NDA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNTEwNjc5NTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IENhZGVuY2UgTUFDQiBFdGhlcm5ldCBEcml2ZXIgVHJhZmZpYyBDb250cm9sIE9mZmxvYWRzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGFkZGluZyBDQlMgKENyZWRpdC1CYXNlZCBTaGFwZXIpIGFuZCBNUVBSSU8gdHJhZmZpYyBjb250cm9sIG9mZmxvYWQgc3VwcG9ydCB0byB0aGUgQ2FkZW5jZSBNQUNCIEV0aGVybmV0IGRyaXZlci4gRXNzZW50aWFsbHksIGl0IGludHJvZHVjZXMgZnVuY3Rpb25zIGxpa2UgYG1hY2Jfc2V0dXBfY2JzYCBhbmQgYG1hY2Jfc2V0dXBfbXFwcmlvYCwgY2FsbGVkIGZyb20gYG1hY2Jfc2V0dXBfdGNgLCBhbmQgYWxzbyBhZGRzIGBtYWNiX3RjX3F1ZXJ5X2NhcHNgLiBNeSBwcmltYXJ5IGNvbmNlcm4gd2l0aCB0aGVzZSB0eXBlcyBvZiBwYXRjaGVzIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSB0byB1c2VyIHNwYWNlLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRhdGEgZmxvdy5cblxuSSBzZWUgaXQncyBkZWFsaW5nIHdpdGggc3RydWN0dXJlcyBsaWtlIGB0Y19jYnNfcW9wdF9vZmZsb2FkYCwgYHRjX21xcHJpb19xb3B0X29mZmxvYWRgLCBhbmQgYHRjX3F1ZXJ5X2NhcHNfYmFzZWAuIFRoZXNlIGFyZSBwYXNzZWQgdG8gdGhlIGRyaXZlciBmdW5jdGlvbnMgZnJvbSB0aGUgbmV0d29ya2luZyBjb3JlLCB0aGluZ3MgbGlrZSBgdGNfc2V0dXBfY2JfY2FsbGAsIGB0Y19zZXR1cF9xZGlzY19jYnNgLCBldGMuIFRoZSBuZXR3b3JraW5nIGNvcmUsIHNwZWNpZmljYWxseSBgbmV0L3NjaGVkL3NjaF9jYnMuY2AgYW5kIGBuZXQvc2NoZWQvc2NoX21xcHJpby5jYCwgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgYW5kIHBvcHVsYXRpbmcgdGhlc2Ugc3RydWN0dXJlcy5cblxuTm93LCB0aGUgZHJpdmVyICpyZWFkcyogZnJvbSB0aGVzZSBzdHJ1Y3R1cmVzIHRvIGNvbmZpZ3VyZSB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJbXBvcnRhbnRseSwgaXQgZG9lc24ndCB3cml0ZSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIGJhY2sgaW50byB0aGVzZSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgdGhlbiBiZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gT2theSwgd2FpdCwgYG1hY2JfdGNfcXVlcnlfY2Fwc2AgZG9lcyB3cml0ZSB0byBgYmFzZS1cdTAwM2VjYXBzYC4uLiBidXQgdGhpcyBpcyBzdGFuZGFyZCBmb3IgYFRDX1FVRVJZX0NBUFNgLCBhbmQgdGhlIGBjYXBzYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZXIgKGUuZy4sIGluIGBtcXByaW9faW5pdGApIGFuZCBub3QgY29waWVkIGRpcmVjdGx5IHRvIHVzZXIgc3BhY2UuIEl0J3MgdXNlZCBpbnRlcm5hbGx5IGZvciB2YWxpZGF0aW9uIG9mIHVzZXIgaW5wdXQuIE5vIGlzc3VlIHRoZXJlLlxuXG5MZXQncyBsb29rIGF0IHRoZSBkYXRhIGJlaW5nIHJlYWQgbW9yZSBjbG9zZWx5LiBJbiBgbWFjYl9zZXR1cF9jYnNgLCBpdCByZWFkcyBgcW9wdC1cdTAwM2VxdWV1ZWAsIGBxb3B0LVx1MDAzZWlkbGVzbG9wZWAsIGFuZCBgcW9wdC1cdTAwM2VlbmFibGVgLiBUaGVuIGl0IGNhbGN1bGF0ZXMgYW5kIHdyaXRlcyB0byBoYXJkd2FyZSByZWdpc3RlcnMuIEluIGBtYWNiX3NldHVwX21xcHJpb2AsIGl0IHJlYWRzIGBtcXByaW8tXHUwMDNlcW9wdC5udW1fdGNgLCBgbXFwcmlvLVx1MDAzZXFvcHQuY291bnRbaV1gLCBhbmQgYG1xcHJpby1cdTAwM2Vxb3B0Lm9mZnNldFtpXWAsIGFuZCBpdCBjYWxscyBgbmV0ZGV2X3NldF9udW1fdGNgIGFuZCBgbmV0ZGV2X3NldF90Y19xdWV1ZWAuXG5cbkNydWNpYWxseSwgdGhlcmUgaXMgbm8gZGlyZWN0IGludGVyYWN0aW9uIHdpdGggdXNlci1zcGFjZSBidWZmZXJzLCBhbmQgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIGNvcGllZCAqdG8qIHVzZXIgc3BhY2UuIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgd2hlcmUgd2UgbWlnaHQgaW5hZHZlcnRlbnRseSByZWFkIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGxhdGVyLiBJIGFsc28gZG9uJ3Qgc2VlIGFueSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aCBtb2RpZmljYXRpb25zIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSBleGlzdGluZyBidWZmZXJzLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCBpcyBzdHJpY3RseSBhYm91dCBhZGRpbmcgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0LiBBbnkgYnVncyB3b3VsZCBsaWtlbHkgYmUgbG9naWMgZXJyb3JzLCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcyAoZXNwZWNpYWxseSB3aXRoIGBudW1fdGNgLCBidXQgY29yZSBuZXR3b3JraW5nIHNlZW1zIHRvIHZhbGlkYXRlIHRob3NlKSwgb3IgbWlzY29uZmlndXJhdGlvbiBvZiB0aGUgaGFyZHdhcmUuIFRoZXNlIGRvbid0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cbkdpdmVuIHRoYXQsIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgcHJvYmxlbXMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtc2A6IFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRvIGAqZW5hYmxlX2JpdGAgYW5kIGAqaXNfcXVldWVfYWAgaWYgaXQgcmV0dXJucyAwLiBJIHNlZSB0aGF0IHRoZXJlIGFyZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGluIGBtYWNiX2Nic19hZGRgLCBhbmQgaW4gYG1hY2JfY2JzX2Rlc3Ryb3lgLiBUaGVyZSBpcyBhbHNvIGFuIGVycm9yIGNoZWNrLiBUaGUgY2FsbHMgaW4gdGhvc2UgZnVuY3Rpb25zIGNoZWNrIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgMCwgc28gYm90aCBvZiB0aG9zZSB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGV5IGFyZSByZWFkLlxuXG5TbywgKmRlZmluaXRlbHkqIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UgdGhlcmUuXG5cbioqQ29uY2x1c2lvbjogTmVlZHNLTVNBTiA9IGZhbHNlLioqXG5cbioqUmVhc29uaW5nOioqIFRoaXMgcGF0Y2ggYWRkcyBoYXJkd2FyZSBvZmZsb2FkIHN1cHBvcnQgZm9yIENCUyBhbmQgTVFQUklPIHRyYWZmaWMgY29udHJvbCBpbiB0aGUgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEl0IHJlYWRzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgbmV0d29ya2luZyBjb3JlIGFuZCBwcm9ncmFtcyBoYXJkd2FyZSByZWdpc3RlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gUG90ZW50aWFsIG1lbW9yeSBlcnJvcnMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd2lsbCBiZSBjYXVnaHQgYnkgS0FTQU4uIFdlIGFyZSBnb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzY4LCJPdXRwdXRUb2tlbnMiOjE1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxOTozMi40MDcxMzk3MDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0IGZvciBDQlMgYW5kIE1RUFJJTyB0cmFmZmljIGNvbnRyb2wgaW4gdGhlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyLiBJdCByZWFkcyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgdGhlIG5ldHdvcmtpbmcgY29yZSBhbmQgcHJvZ3JhbXMgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSB2YXJpYWJsZXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSAoYGVuYWJsZV9iaXRgLCBgaXNfcXVldWVfYWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBlcnJvcnMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0IGZvciBDQlMgYW5kIE1RUFJJTyB0cmFmZmljIGNvbnRyb2wgaW4gdGhlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyLiBJdCByZWFkcyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgdGhlIG5ldHdvcmtpbmcgY29yZSBhbmQgcHJvZ3JhbXMgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSB2YXJpYWJsZXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSAoYGVuYWJsZV9iaXRgLCBgaXNfcXVldWVfYWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBlcnJvcnMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz8f7[1] Phase: Succeeded StartedAt: 2026-08-07 12:36:53 +0000 UTC FinishedAt: 2026-08-07 12:36:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 12:36:53 +0000 UTC FinishedAt: 2026-08-07 12:36:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2] Phase: Succeeded StartedAt: 2026-08-07 12:36:53 +0000 UTC FinishedAt: 2026-08-07 14:10:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 12:36:53 +0000 UTC FinishedAt: 2026-08-07 14:10:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 12:36:53 +0000 UTC FinishedAt: 2026-08-07 12:37:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 12:36:53 +0000 UTC FinishedAt: 2026-08-07 12:36:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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-workflowwz8f7/series-workflowwz8f7-convert-artifact-1580201285/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 12:37:03 +0000 UTC FinishedAt: 2026-08-07 12:53:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 12:37:03 +0000 UTC FinishedAt: 2026-08-07 12:53:08 +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:*980fa709-c6a3-47a0-95cb-9ea5f6577b9b,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-workflowwz8f7/series-workflowwz8f7-convert-artifact-1580201285/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": "263dcb07-1f1e-41c1-a305-9a754d444d6c", "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-workflowwz8f7/series-workflowwz8f7-build-action-87071723/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 12:37:03 +0000 UTC FinishedAt: 2026-08-07 12:52:58 +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:*980fa709-c6a3-47a0-95cb-9ea5f6577b9b,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-workflowwz8f7/series-workflowwz8f7-convert-artifact-1580201285/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": "263dcb07-1f1e-41c1-a305-9a754d444d6c", "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-workflowwz8f7/series-workflowwz8f7-build-action-87071723/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 12:53:08 +0000 UTC FinishedAt: 2026-08-07 12:53:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 12:53:08 +0000 UTC FinishedAt: 2026-08-07 12:53:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 12:53:08 +0000 UTC FinishedAt: 2026-08-07 12:53:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 12:53:08 +0000 UTC FinishedAt: 2026-08-07 12:53:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-workflowwz8f7/series-workflowwz8f7-convert-artifact-1955536672/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 12:53:18 +0000 UTC FinishedAt: 2026-08-07 12:55:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 12:53:18 +0000 UTC FinishedAt: 2026-08-07 12:55:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*263dcb07-1f1e-41c1-a305-9a754d444d6c,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-workflowwz8f7/series-workflowwz8f7-build-action-87071723/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-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 12:55:20 +0000 UTC FinishedAt: 2026-08-07 12:55:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 12:55:20 +0000 UTC FinishedAt: 2026-08-07 12:55:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 12:55:20 +0000 UTC FinishedAt: 2026-08-07 13:14:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 12:55:20 +0000 UTC FinishedAt: 2026-08-07 13:14:06 +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:*980fa709-c6a3-47a0-95cb-9ea5f6577b9b,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-workflowwz8f7/series-workflowwz8f7-convert-artifact-1955536672/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": "b7292805-fbe9-457b-8385-7765e4d88d65", "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-workflowwz8f7/series-workflowwz8f7-build-action-2628785372/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 12:55:20 +0000 UTC FinishedAt: 2026-08-07 13:13:56 +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:*980fa709-c6a3-47a0-95cb-9ea5f6577b9b,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-workflowwz8f7/series-workflowwz8f7-convert-artifact-1955536672/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": "b7292805-fbe9-457b-8385-7765e4d88d65", "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-workflowwz8f7/series-workflowwz8f7-build-action-2628785372/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 13:14:06 +0000 UTC FinishedAt: 2026-08-07 13:14:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 13:14:06 +0000 UTC FinishedAt: 2026-08-07 13:14:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 13:14:06 +0000 UTC FinishedAt: 2026-08-07 13:16:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 13:14:06 +0000 UTC FinishedAt: 2026-08-07 13:16:07 +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:*b7292805-fbe9-457b-8385-7765e4d88d65,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-workflowwz8f7/series-workflowwz8f7-build-action-2628785372/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-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 13:16:17 +0000 UTC FinishedAt: 2026-08-07 14:10:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 13:16:17 +0000 UTC FinishedAt: 2026-08-07 14:10:52 +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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"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:*263dcb07-1f1e-41c1-a305-9a754d444d6c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b7292805-fbe9-457b-8385-7765e4d88d65,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-workflowwz8f7/series-workflowwz8f7-build-action-87071723/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-workflowwz8f7/series-workflowwz8f7-build-action-2628785372/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 13:16:17 +0000 UTC FinishedAt: 2026-08-07 13:16:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 13:16:17 +0000 UTC FinishedAt: 2026-08-07 13:16: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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"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-workflowwz8f7/series-workflowwz8f7-convert-artifact-2503641977/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 13:16:17 +0000 UTC FinishedAt: 2026-08-07 13:16:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 13:16:17 +0000 UTC FinishedAt: 2026-08-07 13:16:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 13:16:17 +0000 UTC FinishedAt: 2026-08-07 13:16:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 13:16:27 +0000 UTC FinishedAt: 2026-08-07 14:10:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwz8f7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"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":["macb_setup_cbs","macb_cbs_add","macb_cbs_destroy","macb_setup_mqprio","macb_tc_query_caps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_CADENCE","MACB","MACB_PCI"],"series_id":"8d580efd-687a-492b-a0af-e386b41047e3","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-07 13:16:27 +0000 UTC FinishedAt: 2026-08-07 14:10:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*263dcb07-1f1e-41c1-a305-9a754d444d6c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b7292805-fbe9-457b-8385-7765e4d88d65,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-workflowwz8f7/series-workflowwz8f7-build-action-87071723/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-workflowwz8f7/series-workflowwz8f7-build-action-2628785372/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-workflowwz8f7/series-workflowwz8f7-convert-artifact-2503641977/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,}