Name: series-workflow8gkcw Phase: Failed StartedAt: 2026-09-09 15:27:30 +0000 UTC FinishedAt: 2026-09-09 15:30:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gkcw[0] Phase: Succeeded StartedAt: 2026-09-09 15:27:30 +0000 UTC FinishedAt: 2026-09-09 15:30:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gkcw[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 15:27:30 +0000 UTC FinishedAt: 2026-09-09 15:30:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlLykgdG8gYWRkIENCUyBhbmQgTVFQUklPIGhhcmR3YXJlIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkaW5nLCBzcGVjaWZpY2FsbHkgZW5hYmxlZCBmb3IgWGlsaW54IFZlcnNhbCBTb0NzICh2ZXJzYWxfY29uZmlnKS4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBBUk0vUklTQy1WIFNvQyBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MjRiNTE1MGE5N2RjZmFmNGZkZjQ4MDFjYTdkOWE4ZDU5YWJlNWY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNToyOToyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG5pbmRleCBkNjkzMWM0MWYzOWRhLi4yMGZhZWJhNzdkNmQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG5AQCAtMTg0LDYgJiM0MzsxODQsOSBAQFxuICNkZWZpbmUgR0VNX0RDRkc4XHRcdDB4MDI5QyAvKiBEZXNpZ24gQ29uZmlnIDggKi9cbiAjZGVmaW5lIEdFTV9EQ0ZHMTBcdFx0MHgwMkE0IC8qIERlc2lnbiBDb25maWcgMTAgKi9cbiAjZGVmaW5lIEdFTV9EQ0ZHMTJcdFx0MHgwMkFDIC8qIERlc2lnbiBDb25maWcgMTIgKi9cbiYjNDM7I2RlZmluZSBHRU1fQ0JTX0NPTlRST0xcdFx0MHgwNEJDIC8qIENCUyBDb250cm9sIFJlZ2lzdGVyICovXG4mIzQzOyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9BXHQweDA0QzAgLyogQ0JTIElkbGVTbG9wZSBRdWV1ZSBBICovXG4mIzQzOyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9CXHQweDA0QzQgLyogQ0JTIElkbGVTbG9wZSBRdWV1ZSBCICovXG4gI2RlZmluZSBHRU1fRU5TVF9DT05UUk9MXHQweDA4ODAgLyogRU5TVCBjb250cm9sIHJlZ2lzdGVyICovXG4gI2RlZmluZSBHRU1fVVNYX0NPTlRST0xcdFx0MHgwQTgwIC8qIEhpZ2ggc3BlZWQgUENTIGNvbnRyb2wgcmVnaXN0ZXIgKi9cbiAjZGVmaW5lIEdFTV9VU1hfU1RBVFVTXHRcdDB4MEE4OCAvKiBIaWdoIHNwZWVkIFBDUyBzdGF0dXMgcmVnaXN0ZXIgKi9cbkBAIC0yMjQsNiAmIzQzOzIyNywxMiBAQFxuICNkZWZpbmUgR0VNX0VOU1RfT05fVElNRShod19xKVx0XHQoMHgwODIwICYjNDM7ICgoaHdfcSkgXHUwMDNjXHUwMDNjIDIpKVxuICNkZWZpbmUgR0VNX0VOU1RfT0ZGX1RJTUUoaHdfcSlcdFx0KDB4MDg0MCAmIzQzOyAoKGh3X3EpIFx1MDAzY1x1MDAzYyAyKSlcbiBcbiYjNDM7LyogQml0ZmllbGRzIGluIENCU19DT05UUk9MICovXG4mIzQzOyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9PRkZTRVRcdDBcbiYjNDM7I2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9BX1NJWkVcdDFcbiYjNDM7I2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9CX09GRlNFVFx0MVxuJiM0MzsjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0JfU0laRVx0MVxuJiM0MztcbiAvKiBCaXRmaWVsZHMgaW4gRU5TVF9DT05UUk9MICovXG4gI2RlZmluZSBHRU1fRU5TVF9ESVNBQkxFX1FVRVVFX09GRlNFVFx0MTZcbiBcbkBAIC03NjgsNyAmIzQzOzc3Nyw3IEBAXG4gI2RlZmluZSBNQUNCX0NBUFNfTUlJT05SR01JSVx0XHRcdEJJVCg5KVxuICNkZWZpbmUgTUFDQl9DQVBTX05FRURfVFNVQ0xLXHRcdFx0QklUKDEwKVxuICNkZWZpbmUgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEVcdFx0XHRCSVQoMTEpXG4tI2RlZmluZSBNQUNCX0NBUFNfUUJWXHRcdFx0XHRCSVQoMTIpXG4mIzQzOyNkZWZpbmUgTUFDQl9DQVBTX1RDXHRcdFx0XHRCSVQoMTIpXG4gI2RlZmluZSBNQUNCX0NBUFNfUENTXHRcdFx0XHRCSVQoMTMpXG4gI2RlZmluZSBNQUNCX0NBUFNfSElHSF9TUEVFRFx0XHRcdEJJVCgxNClcbiAjZGVmaW5lIE1BQ0JfQ0FQU19DTEtfSFdfQ0hHXHRcdFx0QklUKDE1KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5pbmRleCBhNDI3YTViOWQ4OTRjLi4wMGMxYzYxOWRlYThjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuQEAgLTk5LDYgJiM0Mzs5OSwxMCBAQCBzdHJ1Y3Qgc2lmaXZlX2Z1NTQwX21hY2JfbWdtdCB7XG4gXG4gI2RlZmluZSBNQUNCX01ESU9fVElNRU9VVFx0MTAwMDAwMCAvKiBpbiB1c2VjcyAqL1xuIFxuJiM0MzsvKiBDQlMgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvcnM6IDEwMDAvaW50ZXJmYWNlX3dpZHRoICovXG4mIzQzOyNkZWZpbmUgTUFDQl9DQlNfUE9SVF9SQVRFXzFHXHRcdDEyNVx0LyogMTAwMC84IGZvciBHTUlJICg4LWJpdCkgKi9cbiYjNDM7I2RlZmluZSBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTVx0MjUwXHQvKiAxMDAwLzQgZm9yIE1JSSAoNC1iaXQpICovXG4mIzQzO1xuIC8qIERNQSBidWZmZXIgZGVzY3JpcHRvciBtaWdodCBiZSBkaWZmZXJlbnQgc2l6ZVxuICAqIGRlcGVuZHMgb24gaGFyZHdhcmUgY29uZmlndXJhdGlvbjpcbiAgKlxuQEAgLTQ0NzYsMTggJiM0Mzs0NDgwLDggQEAgc3RhdGljIHZvaWQgbWFjYl90YXByaW9fZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHQgICAgIHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICp0YXByaW8pXG4ge1xuLVx0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdGludCBlcnIgPSAwO1xuIFxuLVx0aWYgKHVubGlrZWx5KCEobmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1RDKSkpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cbi1cdC8qIENoZWNrIGlmIERldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmQgKi9cbi1cdGlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZChcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldikpKSB7XG4tXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLVx0fVxuLVxuIFx0c3dpdGNoICh0YXByaW8tXHUwMDNlY21kKSB7XG4gXHRjYXNlIFRBUFJJT19DTURfUkVQTEFDRTpcbiBcdFx0ZXJyID0gbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShuZXRkZXYsIHRhcHJpbyk7XG5AQCAtNDUwMiwxMyAmIzQzOzQ0OTYsMTk3IEBAIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoc3RydWN0IG1hY2IgKmJwLCB1OCBxdWV1ZV9udW0sXG4mIzQzO1x0XHRcdFx0ICAgICB1MzIgKmVuYWJsZV9iaXQsIHUzMiAqaWRsZXNsb3BlX3JlZylcbiYjNDM7e1xuJiM0MztcdC8qIFF1ZXVlIEEgaXMgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDEpICovXG4mIzQzO1x0aWYgKHF1ZXVlX251bSA9PSBicC1cdTAwM2VudW1fcXVldWVzIC0gMSkge1xuJiM0MztcdFx0KmVuYWJsZV9iaXQgPSBHRU1fQklUKENCU19FTkFCTEVfUVVFVUVfQSk7XG4mIzQzO1x0XHQqaWRsZXNsb3BlX3JlZyA9IEdFTV9DQlNfSURMRVNMT1BFX1FfQTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUXVldWUgQiBpcyBzZWNvbmQgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDIpICovXG4mIzQzO1x0aWYgKHF1ZXVlX251bSA9PSBicC1cdTAwM2VudW1fcXVldWVzIC0gMikge1xuJiM0MztcdFx0KmVuYWJsZV9iaXQgPSBHRU1fQklUKENCU19FTkFCTEVfUVVFVUVfQik7XG4mIzQzO1x0XHQqaWRsZXNsb3BlX3JlZyA9IEdFTV9DQlNfSURMRVNMT1BFX1FfQjtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWFjYl9jYnNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGVuYWJsZV9iaXQsIGlkbGVzbG9wZSwgc3BlZWRfa2JwcywgY3RybCwgaWRsZXNsb3BlX3JlZztcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBrc2V0ID0ge307XG4mIzQzO1x0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKGJwLCBxb3B0LVx1MDAzZXF1ZXVlLCBcdTAwMjZlbmFibGVfYml0LCBcdTAwMjZpZGxlc2xvcGVfcmVnKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7Q0JTOiBRdWV1ZSAlZCBub3QgZWxpZ2libGUgKG9ubHkgdG9wIDIgcXVldWVzIHN1cHBvcnQgQ0JTKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgcW9wdC1cdTAwM2VxdWV1ZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIGlkbGVzbG9wZSBpcyBjYWxpYnJhdGVkIGZvciB0aGUgY3VycmVudCBsaW5rIHNwZWVkOyBDQlMgaXMgbm90XG4mIzQzO1x0ICogcmVwcm9ncmFtbWVkIG9uIGxpbmstc3BlZWQgY2hhbmdlcywgc28gaXQgbXVzdCBiZSByZWNvbmZpZ3VyZWRcbiYjNDM7XHQgKiBpZiB0aGUgbGluayBzcGVlZCBjaGFuZ2VzLlxuJiM0MztcdCAqL1xuJiM0MztcdHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KGJwLVx1MDAzZXBoeWxpbmssIFx1MDAyNmtzZXQpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWtzZXQuYmFzZS5zcGVlZCB8fCBrc2V0LmJhc2Uuc3BlZWQgPT0gU1BFRURfVU5LTk9XTikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O0NCUzogSW52YWxpZCBsaW5rIHNwZWVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3BlZWRfa2JwcyA9IGtzZXQuYmFzZS5zcGVlZCAqIDEwMDA7XG4mIzQzO1xuJiM0MztcdGlmIChxb3B0LVx1MDAzZWlkbGVzbG9wZSBcdTAwM2M9IDAgfHwgKHUzMilxb3B0LVx1MDAzZWlkbGVzbG9wZSBcdTAwM2Ugc3BlZWRfa2Jwcykge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O0NCUzogaW52YWxpZCBpZGxlc2xvcGUgJWQgKG11c3QgYmUgMS4uJXUga2JwcylcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHFvcHQtXHUwMDNlaWRsZXNsb3BlLCBzcGVlZF9rYnBzKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogcW9wdC1cdTAwM2VpZGxlc2xvcGUgaXMgaW4ga2JwczsgY29udmVydCB0byB0aGUgdW5pdHMgdGhlIGhhcmR3YXJlXG4mIzQzO1x0ICogcmVnaXN0ZXIgZXhwZWN0czpcbiYjNDM7XHQgKiAtIEhpZ2gtc3BlZWQgR0VNOiBmcmFjdGlvbiBvZiBwb3J0IGJhbmR3aWR0aCwgc2NhbGVkIHRvIHRoZSBmdWxsXG4mIzQzO1x0ICogICAzMi1iaXQgcmVnaXN0ZXIgcmFuZ2VcbiYjNDM7XHQgKiAtIFN0YW5kYXJkIE1BQ0I6IHRoZSByZWdpc3RlciBjb3VudHMgYnl0ZXMvc2VjIGluIDFHICg4LWJpdCBHTUlJKVxuJiM0MztcdCAqICAgbW9kZSBhbmQgbmliYmxlcy9zZWMgaW4gMTAvMTAwICg0LWJpdCBNSUkpIG1vZGUsIHNvIHNjYWxlIGticHNcbiYjNDM7XHQgKiAgIGJ5IDEwMDAvOCAoMTI1KSBvciAxMDAwLzQgKDI1MCkgcmVzcGVjdGl2ZWx5XG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19ISUdIX1NQRUVEKVxuJiM0MztcdFx0aWRsZXNsb3BlID0gRElWX1JPVU5EX1VQX1VMTCgodTY0KXFvcHQtXHUwMDNlaWRsZXNsb3BlICogVTMyX01BWCwgc3BlZWRfa2Jwcyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0aWRsZXNsb3BlID0gKHUzMilxb3B0LVx1MDAzZWlkbGVzbG9wZSAqIChrc2V0LmJhc2Uuc3BlZWQgXHUwMDNlPSAxMDAwID9cbiYjNDM7XHRcdFx0XHRcdCAgICAgICBNQUNCX0NCU19QT1JUX1JBVEVfMUcgOiBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTSk7XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZicC1cdTAwM2Vsb2NrKSB7XG4mIzQzO1x0XHQvKiBEaXNhYmxlIENCUyBmb3IgdGhlIHF1ZXVlIGJlZm9yZSB1cGRhdGluZyBpZGxlc2xvcGUgKi9cbiYjNDM7XHRcdGN0cmwgPSBnZW1fcmVhZGwoYnAsIENCU19DT05UUk9MKSBcdTAwMjYgfmVuYWJsZV9iaXQ7XG4mIzQzO1x0XHRnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCk7XG4mIzQzO1x0XHQvKiBVcGRhdGUgaWRsZXNsb3BlIGZvciB0aGUgcXVldWUgKi9cbiYjNDM7XHRcdGJwLVx1MDAzZW1hY2JfcmVnX3dyaXRlbChicCwgaWRsZXNsb3BlX3JlZywgaWRsZXNsb3BlKTtcbiYjNDM7XHRcdC8qIFJlLWVuYWJsZSBDQlMgZm9yIHRoZSBxdWV1ZSB3aXRoIG5ldyBpZGxlc2xvcGUgKi9cbiYjNDM7XHRcdGdlbV93cml0ZWwoYnAsIENCU19DT05UUk9MLCBjdHJsIHwgZW5hYmxlX2JpdCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7Q0JTOiBDb25maWd1cmVkIHF1ZXVlICVkIHdpdGggaWRsZXNsb3BlIDB4JXhcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBxb3B0LVx1MDAzZXF1ZXVlLCBpZGxlc2xvcGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWFjYl9jYnNfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCBxdWV1ZV9udW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHUzMiBlbmFibGVfYml0LCBpZGxlc2xvcGVfcmVnO1xuJiM0MztcbiYjNDM7XHRpZiAobWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtcyhicCwgcXVldWVfbnVtLCBcdTAwMjZlbmFibGVfYml0LCBcdTAwMjZpZGxlc2xvcGVfcmVnKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmJwLVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdGdlbV93cml0ZWwoYnAsIENCU19DT05UUk9MLCBnZW1fcmVhZGwoYnAsIENCU19DT05UUk9MKSBcdTAwMjYgfmVuYWJsZV9iaXQpO1xuJiM0MztcdFx0YnAtXHUwMDNlbWFjYl9yZWdfd3JpdGVsKGJwLCBpZGxlc2xvcGVfcmVnLCAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5ldGRldl9kYmcobmV0ZGV2LCBcJiMzNDtDQlM6IERpc2FibGVkIHF1ZXVlICVkXFxuXCYjMzQ7LCBxdWV1ZV9udW0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1hY2Jfc2V0dXBfY2JzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpXG4mIzQzO3tcbiYjNDM7XHRpZiAocW9wdC1cdTAwM2VlbmFibGUpXG4mIzQzO1x0XHRyZXR1cm4gbWFjYl9jYnNfYWRkKG5ldGRldiwgcW9wdCk7XG4mIzQzO1xuJiM0MztcdG1hY2JfY2JzX2Rlc3Ryb3kobmV0ZGV2LCBxb3B0LVx1MDAzZXF1ZXVlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtYWNiX3NldHVwX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHR1OCBudW1fdGMgPSBxb3B0LVx1MDAzZW51bV90YztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdHU4IGk7XG4mIzQzO1xuJiM0MztcdC8qIEhhbmRsZSByZXNldCBjYXNlIGVhcmx5ICovXG4mIzQzO1x0aWYgKCFudW1fdGMpIHtcbiYjNDM7XHRcdG5ldGRldl9yZXNldF90YyhuZXRkZXYpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzc2VzICovXG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBudW1fdGMpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fdGM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRlcnIgPSBuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC1cdTAwM2Vjb3VudFtpXSxcbiYjNDM7XHRcdFx0XHRcdCAgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzZXRfdGM7XG4mIzQzO1xuJiM0MztcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwmIzM0O01RUFJJTzogVEMlZCAtXHUwMDNlIHF1ZXVlICV1IChjb3VudD0ldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGksIHFvcHQtXHUwMDNlb2Zmc2V0W2ldLCBxb3B0LVx1MDAzZWNvdW50W2ldKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc2V0X3RjOlxuJiM0MztcdG5ldGRldl9yZXNldF90YyhuZXRkZXYpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWFjYl90Y19xdWVyeV9jYXBzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGJhc2UtXHUwMDNldHlwZSkge1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOiB7XG4mIzQzO1x0XHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4mIzQzO1xuJiM0MztcdFx0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRcdFx0IHZvaWQgKnR5cGVfZGF0YSlcbiB7XG4mIzQzO1x0c3RydWN0IG1hY2IgKmJwO1xuJiM0MztcbiBcdGlmICghbmV0ZGV2IHx8ICF0eXBlX2RhdGEpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdGlmICh0eXBlID09IFRDX1FVRVJZX0NBUFMpXG4mIzQzO1x0XHRyZXR1cm4gbWFjYl90Y19xdWVyeV9jYXBzKG5ldGRldiwgdHlwZV9kYXRhKTtcbiYjNDM7XG4mIzQzO1x0YnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoIShuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfVEMpKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgaWYgRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZChcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldikpKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7RGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxuJiM0MztcdFx0cmV0dXJuIG1hY2Jfc2V0dXBfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbiYjNDM7XHRjYXNlIFRDX1NFVFVQX1FESVNDX0NCUzpcbiYjNDM7XHRcdHJldHVybiBtYWNiX3NldHVwX2NicyhuZXRkZXYsIHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX1FESVNDX1RBUFJJTzpcbiBcdFx0cmV0dXJuIG1hY2Jfc2V0dXBfdGFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG5AQCAtNDgyMyw4ICYjNDM7NTAwMSw4IEBAIHN0YXRpYyBpbnQgbWFjYl9pbml0X2RmbHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNO1xuIFx0aWYgKGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19TR19ESVNBQkxFRClcbiBcdFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIFx1MDAyNj0gfk5FVElGX0ZfU0c7XG4tXHQvKiBFbmFibGUgSFdfVEMgaWYgaGFyZHdhcmUgc3VwcG9ydHMgUUJWICovXG4tXHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1FCVilcbiYjNDM7XHQvKiBFbmFibGUgVEMgb2ZmbG9hZCBmb3IgVFNOLWNhcGFibGUgaGFyZHdhcmUgKi9cbiYjNDM7XHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1RDKVxuIFx0XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcbiBcbiBcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcztcbkBAIC01NjkzLDcgJiM0Mzs1ODcxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB2ZXJzYWxfY29uZmlnID0ge1xuIFx0LmNhcHMgPSBNQUNCX0NBUFNfR0lHQUJJVF9NT0RFX0FWQUlMQUJMRSB8IE1BQ0JfQ0FQU19KVU1CTyB8XG4gXHRcdE1BQ0JfQ0FQU19HRU1fSEFTX1BUUCB8IE1BQ0JfQ0FQU19CRF9SRF9QUkVGRVRDSCB8XG4gXHRcdE1BQ0JfQ0FQU19ORUVEX1RTVUNMSyB8IE1BQ0JfQ0FQU19RVUVVRV9ESVNBQkxFIHxcbi1cdFx0TUFDQl9DQVBTX1FCViB8XG4mIzQzO1x0XHRNQUNCX0NBUFNfVEMgfFxuIFx0XHRNQUNCX0NBUFNfVVNSSU9fSEFTX01JSSxcbiBcdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXG4gXHQuaW5pdCA9IGluaXRfcmVzZXRfb3B0aW9uYWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlLykgdG8gYWRkIENCUyBhbmQgTVFQUklPIGhhcmR3YXJlIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkaW5nLCBzcGVjaWZpY2FsbHkgZW5hYmxlZCBmb3IgWGlsaW54IFZlcnNhbCBTb0NzICh2ZXJzYWxfY29uZmlnKS4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBBUk0vUklTQy1WIFNvQyBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MjRiNTE1MGE5N2RjZmFmNGZkZjQ4MDFjYTdkOWE4ZDU5YWJlNWY3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNToyOToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgKaW5kZXggZDY5MzFjNDFmMzlkYS4uMjBmYWViYTc3ZDZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgKQEAgLTE4NCw2ICYjNDM7MTg0LDkgQEAKICNkZWZpbmUgR0VNX0RDRkc4CQkweDAyOUMgLyogRGVzaWduIENvbmZpZyA4ICovCiAjZGVmaW5lIEdFTV9EQ0ZHMTAJCTB4MDJBNCAvKiBEZXNpZ24gQ29uZmlnIDEwICovCiAjZGVmaW5lIEdFTV9EQ0ZHMTIJCTB4MDJBQyAvKiBEZXNpZ24gQ29uZmlnIDEyICovCiYjNDM7I2RlZmluZSBHRU1fQ0JTX0NPTlRST0wJCTB4MDRCQyAvKiBDQlMgQ29udHJvbCBSZWdpc3RlciAqLwomIzQzOyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9BCTB4MDRDMCAvKiBDQlMgSWRsZVNsb3BlIFF1ZXVlIEEgKi8KJiM0MzsjZGVmaW5lIEdFTV9DQlNfSURMRVNMT1BFX1FfQgkweDA0QzQgLyogQ0JTIElkbGVTbG9wZSBRdWV1ZSBCICovCiAjZGVmaW5lIEdFTV9FTlNUX0NPTlRST0wJMHgwODgwIC8qIEVOU1QgY29udHJvbCByZWdpc3RlciAqLwogI2RlZmluZSBHRU1fVVNYX0NPTlRST0wJCTB4MEE4MCAvKiBIaWdoIHNwZWVkIFBDUyBjb250cm9sIHJlZ2lzdGVyICovCiAjZGVmaW5lIEdFTV9VU1hfU1RBVFVTCQkweDBBODggLyogSGlnaCBzcGVlZCBQQ1Mgc3RhdHVzIHJlZ2lzdGVyICovCkBAIC0yMjQsNiAmIzQzOzIyNywxMiBAQAogI2RlZmluZSBHRU1fRU5TVF9PTl9USU1FKGh3X3EpCQkoMHgwODIwICYjNDM7ICgoaHdfcSkgJmx0OyZsdDsgMikpCiAjZGVmaW5lIEdFTV9FTlNUX09GRl9USU1FKGh3X3EpCQkoMHgwODQwICYjNDM7ICgoaHdfcSkgJmx0OyZsdDsgMikpCiAKJiM0MzsvKiBCaXRmaWVsZHMgaW4gQ0JTX0NPTlRST0wgKi8KJiM0MzsjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0FfT0ZGU0VUCTAKJiM0MzsjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0FfU0laRQkxCiYjNDM7I2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9CX09GRlNFVAkxCiYjNDM7I2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9CX1NJWkUJMQomIzQzOwogLyogQml0ZmllbGRzIGluIEVOU1RfQ09OVFJPTCAqLwogI2RlZmluZSBHRU1fRU5TVF9ESVNBQkxFX1FVRVVFX09GRlNFVAkxNgogCkBAIC03NjgsNyAmIzQzOzc3Nyw3IEBACiAjZGVmaW5lIE1BQ0JfQ0FQU19NSUlPTlJHTUlJCQkJQklUKDkpCiAjZGVmaW5lIE1BQ0JfQ0FQU19ORUVEX1RTVUNMSwkJCUJJVCgxMCkKICNkZWZpbmUgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEUJCQlCSVQoMTEpCi0jZGVmaW5lIE1BQ0JfQ0FQU19RQlYJCQkJQklUKDEyKQomIzQzOyNkZWZpbmUgTUFDQl9DQVBTX1RDCQkJCUJJVCgxMikKICNkZWZpbmUgTUFDQl9DQVBTX1BDUwkJCQlCSVQoMTMpCiAjZGVmaW5lIE1BQ0JfQ0FQU19ISUdIX1NQRUVECQkJQklUKDE0KQogI2RlZmluZSBNQUNCX0NBUFNfQ0xLX0hXX0NIRwkJCUJJVCgxNSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jCmluZGV4IGE0MjdhNWI5ZDg5NGMuLjAwYzFjNjE5ZGVhOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwpAQCAtOTksNiAmIzQzOzk5LDEwIEBAIHN0cnVjdCBzaWZpdmVfZnU1NDBfbWFjYl9tZ210IHsKIAogI2RlZmluZSBNQUNCX01ESU9fVElNRU9VVAkxMDAwMDAwIC8qIGluIHVzZWNzICovCiAKJiM0MzsvKiBDQlMgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvcnM6IDEwMDAvaW50ZXJmYWNlX3dpZHRoICovCiYjNDM7I2RlZmluZSBNQUNCX0NCU19QT1JUX1JBVEVfMUcJCTEyNQkvKiAxMDAwLzggZm9yIEdNSUkgKDgtYml0KSAqLwomIzQzOyNkZWZpbmUgTUFDQl9DQlNfUE9SVF9SQVRFXzEwXzEwME0JMjUwCS8qIDEwMDAvNCBmb3IgTUlJICg0LWJpdCkgKi8KJiM0MzsKIC8qIERNQSBidWZmZXIgZGVzY3JpcHRvciBtaWdodCBiZSBkaWZmZXJlbnQgc2l6ZQogICogZGVwZW5kcyBvbiBoYXJkd2FyZSBjb25maWd1cmF0aW9uOgogICoKQEAgLTQ0NzYsMTggJiM0Mzs0NDgwLDggQEAgc3RhdGljIHZvaWQgbWFjYl90YXByaW9fZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogc3RhdGljIGludCBtYWNiX3NldHVwX3RhcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJICAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqdGFwcmlvKQogewotCXN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAodW5saWtlbHkoIShuZXRkZXYtJmd0O2h3X2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfVEMpKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JLyogQ2hlY2sgaWYgRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZCAqLwotCWlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZCgmYW1wO2JwLSZndDtwZGV2LSZndDtkZXYpKSkgewotCQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kXG4mIzM0Oyk7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KIAlzd2l0Y2ggKHRhcHJpby0mZ3Q7Y21kKSB7CiAJY2FzZSBUQVBSSU9fQ01EX1JFUExBQ0U6CiAJCWVyciA9IG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2UobmV0ZGV2LCB0YXByaW8pOwpAQCAtNDUwMiwxMyAmIzQzOzQ0OTYsMTk3IEBAIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RhdGljIGludCBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKHN0cnVjdCBtYWNiICpicCwgdTggcXVldWVfbnVtLAomIzQzOwkJCQkgICAgIHUzMiAqZW5hYmxlX2JpdCwgdTMyICppZGxlc2xvcGVfcmVnKQomIzQzO3sKJiM0MzsJLyogUXVldWUgQSBpcyBoaWdoZXN0IHByaW9yaXR5IChudW1fcXVldWVzIC0gMSkgKi8KJiM0MzsJaWYgKHF1ZXVlX251bSA9PSBicC0mZ3Q7bnVtX3F1ZXVlcyAtIDEpIHsKJiM0MzsJCSplbmFibGVfYml0ID0gR0VNX0JJVChDQlNfRU5BQkxFX1FVRVVFX0EpOwomIzQzOwkJKmlkbGVzbG9wZV9yZWcgPSBHRU1fQ0JTX0lETEVTTE9QRV9RX0E7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBRdWV1ZSBCIGlzIHNlY29uZCBoaWdoZXN0IHByaW9yaXR5IChudW1fcXVldWVzIC0gMikgKi8KJiM0MzsJaWYgKHF1ZXVlX251bSA9PSBicC0mZ3Q7bnVtX3F1ZXVlcyAtIDIpIHsKJiM0MzsJCSplbmFibGVfYml0ID0gR0VNX0JJVChDQlNfRU5BQkxFX1FVRVVFX0IpOwomIzQzOwkJKmlkbGVzbG9wZV9yZWcgPSBHRU1fQ0JTX0lETEVTTE9QRV9RX0I7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVJTlZBTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtYWNiX2Nic19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQlzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdCkKJiM0Mzt7CiYjNDM7CXUzMiBlbmFibGVfYml0LCBpZGxlc2xvcGUsIHNwZWVkX2ticHMsIGN0cmwsIGlkbGVzbG9wZV9yZWc7CiYjNDM7CXN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQgPSB7fTsKJiM0MzsJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtcyhicCwgcW9wdC0mZ3Q7cXVldWUsICZhbXA7ZW5hYmxlX2JpdCwgJmFtcDtpZGxlc2xvcGVfcmVnKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7Q0JTOiBRdWV1ZSAlZCBub3QgZWxpZ2libGUgKG9ubHkgdG9wIDIgcXVldWVzIHN1cHBvcnQgQ0JTKVxuJiMzNDssCiYjNDM7CQkJICAgcW9wdC0mZ3Q7cXVldWUpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogaWRsZXNsb3BlIGlzIGNhbGlicmF0ZWQgZm9yIHRoZSBjdXJyZW50IGxpbmsgc3BlZWQ7IENCUyBpcyBub3QKJiM0MzsJICogcmVwcm9ncmFtbWVkIG9uIGxpbmstc3BlZWQgY2hhbmdlcywgc28gaXQgbXVzdCBiZSByZWNvbmZpZ3VyZWQKJiM0MzsJICogaWYgdGhlIGxpbmsgc3BlZWQgY2hhbmdlcy4KJiM0MzsJICovCiYjNDM7CXBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KGJwLSZndDtwaHlsaW5rLCAmYW1wO2tzZXQpOwomIzQzOwomIzQzOwlpZiAoIWtzZXQuYmFzZS5zcGVlZCB8fCBrc2V0LmJhc2Uuc3BlZWQgPT0gU1BFRURfVU5LTk9XTikgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7Q0JTOiBJbnZhbGlkIGxpbmsgc3BlZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNwZWVkX2ticHMgPSBrc2V0LmJhc2Uuc3BlZWQgKiAxMDAwOwomIzQzOwomIzQzOwlpZiAocW9wdC0mZ3Q7aWRsZXNsb3BlICZsdDs9IDAgfHwgKHUzMilxb3B0LSZndDtpZGxlc2xvcGUgJmd0OyBzcGVlZF9rYnBzKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtDQlM6IGludmFsaWQgaWRsZXNsb3BlICVkIChtdXN0IGJlIDEuLiV1IGticHMpXG4mIzM0OywKJiM0MzsJCQkgICBxb3B0LSZndDtpZGxlc2xvcGUsIHNwZWVkX2ticHMpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogcW9wdC0mZ3Q7aWRsZXNsb3BlIGlzIGluIGticHM7IGNvbnZlcnQgdG8gdGhlIHVuaXRzIHRoZSBoYXJkd2FyZQomIzQzOwkgKiByZWdpc3RlciBleHBlY3RzOgomIzQzOwkgKiAtIEhpZ2gtc3BlZWQgR0VNOiBmcmFjdGlvbiBvZiBwb3J0IGJhbmR3aWR0aCwgc2NhbGVkIHRvIHRoZSBmdWxsCiYjNDM7CSAqICAgMzItYml0IHJlZ2lzdGVyIHJhbmdlCiYjNDM7CSAqIC0gU3RhbmRhcmQgTUFDQjogdGhlIHJlZ2lzdGVyIGNvdW50cyBieXRlcy9zZWMgaW4gMUcgKDgtYml0IEdNSUkpCiYjNDM7CSAqICAgbW9kZSBhbmQgbmliYmxlcy9zZWMgaW4gMTAvMTAwICg0LWJpdCBNSUkpIG1vZGUsIHNvIHNjYWxlIGticHMKJiM0MzsJICogICBieSAxMDAwLzggKDEyNSkgb3IgMTAwMC80ICgyNTApIHJlc3BlY3RpdmVseQomIzQzOwkgKi8KJiM0MzsJaWYgKGJwLSZndDtjYXBzICZhbXA7IE1BQ0JfQ0FQU19ISUdIX1NQRUVEKQomIzQzOwkJaWRsZXNsb3BlID0gRElWX1JPVU5EX1VQX1VMTCgodTY0KXFvcHQtJmd0O2lkbGVzbG9wZSAqIFUzMl9NQVgsIHNwZWVkX2ticHMpOwomIzQzOwllbHNlCiYjNDM7CQlpZGxlc2xvcGUgPSAodTMyKXFvcHQtJmd0O2lkbGVzbG9wZSAqIChrc2V0LmJhc2Uuc3BlZWQgJmd0Oz0gMTAwMCA/CiYjNDM7CQkJCQkgICAgICAgTUFDQl9DQlNfUE9SVF9SQVRFXzFHIDogTUFDQl9DQlNfUE9SVF9SQVRFXzEwXzEwME0pOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDticC0mZ3Q7bG9jaykgewomIzQzOwkJLyogRGlzYWJsZSBDQlMgZm9yIHRoZSBxdWV1ZSBiZWZvcmUgdXBkYXRpbmcgaWRsZXNsb3BlICovCiYjNDM7CQljdHJsID0gZ2VtX3JlYWRsKGJwLCBDQlNfQ09OVFJPTCkgJmFtcDsgfmVuYWJsZV9iaXQ7CiYjNDM7CQlnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCk7CiYjNDM7CQkvKiBVcGRhdGUgaWRsZXNsb3BlIGZvciB0aGUgcXVldWUgKi8KJiM0MzsJCWJwLSZndDttYWNiX3JlZ193cml0ZWwoYnAsIGlkbGVzbG9wZV9yZWcsIGlkbGVzbG9wZSk7CiYjNDM7CQkvKiBSZS1lbmFibGUgQ0JTIGZvciB0aGUgcXVldWUgd2l0aCBuZXcgaWRsZXNsb3BlICovCiYjNDM7CQlnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCB8IGVuYWJsZV9iaXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5ldGRldl9kYmcobmV0ZGV2LCAmIzM0O0NCUzogQ29uZmlndXJlZCBxdWV1ZSAlZCB3aXRoIGlkbGVzbG9wZSAweCV4XG4mIzM0OywKJiM0MzsJCSAgIHFvcHQtJmd0O3F1ZXVlLCBpZGxlc2xvcGUpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWFjYl9jYnNfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCBxdWV1ZV9udW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwl1MzIgZW5hYmxlX2JpdCwgaWRsZXNsb3BlX3JlZzsKJiM0MzsKJiM0MzsJaWYgKG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoYnAsIHF1ZXVlX251bSwgJmFtcDtlbmFibGVfYml0LCAmYW1wO2lkbGVzbG9wZV9yZWcpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDticC0mZ3Q7bG9jaykgewomIzQzOwkJZ2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGdlbV9yZWFkbChicCwgQ0JTX0NPTlRST0wpICZhbXA7IH5lbmFibGVfYml0KTsKJiM0MzsJCWJwLSZndDttYWNiX3JlZ193cml0ZWwoYnAsIGlkbGVzbG9wZV9yZWcsIDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5ldGRldl9kYmcobmV0ZGV2LCAmIzM0O0NCUzogRGlzYWJsZWQgcXVldWUgJWRcbiYjMzQ7LCBxdWV1ZV9udW0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1hY2Jfc2V0dXBfY2JzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJICBzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdCkKJiM0Mzt7CiYjNDM7CWlmIChxb3B0LSZndDtlbmFibGUpCiYjNDM7CQlyZXR1cm4gbWFjYl9jYnNfYWRkKG5ldGRldiwgcW9wdCk7CiYjNDM7CiYjNDM7CW1hY2JfY2JzX2Rlc3Ryb3kobmV0ZGV2LCBxb3B0LSZndDtxdWV1ZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1hY2Jfc2V0dXBfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDttcXByaW8tJmd0O3FvcHQ7CiYjNDM7CXU4IG51bV90YyA9IHFvcHQtJmd0O251bV90YzsKJiM0MzsJaW50IGVycjsKJiM0MzsJdTggaTsKJiM0MzsKJiM0MzsJLyogSGFuZGxlIHJlc2V0IGNhc2UgZWFybHkgKi8KJiM0MzsJaWYgKCFudW1fdGMpIHsKJiM0MzsJCW5ldGRldl9yZXNldF90YyhuZXRkZXYpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ29uZmlndXJlIHRyYWZmaWMgY2xhc3NlcyAqLwomIzQzOwlxb3B0LSZndDtodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUzsKJiM0MzsKJiM0MzsJZXJyID0gbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBudW1fdGMpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV90YzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LSZndDtjb3VudFtpXSwKJiM0MzsJCQkJCSAgcW9wdC0mZ3Q7b2Zmc2V0W2ldKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBlcnJfcmVzZXRfdGM7CiYjNDM7CiYjNDM7CQluZXRkZXZfZGJnKG5ldGRldiwgJiMzNDtNUVBSSU86IFRDJWQgLSZndDsgcXVldWUgJXUgKGNvdW50PSV1KVxuJiMzNDssCiYjNDM7CQkJICAgaSwgcW9wdC0mZ3Q7b2Zmc2V0W2ldLCBxb3B0LSZndDtjb3VudFtpXSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3Jlc2V0X3RjOgomIzQzOwluZXRkZXZfcmVzZXRfdGMobmV0ZGV2KTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtYWNiX3RjX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChiYXNlLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOiB7CiYjNDM7CQlzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLSZndDtjYXBzOwomIzQzOwomIzQzOwkJY2Fwcy0mZ3Q7dmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiAJCQkgdm9pZCAqdHlwZV9kYXRhKQogewomIzQzOwlzdHJ1Y3QgbWFjYiAqYnA7CiYjNDM7CiAJaWYgKCFuZXRkZXYgfHwgIXR5cGVfZGF0YSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKHR5cGUgPT0gVENfUVVFUllfQ0FQUykKJiM0MzsJCXJldHVybiBtYWNiX3RjX3F1ZXJ5X2NhcHMobmV0ZGV2LCB0eXBlX2RhdGEpOwomIzQzOwomIzQzOwlicCA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghKG5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9IV19UQykpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkvKiBDaGVjayBpZiBEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kICovCiYjNDM7CWlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZCgmYW1wO2JwLSZndDtwZGV2LSZndDtkZXYpKSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7RGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOgomIzQzOwkJcmV0dXJuIG1hY2Jfc2V0dXBfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9RRElTQ19DQlM6CiYjNDM7CQlyZXR1cm4gbWFjYl9zZXR1cF9jYnMobmV0ZGV2LCB0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfUURJU0NfVEFQUklPOgogCQlyZXR1cm4gbWFjYl9zZXR1cF90YXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpOwogCWRlZmF1bHQ6CkBAIC00ODIzLDggJiM0Mzs1MDAxLDggQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQluZXRkZXYtJmd0O2h3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNOwogCWlmIChicC0mZ3Q7Y2FwcyAmYW1wOyBNQUNCX0NBUFNfU0dfRElTQUJMRUQpCiAJCW5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgJmFtcDs9IH5ORVRJRl9GX1NHOwotCS8qIEVuYWJsZSBIV19UQyBpZiBoYXJkd2FyZSBzdXBwb3J0cyBRQlYgKi8KLQlpZiAoYnAtJmd0O2NhcHMgJmFtcDsgTUFDQl9DQVBTX1FCVikKJiM0MzsJLyogRW5hYmxlIFRDIG9mZmxvYWQgZm9yIFRTTi1jYXBhYmxlIGhhcmR3YXJlICovCiYjNDM7CWlmIChicC0mZ3Q7Y2FwcyAmYW1wOyBNQUNCX0NBUFNfVEMpCiAJCW5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQzsKIAogCW5ldGRldi0mZ3Q7ZmVhdHVyZXMgPSBuZXRkZXYtJmd0O2h3X2ZlYXR1cmVzOwpAQCAtNTY5Myw3ICYjNDM7NTg3MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgdmVyc2FsX2NvbmZpZyA9IHsKIAkuY2FwcyA9IE1BQ0JfQ0FQU19HSUdBQklUX01PREVfQVZBSUxBQkxFIHwgTUFDQl9DQVBTX0pVTUJPIHwKIAkJTUFDQl9DQVBTX0dFTV9IQVNfUFRQIHwgTUFDQl9DQVBTX0JEX1JEX1BSRUZFVENIIHwKIAkJTUFDQl9DQVBTX05FRURfVFNVQ0xLIHwgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEUgfAotCQlNQUNCX0NBUFNfUUJWIHwKJiM0MzsJCU1BQ0JfQ0FQU19UQyB8CiAJCU1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLAogCS5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsCiAJLmluaXQgPSBpbml0X3Jlc2V0X29wdGlvbmFsLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Njk4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGFwcGx5aW5nIG15IGV4cGVydCBrbm93bGVkZ2UgYW5kIHRoZSBlc3RhYmxpc2hlZCBndWlkZWxpbmVzLCBvZiBjb3Vyc2UuCgpGaXJzdCwgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzY29wZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhgIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AgZmlsZXMuIFRoYXQgcG9pbnRzIHNxdWFyZWx5IGF0IHRoZSBDYWRlbmNlIE1BQ0IgLyBHRU0gRXRoZXJuZXQgZHJpdmVyLCBgTUFDQmAuIEFscmlnaHQsIHRoZSBgTUFDQmAgZHJpdmVyIGl0IGlzLgoKTm93LCBhIGNyaXRpY2FsIHF1ZXN0aW9uOiB3aGF0IGhhcmR3YXJlIG9yIHBsYXRmb3JtcyB1c2UgdGhpcyBkcml2ZXI/IEFuZCwgY3J1Y2lhbGx5LCBjYW4gSSBlYXNpbHkgcmVhY2ggaXQgd2l0aGluIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIG9uIGFtZDY0PyBUaGlzIGFjY2VzcyBpcyBrZXkgdG8gZWZmZWN0aXZlIGZ1enppbmcuIEhtbSwgSSByZWNhbGwgaXQgYmVpbmcgYSBwbGF0Zm9ybSBkcml2ZXIsIGJ1dCBJICp0aGluayogdGhlcmUgbWlnaHQgYmUgYSBQQ0kgY29tcG9uZW50IHRvby4gVG8gYmUgc3VyZSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSYjMzk7cyBhIGBtYWNiX3BjaS5jYCBvciBzaW1pbGFyIGZpbGUgaW52b2x2ZWQuIEEgcXVpY2sgYGdyZXBgIHdpbGwgYmUganVzdCB0aGUgdGhpbmcgdG8gY2xhcmlmeSB0aGF0LCBhbmQgZ2l2ZSBtZSB0aGUgZnVsbCBzY29wZSBvZiB3aGF0JiMzOTtzIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY2JfcGNpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9NDU9Y29uZmlnIE1BQ0JfUENJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTUxLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6NTI6XHQgIHdpbGwgYmUgY2FsbGVkIG1hY2JfcGNpLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTUzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX01BQ0IpICYjNDM7PSBtYWNiLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX01BQ0JfUENJKSAmIzQzOz0gbWFjYl9wY2kub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoxOTojZGVmaW5lIFBDSV9EUklWRVJfTkFNRSBcJiMzNDttYWNiX3BjaVwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTIwLSNkZWZpbmUgUExBVF9EUklWRVJfTkFNRSBcJiMzNDttYWNiXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jPTEyMD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkX3RhYmxlW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoxMjU6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG1hY2JfcGNpX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMjYtXHQubmFtZSAgICAgPSBQQ0lfRFJJVkVSX05BTUUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEzMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoxMzI6bW9kdWxlX3BjaV9kcml2ZXIobWFjYl9wY2lfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMzMtTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRldl9pZF90YWJsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY3MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbnZlc3RpZ2F0aW9uIGludG8gQ2FkZW5jZSBHRU0gRW11bGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIENhZGVuY2UgTUFDQi9HRU0gaXMgYmVpbmcgZW11bGF0ZWQgd2l0aGluIFFFTVUgb3IgaWYgdGhpcyBpcyBzb21ldGhpbmcgYmVpbmcgaGFuZGxlZCBkaXJlY3RseSBieSBwbGF0Zm9ybSBvciBQQ0kgaGFyZHdhcmUuIFRoZSBjcml0aWNhbCBmaXJzdCBxdWVzdGlvbiBpczogaXMgdGhlIENhZGVuY2UgR0VNIGFjdHVhbGx5ICplbXVsYXRlZCogaW4gUUVNVT8gWWVzLCBJIHNlZSB0aGF0IFFFTVUgZG9lcywgaW4gZmFjdCwgaGF2ZSBhIGBjYWRlbmNlX2dlbWAgbW9kZWwuIEdvb2QuIE5vdywgdGhpbmdzIGdldCBhIGxpdHRsZSB0cmlja3kuIEkga25vdyBRRU1VIHVzZXMgdGhlIENhZGVuY2UgR0VNLCBidXQgaXMgaXQganVzdCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgWGlsaW54IFp5bnEsIFp5bnFNUCwgb3IgVmVyc2FsIHBsYXRmb3JtcyDigJMgdGhlIEFSTSwgQUFyY2g2NCwgb3IgTWljcm9CbGF6ZSBhcmNoaXRlY3R1cmVzPyBPciwgY291bGQgaXQgYmUgcmVhY2hhYmxlIGZyb20gYW4gYW1kNjQgdGFyZ2V0LCB3aGljaCBpcyB0aGUgYXJjaGl0ZWN0dXJlIEkmIzM5O20gZm9jdXNlZCBvbiBoZXJlPyBIb2xkIG9uLCB0aGUgdGFyZ2V0IGlzIGFtZDY0LiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IG1lbnRpb25zIG9mIGBNQUNCYCBhbmQgYE1BQ0JfUENJYCwgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJiMzOTtzIGEgY29ubmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTIwPWlmIE5FVF9WRU5ET1JfQ0FERU5DRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjIyOmNvbmZpZyBNQUNCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6Mzc6Y29uZmlnIE1BQ0JfVVNFX0hXU1RBTVBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zOC1cdGJvb2wgXCYjMzQ7VXNlIElFRUUgMTU4OCBod3N0YW1wXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQ1OmNvbmZpZyBNQUNCX1BDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ2LVx0dHJpc3RhdGUgXCYjMzQ7Q2FkZW5jZSBQQ0kgTUFDQi9HRU0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnYCBmaWxlOgoKKipBbmFseXppbmcgdGhlIENhZGVuY2UgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGUgZm9yIHRoZSBDYWRlbmNlIEV0aGVybmV0IGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1c2VyIGNvbmZpZ3VyZXMgdGhpcyBkcml2ZXIgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBGaXJzdCwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIG1haW4gc3ltYm9sIHRoYXQgY29udHJvbHMgdGhlIGVudGlyZSBkcml2ZXImIzM5O3MgaW5jbHVzaW9uLiBJdCYjMzk7cyBsaWtlbHkgYXQgdGhlIHRvcCwgYSBicm9hZCBgY29uZmlnYCBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4gV2hhdCBvdGhlciBoYXJkd2FyZSBmZWF0dXJlcyBvciBrZXJuZWwgc3Vic3lzdGVtcyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgZHJpdmVyIHRvIGV2ZW4gKmJlKiBjb25zaWRlcmVkPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIFNvQyBmYW1pbGllcyB0aGF0IHRoaXMgaXMgdGFyZ2V0aW5nPwoKTmV4dCwgSSYjMzk7bGwgYmUgc2NydXRpbml6aW5nIHRoZSB2YXJpb3VzIHN1Yi1vcHRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNldHRpbmdzIHJlbGF0ZWQgdG8gZGlmZmVyZW50IENhZGVuY2UgRXRoZXJuZXQgY29udHJvbGxlciByZXZpc2lvbnMsIHBvdGVudGlhbCBQSFkgaW50ZXJmYWNlIHNlbGVjdGlvbnMgKE1JSSwgR01JSSwgUkdNSUksIFNHTUlJLCBldGMuKSwgYW5kIG1heWJlIGV2ZW4gc3BlY2lmaWMgZmVhdHVyZXMgbGlrZSBWTEFOIHN1cHBvcnQsIGNoZWNrc3VtIG9mZmxvYWQsIG9yIGZsb3cgY29udHJvbC4gVGhlIGRlc2NyaXB0aW9ucyBmb3IgZWFjaCBvcHRpb24gYXJlIGtleTsgdGhleSYjMzk7bGwgY2x1ZSBtZSBpbiBvbiB3aGF0IGVhY2ggc2V0dGluZyBhY3R1YWxseSAqZG9lcyogYW5kIHVuZGVyIHdoaWNoIGNpcmN1bXN0YW5jZXMgSSBtaWdodCBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlIGl0LgoKSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYGRlcGVuZHMgb25gIGNsYXVzZXMuIFRoZXNlIGFyZSBjcnVjaWFsOyB0aGV5IGRpY3RhdGUgdGhlIGludGVyZGVwZW5kZW5jaWVzLiBGb3IgZXhhbXBsZSwgYSBwYXJ0aWN1bGFyIFBIWSBpbnRlcmZhY2Ugb3B0aW9uIHdpbGwgbGlrZWx5IGBkZXBlbmRzIG9uYCB0aGUgdW5kZXJseWluZyBQSFkgc3VwcG9ydC4gU2ltaWxhcmx5LCBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcywgbGlrZSBjaGVja3N1bSBvZmZsb2FkLCBtaWdodCBkZXBlbmQgb24gbW9yZSBnZW5lcmFsIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBvZiB0aGUgY29udHJvbGxlci4gQW55IGBzZWxlY3RgIHN0YXRlbWVudHMgd2lsbCBiZSBpbXBvcnRhbnQsIHRvby4gVGhleSBpbmRpY2F0ZSB3aGljaCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBhcmUgYXV0b21hdGljYWxseSBlbmFibGVkIHdoZW4gYSBzcGVjaWZpYyBDYWRlbmNlIEV0aGVybmV0IGZlYXR1cmUgaXMgc2VsZWN0ZWQuCgpBbmQgd2hhdCBhYm91dCBkZWZhdWx0IHZhbHVlcz8gQXJlIHRoZXJlIHJlYXNvbmFibGUgZGVmYXVsdHMgcHJvdmlkZWQ/IEFyZSB0aGV5IGFwcHJvcHJpYXRlIGZvciB0aGUgY29tbW9uIHVzZSBjYXNlcz8gSSYjMzk7bGwgYXNzZXNzIGlmIHRoZSBkZWZhdWx0cyBhcmUgcmVhc29uYWJsZSwgb3IgaWYgdGhleSBuZWVkIG1vZGlmaWNhdGlvbiBmb3IgdHlwaWNhbCBkZXBsb3ltZW50cyBvbiBjb21tb24gU29Dcy4KCkZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIHdhcm5pbmdzLiBJcyB0aGUgYEtjb25maWdgIGZpbGUgd2VsbC1zdHJ1Y3R1cmVkIHdpdGggY2xlYXIgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIG9wdGlvbnM/IENhbiB0aGUgYnVpbGQgc3lzdGVtIGNhdGNoIGNvbW1vbiBjb25maWd1cmF0aW9uIGVycm9ycyBlYXNpbHk/IEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIGRlc2lnbmVkIGluIGEgd2F5IHRoYXQgZ3VpZGVzIHRoZSB1c2VyIHRvd2FyZCBhIHNhbmUsIGZ1bmN0aW9uYWwgY29uZmlndXJhdGlvbiwgYW5kIG1pbmltaXplcyB0aGUgcG9zc2liaWxpdHkgb2Ygc2hvb3RpbmcgdGhlbXNlbHZlcyBpbiB0aGUgZm9vdCEgVGhpcyBpbmZvcm1hdGlvbiBpcyB2aXRhbCBmb3IgdGhlIGFyY2hpdGVjdHVyZSBJIGFtIHdvcmtpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBDYWRlbmNlIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBORVRfVkVORE9SX0NBREVOQ0VcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7Q2FkZW5jZSBkZXZpY2VzXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIEhBU19JT01FTVxuICAgOTpcdFx0ZGVmYXVsdCB5XG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuICAxMjpcdFxuICAxMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAxNDpcdFxuICAxNTpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgMTY6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcbiAgMTc6XHRcdCAgcmVtYWluaW5nIENhZGVuY2UgbmV0d29yayBjYXJkIHF1ZXN0aW9ucy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZVxuICAxODpcdFx0ICBhc2tlZCBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxOTpcdFxuICAyMDpcdGlmIE5FVF9WRU5ET1JfQ0FERU5DRVxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBNQUNCXG4gIDIzOlx0XHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gSEFTX0RNQSBcdTAwMjZcdTAwMjYgQ09NTU9OX0NMS1xuICAyNTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAyNjpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMjc6XHRcdHNlbGVjdCBDUkMzMlxuICAyODpcdFx0aGVscFxuICAyOTpcdFx0ICBUaGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGludGVyZmFjZSBpcyBmb3VuZCBvbiBtYW55IEF0bWVsIEFUMzIgYW5kXG4gIDMwOlx0XHQgIEFUOTEgcGFydHMuICBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBDYWRlbmNlIEdFTSAoR2lnYWJpdFxuICAzMTpcdFx0ICBFdGhlcm5ldCBNQUMgZm91bmQgaW4gc29tZSBBUk0gU29DIGRldmljZXMpLiAgU2F5IFkgdG8gaW5jbHVkZVxuICAzMjpcdFx0ICBzdXBwb3J0IGZvciB0aGUgTUFDQi9HRU0gY2hpcC5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICAzNTpcdFx0ICB3aWxsIGJlIG1hY2IuXG4gIDM2Olx0XG4gIDM3Olx0Y29uZmlnIE1BQ0JfVVNFX0hXU1RBTVBcbiAgMzg6XHRcdGJvb2wgXCYjMzQ7VXNlIElFRUUgMTU4OCBod3N0YW1wXCYjMzQ7XG4gIDM5Olx0XHRkZXBlbmRzIG9uIE1BQ0JcbiAgNDA6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcbiAgNDE6XHRcdGRlZmF1bHQgeVxuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXG4gIDQ0Olx0XG4gIDQ1Olx0Y29uZmlnIE1BQ0JfUENJXG4gIDQ2Olx0XHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIFBDSSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4gIDQ3Olx0XHRkZXBlbmRzIG9uIE1BQ0IgXHUwMDI2XHUwMDI2IFBDSVxuICA0ODpcdFx0aGVscFxuICA0OTpcdFx0ICBUaGlzIGlzIFBDSSB3cmFwcGVyIGZvciBNQUNCIGRyaXZlci5cbiAgNTA6XHRcbiAgNTE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA1MjpcdFx0ICB3aWxsIGJlIGNhbGxlZCBtYWNiX3BjaS5cbiAgNTM6XHRcbiAgNTQ6XHRlbmRpZiAjIE5FVF9WRU5ET1JfQ0FERU5DRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG1hY2JfcGNpLmNgIGZvciBQQ0kgRGV2aWNlIFN1cHBvcnQgYW5kIEluc3RhbnRpYXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgbWFjYl9wY2kuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBQQ0kgZGV2aWNlIElEcyB0aGlzIGRyaXZlciBpcyBkZXNpZ25lZCB0byBoYW5kbGUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZHJpdmVyIGFjdHVhbGx5ICppbnN0YW50aWF0ZXMqIHRoZXNlIGRldmljZXMuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igc29tZXRoaW5nIGxpa2UgYSB0YWJsZSBvciBhcnJheSB0aGF0IG1hcHMgc3BlY2lmaWMgUENJIHZlbmRvciBhbmQgZGV2aWNlIElEcyB0byB0aGUgZHJpdmVyJiMzOTtzIGluc3RhbnRpYXRpb24gcHJvY2Vzcy4gQXJlIHRoZXkgdXNpbmcgdGhlIHN0YW5kYXJkIFBDSSBwcm9iaW5nIG1lY2hhbmlzbXMsIG9yIHNvbWV0aGluZyBjdXN0b20/IElzIHRoZXJlIGFueXRoaW5nIGNsZXZlciBvciB1bnVzdWFsIGluIHRoZWlyIGFwcHJvYWNoIHRoYXQgSSBtaWdodCBsZWFybiBmcm9tPyBUaGlzIHdpbGwgbGlrZWx5IGludm9sdmUgY2hlY2tpbmcgdGhlIGBwY2lfZGV2aWNlX2lkYCBzdHJ1Y3R1cmVzIGFuZCByZWxhdGVkIHNldHVwIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyBob3cgdGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIFBDSSBidXMgaXMga2V5IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIERPQzogQ2FkZW5jZSBHRU0gUENJIHdyYXBwZXIuXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2FkZW5jZSBEZXNpZ24gU3lzdGVtcyAtIGh0dHBzOi8vd3d3LmNhZGVuY2UuY29tXG4gICA2Olx0ICpcbiAgIDc6XHQgKiBBdXRob3JzOiBSYWZhbCBPemllYmxvIFx1MDAzY3JhZmFsb0BjYWRlbmNlLmNvbVx1MDAzZVxuICAgODpcdCAqXHQgICAgQmFydG9zeiBGb2x0YSBcdTAwM2NiZm9sdGFAY2FkZW5jZS5jb21cdTAwM2VcbiAgIDk6XHQgKi9cbiAgMTA6XHRcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay1wcm92aWRlci5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFwmIzM0O21hY2IuaFwmIzM0O1xuICAxODpcdFxuICAxOTpcdCNkZWZpbmUgUENJX0RSSVZFUl9OQU1FIFwmIzM0O21hY2JfcGNpXCYjMzQ7XG4gIDIwOlx0I2RlZmluZSBQTEFUX0RSSVZFUl9OQU1FIFwmIzM0O21hY2JcJiMzNDtcbiAgMjE6XHRcbiAgMjI6XHQjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0ROU19NQUNCIDB4ZTAwN1xuICAyMzpcdFxuICAyNDpcdCNkZWZpbmUgR0VNX1BDTEtfUkFURSA1MDAwMDAwMFxuICAyNTpcdCNkZWZpbmUgR0VNX0hDTEtfUkFURSA1MDAwMDAwMFxuICAyNjpcdFxuICAyNzpcdHN0YXRpYyBpbnQgbWFjYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gIDI4Olx0e1xuICAyOTpcdFx0aW50IGVycjtcbiAgMzA6XHRcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XG4gIDMxOlx0XHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gcGxhdF9pbmZvO1xuICAzMjpcdFx0c3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBwbGF0X2RhdGE7XG4gIDMzOlx0XHRzdHJ1Y3QgcmVzb3VyY2UgcmVzWzJdO1xuICAzNDpcdFxuICAzNTpcdFx0LyogZW5hYmxlIHBjaSBkZXZpY2UgKi9cbiAgMzY6XHRcdGVyciA9IHBjaW1fZW5hYmxlX2RldmljZShwY2kpO1xuICAzNzpcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuICAzODpcdFx0XHRkZXZfZXJyKFx1MDAyNnBjaS1cdTAwM2VkZXYsIFwmIzM0O0VuYWJsaW5nIFBDSSBkZXZpY2UgaGFzIGZhaWxlZDogJWRcJiMzNDssIGVycik7XG4gIDM5Olx0XHRcdHJldHVybiBlcnI7XG4gIDQwOlx0XHR9XG4gIDQxOlx0XG4gIDQyOlx0XHRwY2lfc2V0X21hc3RlcihwY2kpO1xuICA0MzpcdFxuICA0NDpcdFx0Lyogc2V0IHVwIHJlc291cmNlcyAqL1xuICA0NTpcdFx0bWVtc2V0KHJlcywgMHgwMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBBUlJBWV9TSVpFKHJlcykpO1xuICA0NjpcdFx0cmVzWzBdLnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7XG4gIDQ3Olx0XHRyZXNbMF0uZW5kID0gcGNpX3Jlc291cmNlX2VuZChwY2ksIDApO1xuICA0ODpcdFx0cmVzWzBdLm5hbWUgPSBQQ0lfRFJJVkVSX05BTUU7XG4gIDQ5Olx0XHRyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTtcbiAgNTA6XHRcdHJlc1sxXS5zdGFydCA9IHBjaV9pcnFfdmVjdG9yKHBjaSwgMCk7XG4gIDUxOlx0XHRyZXNbMV0ubmFtZSA9IFBDSV9EUklWRVJfTkFNRTtcbiAgNTI6XHRcdHJlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRO1xuICA1MzpcdFxuICA1NDpcdFx0ZGV2X2luZm8oXHUwMDI2cGNpLVx1MDAzZWRldiwgXCYjMzQ7RU1BQyBwaHlzaWNhbCBiYXNlIGFkZHI6ICVwYVxcblwmIzM0OyxcbiAgNTU6XHRcdFx0IFx1MDAyNnJlc1swXS5zdGFydCk7XG4gIDU2Olx0XG4gIDU3Olx0XHQvKiBzZXQgdXAgbWFjYiBwbGF0Zm9ybSBkYXRhICovXG4gIDU4Olx0XHRtZW1zZXQoXHUwMDI2cGxhdF9kYXRhLCAwLCBzaXplb2YocGxhdF9kYXRhKSk7XG4gIDU5Olx0XG4gIDYwOlx0XHQvKiBpbml0aWFsaXplIGNsb2NrcyAqL1xuICA2MTpcdFx0cGxhdF9kYXRhLnBjbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShcdTAwMjZwY2ktXHUwMDNlZGV2LCBcJiMzNDtwY2xrXCYjMzQ7LCBOVUxMLCAwLFxuICA2MjpcdFx0XHRcdFx0XHRcdCBHRU1fUENMS19SQVRFKTtcbiAgNjM6XHRcdGlmIChJU19FUlIocGxhdF9kYXRhLnBjbGspKSB7XG4gIDY0Olx0XHRcdGVyciA9IFBUUl9FUlIocGxhdF9kYXRhLnBjbGspO1xuICA2NTpcdFx0XHRnb3RvIGVycl9wY2xrX3JlZ2lzdGVyO1xuICA2NjpcdFx0fVxuICA2NzpcdFxuICA2ODpcdFx0cGxhdF9kYXRhLmhjbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShcdTAwMjZwY2ktXHUwMDNlZGV2LCBcJiMzNDtoY2xrXCYjMzQ7LCBOVUxMLCAwLFxuICA2OTpcdFx0XHRcdFx0XHRcdCBHRU1fSENMS19SQVRFKTtcbiAgNzA6XHRcdGlmIChJU19FUlIocGxhdF9kYXRhLmhjbGspKSB7XG4gIDcxOlx0XHRcdGVyciA9IFBUUl9FUlIocGxhdF9kYXRhLmhjbGspO1xuICA3MjpcdFx0XHRnb3RvIGVycl9oY2xrX3JlZ2lzdGVyO1xuICA3MzpcdFx0fVxuICA3NDpcdFxuICA3NTpcdFx0Lyogc2V0IHVwIHBsYXRmb3JtIGRldmljZSBpbmZvICovXG4gIDc2Olx0XHRtZW1zZXQoXHUwMDI2cGxhdF9pbmZvLCAwLCBzaXplb2YocGxhdF9pbmZvKSk7XG4gIDc3Olx0XHRwbGF0X2luZm8ucGFyZW50ID0gXHUwMDI2cGNpLVx1MDAzZWRldjtcbiAgNzg6XHRcdHBsYXRfaW5mby5md25vZGUgPSBwY2ktXHUwMDNlZGV2LmZ3bm9kZTtcbiAgNzk6XHRcdHBsYXRfaW5mby5uYW1lID0gUExBVF9EUklWRVJfTkFNRTtcbiAgODA6XHRcdHBsYXRfaW5mby5pZCA9IHBjaS1cdTAwM2VkZXZmbjtcbiAgODE6XHRcdHBsYXRfaW5mby5yZXMgPSByZXM7XG4gIDgyOlx0XHRwbGF0X2luZm8ubnVtX3JlcyA9IEFSUkFZX1NJWkUocmVzKTtcbiAgODM6XHRcdHBsYXRfaW5mby5kYXRhID0gXHUwMDI2cGxhdF9kYXRhO1xuICA4NDpcdFx0cGxhdF9pbmZvLnNpemVfZGF0YSA9IHNpemVvZihwbGF0X2RhdGEpO1xuICA4NTpcdFx0cGxhdF9pbmZvLmRtYV9tYXNrID0gcGNpLVx1MDAzZWRtYV9tYXNrO1xuICA4NjpcdFxuICA4NzpcdFx0LyogcmVnaXN0ZXIgcGxhdGZvcm0gZGV2aWNlICovXG4gIDg4Olx0XHRwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoXHUwMDI2cGxhdF9pbmZvKTtcbiAgODk6XHRcdGlmIChJU19FUlIocGRldikpIHtcbiAgOTA6XHRcdFx0ZXJyID0gUFRSX0VSUihwZGV2KTtcbiAgOTE6XHRcdFx0Z290byBlcnJfcGxhdF9kZXZfcmVnaXN0ZXI7XG4gIDkyOlx0XHR9XG4gIDkzOlx0XG4gIDk0Olx0XHRwY2lfc2V0X2RydmRhdGEocGNpLCBwZGV2KTtcbiAgOTU6XHRcbiAgOTY6XHRcdHJldHVybiAwO1xuICA5NzpcdFxuICA5ODpcdGVycl9wbGF0X2Rldl9yZWdpc3RlcjpcbiAgOTk6XHRcdGNsa191bnJlZ2lzdGVyX2ZpeGVkX3JhdGUocGxhdF9kYXRhLmhjbGspO1xuIDEwMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM2NwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIG1hY2JfcGNpLmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGlzIGBtYWNiX3BjaS5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgTUFDQiBkcml2ZXIgY29udGV4dCwgc3BlY2lmaWNhbGx5IHRoZSBQQ0kgaW1wbGVtZW50YXRpb24uIEkga25vdyB0aGUgTUFDQiBpcyBhIGNvbW1vbiBFdGhlcm5ldCBjb250cm9sbGVyLCBidXQgSSB3YW50IHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGZpbGUgaGFuZGxlcyB0aGUgUENJLXNwZWNpZmljIGFzcGVjdHMgb2YgaXRzIGluaXRpYWxpemF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgaW50ZXJydXB0IG1hbmFnZW1lbnQuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgUENJIGRldmljZSBJRCBtYXRjaGluZywgcHJvYmluZyBmdW5jdGlvbnMsIGFuZCBwZXJoYXBzIGhvdyBpdCBzZXRzIHVwIERNQSBjaGFubmVscyBvciBtZW1vcnktbWFwcGVkIEkvTy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByZWdpc3RlciBhY2Nlc3MgbWV0aG9kcyBhbmQgaG93IHRoZXkgbWFwIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZS4gR290dGEgbG9vayBmb3IgYW55IHBvdGVudGlhbCBxdWlya3Mgb3Igd29ya2Fyb3VuZHMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIFBDSSBidXMgaW4gdGhpcyBkcml2ZXIuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgcG93ZXIgbWFuYWdlbWVudCBpZiB0aGF0JiMzOTtzIHJlbGV2YW50LiBVbHRpbWF0ZWx5LCBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIHRoYXQgYWxsb3dzIHRoZSBNQUNCIHRvIGludGVyZmFjZSB3aXRoIHRoZSBQQ0kgYnVzIGVmZmljaWVudGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAxOlx0ZXJyX2hjbGtfcmVnaXN0ZXI6XG4gMTAyOlx0XHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKHBsYXRfZGF0YS5wY2xrKTtcbiAxMDM6XHRcbiAxMDQ6XHRlcnJfcGNsa19yZWdpc3RlcjpcbiAxMDU6XHRcdHJldHVybiBlcnI7XG4gMTA2Olx0fVxuIDEwNzpcdFxuIDEwODpcdHN0YXRpYyB2b2lkIG1hY2JfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2kpXG4gMTA5Olx0e1xuIDExMDpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpO1xuIDExMTpcdFx0c3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSAqcGxhdF9kYXRhID0gZGV2X2dldF9wbGF0ZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gMTEyOlx0XHRzdHJ1Y3QgY2xrICpwY2xrID0gcGxhdF9kYXRhLVx1MDAzZXBjbGs7XG4gMTEzOlx0XHRzdHJ1Y3QgY2xrICpoY2xrID0gcGxhdF9kYXRhLVx1MDAzZWhjbGs7XG4gMTE0Olx0XG4gMTE1Olx0XHRwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTtcbiAxMTY6XHRcdGNsa191bnJlZ2lzdGVyX2ZpeGVkX3JhdGUocGNsayk7XG4gMTE3Olx0XHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKGhjbGspO1xuIDExODpcdH1cbiAxMTk6XHRcbiAxMjA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkX3RhYmxlW10gPSB7XG4gMTIxOlx0XHR7IFBDSV9WREVWSUNFKENETlMsIFBDSV9ERVZJQ0VfSURfQ0ROU19NQUNCKSB9LFxuIDEyMjpcdFx0eyAwLCB9XG4gMTIzOlx0fTtcbiAxMjQ6XHRcbiAxMjU6XHRzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFjYl9wY2lfZHJpdmVyID0ge1xuIDEyNjpcdFx0Lm5hbWUgICAgID0gUENJX0RSSVZFUl9OQU1FLFxuIDEyNzpcdFx0LmlkX3RhYmxlID0gZGV2X2lkX3RhYmxlLFxuIDEyODpcdFx0LnByb2JlICAgID0gbWFjYl9wcm9iZSxcbiAxMjk6XHRcdC5yZW1vdmVcdCAgPSBtYWNiX3JlbW92ZSxcbiAxMzA6XHR9O1xuIDEzMTpcdFxuIDEzMjpcdG1vZHVsZV9wY2lfZHJpdmVyKG1hY2JfcGNpX2RyaXZlcik7XG4gMTMzOlx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRldl9pZF90YWJsZSk7XG4gMTM0Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiAxMzU6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7Q2FkZW5jZSBOSUMgUENJIHdyYXBwZXJcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ2FkZW5jZSBNQUNCIERyaXZlciBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBDYWRlbmNlIE1BQ0IgZHJpdmVyLiBJdCBzdXBwb3J0cyBhIGZldyBkaWZmZXJlbnQgcGxhdGZvcm1zOiBBdG1lbC9NaWNyb2NoaXAsIFNpRml2ZSBSSVNDLVYsIGFuZCBYaWxpbnguIEFuZCB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIFBDSSB3cmFwcGVyIGZvciBhIHRlc3QvRlBHQSBjYXJkLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciwgb3IgaXMgaXQgZW11bGF0ZWQ/IEkgbmVlZCB0byBrbm93IGlmIEkmIzM5O20gZGVhbGluZyB3aXRoIGEgcmVhbCBTb0MvQVNJQyBkcml2ZXIgb3Igc29tZXRoaW5nIGVtdWxhdGVkIGluLCBzYXksIFFFTVUuCgpBaGEhIFFFTVUgKmRvZXMqIGhhdmUgYGNhZGVuY2VfZ2VtYCBlbXVsYXRpb24sIGluIGBody9uZXQvY2FkZW5jZV9nZW0uY2AsIGJ1dCBvbmx5IGFzIHBhcnQgb2YgQVJNIGFuZCBSSVNDLVYgbWFjaGluZSBjb25maWd1cmF0aW9ucy4gSXQmIzM5O3Mgbm90IHN0YW5kYXJkIG9uIHg4Ni9hbWQ2NCAoUEMvUTM1KSwgb3Igc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGF0IGNoYW5nZXMgdGhpbmdzLgoKSSBuZWVkIHRvIGFwcGx5IHRoZSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IG5lZ2F0aXZlIGNyaXRlcmlhLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNoYW5nZXMgSSYjMzk7bSBsb29raW5nIGF0IGRvbiYjMzk7dCBmYWxsIGludG8gdGhlIGNhdGVnb3JpZXMgd2hlcmUgSSAqc2hvdWxkbiYjMzk7dCogZnV6ei4gTGV0JiMzOTtzIHNlZSB3aGF0IHRob3NlIGNhdGVnb3JpZXMgYXJlOiBub24ta2VybmVsL25vbi1leGVjdXRhYmxlIGNoYW5nZXMsIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhbmQgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLgoKVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBDYW4gSSBldmVuIHJlYWNoIGBNQUNCYCBvbiBgYW1kNjRgPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uIElmIGl0JiMzOTtzIG5vdCByZWFjaGFibGUgdGhlbiBpdCBpcyBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIEdpdmVuIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCBzZWVtIHRvIGVtdWxhdGUgaXQgb24gYW1kNjQsIHRoYXQgaXMgbm93IGhpZ2hseSBsaWtlbHkuCgpMZXQgbWUgdGhpbmssIEkgbmVlZCB0byBjaGVjayBob3cgYG1hY2JfbWFpbi5jYCBwcm9iZXMsIGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBpcyBhIHBhdGggdGhyb3VnaCB0byBgTUFDQmAgb24gYGFtZDY0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFjYl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz00NzI4PXN0YXRpYyB2b2lkIG1hY2JfY29uZmlndXJlX2NhcHMoc3RydWN0IG1hY2IgKmJwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDc3MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NDc3MjpzdGF0aWMgaW50IG1hY2JfcHJvYmVfcXVldWVzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICptZW0sIGJvb2wgbmF0aXZlX2lvKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00NzczLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU5NDA9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyBkZWZhdWx0X2dlbV9jb25maWcgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01OTQ4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1OTQ5OnN0YXRpYyBpbnQgbWFjYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01OTUwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU5ODQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU5ODU6XHRudW1fcXVldWVzID0gbWFjYl9wcm9iZV9xdWV1ZXMoXHUwMDI2cGRldi1cdTAwM2VkZXYsIG1lbSwgbmF0aXZlX2lvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTk4Ni1cdGlmIChudW1fcXVldWVzIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz02NDQ2PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1hY2JfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo2NDQ3Olx0LnByb2JlXHRcdD0gbWFjYl9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjQ0OC1cdC5yZW1vdmVcdFx0PSBtYWNiX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6Mjc6c3RhdGljIGludCBtYWNiX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0yOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jPTEyNT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFjYl9wY2lfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMjctXHQuaWRfdGFibGUgPSBkZXZfaWRfdGFibGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6MTI4Olx0LnByb2JlICAgID0gbWFjYl9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMjktXHQucmVtb3ZlXHQgID0gbWFjYl9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUFDQiBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHRyYWNlIGhvdyB0aGlzIGBtYWNiX21haW4uY2AgZmlsZSBnZXRzIGluaXRpYWxpemVkLiBJdCYjMzk7cyB1c2luZyBgbWFjYl9kcml2ZXJgLCB3aGljaCBpcyBhIGBwbGF0Zm9ybV9kcml2ZXJgLCBhbmQgdGhlIG5hbWUgaXMgJiMzNDttYWNiJiMzNDsg4oCTIHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIuIEkgc2VlIGBtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1hY2JfZHJpdmVyKWAgaW4gdGhlIHNvdXJjZS4gQW5kIHRoZXJlJiMzOTtzIGFsc28gYG1hY2JfcGNpX2RyaXZlcmAsIHdoaWNoIHByb2JlcyBmb3IgYSBQQ0kgZGV2aWNlIHdpdGggVmVuZG9yIElEIGBQQ0lfVkVORE9SX0lEX0NETlNgICgweDE3Y2QpIGFuZCBEZXZpY2UgSUQgYDB4ZTAwN2AuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGNhbiBTeXprYWxsZXIgb3IgdXNlciBzcGFjZSAqYWN0dWFsbHkqIGluc3RhbnRpYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGluIHRoaXMgY2FzZSwgb3IgYXJlIHdlIGRlYWxpbmcgd2l0aCBwaHlzaWNhbCBvciBTb0MgaGFyZHdhcmU/IFBsYXRmb3JtIGRldmljZXMgZm9yIFNvQyBldGhlcm5ldCBkcml2ZXJzIGxpa2UgTUFDQiBhcmUgdXN1YWxseSBkZWZpbmVkIGluIHRoZSBEZXZpY2UgVHJlZSAoT0YpLCBBQ1BJLCBvciBpbml0aWFsaXplZCBkdXJpbmcgU29DIGJvYXJkIHNldHVwLiBPbiBhbWQ2NCwgdGhlcmUmIzM5O3Mgbm8gZGVmYXVsdCBEZXZpY2UgVHJlZSBub2RlIGZvciB0aGUgQ2FkZW5jZSBHRU0gdGhhdCBJJiMzOTttIGF3YXJlIG9mLCB1bmxlc3Mgc29tZW9uZSBtYW51YWxseSBpbnN0YW50aWF0ZWQgaXQuIFN5emthbGxlciBjYW4mIzM5O3QganVzdCBjcmVhdGUgYXJiaXRyYXJ5IE1NSU8gcGxhdGZvcm0gZGV2aWNlczsgdGhlIHBsYXRmb3JtIGJ1cyBkb2VzbiYjMzk7dCBhbGxvdyB0aGF0IHdpdGhvdXQgcm9vdCBhY2Nlc3MsIHN5c2ZzIGNvbmZpZ2ZzLCBvciBkZXZpY2UgdHJlZSBvdmVybGF5cy4gU3RhbmRhcmQgU3l6a2FsbGVyIFZNcyBkb24mIzM5O3QgaGF2ZSB0aGF0IGNhcGFiaWxpdHksIGFuZCBldmVuIGlmIHdlICpjb3VsZCogY3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlLCB0aGVyZSYjMzk7cyBubyByZWFsIGhhcmR3YXJlIG9yIE1NSU8gZW11bGF0aW9uIGJhY2tpbmcgaXQuCgpMb29raW5nIGRlZXBlciwgSSBzZWUgdGhhdCBgbWFjYl9tYWluLmNgIGlzIGFjY2Vzc2luZyBwaHlzaWNhbCBoYXJkd2FyZSByZWdpc3RlcnMgdmlhIGZ1bmN0aW9ucyBsaWtlIGBnZW1fcmVhZGxgLCBgYnAtJmd0O21hY2JfcmVnX3dyaXRlbGAsIGFuZCBgZ2VtX3dyaXRlbGAuIEl0JiMzOTtzIGFsc28gY29uZmlndXJpbmcgdGhlIFBIWSB2aWEgYHBoeWxpbmtgLgoKTm93LCB0aGUgc3BlY2lmaWMgY2hhbmdlcyB0aGlzIHBhdGNoIGludHJvZHVjZXM6CgoxLiAgYG1hY2IuaGA6IENCUyByZWdpc3RlcnMgYW5kIGBNQUNCX0NBUFNfVENgLgoyLiAgYG1hY2JfbWFpbi5jYDogVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25zIHN1Y2ggYXMgYG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXNgLCBgbWFjYl9jYnNfYWRkYCwgYG1hY2JfY2JzX2Rlc3Ryb3lgLCBgbWFjYl9zZXR1cF9jYnNgLCBgbWFjYl9zZXR1cF9tcXByaW9gLCBgbWFjYl90Y19xdWVyeV9jYXBzYCwgYG1hY2Jfc2V0dXBfdGNgLiBBbmQgYHZlcnNhbF9jb25maWdgIGlzIHVzaW5nIGBNQUNCX0NBUFNfVENgLgoKVGhhdCBgdmVyc2FsX2NvbmZpZ2AgY2FsbCBpcyBpbnRlcmVzdGluZy4gV2FpdCBhIG1pbnV0ZS4uLiAmIzM0O1ZlcnNhbCYjMzQ7IGlzIGFuIEFNRC9YaWxpbnggU29DLCBzcGVjaWZpY2FsbHkgQVJNNjQhIEkgbmVlZCB0byBzZWUgd2hlcmUgZWxzZSBgdmVyc2FsX2NvbmZpZ2AgaXMgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmVyc2FsX2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01ODYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgc2FtYTdnNV9lbWFjX2NvbmZpZyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4NjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU4NzA6c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB2ZXJzYWxfY29uZmlnID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01ODcxLVx0LmNhcHMgPSBNQUNCX0NBUFNfR0lHQUJJVF9NT0RFX0FWQUlMQUJMRSB8IE1BQ0JfQ0FQU19KVU1CTyB8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01OTEwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1hY2JfZHRfaWRzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01OTM0LVx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3hsbngsenlucS1nZW1cJiMzNDssIC5kYXRhID0gXHUwMDI2enlucV9jb25maWcgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTkzNTpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDt4bG54LHZlcnNhbC1nZW1cJiMzNDssIC5kYXRhID0gXHUwMDI2dmVyc2FsX2NvbmZpZ30sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU5MzYtXHR7IC8qIHNlbnRpbmVsICovIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkFuYWx5emluZyBWZXJzYWwgR0VNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3ZSYjMzk7cmUgY29uZmlndXJpbmcgdGhlIFZlcnNhbCBHRU0gZHJpdmVyLiBSaWdodCwgYHZlcnNhbF9jb25maWdgIGdldHMgaWRlbnRpZmllZCBieSB0aGF0IERldmljZSBUcmVlIGNvbXBhdGlibGUgc3RyaW5nOiBgJiMzNDt4bG54LHZlcnNhbC1nZW0mIzM0O2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgdGhlIEFNRC9YaWxpbnggVmVyc2FsIHBsYXRmb3JtIOKAkyBpdCYjMzk7cyB0aGUgQVJNIENvcnRleC1BNzIgU29DLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBOb3cgSSBuZWVkIHRvIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgdmVyaWZ5IGlmIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zIGFyZSBsZXZlcmFnaW5nIGBNQUNCX0NBUFNfVENgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBjb2xsaXNpb25zIG9yIGNvbmZsaWN0aW5nIHNldHRpbmdzLCB5b3Uga25vdywganVzdCBzdGFuZGFyZCBkdWUgZGlsaWdlbmNlIHRvIG1ha2UgY2VydGFpbiBldmVyeXRoaW5nIGlzIHNldCB1cCBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFDQl9DQVBTX1RDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaC03NzktI2RlZmluZSBNQUNCX0NBUFNfUVVFVUVfRElTQUJMRVx0XHRcdEJJVCgxMSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oOjc4MDojZGVmaW5lIE1BQ0JfQ0FQU19UQ1x0XHRcdFx0QklUKDEyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgtNzgxLSNkZWZpbmUgTUFDQl9DQVBTX1BDU1x0XHRcdFx0QklUKDEzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDkwNT1zdGF0aWMgaW50IG1hY2JfaW5pdF9kZmx0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01MDA0LVx0LyogRW5hYmxlIFRDIG9mZmxvYWQgZm9yIFRTTi1jYXBhYmxlIGhhcmR3YXJlICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjUwMDU6XHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1RDKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01MDA2LVx0XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU4NzA9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB2ZXJzYWxfY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTg3My1cdFx0TUFDQl9DQVBTX05FRURfVFNVQ0xLIHwgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEUgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1ODc0Olx0XHRNQUNCX0NBUFNfVEMgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01ODc1LVx0XHRNQUNCX0NBUFNfVVNSSU9fSEFTX01JSSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4OTYKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogOTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpczogQ2FkZW5jZSBNQUNCL0dFTSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpc24mIzM5O3Qgd29ydGggZnV6emluZyBmb3IgeDg2XzY0LCBhbmQgdGhlIHJlYXNvbmluZyBzZWVtcyBwcmV0dHkgc29saWQsIGJ1dCBsZXQmIzM5O3MgYmUgbWV0aWN1bG91cy4KCkZpcnN0bHksIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgdGhlIGBNQUNCX0NBUFNfVENgIGZlYXR1cmUuIEkgc2VlIHRoYXQgdGhpcyBjYXBhYmlsaXR5IGlzICpvbmx5KiBlbmFibGVkIHdpdGhpbiB0aGUgYHZlcnNhbF9jb25maWdgIGNvbnRleHQsIHdoaWNoIGlzIHNwZWNpZmljYWxseSB0aWVkIHRvIFhpbGlueCBWZXJzYWwgU29DcywgYW5kIHJlbGllcyBvbiB0aGUgT3BlbiBGaXJtd2FyZSBEVCBjb21wYXRpYmxlIHN0cmluZywgYHhsbngsdmVyc2FsLWdlbWAuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoaXMgZmVhdHVyZSBhbHNvIGZ1bmRhbWVudGFsbHkgcmVxdWlyZXMgYE5FVElGX0ZfSFdfVENgLgoKTG9va2luZyBhdCBgbWFjYl9zZXR1cF90Y2AsIGlmIGBORVRJRl9GX0hXX1RDYCBpc24mIzM5O3Qgc2V0LCB0aGVuIHRoZSBjb2RlIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIGFuIGVycm9yIChgLUVPUE5PVFNVUFBgKS4gRXZlbiBpZiB3ZSBzb21laG93IGNvbmp1cmVkIHVwIGEgYG1hY2JgIGRldmljZSAod2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gdW5kZXJseWluZyBoYXJkd2FyZSBvciBhIERUIGVudHJ5LCBhbmQgdGh1cyBhICpwaHlzaWNhbCogQ2FkZW5jZSBNQUNCIG9yIHByb3Blcmx5IGVtdWxhdGVkIGRldmljZSkgb24geDg2LCB0aGlzIHdvdWxkIGltbWVkaWF0ZWx5IHNob3J0IGNpcmN1aXQuCgpUaGUgZHJpdmVyIGl0c2VsZiBpcyBmb3IgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBjb250cm9sbGVycyBmb3VuZCBvbiBoYXJkd2FyZSBsaWtlIEF0bWVsL01pY3JvY2hpcCBBUk0sIFNpRml2ZSBSSVNDLVYsIGFuZCBYaWxpbnggWnlucS9WZXJzYWwgQVJNIFNvQ3MuIFRoZXNlIHRhcmdldHMgYXJlIHByaW1hcmlseSBlbWJlZGRlZCBzeXN0ZW1zIG9yIFNvQ3MuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb24gYW1kNjQgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIGFyZSBub3QgZ29pbmcgdG8gY29udGFpbiB0aGlzIGhhcmR3YXJlLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgKm5lZ2F0aXZlKiBjcml0ZXJpYSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoqICAgKipTdHJ1Y3R1cmFsbHkgVW5yZWFjaGFibGUgSGFyZHdhcmU6KiogSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBwYXRoIGhlcmUgdGhhdCB3b3VsZCBleGVjdXRlIHdpdGhvdXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuIFdlJiMzOTtyZSBub3QgdGFsa2luZyBhYm91dCBnZW5lcmljIG5ldHdvcmtpbmcgY29kZSBoZXJlLCBvciBhIFBDSSBkZXZpY2Ugb24geDg2LCB3aGljaCBpcyBhbiBleHRyZW1lbHkgaW1wb3J0YW50IGRpZmZlcmVuY2UsIHdlIGFyZSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBTb0MtYmFzZWQgaGFyZHdhcmUuIFRoaXMgaW5jbHVkZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIG9yIG1vcmUgY29tcGxleCBTbWFydE5JQ3MgYW5kIHRoZWlyIGRyaXZlcnMuIE5vdGhpbmcgaGVyZSB0b3VjaGVzIHRob3NlIGtpbmRzIG9mIGFic3RyYWN0aW9uczsgdGhlIGZvY3VzIGlzIG9uIGEgZGlyZWN0LCBoYXJkd2FyZS1kZXBlbmRlbnQgZmVhdHVyZS4KKiAgICoqVW5yZWFjaGFibGUgRXhlY3V0aW9uIFBhdGhzOioqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgKSBtaWdodCBleGVjdXRlIGF0IGRyaXZlciB1bmxvYWQuIEhvd2V2ZXIsIHRoZXNlIGFyZSB0eXBpY2FsbHkgb25seSByZWxldmFudCBkdXJpbmcgYSBob3QtdW5wbHVnLCBvciBkcml2ZXIgdW5iaW5kIGluIHN5c2ZzLCB3aGljaCBpcyBhbiBvcnRob2dvbmFsIGNvbmNlcm4uIEFnYWluLCB0aGUgY29yZSBsb2dpYyBpcyB0aWVkIHRvIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGFuZCBjYXBhYmlsaXRpZXMuIENvZGUgcGF0aHMgc3BlY2lmaWMgdG8gbm9uLXRhcmdldCBhcmNoaXRlY3R1cmVzIGFyZSBnZW5lcmFsbHkgYWxzbyBwcm9ibGVtYXRpYywgaG93ZXZlciwgd2UgYXJlIHJ1bm5pbmcgb24gYW1kNjQsIHNvIGl0JiMzOTtzIG5vdCBhIGNvbmNlcm4uCgpTcGVjaWZpYyB0byB0aGlzIGNoYW5nZToKCjEuICBNeSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIHg4NlxfNjQgKGFtZDY0KS4KMi4gIFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNgIChhbmQgYG1hY2IuaGApLCB3aGljaCBpcyBhIGRyaXZlciBmb3IgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBjb250cm9sbGVycy4KMy4gIFRoZSBmZWF0dXJlIGJlaW5nIGFkZGVkIChNUVBSSU8gYW5kIENCUyBvZmZsb2FkIHZpYSB0cmFmZmljIGNvbnRyb2wpIGlzICpvbmx5KiBlbmFibGVkIGZvciBYaWxpbnggVmVyc2FsLCBhbmQgdGhpcyBpcyBhbiBBUk0gU29DIHBsYXRmb3JtLgo0LiAgVGhpcyBtZWFucyB3ZSBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlLCBvciBhIHZlcnkgc3BlY2lmaWMgU29DIGVtdWxhdGlvbiAobm90IHByb3ZpZGVkIGJ5IHRoZSBzdGFuZGFyZCBRRU1VIHNldHVwKSBmb3IgdGhpcyBjb2RlIHRvIGV2ZW4gZXhlY3V0ZS4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbjogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuCgpMZXQmIzM5O3MgZG8gYSBmaW5hbCBjaGVjazoKCiogICBBcmUgd2UgdG91Y2hpbmcgYW55IGNvcmUgbmV0d29ya2luZyBvciBnZW5lcmljIGZpbGVzPyBObywganVzdCB0aGUgYG1hY2IuaGAgYW5kIGBtYWNiX21haW4uY2AgZmlsZXMgd2l0aGluIHRoZSBDYWRlbmNlLXNwZWNpZmljIGRpcmVjdG9yeS4gVGhpcyBmdXJ0aGVyIHJlaW5mb3JjZXMgdGhlIGlzb2xhdGlvbi4KKiAgIFdoYXQgYWJvdXQgdGhlIGBFbmFibGVDb25maWdzYD8gU2luY2UgYFdvcnRoRnV6emluZ2AgaXMgYGZhbHNlYCwgdGhlIHNjaGVtYSBkaWN0YXRlcyB0aGF0IGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AgY2FuIGJlIGVtcHR5IG9yIG51bGwuCgpPa2F5LCBsZXQmIzM5O3MgY3JhZnQgdGhlIHJlYXNvbmluZyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbDoKCiogICBUaGUgcGF0Y2ggaW50cm9kdWNlcyBDcmVkaXQtQmFzZWQgU2hhcGVyIChDQlMpIGFuZCBNUVBSSU8gdHJhZmZpYyBjb250cm9sIG9mZmxvYWQgc3VwcG9ydCB0byB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBuZXR3b3JrIGRyaXZlciAoYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvYCkuCiogICBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgb25seSBlbmFibGVkIGZvciBBTUQvWGlsaW54IFZlcnNhbCBTb0NzIChgdmVyc2FsX2NvbmZpZ2AsIHVzaW5nIHRoZSBEVCBtYXRjaCBmb3IgYHhsbngsdmVyc2FsLWdlbWApLCB3aGljaCBhcmUgQVJNNjQgaGFyZHdhcmUuCiogICBUaGUgZHJpdmVyLCBhcyBtb2RpZmllZCwgdGFyZ2V0cyBwaHlzaWNhbCBTb0MgaGFyZHdhcmUgLyBBU0lDcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODZcXzY0IC8gYW1kNjQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgcmVuZGVyaW5nIHRoZSBhZGRlZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgYW1kNjQgZnV6emluZy4KCkkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS8pIHRvIGFkZCBDQlMgYW5kIE1RUFJJTyBoYXJkd2FyZSB0cmFmZmljIGNvbnRyb2wgb2ZmbG9hZGluZywgc3BlY2lmaWNhbGx5IGVuYWJsZWQgZm9yIFhpbGlueCBWZXJzYWwgU29DcyAodmVyc2FsX2NvbmZpZykuIFRoaXMgZHJpdmVyIHRhcmdldHMgcGh5c2ljYWwgQVJNL1JJU0MtViBTb0MgbmV0d29yayBjb250cm9sbGVycyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGFtZDY0IHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvKSB0byBhZGQgQ0JTIGFuZCBNUVBSSU8gaGFyZHdhcmUgdHJhZmZpYyBjb250cm9sIG9mZmxvYWRpbmcsIHNwZWNpZmljYWxseSBlbmFibGVkIGZvciBYaWxpbnggVmVyc2FsIFNvQ3MgKHZlcnNhbF9jb25maWcpLiBUaGlzIGRyaXZlciB0YXJnZXRzIHBoeXNpY2FsIEFSTS9SSVNDLVYgU29DIG5ldHdvcmsgY29udHJvbGxlcnMgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBhbWQ2NCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjI5OjIxLjY2NDQ4NTM5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzk5NjU3MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlLykgdG8gYWRkIENCUyBhbmQgTVFQUklPIGhhcmR3YXJlIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkaW5nLCBzcGVjaWZpY2FsbHkgZW5hYmxlZCBmb3IgWGlsaW54IFZlcnNhbCBTb0NzICh2ZXJzYWxfY29uZmlnKS4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBBUk0vUklTQy1WIFNvQyBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjI5OjIxLjY2NDQ5MDc4M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgwNjg0MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzI0YjUxNTBhOTdkY2ZhZjRmZGY0ODAxY2E3ZDlhOGQ1OWFiZTVmN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjI5OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcXG5pbmRleCBkNjkzMWM0MWYzOWRhLi4yMGZhZWJhNzdkNmQ2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcXG5AQCAtMTg0LDYgKzE4NCw5IEBAXFxuICNkZWZpbmUgR0VNX0RDRkc4XFx0XFx0MHgwMjlDIC8qIERlc2lnbiBDb25maWcgOCAqL1xcbiAjZGVmaW5lIEdFTV9EQ0ZHMTBcXHRcXHQweDAyQTQgLyogRGVzaWduIENvbmZpZyAxMCAqL1xcbiAjZGVmaW5lIEdFTV9EQ0ZHMTJcXHRcXHQweDAyQUMgLyogRGVzaWduIENvbmZpZyAxMiAqL1xcbisjZGVmaW5lIEdFTV9DQlNfQ09OVFJPTFxcdFxcdDB4MDRCQyAvKiBDQlMgQ29udHJvbCBSZWdpc3RlciAqL1xcbisjZGVmaW5lIEdFTV9DQlNfSURMRVNMT1BFX1FfQVxcdDB4MDRDMCAvKiBDQlMgSWRsZVNsb3BlIFF1ZXVlIEEgKi9cXG4rI2RlZmluZSBHRU1fQ0JTX0lETEVTTE9QRV9RX0JcXHQweDA0QzQgLyogQ0JTIElkbGVTbG9wZSBRdWV1ZSBCICovXFxuICNkZWZpbmUgR0VNX0VOU1RfQ09OVFJPTFxcdDB4MDg4MCAvKiBFTlNUIGNvbnRyb2wgcmVnaXN0ZXIgKi9cXG4gI2RlZmluZSBHRU1fVVNYX0NPTlRST0xcXHRcXHQweDBBODAgLyogSGlnaCBzcGVlZCBQQ1MgY29udHJvbCByZWdpc3RlciAqL1xcbiAjZGVmaW5lIEdFTV9VU1hfU1RBVFVTXFx0XFx0MHgwQTg4IC8qIEhpZ2ggc3BlZWQgUENTIHN0YXR1cyByZWdpc3RlciAqL1xcbkBAIC0yMjQsNiArMjI3LDEyIEBAXFxuICNkZWZpbmUgR0VNX0VOU1RfT05fVElNRShod19xKVxcdFxcdCgweDA4MjAgKyAoKGh3X3EpIFxcdTAwM2NcXHUwMDNjIDIpKVxcbiAjZGVmaW5lIEdFTV9FTlNUX09GRl9USU1FKGh3X3EpXFx0XFx0KDB4MDg0MCArICgoaHdfcSkgXFx1MDAzY1xcdTAwM2MgMikpXFxuIFxcbisvKiBCaXRmaWVsZHMgaW4gQ0JTX0NPTlRST0wgKi9cXG4rI2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9BX09GRlNFVFxcdDBcXG4rI2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9BX1NJWkVcXHQxXFxuKyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQl9PRkZTRVRcXHQxXFxuKyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQl9TSVpFXFx0MVxcbitcXG4gLyogQml0ZmllbGRzIGluIEVOU1RfQ09OVFJPTCAqL1xcbiAjZGVmaW5lIEdFTV9FTlNUX0RJU0FCTEVfUVVFVUVfT0ZGU0VUXFx0MTZcXG4gXFxuQEAgLTc2OCw3ICs3NzcsNyBAQFxcbiAjZGVmaW5lIE1BQ0JfQ0FQU19NSUlPTlJHTUlJXFx0XFx0XFx0QklUKDkpXFxuICNkZWZpbmUgTUFDQl9DQVBTX05FRURfVFNVQ0xLXFx0XFx0XFx0QklUKDEwKVxcbiAjZGVmaW5lIE1BQ0JfQ0FQU19RVUVVRV9ESVNBQkxFXFx0XFx0XFx0QklUKDExKVxcbi0jZGVmaW5lIE1BQ0JfQ0FQU19RQlZcXHRcXHRcXHRcXHRCSVQoMTIpXFxuKyNkZWZpbmUgTUFDQl9DQVBTX1RDXFx0XFx0XFx0XFx0QklUKDEyKVxcbiAjZGVmaW5lIE1BQ0JfQ0FQU19QQ1NcXHRcXHRcXHRcXHRCSVQoMTMpXFxuICNkZWZpbmUgTUFDQl9DQVBTX0hJR0hfU1BFRURcXHRcXHRcXHRCSVQoMTQpXFxuICNkZWZpbmUgTUFDQl9DQVBTX0NMS19IV19DSEdcXHRcXHRcXHRCSVQoMTUpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXFxuaW5kZXggYTQyN2E1YjlkODk0Yy4uMDBjMWM2MTlkZWE4YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xcbkBAIC05OSw2ICs5OSwxMCBAQCBzdHJ1Y3Qgc2lmaXZlX2Z1NTQwX21hY2JfbWdtdCB7XFxuIFxcbiAjZGVmaW5lIE1BQ0JfTURJT19USU1FT1VUXFx0MTAwMDAwMCAvKiBpbiB1c2VjcyAqL1xcbiBcXG4rLyogQ0JTIHBvcnQgdHJhbnNtaXQgcmF0ZSBmYWN0b3JzOiAxMDAwL2ludGVyZmFjZV93aWR0aCAqL1xcbisjZGVmaW5lIE1BQ0JfQ0JTX1BPUlRfUkFURV8xR1xcdFxcdDEyNVxcdC8qIDEwMDAvOCBmb3IgR01JSSAoOC1iaXQpICovXFxuKyNkZWZpbmUgTUFDQl9DQlNfUE9SVF9SQVRFXzEwXzEwME1cXHQyNTBcXHQvKiAxMDAwLzQgZm9yIE1JSSAoNC1iaXQpICovXFxuK1xcbiAvKiBETUEgYnVmZmVyIGRlc2NyaXB0b3IgbWlnaHQgYmUgZGlmZmVyZW50IHNpemVcXG4gICogZGVwZW5kcyBvbiBoYXJkd2FyZSBjb25maWd1cmF0aW9uOlxcbiAgKlxcbkBAIC00NDc2LDE4ICs0NDgwLDggQEAgc3RhdGljIHZvaWQgbWFjYl90YXByaW9fZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnRhcHJpbylcXG4ge1xcbi1cXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuLVxcdGlmICh1bmxpa2VseSghKG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1RDKSkpXFxuLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tXFxuLVxcdC8qIENoZWNrIGlmIERldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmQgKi9cXG4tXFx0aWYgKHVubGlrZWx5KHBtX3J1bnRpbWVfc3VzcGVuZGVkKFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KSkpIHtcXG4tXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi1cXHR9XFxuLVxcbiBcXHRzd2l0Y2ggKHRhcHJpby1cXHUwMDNlY21kKSB7XFxuIFxcdGNhc2UgVEFQUklPX0NNRF9SRVBMQUNFOlxcbiBcXHRcXHRlcnIgPSBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKG5ldGRldiwgdGFwcmlvKTtcXG5AQCAtNDUwMiwxMyArNDQ5NiwxOTcgQEAgc3RhdGljIGludCBtYWNiX3NldHVwX3RhcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoc3RydWN0IG1hY2IgKmJwLCB1OCBxdWV1ZV9udW0sXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyICplbmFibGVfYml0LCB1MzIgKmlkbGVzbG9wZV9yZWcpXFxuK3tcXG4rXFx0LyogUXVldWUgQSBpcyBoaWdoZXN0IHByaW9yaXR5IChudW1fcXVldWVzIC0gMSkgKi9cXG4rXFx0aWYgKHF1ZXVlX251bSA9PSBicC1cXHUwMDNlbnVtX3F1ZXVlcyAtIDEpIHtcXG4rXFx0XFx0KmVuYWJsZV9iaXQgPSBHRU1fQklUKENCU19FTkFCTEVfUVVFVUVfQSk7XFxuK1xcdFxcdCppZGxlc2xvcGVfcmVnID0gR0VNX0NCU19JRExFU0xPUEVfUV9BO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0LyogUXVldWUgQiBpcyBzZWNvbmQgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDIpICovXFxuK1xcdGlmIChxdWV1ZV9udW0gPT0gYnAtXFx1MDAzZW51bV9xdWV1ZXMgLSAyKSB7XFxuK1xcdFxcdCplbmFibGVfYml0ID0gR0VNX0JJVChDQlNfRU5BQkxFX1FVRVVFX0IpO1xcbitcXHRcXHQqaWRsZXNsb3BlX3JlZyA9IEdFTV9DQlNfSURMRVNMT1BFX1FfQjtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1hY2JfY2JzX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdClcXG4re1xcbitcXHR1MzIgZW5hYmxlX2JpdCwgaWRsZXNsb3BlLCBzcGVlZF9rYnBzLCBjdHJsLCBpZGxlc2xvcGVfcmVnO1xcbitcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBrc2V0ID0ge307XFxuK1xcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKGJwLCBxb3B0LVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmVuYWJsZV9iaXQsIFxcdTAwMjZpZGxlc2xvcGVfcmVnKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkNCUzogUXVldWUgJWQgbm90IGVsaWdpYmxlIChvbmx5IHRvcCAyIHF1ZXVlcyBzdXBwb3J0IENCUylcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIHFvcHQtXFx1MDAzZXF1ZXVlKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIGlkbGVzbG9wZSBpcyBjYWxpYnJhdGVkIGZvciB0aGUgY3VycmVudCBsaW5rIHNwZWVkOyBDQlMgaXMgbm90XFxuK1xcdCAqIHJlcHJvZ3JhbW1lZCBvbiBsaW5rLXNwZWVkIGNoYW5nZXMsIHNvIGl0IG11c3QgYmUgcmVjb25maWd1cmVkXFxuK1xcdCAqIGlmIHRoZSBsaW5rIHNwZWVkIGNoYW5nZXMuXFxuK1xcdCAqL1xcbitcXHRwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldChicC1cXHUwMDNlcGh5bGluaywgXFx1MDAyNmtzZXQpO1xcbitcXG4rXFx0aWYgKCFrc2V0LmJhc2Uuc3BlZWQgfHwga3NldC5iYXNlLnNwZWVkID09IFNQRUVEX1VOS05PV04pIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJDQlM6IEludmFsaWQgbGluayBzcGVlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRzcGVlZF9rYnBzID0ga3NldC5iYXNlLnNwZWVkICogMTAwMDtcXG4rXFxuK1xcdGlmIChxb3B0LVxcdTAwM2VpZGxlc2xvcGUgXFx1MDAzYz0gMCB8fCAodTMyKXFvcHQtXFx1MDAzZWlkbGVzbG9wZSBcXHUwMDNlIHNwZWVkX2ticHMpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJDQlM6IGludmFsaWQgaWRsZXNsb3BlICVkIChtdXN0IGJlIDEuLiV1IGticHMpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBxb3B0LVxcdTAwM2VpZGxlc2xvcGUsIHNwZWVkX2ticHMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogcW9wdC1cXHUwMDNlaWRsZXNsb3BlIGlzIGluIGticHM7IGNvbnZlcnQgdG8gdGhlIHVuaXRzIHRoZSBoYXJkd2FyZVxcbitcXHQgKiByZWdpc3RlciBleHBlY3RzOlxcbitcXHQgKiAtIEhpZ2gtc3BlZWQgR0VNOiBmcmFjdGlvbiBvZiBwb3J0IGJhbmR3aWR0aCwgc2NhbGVkIHRvIHRoZSBmdWxsXFxuK1xcdCAqICAgMzItYml0IHJlZ2lzdGVyIHJhbmdlXFxuK1xcdCAqIC0gU3RhbmRhcmQgTUFDQjogdGhlIHJlZ2lzdGVyIGNvdW50cyBieXRlcy9zZWMgaW4gMUcgKDgtYml0IEdNSUkpXFxuK1xcdCAqICAgbW9kZSBhbmQgbmliYmxlcy9zZWMgaW4gMTAvMTAwICg0LWJpdCBNSUkpIG1vZGUsIHNvIHNjYWxlIGticHNcXG4rXFx0ICogICBieSAxMDAwLzggKDEyNSkgb3IgMTAwMC80ICgyNTApIHJlc3BlY3RpdmVseVxcbitcXHQgKi9cXG4rXFx0aWYgKGJwLVxcdTAwM2VjYXBzIFxcdTAwMjYgTUFDQl9DQVBTX0hJR0hfU1BFRUQpXFxuK1xcdFxcdGlkbGVzbG9wZSA9IERJVl9ST1VORF9VUF9VTEwoKHU2NClxb3B0LVxcdTAwM2VpZGxlc2xvcGUgKiBVMzJfTUFYLCBzcGVlZF9rYnBzKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRpZGxlc2xvcGUgPSAodTMyKXFvcHQtXFx1MDAzZWlkbGVzbG9wZSAqIChrc2V0LmJhc2Uuc3BlZWQgXFx1MDAzZT0gMTAwMCA/XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBNQUNCX0NCU19QT1JUX1JBVEVfMUcgOiBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTSk7XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNmJwLVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdC8qIERpc2FibGUgQ0JTIGZvciB0aGUgcXVldWUgYmVmb3JlIHVwZGF0aW5nIGlkbGVzbG9wZSAqL1xcbitcXHRcXHRjdHJsID0gZ2VtX3JlYWRsKGJwLCBDQlNfQ09OVFJPTCkgXFx1MDAyNiB+ZW5hYmxlX2JpdDtcXG4rXFx0XFx0Z2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGN0cmwpO1xcbitcXHRcXHQvKiBVcGRhdGUgaWRsZXNsb3BlIGZvciB0aGUgcXVldWUgKi9cXG4rXFx0XFx0YnAtXFx1MDAzZW1hY2JfcmVnX3dyaXRlbChicCwgaWRsZXNsb3BlX3JlZywgaWRsZXNsb3BlKTtcXG4rXFx0XFx0LyogUmUtZW5hYmxlIENCUyBmb3IgdGhlIHF1ZXVlIHdpdGggbmV3IGlkbGVzbG9wZSAqL1xcbitcXHRcXHRnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCB8IGVuYWJsZV9iaXQpO1xcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcIkNCUzogQ29uZmlndXJlZCBxdWV1ZSAlZCB3aXRoIGlkbGVzbG9wZSAweCV4XFxcXG5cXFwiLFxcbitcXHRcXHQgICBxb3B0LVxcdTAwM2VxdWV1ZSwgaWRsZXNsb3BlKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtYWNiX2Nic19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHF1ZXVlX251bSlcXG4re1xcbitcXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHR1MzIgZW5hYmxlX2JpdCwgaWRsZXNsb3BlX3JlZztcXG4rXFxuK1xcdGlmIChtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKGJwLCBxdWV1ZV9udW0sIFxcdTAwMjZlbmFibGVfYml0LCBcXHUwMDI2aWRsZXNsb3BlX3JlZykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcXHUwMDI2YnAtXFx1MDAzZWxvY2spIHtcXG4rXFx0XFx0Z2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGdlbV9yZWFkbChicCwgQ0JTX0NPTlRST0wpIFxcdTAwMjYgfmVuYWJsZV9iaXQpO1xcbitcXHRcXHRicC1cXHUwMDNlbWFjYl9yZWdfd3JpdGVsKGJwLCBpZGxlc2xvcGVfcmVnLCAwKTtcXG4rXFx0fVxcbitcXG4rXFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFxcXCJDQlM6IERpc2FibGVkIHF1ZXVlICVkXFxcXG5cXFwiLCBxdWV1ZV9udW0pO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1hY2Jfc2V0dXBfY2JzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpXFxuK3tcXG4rXFx0aWYgKHFvcHQtXFx1MDAzZWVuYWJsZSlcXG4rXFx0XFx0cmV0dXJuIG1hY2JfY2JzX2FkZChuZXRkZXYsIHFvcHQpO1xcbitcXG4rXFx0bWFjYl9jYnNfZGVzdHJveShuZXRkZXYsIHFvcHQtXFx1MDAzZXF1ZXVlKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWFjYl9zZXR1cF9tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxcbit7XFxuK1xcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFxcdTAwMjZtcXByaW8tXFx1MDAzZXFvcHQ7XFxuK1xcdHU4IG51bV90YyA9IHFvcHQtXFx1MDAzZW51bV90YztcXG4rXFx0aW50IGVycjtcXG4rXFx0dTggaTtcXG4rXFxuK1xcdC8qIEhhbmRsZSByZXNldCBjYXNlIGVhcmx5ICovXFxuK1xcdGlmICghbnVtX3RjKSB7XFxuK1xcdFxcdG5ldGRldl9yZXNldF90YyhuZXRkZXYpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0LyogQ29uZmlndXJlIHRyYWZmaWMgY2xhc3NlcyAqL1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcXG4rXFxuK1xcdGVyciA9IG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgbnVtX3RjKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fdGM7IGkrKykge1xcbitcXHRcXHRlcnIgPSBuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC1cXHUwMDNlY291bnRbaV0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgcW9wdC1cXHUwMDNlb2Zmc2V0W2ldKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzZXRfdGM7XFxuK1xcbitcXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcIk1RUFJJTzogVEMlZCAtXFx1MDAzZSBxdWV1ZSAldSAoY291bnQ9JXUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBpLCBxb3B0LVxcdTAwM2VvZmZzZXRbaV0sIHFvcHQtXFx1MDAzZWNvdW50W2ldKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcmVzZXRfdGM6XFxuK1xcdG5ldGRldl9yZXNldF90YyhuZXRkZXYpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1hY2JfdGNfcXVlcnlfY2FwcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKVxcbit7XFxuK1xcdHN3aXRjaCAoYmFzZS1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoge1xcbitcXHRcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXG4rXFx0XFx0Y2Fwcy1cXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcXG4rXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdCB2b2lkICp0eXBlX2RhdGEpXFxuIHtcXG4rXFx0c3RydWN0IG1hY2IgKmJwO1xcbitcXG4gXFx0aWYgKCFuZXRkZXYgfHwgIXR5cGVfZGF0YSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRpZiAodHlwZSA9PSBUQ19RVUVSWV9DQVBTKVxcbitcXHRcXHRyZXR1cm4gbWFjYl90Y19xdWVyeV9jYXBzKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4rXFxuK1xcdGJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghKG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1RDKSkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdC8qIENoZWNrIGlmIERldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KHBtX3J1bnRpbWVfc3VzcGVuZGVkKFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KSkpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XFxuK1xcdFxcdHJldHVybiBtYWNiX3NldHVwX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfQ0JTOlxcbitcXHRcXHRyZXR1cm4gbWFjYl9zZXR1cF9jYnMobmV0ZGV2LCB0eXBlX2RhdGEpO1xcbiBcXHRjYXNlIFRDX1NFVFVQX1FESVNDX1RBUFJJTzpcXG4gXFx0XFx0cmV0dXJuIG1hY2Jfc2V0dXBfdGFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0ZGVmYXVsdDpcXG5AQCAtNDgyMyw4ICs1MDAxLDggQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRcXHRuZXRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNO1xcbiBcXHRpZiAoYnAtXFx1MDAzZWNhcHMgXFx1MDAyNiBNQUNCX0NBUFNfU0dfRElTQUJMRUQpXFxuIFxcdFxcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgXFx1MDAyNj0gfk5FVElGX0ZfU0c7XFxuLVxcdC8qIEVuYWJsZSBIV19UQyBpZiBoYXJkd2FyZSBzdXBwb3J0cyBRQlYgKi9cXG4tXFx0aWYgKGJwLVxcdTAwM2VjYXBzIFxcdTAwMjYgTUFDQl9DQVBTX1FCVilcXG4rXFx0LyogRW5hYmxlIFRDIG9mZmxvYWQgZm9yIFRTTi1jYXBhYmxlIGhhcmR3YXJlICovXFxuK1xcdGlmIChicC1cXHUwMDNlY2FwcyBcXHUwMDI2IE1BQ0JfQ0FQU19UQylcXG4gXFx0XFx0bmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xcbiBcXG4gXFx0bmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyA9IG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXM7XFxuQEAgLTU2OTMsNyArNTg3MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgdmVyc2FsX2NvbmZpZyA9IHtcXG4gXFx0LmNhcHMgPSBNQUNCX0NBUFNfR0lHQUJJVF9NT0RFX0FWQUlMQUJMRSB8IE1BQ0JfQ0FQU19KVU1CTyB8XFxuIFxcdFxcdE1BQ0JfQ0FQU19HRU1fSEFTX1BUUCB8IE1BQ0JfQ0FQU19CRF9SRF9QUkVGRVRDSCB8XFxuIFxcdFxcdE1BQ0JfQ0FQU19ORUVEX1RTVUNMSyB8IE1BQ0JfQ0FQU19RVUVVRV9ESVNBQkxFIHxcXG4tXFx0XFx0TUFDQl9DQVBTX1FCViB8XFxuK1xcdFxcdE1BQ0JfQ0FQU19UQyB8XFxuIFxcdFxcdE1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLFxcbiBcXHQuZG1hX2J1cnN0X2xlbmd0aCA9IDE2LFxcbiBcXHQuaW5pdCA9IGluaXRfcmVzZXRfb3B0aW9uYWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjI5OjIyLjQ0NjI2MzE5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MjAxNzg2NjE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlLykgdG8gYWRkIENCUyBhbmQgTVFQUklPIGhhcmR3YXJlIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkaW5nLCBzcGVjaWZpY2FsbHkgZW5hYmxlZCBmb3IgWGlsaW54IFZlcnNhbCBTb0NzICh2ZXJzYWxfY29uZmlnKS4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBBUk0vUklTQy1WIFNvQyBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzI0YjUxNTBhOTdkY2ZhZjRmZGY0ODAxY2E3ZDlhOGQ1OWFiZTVmN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTU6Mjk6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG5pbmRleCBkNjkzMWM0MWYzOWRhLi4yMGZhZWJhNzdkNmQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG5AQCAtMTg0LDYgKzE4NCw5IEBAXG4gI2RlZmluZSBHRU1fRENGRzhcdFx0MHgwMjlDIC8qIERlc2lnbiBDb25maWcgOCAqL1xuICNkZWZpbmUgR0VNX0RDRkcxMFx0XHQweDAyQTQgLyogRGVzaWduIENvbmZpZyAxMCAqL1xuICNkZWZpbmUgR0VNX0RDRkcxMlx0XHQweDAyQUMgLyogRGVzaWduIENvbmZpZyAxMiAqL1xuKyNkZWZpbmUgR0VNX0NCU19DT05UUk9MXHRcdDB4MDRCQyAvKiBDQlMgQ29udHJvbCBSZWdpc3RlciAqL1xuKyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9BXHQweDA0QzAgLyogQ0JTIElkbGVTbG9wZSBRdWV1ZSBBICovXG4rI2RlZmluZSBHRU1fQ0JTX0lETEVTTE9QRV9RX0JcdDB4MDRDNCAvKiBDQlMgSWRsZVNsb3BlIFF1ZXVlIEIgKi9cbiAjZGVmaW5lIEdFTV9FTlNUX0NPTlRST0xcdDB4MDg4MCAvKiBFTlNUIGNvbnRyb2wgcmVnaXN0ZXIgKi9cbiAjZGVmaW5lIEdFTV9VU1hfQ09OVFJPTFx0XHQweDBBODAgLyogSGlnaCBzcGVlZCBQQ1MgY29udHJvbCByZWdpc3RlciAqL1xuICNkZWZpbmUgR0VNX1VTWF9TVEFUVVNcdFx0MHgwQTg4IC8qIEhpZ2ggc3BlZWQgUENTIHN0YXR1cyByZWdpc3RlciAqL1xuQEAgLTIyNCw2ICsyMjcsMTIgQEBcbiAjZGVmaW5lIEdFTV9FTlNUX09OX1RJTUUoaHdfcSlcdFx0KDB4MDgyMCArICgoaHdfcSkgXHUwMDNjXHUwMDNjIDIpKVxuICNkZWZpbmUgR0VNX0VOU1RfT0ZGX1RJTUUoaHdfcSlcdFx0KDB4MDg0MCArICgoaHdfcSkgXHUwMDNjXHUwMDNjIDIpKVxuIFxuKy8qIEJpdGZpZWxkcyBpbiBDQlNfQ09OVFJPTCAqL1xuKyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9PRkZTRVRcdDBcbisjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0FfU0laRVx0MVxuKyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQl9PRkZTRVRcdDFcbisjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0JfU0laRVx0MVxuK1xuIC8qIEJpdGZpZWxkcyBpbiBFTlNUX0NPTlRST0wgKi9cbiAjZGVmaW5lIEdFTV9FTlNUX0RJU0FCTEVfUVVFVUVfT0ZGU0VUXHQxNlxuIFxuQEAgLTc2OCw3ICs3NzcsNyBAQFxuICNkZWZpbmUgTUFDQl9DQVBTX01JSU9OUkdNSUlcdFx0XHRCSVQoOSlcbiAjZGVmaW5lIE1BQ0JfQ0FQU19ORUVEX1RTVUNMS1x0XHRcdEJJVCgxMClcbiAjZGVmaW5lIE1BQ0JfQ0FQU19RVUVVRV9ESVNBQkxFXHRcdFx0QklUKDExKVxuLSNkZWZpbmUgTUFDQl9DQVBTX1FCVlx0XHRcdFx0QklUKDEyKVxuKyNkZWZpbmUgTUFDQl9DQVBTX1RDXHRcdFx0XHRCSVQoMTIpXG4gI2RlZmluZSBNQUNCX0NBUFNfUENTXHRcdFx0XHRCSVQoMTMpXG4gI2RlZmluZSBNQUNCX0NBUFNfSElHSF9TUEVFRFx0XHRcdEJJVCgxNClcbiAjZGVmaW5lIE1BQ0JfQ0FQU19DTEtfSFdfQ0hHXHRcdFx0QklUKDE1KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5pbmRleCBhNDI3YTViOWQ4OTRjLi4wMGMxYzYxOWRlYThjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuQEAgLTk5LDYgKzk5LDEwIEBAIHN0cnVjdCBzaWZpdmVfZnU1NDBfbWFjYl9tZ210IHtcbiBcbiAjZGVmaW5lIE1BQ0JfTURJT19USU1FT1VUXHQxMDAwMDAwIC8qIGluIHVzZWNzICovXG4gXG4rLyogQ0JTIHBvcnQgdHJhbnNtaXQgcmF0ZSBmYWN0b3JzOiAxMDAwL2ludGVyZmFjZV93aWR0aCAqL1xuKyNkZWZpbmUgTUFDQl9DQlNfUE9SVF9SQVRFXzFHXHRcdDEyNVx0LyogMTAwMC84IGZvciBHTUlJICg4LWJpdCkgKi9cbisjZGVmaW5lIE1BQ0JfQ0JTX1BPUlRfUkFURV8xMF8xMDBNXHQyNTBcdC8qIDEwMDAvNCBmb3IgTUlJICg0LWJpdCkgKi9cbitcbiAvKiBETUEgYnVmZmVyIGRlc2NyaXB0b3IgbWlnaHQgYmUgZGlmZmVyZW50IHNpemVcbiAgKiBkZXBlbmRzIG9uIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb246XG4gICpcbkBAIC00NDc2LDE4ICs0NDgwLDggQEAgc3RhdGljIHZvaWQgbWFjYl90YXByaW9fZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHQgICAgIHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICp0YXByaW8pXG4ge1xuLVx0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdGludCBlcnIgPSAwO1xuIFxuLVx0aWYgKHVubGlrZWx5KCEobmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1RDKSkpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cbi1cdC8qIENoZWNrIGlmIERldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmQgKi9cbi1cdGlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZChcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldikpKSB7XG4tXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIkRldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmRcXG5cIik7XG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cdH1cbi1cbiBcdHN3aXRjaCAodGFwcmlvLVx1MDAzZWNtZCkge1xuIFx0Y2FzZSBUQVBSSU9fQ01EX1JFUExBQ0U6XG4gXHRcdGVyciA9IG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2UobmV0ZGV2LCB0YXByaW8pO1xuQEAgLTQ1MDIsMTMgKzQ0OTYsMTk3IEBAIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtcyhzdHJ1Y3QgbWFjYiAqYnAsIHU4IHF1ZXVlX251bSxcbitcdFx0XHRcdCAgICAgdTMyICplbmFibGVfYml0LCB1MzIgKmlkbGVzbG9wZV9yZWcpXG4re1xuK1x0LyogUXVldWUgQSBpcyBoaWdoZXN0IHByaW9yaXR5IChudW1fcXVldWVzIC0gMSkgKi9cbitcdGlmIChxdWV1ZV9udW0gPT0gYnAtXHUwMDNlbnVtX3F1ZXVlcyAtIDEpIHtcbitcdFx0KmVuYWJsZV9iaXQgPSBHRU1fQklUKENCU19FTkFCTEVfUVVFVUVfQSk7XG4rXHRcdCppZGxlc2xvcGVfcmVnID0gR0VNX0NCU19JRExFU0xPUEVfUV9BO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qIFF1ZXVlIEIgaXMgc2Vjb25kIGhpZ2hlc3QgcHJpb3JpdHkgKG51bV9xdWV1ZXMgLSAyKSAqL1xuK1x0aWYgKHF1ZXVlX251bSA9PSBicC1cdTAwM2VudW1fcXVldWVzIC0gMikge1xuK1x0XHQqZW5hYmxlX2JpdCA9IEdFTV9CSVQoQ0JTX0VOQUJMRV9RVUVVRV9CKTtcbitcdFx0KmlkbGVzbG9wZV9yZWcgPSBHRU1fQ0JTX0lETEVTTE9QRV9RX0I7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FSU5WQUw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWFjYl9jYnNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0c3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpXG4re1xuK1x0dTMyIGVuYWJsZV9iaXQsIGlkbGVzbG9wZSwgc3BlZWRfa2JwcywgY3RybCwgaWRsZXNsb3BlX3JlZztcbitcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQgPSB7fTtcbitcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtcyhicCwgcW9wdC1cdTAwM2VxdWV1ZSwgXHUwMDI2ZW5hYmxlX2JpdCwgXHUwMDI2aWRsZXNsb3BlX3JlZyk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIkNCUzogUXVldWUgJWQgbm90IGVsaWdpYmxlIChvbmx5IHRvcCAyIHF1ZXVlcyBzdXBwb3J0IENCUylcXG5cIixcbitcdFx0XHQgICBxb3B0LVx1MDAzZXF1ZXVlKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHQvKiBpZGxlc2xvcGUgaXMgY2FsaWJyYXRlZCBmb3IgdGhlIGN1cnJlbnQgbGluayBzcGVlZDsgQ0JTIGlzIG5vdFxuK1x0ICogcmVwcm9ncmFtbWVkIG9uIGxpbmstc3BlZWQgY2hhbmdlcywgc28gaXQgbXVzdCBiZSByZWNvbmZpZ3VyZWRcbitcdCAqIGlmIHRoZSBsaW5rIHNwZWVkIGNoYW5nZXMuXG4rXHQgKi9cbitcdHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KGJwLVx1MDAzZXBoeWxpbmssIFx1MDAyNmtzZXQpO1xuK1xuK1x0aWYgKCFrc2V0LmJhc2Uuc3BlZWQgfHwga3NldC5iYXNlLnNwZWVkID09IFNQRUVEX1VOS05PV04pIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwiQ0JTOiBJbnZhbGlkIGxpbmsgc3BlZWRcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3BlZWRfa2JwcyA9IGtzZXQuYmFzZS5zcGVlZCAqIDEwMDA7XG4rXG4rXHRpZiAocW9wdC1cdTAwM2VpZGxlc2xvcGUgXHUwMDNjPSAwIHx8ICh1MzIpcW9wdC1cdTAwM2VpZGxlc2xvcGUgXHUwMDNlIHNwZWVkX2ticHMpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwiQ0JTOiBpbnZhbGlkIGlkbGVzbG9wZSAlZCAobXVzdCBiZSAxLi4ldSBrYnBzKVxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlaWRsZXNsb3BlLCBzcGVlZF9rYnBzKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHQvKiBxb3B0LVx1MDAzZWlkbGVzbG9wZSBpcyBpbiBrYnBzOyBjb252ZXJ0IHRvIHRoZSB1bml0cyB0aGUgaGFyZHdhcmVcbitcdCAqIHJlZ2lzdGVyIGV4cGVjdHM6XG4rXHQgKiAtIEhpZ2gtc3BlZWQgR0VNOiBmcmFjdGlvbiBvZiBwb3J0IGJhbmR3aWR0aCwgc2NhbGVkIHRvIHRoZSBmdWxsXG4rXHQgKiAgIDMyLWJpdCByZWdpc3RlciByYW5nZVxuK1x0ICogLSBTdGFuZGFyZCBNQUNCOiB0aGUgcmVnaXN0ZXIgY291bnRzIGJ5dGVzL3NlYyBpbiAxRyAoOC1iaXQgR01JSSlcbitcdCAqICAgbW9kZSBhbmQgbmliYmxlcy9zZWMgaW4gMTAvMTAwICg0LWJpdCBNSUkpIG1vZGUsIHNvIHNjYWxlIGticHNcbitcdCAqICAgYnkgMTAwMC84ICgxMjUpIG9yIDEwMDAvNCAoMjUwKSByZXNwZWN0aXZlbHlcbitcdCAqL1xuK1x0aWYgKGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19ISUdIX1NQRUVEKVxuK1x0XHRpZGxlc2xvcGUgPSBESVZfUk9VTkRfVVBfVUxMKCh1NjQpcW9wdC1cdTAwM2VpZGxlc2xvcGUgKiBVMzJfTUFYLCBzcGVlZF9rYnBzKTtcbitcdGVsc2VcbitcdFx0aWRsZXNsb3BlID0gKHUzMilxb3B0LVx1MDAzZWlkbGVzbG9wZSAqIChrc2V0LmJhc2Uuc3BlZWQgXHUwMDNlPSAxMDAwID9cbitcdFx0XHRcdFx0ICAgICAgIE1BQ0JfQ0JTX1BPUlRfUkFURV8xRyA6IE1BQ0JfQ0JTX1BPUlRfUkFURV8xMF8xMDBNKTtcbitcbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZicC1cdTAwM2Vsb2NrKSB7XG4rXHRcdC8qIERpc2FibGUgQ0JTIGZvciB0aGUgcXVldWUgYmVmb3JlIHVwZGF0aW5nIGlkbGVzbG9wZSAqL1xuK1x0XHRjdHJsID0gZ2VtX3JlYWRsKGJwLCBDQlNfQ09OVFJPTCkgXHUwMDI2IH5lbmFibGVfYml0O1xuK1x0XHRnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCk7XG4rXHRcdC8qIFVwZGF0ZSBpZGxlc2xvcGUgZm9yIHRoZSBxdWV1ZSAqL1xuK1x0XHRicC1cdTAwM2VtYWNiX3JlZ193cml0ZWwoYnAsIGlkbGVzbG9wZV9yZWcsIGlkbGVzbG9wZSk7XG4rXHRcdC8qIFJlLWVuYWJsZSBDQlMgZm9yIHRoZSBxdWV1ZSB3aXRoIG5ldyBpZGxlc2xvcGUgKi9cbitcdFx0Z2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGN0cmwgfCBlbmFibGVfYml0KTtcbitcdH1cbitcbitcdG5ldGRldl9kYmcobmV0ZGV2LCBcIkNCUzogQ29uZmlndXJlZCBxdWV1ZSAlZCB3aXRoIGlkbGVzbG9wZSAweCV4XFxuXCIsXG4rXHRcdCAgIHFvcHQtXHUwMDNlcXVldWUsIGlkbGVzbG9wZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWFjYl9jYnNfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCBxdWV1ZV9udW0pXG4re1xuK1x0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHUzMiBlbmFibGVfYml0LCBpZGxlc2xvcGVfcmVnO1xuK1xuK1x0aWYgKG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoYnAsIHF1ZXVlX251bSwgXHUwMDI2ZW5hYmxlX2JpdCwgXHUwMDI2aWRsZXNsb3BlX3JlZykpXG4rXHRcdHJldHVybjtcbitcbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZicC1cdTAwM2Vsb2NrKSB7XG4rXHRcdGdlbV93cml0ZWwoYnAsIENCU19DT05UUk9MLCBnZW1fcmVhZGwoYnAsIENCU19DT05UUk9MKSBcdTAwMjYgfmVuYWJsZV9iaXQpO1xuK1x0XHRicC1cdTAwM2VtYWNiX3JlZ193cml0ZWwoYnAsIGlkbGVzbG9wZV9yZWcsIDApO1xuK1x0fVxuK1xuK1x0bmV0ZGV2X2RiZyhuZXRkZXYsIFwiQ0JTOiBEaXNhYmxlZCBxdWV1ZSAlZFxcblwiLCBxdWV1ZV9udW0pO1xuK31cbitcbitzdGF0aWMgaW50IG1hY2Jfc2V0dXBfY2JzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICBzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdClcbit7XG4rXHRpZiAocW9wdC1cdTAwM2VlbmFibGUpXG4rXHRcdHJldHVybiBtYWNiX2Nic19hZGQobmV0ZGV2LCBxb3B0KTtcbitcbitcdG1hY2JfY2JzX2Rlc3Ryb3kobmV0ZGV2LCBxb3B0LVx1MDAzZXF1ZXVlKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG1hY2Jfc2V0dXBfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0dTggbnVtX3RjID0gcW9wdC1cdTAwM2VudW1fdGM7XG4rXHRpbnQgZXJyO1xuK1x0dTggaTtcbitcbitcdC8qIEhhbmRsZSByZXNldCBjYXNlIGVhcmx5ICovXG4rXHRpZiAoIW51bV90Yykge1xuK1x0XHRuZXRkZXZfcmVzZXRfdGMobmV0ZGV2KTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzc2VzICovXG4rXHRxb3B0LVx1MDAzZWh3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTO1xuK1xuK1x0ZXJyID0gbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBudW1fdGMpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV90YzsgaSsrKSB7XG4rXHRcdGVyciA9IG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LVx1MDAzZWNvdW50W2ldLFxuK1x0XHRcdFx0XHQgIHFvcHQtXHUwMDNlb2Zmc2V0W2ldKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGVycl9yZXNldF90YztcbitcbitcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwiTVFQUklPOiBUQyVkIC1cdTAwM2UgcXVldWUgJXUgKGNvdW50PSV1KVxcblwiLFxuK1x0XHRcdCAgIGksIHFvcHQtXHUwMDNlb2Zmc2V0W2ldLCBxb3B0LVx1MDAzZWNvdW50W2ldKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9yZXNldF90YzpcbitcdG5ldGRldl9yZXNldF90YyhuZXRkZXYpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBtYWNiX3RjX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHQgICAgICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKVxuK3tcbitcdHN3aXRjaCAoYmFzZS1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoge1xuK1x0XHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4rXG4rXHRcdGNhcHMtXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcbitcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0XHQgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbitcdHN0cnVjdCBtYWNiICpicDtcbitcbiBcdGlmICghbmV0ZGV2IHx8ICF0eXBlX2RhdGEpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0aWYgKHR5cGUgPT0gVENfUVVFUllfQ0FQUylcbitcdFx0cmV0dXJuIG1hY2JfdGNfcXVlcnlfY2FwcyhuZXRkZXYsIHR5cGVfZGF0YSk7XG4rXG4rXHRicCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXG4rXHRpZiAodW5saWtlbHkoIShuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfVEMpKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogQ2hlY2sgaWYgRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZCAqL1xuK1x0aWYgKHVubGlrZWx5KHBtX3J1bnRpbWVfc3VzcGVuZGVkKFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2KSkpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwiRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcbitcdFx0cmV0dXJuIG1hY2Jfc2V0dXBfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbitcdGNhc2UgVENfU0VUVVBfUURJU0NfQ0JTOlxuK1x0XHRyZXR1cm4gbWFjYl9zZXR1cF9jYnMobmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19UQVBSSU86XG4gXHRcdHJldHVybiBtYWNiX3NldHVwX3RhcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7XG4gXHRkZWZhdWx0OlxuQEAgLTQ4MjMsOCArNTAwMSw4IEBAIHN0YXRpYyBpbnQgbWFjYl9pbml0X2RmbHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNO1xuIFx0aWYgKGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19TR19ESVNBQkxFRClcbiBcdFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIFx1MDAyNj0gfk5FVElGX0ZfU0c7XG4tXHQvKiBFbmFibGUgSFdfVEMgaWYgaGFyZHdhcmUgc3VwcG9ydHMgUUJWICovXG4tXHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1FCVilcbitcdC8qIEVuYWJsZSBUQyBvZmZsb2FkIGZvciBUU04tY2FwYWJsZSBoYXJkd2FyZSAqL1xuK1x0aWYgKGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19UQylcbiBcdFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVEM7XG4gXG4gXHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgPSBuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXM7XG5AQCAtNTY5Myw3ICs1ODcxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB2ZXJzYWxfY29uZmlnID0ge1xuIFx0LmNhcHMgPSBNQUNCX0NBUFNfR0lHQUJJVF9NT0RFX0FWQUlMQUJMRSB8IE1BQ0JfQ0FQU19KVU1CTyB8XG4gXHRcdE1BQ0JfQ0FQU19HRU1fSEFTX1BUUCB8IE1BQ0JfQ0FQU19CRF9SRF9QUkVGRVRDSCB8XG4gXHRcdE1BQ0JfQ0FQU19ORUVEX1RTVUNMSyB8IE1BQ0JfQ0FQU19RVUVVRV9ESVNBQkxFIHxcbi1cdFx0TUFDQl9DQVBTX1FCViB8XG4rXHRcdE1BQ0JfQ0FQU19UQyB8XG4gXHRcdE1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLFxuIFx0LmRtYV9idXJzdF9sZW5ndGggPSAxNixcbiBcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjI5OjIyLjQ0NjI2NTQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgwNDc1ODM2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGFwcGx5aW5nIG15IGV4cGVydCBrbm93bGVkZ2UgYW5kIHRoZSBlc3RhYmxpc2hlZCBndWlkZWxpbmVzLCBvZiBjb3Vyc2UuXG5cbkZpcnN0LCBsZXQncyBpZGVudGlmeSB0aGUgc2NvcGUuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhgIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AgZmlsZXMuIFRoYXQgcG9pbnRzIHNxdWFyZWx5IGF0IHRoZSBDYWRlbmNlIE1BQ0IgLyBHRU0gRXRoZXJuZXQgZHJpdmVyLCBgTUFDQmAuIEFscmlnaHQsIHRoZSBgTUFDQmAgZHJpdmVyIGl0IGlzLlxuXG5Ob3csIGEgY3JpdGljYWwgcXVlc3Rpb246IHdoYXQgaGFyZHdhcmUgb3IgcGxhdGZvcm1zIHVzZSB0aGlzIGRyaXZlcj8gQW5kLCBjcnVjaWFsbHksIGNhbiBJIGVhc2lseSByZWFjaCBpdCB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0Ugb24gYW1kNjQ/IFRoaXMgYWNjZXNzIGlzIGtleSB0byBlZmZlY3RpdmUgZnV6emluZy4gSG1tLCBJIHJlY2FsbCBpdCBiZWluZyBhIHBsYXRmb3JtIGRyaXZlciwgYnV0IEkgKnRoaW5rKiB0aGVyZSBtaWdodCBiZSBhIFBDSSBjb21wb25lbnQgdG9vLiBUbyBiZSBzdXJlLCBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUncyBhIGBtYWNiX3BjaS5jYCBvciBzaW1pbGFyIGZpbGUgaW52b2x2ZWQuIEEgcXVpY2sgYGdyZXBgIHdpbGwgYmUganVzdCB0aGUgdGhpbmcgdG8gY2xhcmlmeSB0aGF0LCBhbmQgZ2l2ZSBtZSB0aGUgZnVsbCBzY29wZSBvZiB3aGF0J3MgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2OTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyOTo1MC40OTM4NTUyN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODI1MTQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNiX3BjaVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZz00NT1jb25maWcgTUFDQl9QQ0lcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy01MS1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6NTI6XFx0ICB3aWxsIGJlIGNhbGxlZCBtYWNiX3BjaS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNTMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlPTExPW9iai0kKENPTkZJR19NQUNCKSArPSBtYWNiLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19NQUNCX1BDSSkgKz0gbWFjYl9wY2kub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoxOTojZGVmaW5lIFBDSV9EUklWRVJfTkFNRSBcXFwibWFjYl9wY2lcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTIwLSNkZWZpbmUgUExBVF9EUklWRVJfTkFNRSBcXFwibWFjYlxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYz0xMjA9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRldl9pZF90YWJsZVtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEyNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6MTI1OnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYWNiX3BjaV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEyNi1cXHQubmFtZSAgICAgPSBQQ0lfRFJJVkVSX05BTUUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTMxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoxMzI6bW9kdWxlX3BjaV9kcml2ZXIobWFjYl9wY2lfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTMzLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBkZXZfaWRfdGFibGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyOTo1MC41NzIxMTIwMzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTk3MjAyMjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gaW50byBDYWRlbmNlIEdFTSBFbXVsYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIENhZGVuY2UgTUFDQi9HRU0gaXMgYmVpbmcgZW11bGF0ZWQgd2l0aGluIFFFTVUgb3IgaWYgdGhpcyBpcyBzb21ldGhpbmcgYmVpbmcgaGFuZGxlZCBkaXJlY3RseSBieSBwbGF0Zm9ybSBvciBQQ0kgaGFyZHdhcmUuIFRoZSBjcml0aWNhbCBmaXJzdCBxdWVzdGlvbiBpczogaXMgdGhlIENhZGVuY2UgR0VNIGFjdHVhbGx5ICplbXVsYXRlZCogaW4gUUVNVT8gWWVzLCBJIHNlZSB0aGF0IFFFTVUgZG9lcywgaW4gZmFjdCwgaGF2ZSBhIGBjYWRlbmNlX2dlbWAgbW9kZWwuIEdvb2QuIE5vdywgdGhpbmdzIGdldCBhIGxpdHRsZSB0cmlja3kuIEkga25vdyBRRU1VIHVzZXMgdGhlIENhZGVuY2UgR0VNLCBidXQgaXMgaXQganVzdCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgWGlsaW54IFp5bnEsIFp5bnFNUCwgb3IgVmVyc2FsIHBsYXRmb3JtcyDigJMgdGhlIEFSTSwgQUFyY2g2NCwgb3IgTWljcm9CbGF6ZSBhcmNoaXRlY3R1cmVzPyBPciwgY291bGQgaXQgYmUgcmVhY2hhYmxlIGZyb20gYW4gYW1kNjQgdGFyZ2V0LCB3aGljaCBpcyB0aGUgYXJjaGl0ZWN0dXJlIEknbSBmb2N1c2VkIG9uIGhlcmU/IEhvbGQgb24sIHRoZSB0YXJnZXQgaXMgYW1kNjQuIFRoYXQncyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gTm93IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBtZW50aW9ucyBvZiBgTUFDQmAgYW5kIGBNQUNCX1BDSWAsIHRvIGRldGVybWluZSBpZiB0aGVyZSdzIGEgY29ubmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyOTo1My4xNjkzMTc3M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTczMzM3MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQ0JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9MjA9aWYgTkVUX1ZFTkRPUl9DQURFTkNFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzoyMjpjb25maWcgTUFDQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzozNzpjb25maWcgTUFDQl9VU0VfSFdTVEFNUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zOC1cXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQ1OmNvbmZpZyBNQUNCX1BDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBQQ0kgTUFDQi9HRU0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6Mjk6NTMuNzY2NjU3MjQ0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM1Mzg5NTE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ2AgZmlsZTpcblxuKipBbmFseXppbmcgdGhlIENhZGVuY2UgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmaWxlIGZvciB0aGUgQ2FkZW5jZSBFdGhlcm5ldCBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlciBjb25maWd1cmVzIHRoaXMgZHJpdmVyIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gRmlyc3QsIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIG1haW4gc3ltYm9sIHRoYXQgY29udHJvbHMgdGhlIGVudGlyZSBkcml2ZXIncyBpbmNsdXNpb24uIEl0J3MgbGlrZWx5IGF0IHRoZSB0b3AsIGEgYnJvYWQgYGNvbmZpZ2Agb3B0aW9uLiBJJ2xsIG5lZWQgdG8gc2VlIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4gV2hhdCBvdGhlciBoYXJkd2FyZSBmZWF0dXJlcyBvciBrZXJuZWwgc3Vic3lzdGVtcyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgZHJpdmVyIHRvIGV2ZW4gKmJlKiBjb25zaWRlcmVkPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIFNvQyBmYW1pbGllcyB0aGF0IHRoaXMgaXMgdGFyZ2V0aW5nP1xuXG5OZXh0LCBJJ2xsIGJlIHNjcnV0aW5pemluZyB0aGUgdmFyaW91cyBzdWItb3B0aW9ucy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNldHRpbmdzIHJlbGF0ZWQgdG8gZGlmZmVyZW50IENhZGVuY2UgRXRoZXJuZXQgY29udHJvbGxlciByZXZpc2lvbnMsIHBvdGVudGlhbCBQSFkgaW50ZXJmYWNlIHNlbGVjdGlvbnMgKE1JSSwgR01JSSwgUkdNSUksIFNHTUlJLCBldGMuKSwgYW5kIG1heWJlIGV2ZW4gc3BlY2lmaWMgZmVhdHVyZXMgbGlrZSBWTEFOIHN1cHBvcnQsIGNoZWNrc3VtIG9mZmxvYWQsIG9yIGZsb3cgY29udHJvbC4gVGhlIGRlc2NyaXB0aW9ucyBmb3IgZWFjaCBvcHRpb24gYXJlIGtleTsgdGhleSdsbCBjbHVlIG1lIGluIG9uIHdoYXQgZWFjaCBzZXR0aW5nIGFjdHVhbGx5ICpkb2VzKiBhbmQgdW5kZXIgd2hpY2ggY2lyY3Vtc3RhbmNlcyBJIG1pZ2h0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgaXQuXG5cbkknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYGRlcGVuZHMgb25gIGNsYXVzZXMuIFRoZXNlIGFyZSBjcnVjaWFsOyB0aGV5IGRpY3RhdGUgdGhlIGludGVyZGVwZW5kZW5jaWVzLiBGb3IgZXhhbXBsZSwgYSBwYXJ0aWN1bGFyIFBIWSBpbnRlcmZhY2Ugb3B0aW9uIHdpbGwgbGlrZWx5IGBkZXBlbmRzIG9uYCB0aGUgdW5kZXJseWluZyBQSFkgc3VwcG9ydC4gU2ltaWxhcmx5LCBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcywgbGlrZSBjaGVja3N1bSBvZmZsb2FkLCBtaWdodCBkZXBlbmQgb24gbW9yZSBnZW5lcmFsIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBvZiB0aGUgY29udHJvbGxlci4gQW55IGBzZWxlY3RgIHN0YXRlbWVudHMgd2lsbCBiZSBpbXBvcnRhbnQsIHRvby4gVGhleSBpbmRpY2F0ZSB3aGljaCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBhcmUgYXV0b21hdGljYWxseSBlbmFibGVkIHdoZW4gYSBzcGVjaWZpYyBDYWRlbmNlIEV0aGVybmV0IGZlYXR1cmUgaXMgc2VsZWN0ZWQuXG5cbkFuZCB3aGF0IGFib3V0IGRlZmF1bHQgdmFsdWVzPyBBcmUgdGhlcmUgcmVhc29uYWJsZSBkZWZhdWx0cyBwcm92aWRlZD8gQXJlIHRoZXkgYXBwcm9wcmlhdGUgZm9yIHRoZSBjb21tb24gdXNlIGNhc2VzPyBJJ2xsIGFzc2VzcyBpZiB0aGUgZGVmYXVsdHMgYXJlIHJlYXNvbmFibGUsIG9yIGlmIHRoZXkgbmVlZCBtb2RpZmljYXRpb24gZm9yIHR5cGljYWwgZGVwbG95bWVudHMgb24gY29tbW9uIFNvQ3MuXG5cbkZpbmFsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHBvdGVudGlhbCBjb25mbGljdHMgb3Igd2FybmluZ3MuIElzIHRoZSBgS2NvbmZpZ2AgZmlsZSB3ZWxsLXN0cnVjdHVyZWQgd2l0aCBjbGVhciByZWxhdGlvbnNoaXBzIGJldHdlZW4gb3B0aW9ucz8gQ2FuIHRoZSBidWlsZCBzeXN0ZW0gY2F0Y2ggY29tbW9uIGNvbmZpZ3VyYXRpb24gZXJyb3JzIGVhc2lseT8gSSdtIGhvcGluZyBpdCdzIGRlc2lnbmVkIGluIGEgd2F5IHRoYXQgZ3VpZGVzIHRoZSB1c2VyIHRvd2FyZCBhIHNhbmUsIGZ1bmN0aW9uYWwgY29uZmlndXJhdGlvbiwgYW5kIG1pbmltaXplcyB0aGUgcG9zc2liaWxpdHkgb2Ygc2hvb3RpbmcgdGhlbXNlbHZlcyBpbiB0aGUgZm9vdCEgVGhpcyBpbmZvcm1hdGlvbiBpcyB2aXRhbCBmb3IgdGhlIGFyY2hpdGVjdHVyZSBJIGFtIHdvcmtpbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyOTo1Ny4xMjA1NTc3MjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIENhZGVuY2UgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfQ0FERU5DRVxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiQ2FkZW5jZSBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cXG4gICA5OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAxNjpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAxNzpcXHRcXHQgIHJlbWFpbmluZyBDYWRlbmNlIG5ldHdvcmsgY2FyZCBxdWVzdGlvbnMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmVcXG4gIDE4OlxcdFxcdCAgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0aWYgTkVUX1ZFTkRPUl9DQURFTkNFXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBNQUNCXFxuICAyMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfRE1BIFxcdTAwMjZcXHUwMDI2IENPTU1PTl9DTEtcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDI2OlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICAyNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDI4OlxcdFxcdGhlbHBcXG4gIDI5OlxcdFxcdCAgVGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBpbnRlcmZhY2UgaXMgZm91bmQgb24gbWFueSBBdG1lbCBBVDMyIGFuZFxcbiAgMzA6XFx0XFx0ICBBVDkxIHBhcnRzLiAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQ2FkZW5jZSBHRU0gKEdpZ2FiaXRcXG4gIDMxOlxcdFxcdCAgRXRoZXJuZXQgTUFDIGZvdW5kIGluIHNvbWUgQVJNIFNvQyBkZXZpY2VzKS4gIFNheSBZIHRvIGluY2x1ZGVcXG4gIDMyOlxcdFxcdCAgc3VwcG9ydCBmb3IgdGhlIE1BQ0IvR0VNIGNoaXAuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMzU6XFx0XFx0ICB3aWxsIGJlIG1hY2IuXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuICAzODpcXHRcXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE1BQ0JcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gIDQxOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBNQUNCX1BDSVxcbiAgNDY6XFx0XFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIE1BQ0IgXFx1MDAyNlxcdTAwMjYgUENJXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIFRoaXMgaXMgUENJIHdyYXBwZXIgZm9yIE1BQ0IgZHJpdmVyLlxcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDUyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgbWFjYl9wY2kuXFxuICA1MzpcXHRcXG4gIDU0OlxcdGVuZGlmICMgTkVUX1ZFTkRPUl9DQURFTkNFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjI5OjU3LjEyMDY4NDgzNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjEwODE5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbWFjYl9wY2kuY2AgZm9yIFBDSSBEZXZpY2UgU3VwcG9ydCBhbmQgSW5zdGFudGlhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gYG1hY2JfcGNpLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgUENJIGRldmljZSBJRHMgdGhpcyBkcml2ZXIgaXMgZGVzaWduZWQgdG8gaGFuZGxlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZHJpdmVyIGFjdHVhbGx5ICppbnN0YW50aWF0ZXMqIHRoZXNlIGRldmljZXMuIEknbSB0aGlua2luZyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBsaWtlIGEgdGFibGUgb3IgYXJyYXkgdGhhdCBtYXBzIHNwZWNpZmljIFBDSSB2ZW5kb3IgYW5kIGRldmljZSBJRHMgdG8gdGhlIGRyaXZlcidzIGluc3RhbnRpYXRpb24gcHJvY2Vzcy4gQXJlIHRoZXkgdXNpbmcgdGhlIHN0YW5kYXJkIFBDSSBwcm9iaW5nIG1lY2hhbmlzbXMsIG9yIHNvbWV0aGluZyBjdXN0b20/IElzIHRoZXJlIGFueXRoaW5nIGNsZXZlciBvciB1bnVzdWFsIGluIHRoZWlyIGFwcHJvYWNoIHRoYXQgSSBtaWdodCBsZWFybiBmcm9tPyBUaGlzIHdpbGwgbGlrZWx5IGludm9sdmUgY2hlY2tpbmcgdGhlIGBwY2lfZGV2aWNlX2lkYCBzdHJ1Y3R1cmVzIGFuZCByZWxhdGVkIHNldHVwIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyBob3cgdGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIFBDSSBidXMgaXMga2V5IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1OTIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjI5OjU5LjI0MTc3MDI0M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBET0M6IENhZGVuY2UgR0VNIFBDSSB3cmFwcGVyLlxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIENvcHlyaWdodCAoQykgMjAxNiBDYWRlbmNlIERlc2lnbiBTeXN0ZW1zIC0gaHR0cHM6Ly93d3cuY2FkZW5jZS5jb21cXG4gICA2OlxcdCAqXFxuICAgNzpcXHQgKiBBdXRob3JzOiBSYWZhbCBPemllYmxvIFxcdTAwM2NyYWZhbG9AY2FkZW5jZS5jb21cXHUwMDNlXFxuICAgODpcXHQgKlxcdCAgICBCYXJ0b3N6IEZvbHRhIFxcdTAwM2NiZm9sdGFAY2FkZW5jZS5jb21cXHUwMDNlXFxuICAgOTpcXHQgKi9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay1wcm92aWRlci5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICAxNzpcXHQjaW5jbHVkZSBcXFwibWFjYi5oXFxcIlxcbiAgMTg6XFx0XFxuICAxOTpcXHQjZGVmaW5lIFBDSV9EUklWRVJfTkFNRSBcXFwibWFjYl9wY2lcXFwiXFxuICAyMDpcXHQjZGVmaW5lIFBMQVRfRFJJVkVSX05BTUUgXFxcIm1hY2JcXFwiXFxuICAyMTpcXHRcXG4gIDIyOlxcdCNkZWZpbmUgUENJX0RFVklDRV9JRF9DRE5TX01BQ0IgMHhlMDA3XFxuICAyMzpcXHRcXG4gIDI0OlxcdCNkZWZpbmUgR0VNX1BDTEtfUkFURSA1MDAwMDAwMFxcbiAgMjU6XFx0I2RlZmluZSBHRU1fSENMS19SQVRFIDUwMDAwMDAwXFxuICAyNjpcXHRcXG4gIDI3OlxcdHN0YXRpYyBpbnQgbWFjYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuICAyODpcXHR7XFxuICAyOTpcXHRcXHRpbnQgZXJyO1xcbiAgMzA6XFx0XFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjtcXG4gIDMxOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBwbGF0X2luZm87XFxuICAzMjpcXHRcXHRzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIHBsYXRfZGF0YTtcXG4gIDMzOlxcdFxcdHN0cnVjdCByZXNvdXJjZSByZXNbMl07XFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdC8qIGVuYWJsZSBwY2kgZGV2aWNlICovXFxuICAzNjpcXHRcXHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGNpKTtcXG4gIDM3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuICAzODpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgXFxcIkVuYWJsaW5nIFBDSSBkZXZpY2UgaGFzIGZhaWxlZDogJWRcXFwiLCBlcnIpO1xcbiAgMzk6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gIDQwOlxcdFxcdH1cXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0cGNpX3NldF9tYXN0ZXIocGNpKTtcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0Lyogc2V0IHVwIHJlc291cmNlcyAqL1xcbiAgNDU6XFx0XFx0bWVtc2V0KHJlcywgMHgwMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBBUlJBWV9TSVpFKHJlcykpO1xcbiAgNDY6XFx0XFx0cmVzWzBdLnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7XFxuICA0NzpcXHRcXHRyZXNbMF0uZW5kID0gcGNpX3Jlc291cmNlX2VuZChwY2ksIDApO1xcbiAgNDg6XFx0XFx0cmVzWzBdLm5hbWUgPSBQQ0lfRFJJVkVSX05BTUU7XFxuICA0OTpcXHRcXHRyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTtcXG4gIDUwOlxcdFxcdHJlc1sxXS5zdGFydCA9IHBjaV9pcnFfdmVjdG9yKHBjaSwgMCk7XFxuICA1MTpcXHRcXHRyZXNbMV0ubmFtZSA9IFBDSV9EUklWRVJfTkFNRTtcXG4gIDUyOlxcdFxcdHJlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIFxcXCJFTUFDIHBoeXNpY2FsIGJhc2UgYWRkcjogJXBhXFxcXG5cXFwiLFxcbiAgNTU6XFx0XFx0XFx0IFxcdTAwMjZyZXNbMF0uc3RhcnQpO1xcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHQvKiBzZXQgdXAgbWFjYiBwbGF0Zm9ybSBkYXRhICovXFxuICA1ODpcXHRcXHRtZW1zZXQoXFx1MDAyNnBsYXRfZGF0YSwgMCwgc2l6ZW9mKHBsYXRfZGF0YSkpO1xcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHQvKiBpbml0aWFsaXplIGNsb2NrcyAqL1xcbiAgNjE6XFx0XFx0cGxhdF9kYXRhLnBjbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIFxcXCJwY2xrXFxcIiwgTlVMTCwgMCxcXG4gIDYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBHRU1fUENMS19SQVRFKTtcXG4gIDYzOlxcdFxcdGlmIChJU19FUlIocGxhdF9kYXRhLnBjbGspKSB7XFxuICA2NDpcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKHBsYXRfZGF0YS5wY2xrKTtcXG4gIDY1OlxcdFxcdFxcdGdvdG8gZXJyX3BjbGtfcmVnaXN0ZXI7XFxuICA2NjpcXHRcXHR9XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdHBsYXRfZGF0YS5oY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBcXFwiaGNsa1xcXCIsIE5VTEwsIDAsXFxuICA2OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgR0VNX0hDTEtfUkFURSk7XFxuICA3MDpcXHRcXHRpZiAoSVNfRVJSKHBsYXRfZGF0YS5oY2xrKSkge1xcbiAgNzE6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihwbGF0X2RhdGEuaGNsayk7XFxuICA3MjpcXHRcXHRcXHRnb3RvIGVycl9oY2xrX3JlZ2lzdGVyO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHQvKiBzZXQgdXAgcGxhdGZvcm0gZGV2aWNlIGluZm8gKi9cXG4gIDc2OlxcdFxcdG1lbXNldChcXHUwMDI2cGxhdF9pbmZvLCAwLCBzaXplb2YocGxhdF9pbmZvKSk7XFxuICA3NzpcXHRcXHRwbGF0X2luZm8ucGFyZW50ID0gXFx1MDAyNnBjaS1cXHUwMDNlZGV2O1xcbiAgNzg6XFx0XFx0cGxhdF9pbmZvLmZ3bm9kZSA9IHBjaS1cXHUwMDNlZGV2LmZ3bm9kZTtcXG4gIDc5OlxcdFxcdHBsYXRfaW5mby5uYW1lID0gUExBVF9EUklWRVJfTkFNRTtcXG4gIDgwOlxcdFxcdHBsYXRfaW5mby5pZCA9IHBjaS1cXHUwMDNlZGV2Zm47XFxuICA4MTpcXHRcXHRwbGF0X2luZm8ucmVzID0gcmVzO1xcbiAgODI6XFx0XFx0cGxhdF9pbmZvLm51bV9yZXMgPSBBUlJBWV9TSVpFKHJlcyk7XFxuICA4MzpcXHRcXHRwbGF0X2luZm8uZGF0YSA9IFxcdTAwMjZwbGF0X2RhdGE7XFxuICA4NDpcXHRcXHRwbGF0X2luZm8uc2l6ZV9kYXRhID0gc2l6ZW9mKHBsYXRfZGF0YSk7XFxuICA4NTpcXHRcXHRwbGF0X2luZm8uZG1hX21hc2sgPSBwY2ktXFx1MDAzZWRtYV9tYXNrO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHQvKiByZWdpc3RlciBwbGF0Zm9ybSBkZXZpY2UgKi9cXG4gIDg4OlxcdFxcdHBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbChcXHUwMDI2cGxhdF9pbmZvKTtcXG4gIDg5OlxcdFxcdGlmIChJU19FUlIocGRldikpIHtcXG4gIDkwOlxcdFxcdFxcdGVyciA9IFBUUl9FUlIocGRldik7XFxuICA5MTpcXHRcXHRcXHRnb3RvIGVycl9wbGF0X2Rldl9yZWdpc3RlcjtcXG4gIDkyOlxcdFxcdH1cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBjaSwgcGRldik7XFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdHJldHVybiAwO1xcbiAgOTc6XFx0XFxuICA5ODpcXHRlcnJfcGxhdF9kZXZfcmVnaXN0ZXI6XFxuICA5OTpcXHRcXHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKHBsYXRfZGF0YS5oY2xrKTtcXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyOTo1OS4yNDE5NDA2ODNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2OTQ0MTYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gbWFjYl9wY2kuYyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGlzIGBtYWNiX3BjaS5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgTUFDQiBkcml2ZXIgY29udGV4dCwgc3BlY2lmaWNhbGx5IHRoZSBQQ0kgaW1wbGVtZW50YXRpb24uIEkga25vdyB0aGUgTUFDQiBpcyBhIGNvbW1vbiBFdGhlcm5ldCBjb250cm9sbGVyLCBidXQgSSB3YW50IHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGZpbGUgaGFuZGxlcyB0aGUgUENJLXNwZWNpZmljIGFzcGVjdHMgb2YgaXRzIGluaXRpYWxpemF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgaW50ZXJydXB0IG1hbmFnZW1lbnQuIEknbSB0aGlua2luZyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIFBDSSBkZXZpY2UgSUQgbWF0Y2hpbmcsIHByb2JpbmcgZnVuY3Rpb25zLCBhbmQgcGVyaGFwcyBob3cgaXQgc2V0cyB1cCBETUEgY2hhbm5lbHMgb3IgbWVtb3J5LW1hcHBlZCBJL08uIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByZWdpc3RlciBhY2Nlc3MgbWV0aG9kcyBhbmQgaG93IHRoZXkgbWFwIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZS4gR290dGEgbG9vayBmb3IgYW55IHBvdGVudGlhbCBxdWlya3Mgb3Igd29ya2Fyb3VuZHMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIFBDSSBidXMgaW4gdGhpcyBkcml2ZXIuIExldCdzIHNlZSBob3cgdGhleSd2ZSBoYW5kbGVkIHBvd2VyIG1hbmFnZW1lbnQgaWYgdGhhdCdzIHJlbGV2YW50LiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIgdGhhdCBhbGxvd3MgdGhlIE1BQ0IgdG8gaW50ZXJmYWNlIHdpdGggdGhlIFBDSSBidXMgZWZmaWNpZW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzY3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozMDowMS43MTEzODYxNDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDE6XFx0ZXJyX2hjbGtfcmVnaXN0ZXI6XFxuIDEwMjpcXHRcXHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKHBsYXRfZGF0YS5wY2xrKTtcXG4gMTAzOlxcdFxcbiAxMDQ6XFx0ZXJyX3BjbGtfcmVnaXN0ZXI6XFxuIDEwNTpcXHRcXHRyZXR1cm4gZXJyO1xcbiAxMDY6XFx0fVxcbiAxMDc6XFx0XFxuIDEwODpcXHRzdGF0aWMgdm9pZCBtYWNiX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKVxcbiAxMDk6XFx0e1xcbiAxMTA6XFx0XFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpO1xcbiAxMTE6XFx0XFx0c3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSAqcGxhdF9kYXRhID0gZGV2X2dldF9wbGF0ZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gMTEyOlxcdFxcdHN0cnVjdCBjbGsgKnBjbGsgPSBwbGF0X2RhdGEtXFx1MDAzZXBjbGs7XFxuIDExMzpcXHRcXHRzdHJ1Y3QgY2xrICpoY2xrID0gcGxhdF9kYXRhLVxcdTAwM2VoY2xrO1xcbiAxMTQ6XFx0XFxuIDExNTpcXHRcXHRwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTtcXG4gMTE2OlxcdFxcdGNsa191bnJlZ2lzdGVyX2ZpeGVkX3JhdGUocGNsayk7XFxuIDExNzpcXHRcXHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKGhjbGspO1xcbiAxMTg6XFx0fVxcbiAxMTk6XFx0XFxuIDEyMDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkX3RhYmxlW10gPSB7XFxuIDEyMTpcXHRcXHR7IFBDSV9WREVWSUNFKENETlMsIFBDSV9ERVZJQ0VfSURfQ0ROU19NQUNCKSB9LFxcbiAxMjI6XFx0XFx0eyAwLCB9XFxuIDEyMzpcXHR9O1xcbiAxMjQ6XFx0XFxuIDEyNTpcXHRzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFjYl9wY2lfZHJpdmVyID0ge1xcbiAxMjY6XFx0XFx0Lm5hbWUgICAgID0gUENJX0RSSVZFUl9OQU1FLFxcbiAxMjc6XFx0XFx0LmlkX3RhYmxlID0gZGV2X2lkX3RhYmxlLFxcbiAxMjg6XFx0XFx0LnByb2JlICAgID0gbWFjYl9wcm9iZSxcXG4gMTI5OlxcdFxcdC5yZW1vdmVcXHQgID0gbWFjYl9yZW1vdmUsXFxuIDEzMDpcXHR9O1xcbiAxMzE6XFx0XFxuIDEzMjpcXHRtb2R1bGVfcGNpX2RyaXZlcihtYWNiX3BjaV9kcml2ZXIpO1xcbiAxMzM6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRldl9pZF90YWJsZSk7XFxuIDEzNDpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIDEzNTpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkNhZGVuY2UgTklDIFBDSSB3cmFwcGVyXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjMwOjAxLjcxMTUxNDQ5NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjIyODI0NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDYWRlbmNlIE1BQ0IgRHJpdmVyIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBDYWRlbmNlIE1BQ0IgZHJpdmVyLiBJdCBzdXBwb3J0cyBhIGZldyBkaWZmZXJlbnQgcGxhdGZvcm1zOiBBdG1lbC9NaWNyb2NoaXAsIFNpRml2ZSBSSVNDLVYsIGFuZCBYaWxpbnguIEFuZCB0aGVyZSdzIGEgc3BlY2lmaWMgUENJIHdyYXBwZXIgZm9yIGEgdGVzdC9GUEdBIGNhcmQuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGEgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLCBvciBpcyBpdCBlbXVsYXRlZD8gSSBuZWVkIHRvIGtub3cgaWYgSSdtIGRlYWxpbmcgd2l0aCBhIHJlYWwgU29DL0FTSUMgZHJpdmVyIG9yIHNvbWV0aGluZyBlbXVsYXRlZCBpbiwgc2F5LCBRRU1VLlxuXG5BaGEhIFFFTVUgKmRvZXMqIGhhdmUgYGNhZGVuY2VfZ2VtYCBlbXVsYXRpb24sIGluIGBody9uZXQvY2FkZW5jZV9nZW0uY2AsIGJ1dCBvbmx5IGFzIHBhcnQgb2YgQVJNIGFuZCBSSVNDLVYgbWFjaGluZSBjb25maWd1cmF0aW9ucy4gSXQncyBub3Qgc3RhbmRhcmQgb24geDg2L2FtZDY0IChQQy9RMzUpLCBvciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoYXQgY2hhbmdlcyB0aGluZ3MuXG5cbkkgbmVlZCB0byBhcHBseSB0aGUgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjaGFuZ2VzIEknbSBsb29raW5nIGF0IGRvbid0IGZhbGwgaW50byB0aGUgY2F0ZWdvcmllcyB3aGVyZSBJICpzaG91bGRuJ3QqIGZ1enouIExldCdzIHNlZSB3aGF0IHRob3NlIGNhdGVnb3JpZXMgYXJlOiBub24ta2VybmVsL25vbi1leGVjdXRhYmxlIGNoYW5nZXMsIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhbmQgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLlxuXG5UaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIENhbiBJIGV2ZW4gcmVhY2ggYE1BQ0JgIG9uIGBhbWQ2NGA/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBJZiBpdCdzIG5vdCByZWFjaGFibGUgdGhlbiBpdCBpcyBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIEdpdmVuIHRoYXQgUUVNVSBkb2Vzbid0IHNlZW0gdG8gZW11bGF0ZSBpdCBvbiBhbWQ2NCwgdGhhdCBpcyBub3cgaGlnaGx5IGxpa2VseS5cblxuTGV0IG1lIHRoaW5rLCBJIG5lZWQgdG8gY2hlY2sgaG93IGBtYWNiX21haW4uY2AgcHJvYmVzLCBhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgYSBwYXRoIHRocm91Z2ggdG8gYE1BQ0JgIG9uIGBhbWQ2NGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjMzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MzA6MDYuMzM0MzQzMDE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ1NDU0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjYl9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDcyOD1zdGF0aWMgdm9pZCBtYWNiX2NvbmZpZ3VyZV9jYXBzKHN0cnVjdCBtYWNiICpicCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDc3MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjQ3NzI6c3RhdGljIGludCBtYWNiX3Byb2JlX3F1ZXVlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqbWVtLCBib29sIG5hdGl2ZV9pbylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ3NzMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01OTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgZGVmYXVsdF9nZW1fY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01OTQ4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTk0OTpzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU5NTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01OTg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTk4NTpcXHRudW1fcXVldWVzID0gbWFjYl9wcm9iZV9xdWV1ZXMoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgbWVtLCBuYXRpdmVfaW8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTk4Ni1cXHRpZiAobnVtX3F1ZXVlcyBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NjQ0Nj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWNiX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjY0NDc6XFx0LnByb2JlXFx0XFx0PSBtYWNiX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjQ0OC1cXHQucmVtb3ZlXFx0XFx0PSBtYWNiX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0yNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6Mjc6c3RhdGljIGludCBtYWNiX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMjgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jPTEyNT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFjYl9wY2lfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEyNy1cXHQuaWRfdGFibGUgPSBkZXZfaWRfdGFibGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjEyODpcXHQucHJvYmUgICAgPSBtYWNiX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMjktXFx0LnJlbW92ZVxcdCAgPSBtYWNiX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MzA6MDYuNDY4ODk2MDk1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4MTUyMTEyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNQUNCIERyaXZlciBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIHRyYWNlIGhvdyB0aGlzIGBtYWNiX21haW4uY2AgZmlsZSBnZXRzIGluaXRpYWxpemVkLiBJdCdzIHVzaW5nIGBtYWNiX2RyaXZlcmAsIHdoaWNoIGlzIGEgYHBsYXRmb3JtX2RyaXZlcmAsIGFuZCB0aGUgbmFtZSBpcyBcIm1hY2JcIiDigJMgc3RyYWlnaHRmb3J3YXJkIHNvIGZhci4gSSBzZWUgYG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobWFjYl9kcml2ZXIpYCBpbiB0aGUgc291cmNlLiBBbmQgdGhlcmUncyBhbHNvIGBtYWNiX3BjaV9kcml2ZXJgLCB3aGljaCBwcm9iZXMgZm9yIGEgUENJIGRldmljZSB3aXRoIFZlbmRvciBJRCBgUENJX1ZFTkRPUl9JRF9DRE5TYCAoMHgxN2NkKSBhbmQgRGV2aWNlIElEIGAweGUwMDdgLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIGNhbiBTeXprYWxsZXIgb3IgdXNlciBzcGFjZSAqYWN0dWFsbHkqIGluc3RhbnRpYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGluIHRoaXMgY2FzZSwgb3IgYXJlIHdlIGRlYWxpbmcgd2l0aCBwaHlzaWNhbCBvciBTb0MgaGFyZHdhcmU/IFBsYXRmb3JtIGRldmljZXMgZm9yIFNvQyBldGhlcm5ldCBkcml2ZXJzIGxpa2UgTUFDQiBhcmUgdXN1YWxseSBkZWZpbmVkIGluIHRoZSBEZXZpY2UgVHJlZSAoT0YpLCBBQ1BJLCBvciBpbml0aWFsaXplZCBkdXJpbmcgU29DIGJvYXJkIHNldHVwLiBPbiBhbWQ2NCwgdGhlcmUncyBubyBkZWZhdWx0IERldmljZSBUcmVlIG5vZGUgZm9yIHRoZSBDYWRlbmNlIEdFTSB0aGF0IEknbSBhd2FyZSBvZiwgdW5sZXNzIHNvbWVvbmUgbWFudWFsbHkgaW5zdGFudGlhdGVkIGl0LiBTeXprYWxsZXIgY2FuJ3QganVzdCBjcmVhdGUgYXJiaXRyYXJ5IE1NSU8gcGxhdGZvcm0gZGV2aWNlczsgdGhlIHBsYXRmb3JtIGJ1cyBkb2Vzbid0IGFsbG93IHRoYXQgd2l0aG91dCByb290IGFjY2Vzcywgc3lzZnMgY29uZmlnZnMsIG9yIGRldmljZSB0cmVlIG92ZXJsYXlzLiBTdGFuZGFyZCBTeXprYWxsZXIgVk1zIGRvbid0IGhhdmUgdGhhdCBjYXBhYmlsaXR5LCBhbmQgZXZlbiBpZiB3ZSAqY291bGQqIGNyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSwgdGhlcmUncyBubyByZWFsIGhhcmR3YXJlIG9yIE1NSU8gZW11bGF0aW9uIGJhY2tpbmcgaXQuXG5cbkxvb2tpbmcgZGVlcGVyLCBJIHNlZSB0aGF0IGBtYWNiX21haW4uY2AgaXMgYWNjZXNzaW5nIHBoeXNpY2FsIGhhcmR3YXJlIHJlZ2lzdGVycyB2aWEgZnVuY3Rpb25zIGxpa2UgYGdlbV9yZWFkbGAsIGBicC1cdTAwM2VtYWNiX3JlZ193cml0ZWxgLCBhbmQgYGdlbV93cml0ZWxgLiBJdCdzIGFsc28gY29uZmlndXJpbmcgdGhlIFBIWSB2aWEgYHBoeWxpbmtgLlxuXG5Ob3csIHRoZSBzcGVjaWZpYyBjaGFuZ2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlczpcblxuMS4gIGBtYWNiLmhgOiBDQlMgcmVnaXN0ZXJzIGFuZCBgTUFDQl9DQVBTX1RDYC5cbjIuICBgbWFjYl9tYWluLmNgOiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbnMgc3VjaCBhcyBgbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtc2AsIGBtYWNiX2Nic19hZGRgLCBgbWFjYl9jYnNfZGVzdHJveWAsIGBtYWNiX3NldHVwX2Nic2AsIGBtYWNiX3NldHVwX21xcHJpb2AsIGBtYWNiX3RjX3F1ZXJ5X2NhcHNgLCBgbWFjYl9zZXR1cF90Y2AuIEFuZCBgdmVyc2FsX2NvbmZpZ2AgaXMgdXNpbmcgYE1BQ0JfQ0FQU19UQ2AuXG5cblRoYXQgYHZlcnNhbF9jb25maWdgIGNhbGwgaXMgaW50ZXJlc3RpbmcuIFdhaXQgYSBtaW51dGUuLi4gXCJWZXJzYWxcIiBpcyBhbiBBTUQvWGlsaW54IFNvQywgc3BlY2lmaWNhbGx5IEFSTTY0ISBJIG5lZWQgdG8gc2VlIHdoZXJlIGVsc2UgYHZlcnNhbF9jb25maWdgIGlzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjMwOjE0LjI4NDExMTIyMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAxMjU1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmVyc2FsX2NvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTg2MD1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIHNhbWE3ZzVfZW1hY19jb25maWcgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4NjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1ODcwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgdmVyc2FsX2NvbmZpZyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4NzEtXFx0LmNhcHMgPSBNQUNCX0NBUFNfR0lHQUJJVF9NT0RFX0FWQUlMQUJMRSB8IE1BQ0JfQ0FQU19KVU1CTyB8XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU5MTA9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWFjYl9kdF9pZHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTkzNC1cXHR7IC5jb21wYXRpYmxlID0gXFxcInhsbngsenlucS1nZW1cXFwiLCAuZGF0YSA9IFxcdTAwMjZ6eW5xX2NvbmZpZyB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTkzNTpcXHR7IC5jb21wYXRpYmxlID0gXFxcInhsbngsdmVyc2FsLWdlbVxcXCIsIC5kYXRhID0gXFx1MDAyNnZlcnNhbF9jb25maWd9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTkzNi1cXHR7IC8qIHNlbnRpbmVsICovIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MzA6MTQuMzc0MjQxODc4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTE0NDUxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgVmVyc2FsIEdFTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdlJ3JlIGNvbmZpZ3VyaW5nIHRoZSBWZXJzYWwgR0VNIGRyaXZlci4gUmlnaHQsIGB2ZXJzYWxfY29uZmlnYCBnZXRzIGlkZW50aWZpZWQgYnkgdGhhdCBEZXZpY2UgVHJlZSBjb21wYXRpYmxlIHN0cmluZzogYFwieGxueCx2ZXJzYWwtZ2VtXCJgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHRoZSBBTUQvWGlsaW54IFZlcnNhbCBwbGF0Zm9ybSDigJMgaXQncyB0aGUgQVJNIENvcnRleC1BNzIgU29DLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBOb3cgSSBuZWVkIHRvIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgdmVyaWZ5IGlmIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zIGFyZSBsZXZlcmFnaW5nIGBNQUNCX0NBUFNfVENgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBjb2xsaXNpb25zIG9yIGNvbmZsaWN0aW5nIHNldHRpbmdzLCB5b3Uga25vdywganVzdCBzdGFuZGFyZCBkdWUgZGlsaWdlbmNlIHRvIG1ha2UgY2VydGFpbiBldmVyeXRoaW5nIGlzIHNldCB1cCBhcyBleHBlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyMDUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozMDoxNi40NjU2OTEwMzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTU5NDY0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNQUNCX0NBUFNfVENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaC03NzktI2RlZmluZSBNQUNCX0NBUFNfUVVFVUVfRElTQUJMRVxcdFxcdFxcdEJJVCgxMSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaDo3ODA6I2RlZmluZSBNQUNCX0NBUFNfVENcXHRcXHRcXHRcXHRCSVQoMTIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgtNzgxLSNkZWZpbmUgTUFDQl9DQVBTX1BDU1xcdFxcdFxcdFxcdEJJVCgxMylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDkwNT1zdGF0aWMgaW50IG1hY2JfaW5pdF9kZmx0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTUwMDQtXFx0LyogRW5hYmxlIFRDIG9mZmxvYWQgZm9yIFRTTi1jYXBhYmxlIGhhcmR3YXJlICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1MDA1OlxcdGlmIChicC1cXHUwMDNlY2FwcyBcXHUwMDI2IE1BQ0JfQ0FQU19UQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTUwMDYtXFx0XFx0bmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01ODcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgdmVyc2FsX2NvbmZpZyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTg3My1cXHRcXHRNQUNCX0NBUFNfTkVFRF9UU1VDTEsgfCBNQUNCX0NBUFNfUVVFVUVfRElTQUJMRSB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1ODc0OlxcdFxcdE1BQ0JfQ0FQU19UQyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01ODc1LVxcdFxcdE1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozMDoxNi41NzcyOTMyMDVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzg4NjgwOTI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IENhZGVuY2UgTUFDQi9HRU0gRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzbid0IHdvcnRoIGZ1enppbmcgZm9yIHg4Nl82NCwgYW5kIHRoZSByZWFzb25pbmcgc2VlbXMgcHJldHR5IHNvbGlkLCBidXQgbGV0J3MgYmUgbWV0aWN1bG91cy5cblxuRmlyc3RseSwgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCB0aGUgYE1BQ0JfQ0FQU19UQ2AgZmVhdHVyZS4gSSBzZWUgdGhhdCB0aGlzIGNhcGFiaWxpdHkgaXMgKm9ubHkqIGVuYWJsZWQgd2l0aGluIHRoZSBgdmVyc2FsX2NvbmZpZ2AgY29udGV4dCwgd2hpY2ggaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gWGlsaW54IFZlcnNhbCBTb0NzLCBhbmQgcmVsaWVzIG9uIHRoZSBPcGVuIEZpcm13YXJlIERUIGNvbXBhdGlibGUgc3RyaW5nLCBgeGxueCx2ZXJzYWwtZ2VtYC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgdGhpcyBmZWF0dXJlIGFsc28gZnVuZGFtZW50YWxseSByZXF1aXJlcyBgTkVUSUZfRl9IV19UQ2AuXG5cbkxvb2tpbmcgYXQgYG1hY2Jfc2V0dXBfdGNgLCBpZiBgTkVUSUZfRl9IV19UQ2AgaXNuJ3Qgc2V0LCB0aGVuIHRoZSBjb2RlIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIGFuIGVycm9yIChgLUVPUE5PVFNVUFBgKS4gRXZlbiBpZiB3ZSBzb21laG93IGNvbmp1cmVkIHVwIGEgYG1hY2JgIGRldmljZSAod2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gdW5kZXJseWluZyBoYXJkd2FyZSBvciBhIERUIGVudHJ5LCBhbmQgdGh1cyBhICpwaHlzaWNhbCogQ2FkZW5jZSBNQUNCIG9yIHByb3Blcmx5IGVtdWxhdGVkIGRldmljZSkgb24geDg2LCB0aGlzIHdvdWxkIGltbWVkaWF0ZWx5IHNob3J0IGNpcmN1aXQuXG5cblRoZSBkcml2ZXIgaXRzZWxmIGlzIGZvciBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGNvbnRyb2xsZXJzIGZvdW5kIG9uIGhhcmR3YXJlIGxpa2UgQXRtZWwvTWljcm9jaGlwIEFSTSwgU2lGaXZlIFJJU0MtViwgYW5kIFhpbGlueCBaeW5xL1ZlcnNhbCBBUk0gU29Dcy4gVGhlc2UgdGFyZ2V0cyBhcmUgcHJpbWFyaWx5IGVtYmVkZGVkIHN5c3RlbXMgb3IgU29Dcy4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvbiBhbWQ2NCBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgYXJlIG5vdCBnb2luZyB0byBjb250YWluIHRoaXMgaGFyZHdhcmUuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgKm5lZ2F0aXZlKiBjcml0ZXJpYSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cbiogICAqKlN0cnVjdHVyYWxseSBVbnJlYWNoYWJsZSBIYXJkd2FyZToqKiBJJ20gbm90IHNlZWluZyBhbnkgcGF0aCBoZXJlIHRoYXQgd291bGQgZXhlY3V0ZSB3aXRob3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLiBXZSdyZSBub3QgdGFsa2luZyBhYm91dCBnZW5lcmljIG5ldHdvcmtpbmcgY29kZSBoZXJlLCBvciBhIFBDSSBkZXZpY2Ugb24geDg2LCB3aGljaCBpcyBhbiBleHRyZW1lbHkgaW1wb3J0YW50IGRpZmZlcmVuY2UsIHdlIGFyZSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBTb0MtYmFzZWQgaGFyZHdhcmUuIFRoaXMgaW5jbHVkZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIG9yIG1vcmUgY29tcGxleCBTbWFydE5JQ3MgYW5kIHRoZWlyIGRyaXZlcnMuIE5vdGhpbmcgaGVyZSB0b3VjaGVzIHRob3NlIGtpbmRzIG9mIGFic3RyYWN0aW9uczsgdGhlIGZvY3VzIGlzIG9uIGEgZGlyZWN0LCBoYXJkd2FyZS1kZXBlbmRlbnQgZmVhdHVyZS5cbiogICAqKlVucmVhY2hhYmxlIEV4ZWN1dGlvbiBQYXRoczoqKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYCkgbWlnaHQgZXhlY3V0ZSBhdCBkcml2ZXIgdW5sb2FkLiBIb3dldmVyLCB0aGVzZSBhcmUgdHlwaWNhbGx5IG9ubHkgcmVsZXZhbnQgZHVyaW5nIGEgaG90LXVucGx1Zywgb3IgZHJpdmVyIHVuYmluZCBpbiBzeXNmcywgd2hpY2ggaXMgYW4gb3J0aG9nb25hbCBjb25jZXJuLiBBZ2FpbiwgdGhlIGNvcmUgbG9naWMgaXMgdGllZCB0byBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBhbmQgY2FwYWJpbGl0aWVzLiBDb2RlIHBhdGhzIHNwZWNpZmljIHRvIG5vbi10YXJnZXQgYXJjaGl0ZWN0dXJlcyBhcmUgZ2VuZXJhbGx5IGFsc28gcHJvYmxlbWF0aWMsIGhvd2V2ZXIsIHdlIGFyZSBydW5uaW5nIG9uIGFtZDY0LCBzbyBpdCdzIG5vdCBhIGNvbmNlcm4uXG5cblNwZWNpZmljIHRvIHRoaXMgY2hhbmdlOlxuXG4xLiAgTXkgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyB4ODZcXF82NCAoYW1kNjQpLlxuMi4gIFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNgIChhbmQgYG1hY2IuaGApLCB3aGljaCBpcyBhIGRyaXZlciBmb3IgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBjb250cm9sbGVycy5cbjMuICBUaGUgZmVhdHVyZSBiZWluZyBhZGRlZCAoTVFQUklPIGFuZCBDQlMgb2ZmbG9hZCB2aWEgdHJhZmZpYyBjb250cm9sKSBpcyAqb25seSogZW5hYmxlZCBmb3IgWGlsaW54IFZlcnNhbCwgYW5kIHRoaXMgaXMgYW4gQVJNIFNvQyBwbGF0Zm9ybS5cbjQuICBUaGlzIG1lYW5zIHdlIG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUsIG9yIGEgdmVyeSBzcGVjaWZpYyBTb0MgZW11bGF0aW9uIChub3QgcHJvdmlkZWQgYnkgdGhlIHN0YW5kYXJkIFFFTVUgc2V0dXApIGZvciB0aGlzIGNvZGUgdG8gZXZlbiBleGVjdXRlLlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb246IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5MZXQncyBkbyBhIGZpbmFsIGNoZWNrOlxuXG4qICAgQXJlIHdlIHRvdWNoaW5nIGFueSBjb3JlIG5ldHdvcmtpbmcgb3IgZ2VuZXJpYyBmaWxlcz8gTm8sIGp1c3QgdGhlIGBtYWNiLmhgIGFuZCBgbWFjYl9tYWluLmNgIGZpbGVzIHdpdGhpbiB0aGUgQ2FkZW5jZS1zcGVjaWZpYyBkaXJlY3RvcnkuIFRoaXMgZnVydGhlciByZWluZm9yY2VzIHRoZSBpc29sYXRpb24uXG4qICAgV2hhdCBhYm91dCB0aGUgYEVuYWJsZUNvbmZpZ3NgPyBTaW5jZSBgV29ydGhGdXp6aW5nYCBpcyBgZmFsc2VgLCB0aGUgc2NoZW1hIGRpY3RhdGVzIHRoYXQgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBjYW4gYmUgZW1wdHkgb3IgbnVsbC5cblxuT2theSwgbGV0J3MgY3JhZnQgdGhlIHJlYXNvbmluZyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbDpcblxuKiAgIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIENyZWRpdC1CYXNlZCBTaGFwZXIgKENCUykgYW5kIE1RUFJJTyB0cmFmZmljIGNvbnRyb2wgb2ZmbG9hZCBzdXBwb3J0IHRvIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIG5ldHdvcmsgZHJpdmVyIChgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9gKS5cbiogICBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgb25seSBlbmFibGVkIGZvciBBTUQvWGlsaW54IFZlcnNhbCBTb0NzIChgdmVyc2FsX2NvbmZpZ2AsIHVzaW5nIHRoZSBEVCBtYXRjaCBmb3IgYHhsbngsdmVyc2FsLWdlbWApLCB3aGljaCBhcmUgQVJNNjQgaGFyZHdhcmUuXG4qICAgVGhlIGRyaXZlciwgYXMgbW9kaWZpZWQsIHRhcmdldHMgcGh5c2ljYWwgU29DIGhhcmR3YXJlIC8gQVNJQ3Mgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgeDg2XFxfNjQgLyBhbWQ2NCB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCByZW5kZXJpbmcgdGhlIGFkZGVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBhbWQ2NCBmdXp6aW5nLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg5NiwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MzA6MjQuNDY0MTA0NTIxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlLykgdG8gYWRkIENCUyBhbmQgTVFQUklPIGhhcmR3YXJlIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkaW5nLCBzcGVjaWZpY2FsbHkgZW5hYmxlZCBmb3IgWGlsaW54IFZlcnNhbCBTb0NzICh2ZXJzYWxfY29uZmlnKS4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBBUk0vUklTQy1WIFNvQyBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS8pIHRvIGFkZCBDQlMgYW5kIE1RUFJJTyBoYXJkd2FyZSB0cmFmZmljIGNvbnRyb2wgb2ZmbG9hZGluZywgc3BlY2lmaWNhbGx5IGVuYWJsZWQgZm9yIFhpbGlueCBWZXJzYWwgU29DcyAodmVyc2FsX2NvbmZpZykuIFRoaXMgZHJpdmVyIHRhcmdldHMgcGh5c2ljYWwgQVJNL1JJU0MtViBTb0MgbmV0d29yayBjb250cm9sbGVycyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGFtZDY0IHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozMDoyNC40NjQxMzEyNzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8gkcw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 15:27:30 +0000 UTC FinishedAt: 2026-09-09 15:30:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlLykgdG8gYWRkIENCUyBhbmQgTVFQUklPIGhhcmR3YXJlIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkaW5nLCBzcGVjaWZpY2FsbHkgZW5hYmxlZCBmb3IgWGlsaW54IFZlcnNhbCBTb0NzICh2ZXJzYWxfY29uZmlnKS4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBBUk0vUklTQy1WIFNvQyBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MjRiNTE1MGE5N2RjZmFmNGZkZjQ4MDFjYTdkOWE4ZDU5YWJlNWY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNToyOToyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG5pbmRleCBkNjkzMWM0MWYzOWRhLi4yMGZhZWJhNzdkNmQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG5AQCAtMTg0LDYgJiM0MzsxODQsOSBAQFxuICNkZWZpbmUgR0VNX0RDRkc4XHRcdDB4MDI5QyAvKiBEZXNpZ24gQ29uZmlnIDggKi9cbiAjZGVmaW5lIEdFTV9EQ0ZHMTBcdFx0MHgwMkE0IC8qIERlc2lnbiBDb25maWcgMTAgKi9cbiAjZGVmaW5lIEdFTV9EQ0ZHMTJcdFx0MHgwMkFDIC8qIERlc2lnbiBDb25maWcgMTIgKi9cbiYjNDM7I2RlZmluZSBHRU1fQ0JTX0NPTlRST0xcdFx0MHgwNEJDIC8qIENCUyBDb250cm9sIFJlZ2lzdGVyICovXG4mIzQzOyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9BXHQweDA0QzAgLyogQ0JTIElkbGVTbG9wZSBRdWV1ZSBBICovXG4mIzQzOyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9CXHQweDA0QzQgLyogQ0JTIElkbGVTbG9wZSBRdWV1ZSBCICovXG4gI2RlZmluZSBHRU1fRU5TVF9DT05UUk9MXHQweDA4ODAgLyogRU5TVCBjb250cm9sIHJlZ2lzdGVyICovXG4gI2RlZmluZSBHRU1fVVNYX0NPTlRST0xcdFx0MHgwQTgwIC8qIEhpZ2ggc3BlZWQgUENTIGNvbnRyb2wgcmVnaXN0ZXIgKi9cbiAjZGVmaW5lIEdFTV9VU1hfU1RBVFVTXHRcdDB4MEE4OCAvKiBIaWdoIHNwZWVkIFBDUyBzdGF0dXMgcmVnaXN0ZXIgKi9cbkBAIC0yMjQsNiAmIzQzOzIyNywxMiBAQFxuICNkZWZpbmUgR0VNX0VOU1RfT05fVElNRShod19xKVx0XHQoMHgwODIwICYjNDM7ICgoaHdfcSkgXHUwMDNjXHUwMDNjIDIpKVxuICNkZWZpbmUgR0VNX0VOU1RfT0ZGX1RJTUUoaHdfcSlcdFx0KDB4MDg0MCAmIzQzOyAoKGh3X3EpIFx1MDAzY1x1MDAzYyAyKSlcbiBcbiYjNDM7LyogQml0ZmllbGRzIGluIENCU19DT05UUk9MICovXG4mIzQzOyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9PRkZTRVRcdDBcbiYjNDM7I2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9BX1NJWkVcdDFcbiYjNDM7I2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9CX09GRlNFVFx0MVxuJiM0MzsjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0JfU0laRVx0MVxuJiM0MztcbiAvKiBCaXRmaWVsZHMgaW4gRU5TVF9DT05UUk9MICovXG4gI2RlZmluZSBHRU1fRU5TVF9ESVNBQkxFX1FVRVVFX09GRlNFVFx0MTZcbiBcbkBAIC03NjgsNyAmIzQzOzc3Nyw3IEBAXG4gI2RlZmluZSBNQUNCX0NBUFNfTUlJT05SR01JSVx0XHRcdEJJVCg5KVxuICNkZWZpbmUgTUFDQl9DQVBTX05FRURfVFNVQ0xLXHRcdFx0QklUKDEwKVxuICNkZWZpbmUgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEVcdFx0XHRCSVQoMTEpXG4tI2RlZmluZSBNQUNCX0NBUFNfUUJWXHRcdFx0XHRCSVQoMTIpXG4mIzQzOyNkZWZpbmUgTUFDQl9DQVBTX1RDXHRcdFx0XHRCSVQoMTIpXG4gI2RlZmluZSBNQUNCX0NBUFNfUENTXHRcdFx0XHRCSVQoMTMpXG4gI2RlZmluZSBNQUNCX0NBUFNfSElHSF9TUEVFRFx0XHRcdEJJVCgxNClcbiAjZGVmaW5lIE1BQ0JfQ0FQU19DTEtfSFdfQ0hHXHRcdFx0QklUKDE1KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5pbmRleCBhNDI3YTViOWQ4OTRjLi4wMGMxYzYxOWRlYThjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuQEAgLTk5LDYgJiM0Mzs5OSwxMCBAQCBzdHJ1Y3Qgc2lmaXZlX2Z1NTQwX21hY2JfbWdtdCB7XG4gXG4gI2RlZmluZSBNQUNCX01ESU9fVElNRU9VVFx0MTAwMDAwMCAvKiBpbiB1c2VjcyAqL1xuIFxuJiM0MzsvKiBDQlMgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvcnM6IDEwMDAvaW50ZXJmYWNlX3dpZHRoICovXG4mIzQzOyNkZWZpbmUgTUFDQl9DQlNfUE9SVF9SQVRFXzFHXHRcdDEyNVx0LyogMTAwMC84IGZvciBHTUlJICg4LWJpdCkgKi9cbiYjNDM7I2RlZmluZSBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTVx0MjUwXHQvKiAxMDAwLzQgZm9yIE1JSSAoNC1iaXQpICovXG4mIzQzO1xuIC8qIERNQSBidWZmZXIgZGVzY3JpcHRvciBtaWdodCBiZSBkaWZmZXJlbnQgc2l6ZVxuICAqIGRlcGVuZHMgb24gaGFyZHdhcmUgY29uZmlndXJhdGlvbjpcbiAgKlxuQEAgLTQ0NzYsMTggJiM0Mzs0NDgwLDggQEAgc3RhdGljIHZvaWQgbWFjYl90YXByaW9fZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHQgICAgIHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICp0YXByaW8pXG4ge1xuLVx0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdGludCBlcnIgPSAwO1xuIFxuLVx0aWYgKHVubGlrZWx5KCEobmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1RDKSkpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cbi1cdC8qIENoZWNrIGlmIERldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmQgKi9cbi1cdGlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZChcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldikpKSB7XG4tXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLVx0fVxuLVxuIFx0c3dpdGNoICh0YXByaW8tXHUwMDNlY21kKSB7XG4gXHRjYXNlIFRBUFJJT19DTURfUkVQTEFDRTpcbiBcdFx0ZXJyID0gbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShuZXRkZXYsIHRhcHJpbyk7XG5AQCAtNDUwMiwxMyAmIzQzOzQ0OTYsMTk3IEBAIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoc3RydWN0IG1hY2IgKmJwLCB1OCBxdWV1ZV9udW0sXG4mIzQzO1x0XHRcdFx0ICAgICB1MzIgKmVuYWJsZV9iaXQsIHUzMiAqaWRsZXNsb3BlX3JlZylcbiYjNDM7e1xuJiM0MztcdC8qIFF1ZXVlIEEgaXMgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDEpICovXG4mIzQzO1x0aWYgKHF1ZXVlX251bSA9PSBicC1cdTAwM2VudW1fcXVldWVzIC0gMSkge1xuJiM0MztcdFx0KmVuYWJsZV9iaXQgPSBHRU1fQklUKENCU19FTkFCTEVfUVVFVUVfQSk7XG4mIzQzO1x0XHQqaWRsZXNsb3BlX3JlZyA9IEdFTV9DQlNfSURMRVNMT1BFX1FfQTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUXVldWUgQiBpcyBzZWNvbmQgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDIpICovXG4mIzQzO1x0aWYgKHF1ZXVlX251bSA9PSBicC1cdTAwM2VudW1fcXVldWVzIC0gMikge1xuJiM0MztcdFx0KmVuYWJsZV9iaXQgPSBHRU1fQklUKENCU19FTkFCTEVfUVVFVUVfQik7XG4mIzQzO1x0XHQqaWRsZXNsb3BlX3JlZyA9IEdFTV9DQlNfSURMRVNMT1BFX1FfQjtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWFjYl9jYnNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGVuYWJsZV9iaXQsIGlkbGVzbG9wZSwgc3BlZWRfa2JwcywgY3RybCwgaWRsZXNsb3BlX3JlZztcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBrc2V0ID0ge307XG4mIzQzO1x0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKGJwLCBxb3B0LVx1MDAzZXF1ZXVlLCBcdTAwMjZlbmFibGVfYml0LCBcdTAwMjZpZGxlc2xvcGVfcmVnKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7Q0JTOiBRdWV1ZSAlZCBub3QgZWxpZ2libGUgKG9ubHkgdG9wIDIgcXVldWVzIHN1cHBvcnQgQ0JTKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgcW9wdC1cdTAwM2VxdWV1ZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIGlkbGVzbG9wZSBpcyBjYWxpYnJhdGVkIGZvciB0aGUgY3VycmVudCBsaW5rIHNwZWVkOyBDQlMgaXMgbm90XG4mIzQzO1x0ICogcmVwcm9ncmFtbWVkIG9uIGxpbmstc3BlZWQgY2hhbmdlcywgc28gaXQgbXVzdCBiZSByZWNvbmZpZ3VyZWRcbiYjNDM7XHQgKiBpZiB0aGUgbGluayBzcGVlZCBjaGFuZ2VzLlxuJiM0MztcdCAqL1xuJiM0MztcdHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KGJwLVx1MDAzZXBoeWxpbmssIFx1MDAyNmtzZXQpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWtzZXQuYmFzZS5zcGVlZCB8fCBrc2V0LmJhc2Uuc3BlZWQgPT0gU1BFRURfVU5LTk9XTikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O0NCUzogSW52YWxpZCBsaW5rIHNwZWVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3BlZWRfa2JwcyA9IGtzZXQuYmFzZS5zcGVlZCAqIDEwMDA7XG4mIzQzO1xuJiM0MztcdGlmIChxb3B0LVx1MDAzZWlkbGVzbG9wZSBcdTAwM2M9IDAgfHwgKHUzMilxb3B0LVx1MDAzZWlkbGVzbG9wZSBcdTAwM2Ugc3BlZWRfa2Jwcykge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O0NCUzogaW52YWxpZCBpZGxlc2xvcGUgJWQgKG11c3QgYmUgMS4uJXUga2JwcylcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHFvcHQtXHUwMDNlaWRsZXNsb3BlLCBzcGVlZF9rYnBzKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogcW9wdC1cdTAwM2VpZGxlc2xvcGUgaXMgaW4ga2JwczsgY29udmVydCB0byB0aGUgdW5pdHMgdGhlIGhhcmR3YXJlXG4mIzQzO1x0ICogcmVnaXN0ZXIgZXhwZWN0czpcbiYjNDM7XHQgKiAtIEhpZ2gtc3BlZWQgR0VNOiBmcmFjdGlvbiBvZiBwb3J0IGJhbmR3aWR0aCwgc2NhbGVkIHRvIHRoZSBmdWxsXG4mIzQzO1x0ICogICAzMi1iaXQgcmVnaXN0ZXIgcmFuZ2VcbiYjNDM7XHQgKiAtIFN0YW5kYXJkIE1BQ0I6IHRoZSByZWdpc3RlciBjb3VudHMgYnl0ZXMvc2VjIGluIDFHICg4LWJpdCBHTUlJKVxuJiM0MztcdCAqICAgbW9kZSBhbmQgbmliYmxlcy9zZWMgaW4gMTAvMTAwICg0LWJpdCBNSUkpIG1vZGUsIHNvIHNjYWxlIGticHNcbiYjNDM7XHQgKiAgIGJ5IDEwMDAvOCAoMTI1KSBvciAxMDAwLzQgKDI1MCkgcmVzcGVjdGl2ZWx5XG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19ISUdIX1NQRUVEKVxuJiM0MztcdFx0aWRsZXNsb3BlID0gRElWX1JPVU5EX1VQX1VMTCgodTY0KXFvcHQtXHUwMDNlaWRsZXNsb3BlICogVTMyX01BWCwgc3BlZWRfa2Jwcyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0aWRsZXNsb3BlID0gKHUzMilxb3B0LVx1MDAzZWlkbGVzbG9wZSAqIChrc2V0LmJhc2Uuc3BlZWQgXHUwMDNlPSAxMDAwID9cbiYjNDM7XHRcdFx0XHRcdCAgICAgICBNQUNCX0NCU19QT1JUX1JBVEVfMUcgOiBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTSk7XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZicC1cdTAwM2Vsb2NrKSB7XG4mIzQzO1x0XHQvKiBEaXNhYmxlIENCUyBmb3IgdGhlIHF1ZXVlIGJlZm9yZSB1cGRhdGluZyBpZGxlc2xvcGUgKi9cbiYjNDM7XHRcdGN0cmwgPSBnZW1fcmVhZGwoYnAsIENCU19DT05UUk9MKSBcdTAwMjYgfmVuYWJsZV9iaXQ7XG4mIzQzO1x0XHRnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCk7XG4mIzQzO1x0XHQvKiBVcGRhdGUgaWRsZXNsb3BlIGZvciB0aGUgcXVldWUgKi9cbiYjNDM7XHRcdGJwLVx1MDAzZW1hY2JfcmVnX3dyaXRlbChicCwgaWRsZXNsb3BlX3JlZywgaWRsZXNsb3BlKTtcbiYjNDM7XHRcdC8qIFJlLWVuYWJsZSBDQlMgZm9yIHRoZSBxdWV1ZSB3aXRoIG5ldyBpZGxlc2xvcGUgKi9cbiYjNDM7XHRcdGdlbV93cml0ZWwoYnAsIENCU19DT05UUk9MLCBjdHJsIHwgZW5hYmxlX2JpdCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7Q0JTOiBDb25maWd1cmVkIHF1ZXVlICVkIHdpdGggaWRsZXNsb3BlIDB4JXhcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBxb3B0LVx1MDAzZXF1ZXVlLCBpZGxlc2xvcGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWFjYl9jYnNfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCBxdWV1ZV9udW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHUzMiBlbmFibGVfYml0LCBpZGxlc2xvcGVfcmVnO1xuJiM0MztcbiYjNDM7XHRpZiAobWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtcyhicCwgcXVldWVfbnVtLCBcdTAwMjZlbmFibGVfYml0LCBcdTAwMjZpZGxlc2xvcGVfcmVnKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmJwLVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdGdlbV93cml0ZWwoYnAsIENCU19DT05UUk9MLCBnZW1fcmVhZGwoYnAsIENCU19DT05UUk9MKSBcdTAwMjYgfmVuYWJsZV9iaXQpO1xuJiM0MztcdFx0YnAtXHUwMDNlbWFjYl9yZWdfd3JpdGVsKGJwLCBpZGxlc2xvcGVfcmVnLCAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5ldGRldl9kYmcobmV0ZGV2LCBcJiMzNDtDQlM6IERpc2FibGVkIHF1ZXVlICVkXFxuXCYjMzQ7LCBxdWV1ZV9udW0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1hY2Jfc2V0dXBfY2JzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpXG4mIzQzO3tcbiYjNDM7XHRpZiAocW9wdC1cdTAwM2VlbmFibGUpXG4mIzQzO1x0XHRyZXR1cm4gbWFjYl9jYnNfYWRkKG5ldGRldiwgcW9wdCk7XG4mIzQzO1xuJiM0MztcdG1hY2JfY2JzX2Rlc3Ryb3kobmV0ZGV2LCBxb3B0LVx1MDAzZXF1ZXVlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtYWNiX3NldHVwX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHR1OCBudW1fdGMgPSBxb3B0LVx1MDAzZW51bV90YztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdHU4IGk7XG4mIzQzO1xuJiM0MztcdC8qIEhhbmRsZSByZXNldCBjYXNlIGVhcmx5ICovXG4mIzQzO1x0aWYgKCFudW1fdGMpIHtcbiYjNDM7XHRcdG5ldGRldl9yZXNldF90YyhuZXRkZXYpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzc2VzICovXG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBudW1fdGMpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fdGM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRlcnIgPSBuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC1cdTAwM2Vjb3VudFtpXSxcbiYjNDM7XHRcdFx0XHRcdCAgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzZXRfdGM7XG4mIzQzO1xuJiM0MztcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwmIzM0O01RUFJJTzogVEMlZCAtXHUwMDNlIHF1ZXVlICV1IChjb3VudD0ldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGksIHFvcHQtXHUwMDNlb2Zmc2V0W2ldLCBxb3B0LVx1MDAzZWNvdW50W2ldKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc2V0X3RjOlxuJiM0MztcdG5ldGRldl9yZXNldF90YyhuZXRkZXYpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWFjYl90Y19xdWVyeV9jYXBzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGJhc2UtXHUwMDNldHlwZSkge1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOiB7XG4mIzQzO1x0XHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4mIzQzO1xuJiM0MztcdFx0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRcdFx0IHZvaWQgKnR5cGVfZGF0YSlcbiB7XG4mIzQzO1x0c3RydWN0IG1hY2IgKmJwO1xuJiM0MztcbiBcdGlmICghbmV0ZGV2IHx8ICF0eXBlX2RhdGEpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdGlmICh0eXBlID09IFRDX1FVRVJZX0NBUFMpXG4mIzQzO1x0XHRyZXR1cm4gbWFjYl90Y19xdWVyeV9jYXBzKG5ldGRldiwgdHlwZV9kYXRhKTtcbiYjNDM7XG4mIzQzO1x0YnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoIShuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfVEMpKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgaWYgRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZChcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldikpKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7RGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxuJiM0MztcdFx0cmV0dXJuIG1hY2Jfc2V0dXBfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbiYjNDM7XHRjYXNlIFRDX1NFVFVQX1FESVNDX0NCUzpcbiYjNDM7XHRcdHJldHVybiBtYWNiX3NldHVwX2NicyhuZXRkZXYsIHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX1FESVNDX1RBUFJJTzpcbiBcdFx0cmV0dXJuIG1hY2Jfc2V0dXBfdGFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG5AQCAtNDgyMyw4ICYjNDM7NTAwMSw4IEBAIHN0YXRpYyBpbnQgbWFjYl9pbml0X2RmbHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNO1xuIFx0aWYgKGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19TR19ESVNBQkxFRClcbiBcdFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIFx1MDAyNj0gfk5FVElGX0ZfU0c7XG4tXHQvKiBFbmFibGUgSFdfVEMgaWYgaGFyZHdhcmUgc3VwcG9ydHMgUUJWICovXG4tXHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1FCVilcbiYjNDM7XHQvKiBFbmFibGUgVEMgb2ZmbG9hZCBmb3IgVFNOLWNhcGFibGUgaGFyZHdhcmUgKi9cbiYjNDM7XHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1RDKVxuIFx0XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcbiBcbiBcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcztcbkBAIC01NjkzLDcgJiM0Mzs1ODcxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB2ZXJzYWxfY29uZmlnID0ge1xuIFx0LmNhcHMgPSBNQUNCX0NBUFNfR0lHQUJJVF9NT0RFX0FWQUlMQUJMRSB8IE1BQ0JfQ0FQU19KVU1CTyB8XG4gXHRcdE1BQ0JfQ0FQU19HRU1fSEFTX1BUUCB8IE1BQ0JfQ0FQU19CRF9SRF9QUkVGRVRDSCB8XG4gXHRcdE1BQ0JfQ0FQU19ORUVEX1RTVUNMSyB8IE1BQ0JfQ0FQU19RVUVVRV9ESVNBQkxFIHxcbi1cdFx0TUFDQl9DQVBTX1FCViB8XG4mIzQzO1x0XHRNQUNCX0NBUFNfVEMgfFxuIFx0XHRNQUNCX0NBUFNfVVNSSU9fSEFTX01JSSxcbiBcdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXG4gXHQuaW5pdCA9IGluaXRfcmVzZXRfb3B0aW9uYWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlLykgdG8gYWRkIENCUyBhbmQgTVFQUklPIGhhcmR3YXJlIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkaW5nLCBzcGVjaWZpY2FsbHkgZW5hYmxlZCBmb3IgWGlsaW54IFZlcnNhbCBTb0NzICh2ZXJzYWxfY29uZmlnKS4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBBUk0vUklTQy1WIFNvQyBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MjRiNTE1MGE5N2RjZmFmNGZkZjQ4MDFjYTdkOWE4ZDU5YWJlNWY3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNToyOToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgKaW5kZXggZDY5MzFjNDFmMzlkYS4uMjBmYWViYTc3ZDZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgKQEAgLTE4NCw2ICYjNDM7MTg0LDkgQEAKICNkZWZpbmUgR0VNX0RDRkc4CQkweDAyOUMgLyogRGVzaWduIENvbmZpZyA4ICovCiAjZGVmaW5lIEdFTV9EQ0ZHMTAJCTB4MDJBNCAvKiBEZXNpZ24gQ29uZmlnIDEwICovCiAjZGVmaW5lIEdFTV9EQ0ZHMTIJCTB4MDJBQyAvKiBEZXNpZ24gQ29uZmlnIDEyICovCiYjNDM7I2RlZmluZSBHRU1fQ0JTX0NPTlRST0wJCTB4MDRCQyAvKiBDQlMgQ29udHJvbCBSZWdpc3RlciAqLwomIzQzOyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9BCTB4MDRDMCAvKiBDQlMgSWRsZVNsb3BlIFF1ZXVlIEEgKi8KJiM0MzsjZGVmaW5lIEdFTV9DQlNfSURMRVNMT1BFX1FfQgkweDA0QzQgLyogQ0JTIElkbGVTbG9wZSBRdWV1ZSBCICovCiAjZGVmaW5lIEdFTV9FTlNUX0NPTlRST0wJMHgwODgwIC8qIEVOU1QgY29udHJvbCByZWdpc3RlciAqLwogI2RlZmluZSBHRU1fVVNYX0NPTlRST0wJCTB4MEE4MCAvKiBIaWdoIHNwZWVkIFBDUyBjb250cm9sIHJlZ2lzdGVyICovCiAjZGVmaW5lIEdFTV9VU1hfU1RBVFVTCQkweDBBODggLyogSGlnaCBzcGVlZCBQQ1Mgc3RhdHVzIHJlZ2lzdGVyICovCkBAIC0yMjQsNiAmIzQzOzIyNywxMiBAQAogI2RlZmluZSBHRU1fRU5TVF9PTl9USU1FKGh3X3EpCQkoMHgwODIwICYjNDM7ICgoaHdfcSkgJmx0OyZsdDsgMikpCiAjZGVmaW5lIEdFTV9FTlNUX09GRl9USU1FKGh3X3EpCQkoMHgwODQwICYjNDM7ICgoaHdfcSkgJmx0OyZsdDsgMikpCiAKJiM0MzsvKiBCaXRmaWVsZHMgaW4gQ0JTX0NPTlRST0wgKi8KJiM0MzsjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0FfT0ZGU0VUCTAKJiM0MzsjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0FfU0laRQkxCiYjNDM7I2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9CX09GRlNFVAkxCiYjNDM7I2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9CX1NJWkUJMQomIzQzOwogLyogQml0ZmllbGRzIGluIEVOU1RfQ09OVFJPTCAqLwogI2RlZmluZSBHRU1fRU5TVF9ESVNBQkxFX1FVRVVFX09GRlNFVAkxNgogCkBAIC03NjgsNyAmIzQzOzc3Nyw3IEBACiAjZGVmaW5lIE1BQ0JfQ0FQU19NSUlPTlJHTUlJCQkJQklUKDkpCiAjZGVmaW5lIE1BQ0JfQ0FQU19ORUVEX1RTVUNMSwkJCUJJVCgxMCkKICNkZWZpbmUgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEUJCQlCSVQoMTEpCi0jZGVmaW5lIE1BQ0JfQ0FQU19RQlYJCQkJQklUKDEyKQomIzQzOyNkZWZpbmUgTUFDQl9DQVBTX1RDCQkJCUJJVCgxMikKICNkZWZpbmUgTUFDQl9DQVBTX1BDUwkJCQlCSVQoMTMpCiAjZGVmaW5lIE1BQ0JfQ0FQU19ISUdIX1NQRUVECQkJQklUKDE0KQogI2RlZmluZSBNQUNCX0NBUFNfQ0xLX0hXX0NIRwkJCUJJVCgxNSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jCmluZGV4IGE0MjdhNWI5ZDg5NGMuLjAwYzFjNjE5ZGVhOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwpAQCAtOTksNiAmIzQzOzk5LDEwIEBAIHN0cnVjdCBzaWZpdmVfZnU1NDBfbWFjYl9tZ210IHsKIAogI2RlZmluZSBNQUNCX01ESU9fVElNRU9VVAkxMDAwMDAwIC8qIGluIHVzZWNzICovCiAKJiM0MzsvKiBDQlMgcG9ydCB0cmFuc21pdCByYXRlIGZhY3RvcnM6IDEwMDAvaW50ZXJmYWNlX3dpZHRoICovCiYjNDM7I2RlZmluZSBNQUNCX0NCU19QT1JUX1JBVEVfMUcJCTEyNQkvKiAxMDAwLzggZm9yIEdNSUkgKDgtYml0KSAqLwomIzQzOyNkZWZpbmUgTUFDQl9DQlNfUE9SVF9SQVRFXzEwXzEwME0JMjUwCS8qIDEwMDAvNCBmb3IgTUlJICg0LWJpdCkgKi8KJiM0MzsKIC8qIERNQSBidWZmZXIgZGVzY3JpcHRvciBtaWdodCBiZSBkaWZmZXJlbnQgc2l6ZQogICogZGVwZW5kcyBvbiBoYXJkd2FyZSBjb25maWd1cmF0aW9uOgogICoKQEAgLTQ0NzYsMTggJiM0Mzs0NDgwLDggQEAgc3RhdGljIHZvaWQgbWFjYl90YXByaW9fZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogc3RhdGljIGludCBtYWNiX3NldHVwX3RhcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJICAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqdGFwcmlvKQogewotCXN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAodW5saWtlbHkoIShuZXRkZXYtJmd0O2h3X2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfVEMpKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JLyogQ2hlY2sgaWYgRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZCAqLwotCWlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZCgmYW1wO2JwLSZndDtwZGV2LSZndDtkZXYpKSkgewotCQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kXG4mIzM0Oyk7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KIAlzd2l0Y2ggKHRhcHJpby0mZ3Q7Y21kKSB7CiAJY2FzZSBUQVBSSU9fQ01EX1JFUExBQ0U6CiAJCWVyciA9IG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2UobmV0ZGV2LCB0YXByaW8pOwpAQCAtNDUwMiwxMyAmIzQzOzQ0OTYsMTk3IEBAIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RhdGljIGludCBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKHN0cnVjdCBtYWNiICpicCwgdTggcXVldWVfbnVtLAomIzQzOwkJCQkgICAgIHUzMiAqZW5hYmxlX2JpdCwgdTMyICppZGxlc2xvcGVfcmVnKQomIzQzO3sKJiM0MzsJLyogUXVldWUgQSBpcyBoaWdoZXN0IHByaW9yaXR5IChudW1fcXVldWVzIC0gMSkgKi8KJiM0MzsJaWYgKHF1ZXVlX251bSA9PSBicC0mZ3Q7bnVtX3F1ZXVlcyAtIDEpIHsKJiM0MzsJCSplbmFibGVfYml0ID0gR0VNX0JJVChDQlNfRU5BQkxFX1FVRVVFX0EpOwomIzQzOwkJKmlkbGVzbG9wZV9yZWcgPSBHRU1fQ0JTX0lETEVTTE9QRV9RX0E7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBRdWV1ZSBCIGlzIHNlY29uZCBoaWdoZXN0IHByaW9yaXR5IChudW1fcXVldWVzIC0gMikgKi8KJiM0MzsJaWYgKHF1ZXVlX251bSA9PSBicC0mZ3Q7bnVtX3F1ZXVlcyAtIDIpIHsKJiM0MzsJCSplbmFibGVfYml0ID0gR0VNX0JJVChDQlNfRU5BQkxFX1FVRVVFX0IpOwomIzQzOwkJKmlkbGVzbG9wZV9yZWcgPSBHRU1fQ0JTX0lETEVTTE9QRV9RX0I7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVJTlZBTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtYWNiX2Nic19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQlzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdCkKJiM0Mzt7CiYjNDM7CXUzMiBlbmFibGVfYml0LCBpZGxlc2xvcGUsIHNwZWVkX2ticHMsIGN0cmwsIGlkbGVzbG9wZV9yZWc7CiYjNDM7CXN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQgPSB7fTsKJiM0MzsJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtcyhicCwgcW9wdC0mZ3Q7cXVldWUsICZhbXA7ZW5hYmxlX2JpdCwgJmFtcDtpZGxlc2xvcGVfcmVnKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7Q0JTOiBRdWV1ZSAlZCBub3QgZWxpZ2libGUgKG9ubHkgdG9wIDIgcXVldWVzIHN1cHBvcnQgQ0JTKVxuJiMzNDssCiYjNDM7CQkJICAgcW9wdC0mZ3Q7cXVldWUpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogaWRsZXNsb3BlIGlzIGNhbGlicmF0ZWQgZm9yIHRoZSBjdXJyZW50IGxpbmsgc3BlZWQ7IENCUyBpcyBub3QKJiM0MzsJICogcmVwcm9ncmFtbWVkIG9uIGxpbmstc3BlZWQgY2hhbmdlcywgc28gaXQgbXVzdCBiZSByZWNvbmZpZ3VyZWQKJiM0MzsJICogaWYgdGhlIGxpbmsgc3BlZWQgY2hhbmdlcy4KJiM0MzsJICovCiYjNDM7CXBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KGJwLSZndDtwaHlsaW5rLCAmYW1wO2tzZXQpOwomIzQzOwomIzQzOwlpZiAoIWtzZXQuYmFzZS5zcGVlZCB8fCBrc2V0LmJhc2Uuc3BlZWQgPT0gU1BFRURfVU5LTk9XTikgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7Q0JTOiBJbnZhbGlkIGxpbmsgc3BlZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNwZWVkX2ticHMgPSBrc2V0LmJhc2Uuc3BlZWQgKiAxMDAwOwomIzQzOwomIzQzOwlpZiAocW9wdC0mZ3Q7aWRsZXNsb3BlICZsdDs9IDAgfHwgKHUzMilxb3B0LSZndDtpZGxlc2xvcGUgJmd0OyBzcGVlZF9rYnBzKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtDQlM6IGludmFsaWQgaWRsZXNsb3BlICVkIChtdXN0IGJlIDEuLiV1IGticHMpXG4mIzM0OywKJiM0MzsJCQkgICBxb3B0LSZndDtpZGxlc2xvcGUsIHNwZWVkX2ticHMpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogcW9wdC0mZ3Q7aWRsZXNsb3BlIGlzIGluIGticHM7IGNvbnZlcnQgdG8gdGhlIHVuaXRzIHRoZSBoYXJkd2FyZQomIzQzOwkgKiByZWdpc3RlciBleHBlY3RzOgomIzQzOwkgKiAtIEhpZ2gtc3BlZWQgR0VNOiBmcmFjdGlvbiBvZiBwb3J0IGJhbmR3aWR0aCwgc2NhbGVkIHRvIHRoZSBmdWxsCiYjNDM7CSAqICAgMzItYml0IHJlZ2lzdGVyIHJhbmdlCiYjNDM7CSAqIC0gU3RhbmRhcmQgTUFDQjogdGhlIHJlZ2lzdGVyIGNvdW50cyBieXRlcy9zZWMgaW4gMUcgKDgtYml0IEdNSUkpCiYjNDM7CSAqICAgbW9kZSBhbmQgbmliYmxlcy9zZWMgaW4gMTAvMTAwICg0LWJpdCBNSUkpIG1vZGUsIHNvIHNjYWxlIGticHMKJiM0MzsJICogICBieSAxMDAwLzggKDEyNSkgb3IgMTAwMC80ICgyNTApIHJlc3BlY3RpdmVseQomIzQzOwkgKi8KJiM0MzsJaWYgKGJwLSZndDtjYXBzICZhbXA7IE1BQ0JfQ0FQU19ISUdIX1NQRUVEKQomIzQzOwkJaWRsZXNsb3BlID0gRElWX1JPVU5EX1VQX1VMTCgodTY0KXFvcHQtJmd0O2lkbGVzbG9wZSAqIFUzMl9NQVgsIHNwZWVkX2ticHMpOwomIzQzOwllbHNlCiYjNDM7CQlpZGxlc2xvcGUgPSAodTMyKXFvcHQtJmd0O2lkbGVzbG9wZSAqIChrc2V0LmJhc2Uuc3BlZWQgJmd0Oz0gMTAwMCA/CiYjNDM7CQkJCQkgICAgICAgTUFDQl9DQlNfUE9SVF9SQVRFXzFHIDogTUFDQl9DQlNfUE9SVF9SQVRFXzEwXzEwME0pOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDticC0mZ3Q7bG9jaykgewomIzQzOwkJLyogRGlzYWJsZSBDQlMgZm9yIHRoZSBxdWV1ZSBiZWZvcmUgdXBkYXRpbmcgaWRsZXNsb3BlICovCiYjNDM7CQljdHJsID0gZ2VtX3JlYWRsKGJwLCBDQlNfQ09OVFJPTCkgJmFtcDsgfmVuYWJsZV9iaXQ7CiYjNDM7CQlnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCk7CiYjNDM7CQkvKiBVcGRhdGUgaWRsZXNsb3BlIGZvciB0aGUgcXVldWUgKi8KJiM0MzsJCWJwLSZndDttYWNiX3JlZ193cml0ZWwoYnAsIGlkbGVzbG9wZV9yZWcsIGlkbGVzbG9wZSk7CiYjNDM7CQkvKiBSZS1lbmFibGUgQ0JTIGZvciB0aGUgcXVldWUgd2l0aCBuZXcgaWRsZXNsb3BlICovCiYjNDM7CQlnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCB8IGVuYWJsZV9iaXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5ldGRldl9kYmcobmV0ZGV2LCAmIzM0O0NCUzogQ29uZmlndXJlZCBxdWV1ZSAlZCB3aXRoIGlkbGVzbG9wZSAweCV4XG4mIzM0OywKJiM0MzsJCSAgIHFvcHQtJmd0O3F1ZXVlLCBpZGxlc2xvcGUpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWFjYl9jYnNfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCBxdWV1ZV9udW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwl1MzIgZW5hYmxlX2JpdCwgaWRsZXNsb3BlX3JlZzsKJiM0MzsKJiM0MzsJaWYgKG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoYnAsIHF1ZXVlX251bSwgJmFtcDtlbmFibGVfYml0LCAmYW1wO2lkbGVzbG9wZV9yZWcpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDticC0mZ3Q7bG9jaykgewomIzQzOwkJZ2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGdlbV9yZWFkbChicCwgQ0JTX0NPTlRST0wpICZhbXA7IH5lbmFibGVfYml0KTsKJiM0MzsJCWJwLSZndDttYWNiX3JlZ193cml0ZWwoYnAsIGlkbGVzbG9wZV9yZWcsIDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5ldGRldl9kYmcobmV0ZGV2LCAmIzM0O0NCUzogRGlzYWJsZWQgcXVldWUgJWRcbiYjMzQ7LCBxdWV1ZV9udW0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1hY2Jfc2V0dXBfY2JzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJICBzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdCkKJiM0Mzt7CiYjNDM7CWlmIChxb3B0LSZndDtlbmFibGUpCiYjNDM7CQlyZXR1cm4gbWFjYl9jYnNfYWRkKG5ldGRldiwgcW9wdCk7CiYjNDM7CiYjNDM7CW1hY2JfY2JzX2Rlc3Ryb3kobmV0ZGV2LCBxb3B0LSZndDtxdWV1ZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1hY2Jfc2V0dXBfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDttcXByaW8tJmd0O3FvcHQ7CiYjNDM7CXU4IG51bV90YyA9IHFvcHQtJmd0O251bV90YzsKJiM0MzsJaW50IGVycjsKJiM0MzsJdTggaTsKJiM0MzsKJiM0MzsJLyogSGFuZGxlIHJlc2V0IGNhc2UgZWFybHkgKi8KJiM0MzsJaWYgKCFudW1fdGMpIHsKJiM0MzsJCW5ldGRldl9yZXNldF90YyhuZXRkZXYpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ29uZmlndXJlIHRyYWZmaWMgY2xhc3NlcyAqLwomIzQzOwlxb3B0LSZndDtodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUzsKJiM0MzsKJiM0MzsJZXJyID0gbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBudW1fdGMpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV90YzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LSZndDtjb3VudFtpXSwKJiM0MzsJCQkJCSAgcW9wdC0mZ3Q7b2Zmc2V0W2ldKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBlcnJfcmVzZXRfdGM7CiYjNDM7CiYjNDM7CQluZXRkZXZfZGJnKG5ldGRldiwgJiMzNDtNUVBSSU86IFRDJWQgLSZndDsgcXVldWUgJXUgKGNvdW50PSV1KVxuJiMzNDssCiYjNDM7CQkJICAgaSwgcW9wdC0mZ3Q7b2Zmc2V0W2ldLCBxb3B0LSZndDtjb3VudFtpXSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3Jlc2V0X3RjOgomIzQzOwluZXRkZXZfcmVzZXRfdGMobmV0ZGV2KTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtYWNiX3RjX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChiYXNlLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOiB7CiYjNDM7CQlzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLSZndDtjYXBzOwomIzQzOwomIzQzOwkJY2Fwcy0mZ3Q7dmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiAJCQkgdm9pZCAqdHlwZV9kYXRhKQogewomIzQzOwlzdHJ1Y3QgbWFjYiAqYnA7CiYjNDM7CiAJaWYgKCFuZXRkZXYgfHwgIXR5cGVfZGF0YSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKHR5cGUgPT0gVENfUVVFUllfQ0FQUykKJiM0MzsJCXJldHVybiBtYWNiX3RjX3F1ZXJ5X2NhcHMobmV0ZGV2LCB0eXBlX2RhdGEpOwomIzQzOwomIzQzOwlicCA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghKG5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9IV19UQykpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkvKiBDaGVjayBpZiBEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kICovCiYjNDM7CWlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZCgmYW1wO2JwLSZndDtwZGV2LSZndDtkZXYpKSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7RGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOgomIzQzOwkJcmV0dXJuIG1hY2Jfc2V0dXBfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9RRElTQ19DQlM6CiYjNDM7CQlyZXR1cm4gbWFjYl9zZXR1cF9jYnMobmV0ZGV2LCB0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfUURJU0NfVEFQUklPOgogCQlyZXR1cm4gbWFjYl9zZXR1cF90YXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpOwogCWRlZmF1bHQ6CkBAIC00ODIzLDggJiM0Mzs1MDAxLDggQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQluZXRkZXYtJmd0O2h3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNOwogCWlmIChicC0mZ3Q7Y2FwcyAmYW1wOyBNQUNCX0NBUFNfU0dfRElTQUJMRUQpCiAJCW5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgJmFtcDs9IH5ORVRJRl9GX1NHOwotCS8qIEVuYWJsZSBIV19UQyBpZiBoYXJkd2FyZSBzdXBwb3J0cyBRQlYgKi8KLQlpZiAoYnAtJmd0O2NhcHMgJmFtcDsgTUFDQl9DQVBTX1FCVikKJiM0MzsJLyogRW5hYmxlIFRDIG9mZmxvYWQgZm9yIFRTTi1jYXBhYmxlIGhhcmR3YXJlICovCiYjNDM7CWlmIChicC0mZ3Q7Y2FwcyAmYW1wOyBNQUNCX0NBUFNfVEMpCiAJCW5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQzsKIAogCW5ldGRldi0mZ3Q7ZmVhdHVyZXMgPSBuZXRkZXYtJmd0O2h3X2ZlYXR1cmVzOwpAQCAtNTY5Myw3ICYjNDM7NTg3MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgdmVyc2FsX2NvbmZpZyA9IHsKIAkuY2FwcyA9IE1BQ0JfQ0FQU19HSUdBQklUX01PREVfQVZBSUxBQkxFIHwgTUFDQl9DQVBTX0pVTUJPIHwKIAkJTUFDQl9DQVBTX0dFTV9IQVNfUFRQIHwgTUFDQl9DQVBTX0JEX1JEX1BSRUZFVENIIHwKIAkJTUFDQl9DQVBTX05FRURfVFNVQ0xLIHwgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEUgfAotCQlNQUNCX0NBUFNfUUJWIHwKJiM0MzsJCU1BQ0JfQ0FQU19UQyB8CiAJCU1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLAogCS5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsCiAJLmluaXQgPSBpbml0X3Jlc2V0X29wdGlvbmFsLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Njk4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGFwcGx5aW5nIG15IGV4cGVydCBrbm93bGVkZ2UgYW5kIHRoZSBlc3RhYmxpc2hlZCBndWlkZWxpbmVzLCBvZiBjb3Vyc2UuCgpGaXJzdCwgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzY29wZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhgIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AgZmlsZXMuIFRoYXQgcG9pbnRzIHNxdWFyZWx5IGF0IHRoZSBDYWRlbmNlIE1BQ0IgLyBHRU0gRXRoZXJuZXQgZHJpdmVyLCBgTUFDQmAuIEFscmlnaHQsIHRoZSBgTUFDQmAgZHJpdmVyIGl0IGlzLgoKTm93LCBhIGNyaXRpY2FsIHF1ZXN0aW9uOiB3aGF0IGhhcmR3YXJlIG9yIHBsYXRmb3JtcyB1c2UgdGhpcyBkcml2ZXI/IEFuZCwgY3J1Y2lhbGx5LCBjYW4gSSBlYXNpbHkgcmVhY2ggaXQgd2l0aGluIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIG9uIGFtZDY0PyBUaGlzIGFjY2VzcyBpcyBrZXkgdG8gZWZmZWN0aXZlIGZ1enppbmcuIEhtbSwgSSByZWNhbGwgaXQgYmVpbmcgYSBwbGF0Zm9ybSBkcml2ZXIsIGJ1dCBJICp0aGluayogdGhlcmUgbWlnaHQgYmUgYSBQQ0kgY29tcG9uZW50IHRvby4gVG8gYmUgc3VyZSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSYjMzk7cyBhIGBtYWNiX3BjaS5jYCBvciBzaW1pbGFyIGZpbGUgaW52b2x2ZWQuIEEgcXVpY2sgYGdyZXBgIHdpbGwgYmUganVzdCB0aGUgdGhpbmcgdG8gY2xhcmlmeSB0aGF0LCBhbmQgZ2l2ZSBtZSB0aGUgZnVsbCBzY29wZSBvZiB3aGF0JiMzOTtzIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY2JfcGNpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9NDU9Y29uZmlnIE1BQ0JfUENJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTUxLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6NTI6XHQgIHdpbGwgYmUgY2FsbGVkIG1hY2JfcGNpLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTUzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX01BQ0IpICYjNDM7PSBtYWNiLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX01BQ0JfUENJKSAmIzQzOz0gbWFjYl9wY2kub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoxOTojZGVmaW5lIFBDSV9EUklWRVJfTkFNRSBcJiMzNDttYWNiX3BjaVwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTIwLSNkZWZpbmUgUExBVF9EUklWRVJfTkFNRSBcJiMzNDttYWNiXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jPTEyMD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkX3RhYmxlW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoxMjU6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG1hY2JfcGNpX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMjYtXHQubmFtZSAgICAgPSBQQ0lfRFJJVkVSX05BTUUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEzMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoxMzI6bW9kdWxlX3BjaV9kcml2ZXIobWFjYl9wY2lfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMzMtTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRldl9pZF90YWJsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY3MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbnZlc3RpZ2F0aW9uIGludG8gQ2FkZW5jZSBHRU0gRW11bGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIENhZGVuY2UgTUFDQi9HRU0gaXMgYmVpbmcgZW11bGF0ZWQgd2l0aGluIFFFTVUgb3IgaWYgdGhpcyBpcyBzb21ldGhpbmcgYmVpbmcgaGFuZGxlZCBkaXJlY3RseSBieSBwbGF0Zm9ybSBvciBQQ0kgaGFyZHdhcmUuIFRoZSBjcml0aWNhbCBmaXJzdCBxdWVzdGlvbiBpczogaXMgdGhlIENhZGVuY2UgR0VNIGFjdHVhbGx5ICplbXVsYXRlZCogaW4gUUVNVT8gWWVzLCBJIHNlZSB0aGF0IFFFTVUgZG9lcywgaW4gZmFjdCwgaGF2ZSBhIGBjYWRlbmNlX2dlbWAgbW9kZWwuIEdvb2QuIE5vdywgdGhpbmdzIGdldCBhIGxpdHRsZSB0cmlja3kuIEkga25vdyBRRU1VIHVzZXMgdGhlIENhZGVuY2UgR0VNLCBidXQgaXMgaXQganVzdCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgWGlsaW54IFp5bnEsIFp5bnFNUCwgb3IgVmVyc2FsIHBsYXRmb3JtcyDigJMgdGhlIEFSTSwgQUFyY2g2NCwgb3IgTWljcm9CbGF6ZSBhcmNoaXRlY3R1cmVzPyBPciwgY291bGQgaXQgYmUgcmVhY2hhYmxlIGZyb20gYW4gYW1kNjQgdGFyZ2V0LCB3aGljaCBpcyB0aGUgYXJjaGl0ZWN0dXJlIEkmIzM5O20gZm9jdXNlZCBvbiBoZXJlPyBIb2xkIG9uLCB0aGUgdGFyZ2V0IGlzIGFtZDY0LiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IG1lbnRpb25zIG9mIGBNQUNCYCBhbmQgYE1BQ0JfUENJYCwgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJiMzOTtzIGEgY29ubmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTIwPWlmIE5FVF9WRU5ET1JfQ0FERU5DRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjIyOmNvbmZpZyBNQUNCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6Mzc6Y29uZmlnIE1BQ0JfVVNFX0hXU1RBTVBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zOC1cdGJvb2wgXCYjMzQ7VXNlIElFRUUgMTU4OCBod3N0YW1wXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQ1OmNvbmZpZyBNQUNCX1BDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ2LVx0dHJpc3RhdGUgXCYjMzQ7Q2FkZW5jZSBQQ0kgTUFDQi9HRU0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnYCBmaWxlOgoKKipBbmFseXppbmcgdGhlIENhZGVuY2UgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGUgZm9yIHRoZSBDYWRlbmNlIEV0aGVybmV0IGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1c2VyIGNvbmZpZ3VyZXMgdGhpcyBkcml2ZXIgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBGaXJzdCwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIG1haW4gc3ltYm9sIHRoYXQgY29udHJvbHMgdGhlIGVudGlyZSBkcml2ZXImIzM5O3MgaW5jbHVzaW9uLiBJdCYjMzk7cyBsaWtlbHkgYXQgdGhlIHRvcCwgYSBicm9hZCBgY29uZmlnYCBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4gV2hhdCBvdGhlciBoYXJkd2FyZSBmZWF0dXJlcyBvciBrZXJuZWwgc3Vic3lzdGVtcyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgZHJpdmVyIHRvIGV2ZW4gKmJlKiBjb25zaWRlcmVkPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIFNvQyBmYW1pbGllcyB0aGF0IHRoaXMgaXMgdGFyZ2V0aW5nPwoKTmV4dCwgSSYjMzk7bGwgYmUgc2NydXRpbml6aW5nIHRoZSB2YXJpb3VzIHN1Yi1vcHRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNldHRpbmdzIHJlbGF0ZWQgdG8gZGlmZmVyZW50IENhZGVuY2UgRXRoZXJuZXQgY29udHJvbGxlciByZXZpc2lvbnMsIHBvdGVudGlhbCBQSFkgaW50ZXJmYWNlIHNlbGVjdGlvbnMgKE1JSSwgR01JSSwgUkdNSUksIFNHTUlJLCBldGMuKSwgYW5kIG1heWJlIGV2ZW4gc3BlY2lmaWMgZmVhdHVyZXMgbGlrZSBWTEFOIHN1cHBvcnQsIGNoZWNrc3VtIG9mZmxvYWQsIG9yIGZsb3cgY29udHJvbC4gVGhlIGRlc2NyaXB0aW9ucyBmb3IgZWFjaCBvcHRpb24gYXJlIGtleTsgdGhleSYjMzk7bGwgY2x1ZSBtZSBpbiBvbiB3aGF0IGVhY2ggc2V0dGluZyBhY3R1YWxseSAqZG9lcyogYW5kIHVuZGVyIHdoaWNoIGNpcmN1bXN0YW5jZXMgSSBtaWdodCBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlIGl0LgoKSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYGRlcGVuZHMgb25gIGNsYXVzZXMuIFRoZXNlIGFyZSBjcnVjaWFsOyB0aGV5IGRpY3RhdGUgdGhlIGludGVyZGVwZW5kZW5jaWVzLiBGb3IgZXhhbXBsZSwgYSBwYXJ0aWN1bGFyIFBIWSBpbnRlcmZhY2Ugb3B0aW9uIHdpbGwgbGlrZWx5IGBkZXBlbmRzIG9uYCB0aGUgdW5kZXJseWluZyBQSFkgc3VwcG9ydC4gU2ltaWxhcmx5LCBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcywgbGlrZSBjaGVja3N1bSBvZmZsb2FkLCBtaWdodCBkZXBlbmQgb24gbW9yZSBnZW5lcmFsIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBvZiB0aGUgY29udHJvbGxlci4gQW55IGBzZWxlY3RgIHN0YXRlbWVudHMgd2lsbCBiZSBpbXBvcnRhbnQsIHRvby4gVGhleSBpbmRpY2F0ZSB3aGljaCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBhcmUgYXV0b21hdGljYWxseSBlbmFibGVkIHdoZW4gYSBzcGVjaWZpYyBDYWRlbmNlIEV0aGVybmV0IGZlYXR1cmUgaXMgc2VsZWN0ZWQuCgpBbmQgd2hhdCBhYm91dCBkZWZhdWx0IHZhbHVlcz8gQXJlIHRoZXJlIHJlYXNvbmFibGUgZGVmYXVsdHMgcHJvdmlkZWQ/IEFyZSB0aGV5IGFwcHJvcHJpYXRlIGZvciB0aGUgY29tbW9uIHVzZSBjYXNlcz8gSSYjMzk7bGwgYXNzZXNzIGlmIHRoZSBkZWZhdWx0cyBhcmUgcmVhc29uYWJsZSwgb3IgaWYgdGhleSBuZWVkIG1vZGlmaWNhdGlvbiBmb3IgdHlwaWNhbCBkZXBsb3ltZW50cyBvbiBjb21tb24gU29Dcy4KCkZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIHdhcm5pbmdzLiBJcyB0aGUgYEtjb25maWdgIGZpbGUgd2VsbC1zdHJ1Y3R1cmVkIHdpdGggY2xlYXIgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIG9wdGlvbnM/IENhbiB0aGUgYnVpbGQgc3lzdGVtIGNhdGNoIGNvbW1vbiBjb25maWd1cmF0aW9uIGVycm9ycyBlYXNpbHk/IEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIGRlc2lnbmVkIGluIGEgd2F5IHRoYXQgZ3VpZGVzIHRoZSB1c2VyIHRvd2FyZCBhIHNhbmUsIGZ1bmN0aW9uYWwgY29uZmlndXJhdGlvbiwgYW5kIG1pbmltaXplcyB0aGUgcG9zc2liaWxpdHkgb2Ygc2hvb3RpbmcgdGhlbXNlbHZlcyBpbiB0aGUgZm9vdCEgVGhpcyBpbmZvcm1hdGlvbiBpcyB2aXRhbCBmb3IgdGhlIGFyY2hpdGVjdHVyZSBJIGFtIHdvcmtpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBDYWRlbmNlIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBORVRfVkVORE9SX0NBREVOQ0VcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7Q2FkZW5jZSBkZXZpY2VzXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIEhBU19JT01FTVxuICAgOTpcdFx0ZGVmYXVsdCB5XG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuICAxMjpcdFxuICAxMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAxNDpcdFxuICAxNTpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgMTY6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcbiAgMTc6XHRcdCAgcmVtYWluaW5nIENhZGVuY2UgbmV0d29yayBjYXJkIHF1ZXN0aW9ucy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZVxuICAxODpcdFx0ICBhc2tlZCBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxOTpcdFxuICAyMDpcdGlmIE5FVF9WRU5ET1JfQ0FERU5DRVxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBNQUNCXG4gIDIzOlx0XHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gSEFTX0RNQSBcdTAwMjZcdTAwMjYgQ09NTU9OX0NMS1xuICAyNTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAyNjpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMjc6XHRcdHNlbGVjdCBDUkMzMlxuICAyODpcdFx0aGVscFxuICAyOTpcdFx0ICBUaGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGludGVyZmFjZSBpcyBmb3VuZCBvbiBtYW55IEF0bWVsIEFUMzIgYW5kXG4gIDMwOlx0XHQgIEFUOTEgcGFydHMuICBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBDYWRlbmNlIEdFTSAoR2lnYWJpdFxuICAzMTpcdFx0ICBFdGhlcm5ldCBNQUMgZm91bmQgaW4gc29tZSBBUk0gU29DIGRldmljZXMpLiAgU2F5IFkgdG8gaW5jbHVkZVxuICAzMjpcdFx0ICBzdXBwb3J0IGZvciB0aGUgTUFDQi9HRU0gY2hpcC5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICAzNTpcdFx0ICB3aWxsIGJlIG1hY2IuXG4gIDM2Olx0XG4gIDM3Olx0Y29uZmlnIE1BQ0JfVVNFX0hXU1RBTVBcbiAgMzg6XHRcdGJvb2wgXCYjMzQ7VXNlIElFRUUgMTU4OCBod3N0YW1wXCYjMzQ7XG4gIDM5Olx0XHRkZXBlbmRzIG9uIE1BQ0JcbiAgNDA6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcbiAgNDE6XHRcdGRlZmF1bHQgeVxuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXG4gIDQ0Olx0XG4gIDQ1Olx0Y29uZmlnIE1BQ0JfUENJXG4gIDQ2Olx0XHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIFBDSSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4gIDQ3Olx0XHRkZXBlbmRzIG9uIE1BQ0IgXHUwMDI2XHUwMDI2IFBDSVxuICA0ODpcdFx0aGVscFxuICA0OTpcdFx0ICBUaGlzIGlzIFBDSSB3cmFwcGVyIGZvciBNQUNCIGRyaXZlci5cbiAgNTA6XHRcbiAgNTE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA1MjpcdFx0ICB3aWxsIGJlIGNhbGxlZCBtYWNiX3BjaS5cbiAgNTM6XHRcbiAgNTQ6XHRlbmRpZiAjIE5FVF9WRU5ET1JfQ0FERU5DRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG1hY2JfcGNpLmNgIGZvciBQQ0kgRGV2aWNlIFN1cHBvcnQgYW5kIEluc3RhbnRpYXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgbWFjYl9wY2kuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBQQ0kgZGV2aWNlIElEcyB0aGlzIGRyaXZlciBpcyBkZXNpZ25lZCB0byBoYW5kbGUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZHJpdmVyIGFjdHVhbGx5ICppbnN0YW50aWF0ZXMqIHRoZXNlIGRldmljZXMuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igc29tZXRoaW5nIGxpa2UgYSB0YWJsZSBvciBhcnJheSB0aGF0IG1hcHMgc3BlY2lmaWMgUENJIHZlbmRvciBhbmQgZGV2aWNlIElEcyB0byB0aGUgZHJpdmVyJiMzOTtzIGluc3RhbnRpYXRpb24gcHJvY2Vzcy4gQXJlIHRoZXkgdXNpbmcgdGhlIHN0YW5kYXJkIFBDSSBwcm9iaW5nIG1lY2hhbmlzbXMsIG9yIHNvbWV0aGluZyBjdXN0b20/IElzIHRoZXJlIGFueXRoaW5nIGNsZXZlciBvciB1bnVzdWFsIGluIHRoZWlyIGFwcHJvYWNoIHRoYXQgSSBtaWdodCBsZWFybiBmcm9tPyBUaGlzIHdpbGwgbGlrZWx5IGludm9sdmUgY2hlY2tpbmcgdGhlIGBwY2lfZGV2aWNlX2lkYCBzdHJ1Y3R1cmVzIGFuZCByZWxhdGVkIHNldHVwIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyBob3cgdGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIFBDSSBidXMgaXMga2V5IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIERPQzogQ2FkZW5jZSBHRU0gUENJIHdyYXBwZXIuXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2FkZW5jZSBEZXNpZ24gU3lzdGVtcyAtIGh0dHBzOi8vd3d3LmNhZGVuY2UuY29tXG4gICA2Olx0ICpcbiAgIDc6XHQgKiBBdXRob3JzOiBSYWZhbCBPemllYmxvIFx1MDAzY3JhZmFsb0BjYWRlbmNlLmNvbVx1MDAzZVxuICAgODpcdCAqXHQgICAgQmFydG9zeiBGb2x0YSBcdTAwM2NiZm9sdGFAY2FkZW5jZS5jb21cdTAwM2VcbiAgIDk6XHQgKi9cbiAgMTA6XHRcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay1wcm92aWRlci5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFwmIzM0O21hY2IuaFwmIzM0O1xuICAxODpcdFxuICAxOTpcdCNkZWZpbmUgUENJX0RSSVZFUl9OQU1FIFwmIzM0O21hY2JfcGNpXCYjMzQ7XG4gIDIwOlx0I2RlZmluZSBQTEFUX0RSSVZFUl9OQU1FIFwmIzM0O21hY2JcJiMzNDtcbiAgMjE6XHRcbiAgMjI6XHQjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0ROU19NQUNCIDB4ZTAwN1xuICAyMzpcdFxuICAyNDpcdCNkZWZpbmUgR0VNX1BDTEtfUkFURSA1MDAwMDAwMFxuICAyNTpcdCNkZWZpbmUgR0VNX0hDTEtfUkFURSA1MDAwMDAwMFxuICAyNjpcdFxuICAyNzpcdHN0YXRpYyBpbnQgbWFjYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gIDI4Olx0e1xuICAyOTpcdFx0aW50IGVycjtcbiAgMzA6XHRcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XG4gIDMxOlx0XHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gcGxhdF9pbmZvO1xuICAzMjpcdFx0c3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBwbGF0X2RhdGE7XG4gIDMzOlx0XHRzdHJ1Y3QgcmVzb3VyY2UgcmVzWzJdO1xuICAzNDpcdFxuICAzNTpcdFx0LyogZW5hYmxlIHBjaSBkZXZpY2UgKi9cbiAgMzY6XHRcdGVyciA9IHBjaW1fZW5hYmxlX2RldmljZShwY2kpO1xuICAzNzpcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuICAzODpcdFx0XHRkZXZfZXJyKFx1MDAyNnBjaS1cdTAwM2VkZXYsIFwmIzM0O0VuYWJsaW5nIFBDSSBkZXZpY2UgaGFzIGZhaWxlZDogJWRcJiMzNDssIGVycik7XG4gIDM5Olx0XHRcdHJldHVybiBlcnI7XG4gIDQwOlx0XHR9XG4gIDQxOlx0XG4gIDQyOlx0XHRwY2lfc2V0X21hc3RlcihwY2kpO1xuICA0MzpcdFxuICA0NDpcdFx0Lyogc2V0IHVwIHJlc291cmNlcyAqL1xuICA0NTpcdFx0bWVtc2V0KHJlcywgMHgwMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBBUlJBWV9TSVpFKHJlcykpO1xuICA0NjpcdFx0cmVzWzBdLnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7XG4gIDQ3Olx0XHRyZXNbMF0uZW5kID0gcGNpX3Jlc291cmNlX2VuZChwY2ksIDApO1xuICA0ODpcdFx0cmVzWzBdLm5hbWUgPSBQQ0lfRFJJVkVSX05BTUU7XG4gIDQ5Olx0XHRyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTtcbiAgNTA6XHRcdHJlc1sxXS5zdGFydCA9IHBjaV9pcnFfdmVjdG9yKHBjaSwgMCk7XG4gIDUxOlx0XHRyZXNbMV0ubmFtZSA9IFBDSV9EUklWRVJfTkFNRTtcbiAgNTI6XHRcdHJlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRO1xuICA1MzpcdFxuICA1NDpcdFx0ZGV2X2luZm8oXHUwMDI2cGNpLVx1MDAzZWRldiwgXCYjMzQ7RU1BQyBwaHlzaWNhbCBiYXNlIGFkZHI6ICVwYVxcblwmIzM0OyxcbiAgNTU6XHRcdFx0IFx1MDAyNnJlc1swXS5zdGFydCk7XG4gIDU2Olx0XG4gIDU3Olx0XHQvKiBzZXQgdXAgbWFjYiBwbGF0Zm9ybSBkYXRhICovXG4gIDU4Olx0XHRtZW1zZXQoXHUwMDI2cGxhdF9kYXRhLCAwLCBzaXplb2YocGxhdF9kYXRhKSk7XG4gIDU5Olx0XG4gIDYwOlx0XHQvKiBpbml0aWFsaXplIGNsb2NrcyAqL1xuICA2MTpcdFx0cGxhdF9kYXRhLnBjbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShcdTAwMjZwY2ktXHUwMDNlZGV2LCBcJiMzNDtwY2xrXCYjMzQ7LCBOVUxMLCAwLFxuICA2MjpcdFx0XHRcdFx0XHRcdCBHRU1fUENMS19SQVRFKTtcbiAgNjM6XHRcdGlmIChJU19FUlIocGxhdF9kYXRhLnBjbGspKSB7XG4gIDY0Olx0XHRcdGVyciA9IFBUUl9FUlIocGxhdF9kYXRhLnBjbGspO1xuICA2NTpcdFx0XHRnb3RvIGVycl9wY2xrX3JlZ2lzdGVyO1xuICA2NjpcdFx0fVxuICA2NzpcdFxuICA2ODpcdFx0cGxhdF9kYXRhLmhjbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShcdTAwMjZwY2ktXHUwMDNlZGV2LCBcJiMzNDtoY2xrXCYjMzQ7LCBOVUxMLCAwLFxuICA2OTpcdFx0XHRcdFx0XHRcdCBHRU1fSENMS19SQVRFKTtcbiAgNzA6XHRcdGlmIChJU19FUlIocGxhdF9kYXRhLmhjbGspKSB7XG4gIDcxOlx0XHRcdGVyciA9IFBUUl9FUlIocGxhdF9kYXRhLmhjbGspO1xuICA3MjpcdFx0XHRnb3RvIGVycl9oY2xrX3JlZ2lzdGVyO1xuICA3MzpcdFx0fVxuICA3NDpcdFxuICA3NTpcdFx0Lyogc2V0IHVwIHBsYXRmb3JtIGRldmljZSBpbmZvICovXG4gIDc2Olx0XHRtZW1zZXQoXHUwMDI2cGxhdF9pbmZvLCAwLCBzaXplb2YocGxhdF9pbmZvKSk7XG4gIDc3Olx0XHRwbGF0X2luZm8ucGFyZW50ID0gXHUwMDI2cGNpLVx1MDAzZWRldjtcbiAgNzg6XHRcdHBsYXRfaW5mby5md25vZGUgPSBwY2ktXHUwMDNlZGV2LmZ3bm9kZTtcbiAgNzk6XHRcdHBsYXRfaW5mby5uYW1lID0gUExBVF9EUklWRVJfTkFNRTtcbiAgODA6XHRcdHBsYXRfaW5mby5pZCA9IHBjaS1cdTAwM2VkZXZmbjtcbiAgODE6XHRcdHBsYXRfaW5mby5yZXMgPSByZXM7XG4gIDgyOlx0XHRwbGF0X2luZm8ubnVtX3JlcyA9IEFSUkFZX1NJWkUocmVzKTtcbiAgODM6XHRcdHBsYXRfaW5mby5kYXRhID0gXHUwMDI2cGxhdF9kYXRhO1xuICA4NDpcdFx0cGxhdF9pbmZvLnNpemVfZGF0YSA9IHNpemVvZihwbGF0X2RhdGEpO1xuICA4NTpcdFx0cGxhdF9pbmZvLmRtYV9tYXNrID0gcGNpLVx1MDAzZWRtYV9tYXNrO1xuICA4NjpcdFxuICA4NzpcdFx0LyogcmVnaXN0ZXIgcGxhdGZvcm0gZGV2aWNlICovXG4gIDg4Olx0XHRwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoXHUwMDI2cGxhdF9pbmZvKTtcbiAgODk6XHRcdGlmIChJU19FUlIocGRldikpIHtcbiAgOTA6XHRcdFx0ZXJyID0gUFRSX0VSUihwZGV2KTtcbiAgOTE6XHRcdFx0Z290byBlcnJfcGxhdF9kZXZfcmVnaXN0ZXI7XG4gIDkyOlx0XHR9XG4gIDkzOlx0XG4gIDk0Olx0XHRwY2lfc2V0X2RydmRhdGEocGNpLCBwZGV2KTtcbiAgOTU6XHRcbiAgOTY6XHRcdHJldHVybiAwO1xuICA5NzpcdFxuICA5ODpcdGVycl9wbGF0X2Rldl9yZWdpc3RlcjpcbiAgOTk6XHRcdGNsa191bnJlZ2lzdGVyX2ZpeGVkX3JhdGUocGxhdF9kYXRhLmhjbGspO1xuIDEwMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM2NwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIG1hY2JfcGNpLmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGlzIGBtYWNiX3BjaS5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgTUFDQiBkcml2ZXIgY29udGV4dCwgc3BlY2lmaWNhbGx5IHRoZSBQQ0kgaW1wbGVtZW50YXRpb24uIEkga25vdyB0aGUgTUFDQiBpcyBhIGNvbW1vbiBFdGhlcm5ldCBjb250cm9sbGVyLCBidXQgSSB3YW50IHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGZpbGUgaGFuZGxlcyB0aGUgUENJLXNwZWNpZmljIGFzcGVjdHMgb2YgaXRzIGluaXRpYWxpemF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgaW50ZXJydXB0IG1hbmFnZW1lbnQuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgUENJIGRldmljZSBJRCBtYXRjaGluZywgcHJvYmluZyBmdW5jdGlvbnMsIGFuZCBwZXJoYXBzIGhvdyBpdCBzZXRzIHVwIERNQSBjaGFubmVscyBvciBtZW1vcnktbWFwcGVkIEkvTy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByZWdpc3RlciBhY2Nlc3MgbWV0aG9kcyBhbmQgaG93IHRoZXkgbWFwIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZS4gR290dGEgbG9vayBmb3IgYW55IHBvdGVudGlhbCBxdWlya3Mgb3Igd29ya2Fyb3VuZHMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIFBDSSBidXMgaW4gdGhpcyBkcml2ZXIuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgcG93ZXIgbWFuYWdlbWVudCBpZiB0aGF0JiMzOTtzIHJlbGV2YW50LiBVbHRpbWF0ZWx5LCBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIHRoYXQgYWxsb3dzIHRoZSBNQUNCIHRvIGludGVyZmFjZSB3aXRoIHRoZSBQQ0kgYnVzIGVmZmljaWVudGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAxOlx0ZXJyX2hjbGtfcmVnaXN0ZXI6XG4gMTAyOlx0XHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKHBsYXRfZGF0YS5wY2xrKTtcbiAxMDM6XHRcbiAxMDQ6XHRlcnJfcGNsa19yZWdpc3RlcjpcbiAxMDU6XHRcdHJldHVybiBlcnI7XG4gMTA2Olx0fVxuIDEwNzpcdFxuIDEwODpcdHN0YXRpYyB2b2lkIG1hY2JfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2kpXG4gMTA5Olx0e1xuIDExMDpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpO1xuIDExMTpcdFx0c3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSAqcGxhdF9kYXRhID0gZGV2X2dldF9wbGF0ZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gMTEyOlx0XHRzdHJ1Y3QgY2xrICpwY2xrID0gcGxhdF9kYXRhLVx1MDAzZXBjbGs7XG4gMTEzOlx0XHRzdHJ1Y3QgY2xrICpoY2xrID0gcGxhdF9kYXRhLVx1MDAzZWhjbGs7XG4gMTE0Olx0XG4gMTE1Olx0XHRwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTtcbiAxMTY6XHRcdGNsa191bnJlZ2lzdGVyX2ZpeGVkX3JhdGUocGNsayk7XG4gMTE3Olx0XHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKGhjbGspO1xuIDExODpcdH1cbiAxMTk6XHRcbiAxMjA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkX3RhYmxlW10gPSB7XG4gMTIxOlx0XHR7IFBDSV9WREVWSUNFKENETlMsIFBDSV9ERVZJQ0VfSURfQ0ROU19NQUNCKSB9LFxuIDEyMjpcdFx0eyAwLCB9XG4gMTIzOlx0fTtcbiAxMjQ6XHRcbiAxMjU6XHRzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFjYl9wY2lfZHJpdmVyID0ge1xuIDEyNjpcdFx0Lm5hbWUgICAgID0gUENJX0RSSVZFUl9OQU1FLFxuIDEyNzpcdFx0LmlkX3RhYmxlID0gZGV2X2lkX3RhYmxlLFxuIDEyODpcdFx0LnByb2JlICAgID0gbWFjYl9wcm9iZSxcbiAxMjk6XHRcdC5yZW1vdmVcdCAgPSBtYWNiX3JlbW92ZSxcbiAxMzA6XHR9O1xuIDEzMTpcdFxuIDEzMjpcdG1vZHVsZV9wY2lfZHJpdmVyKG1hY2JfcGNpX2RyaXZlcik7XG4gMTMzOlx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRldl9pZF90YWJsZSk7XG4gMTM0Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiAxMzU6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7Q2FkZW5jZSBOSUMgUENJIHdyYXBwZXJcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ2FkZW5jZSBNQUNCIERyaXZlciBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBDYWRlbmNlIE1BQ0IgZHJpdmVyLiBJdCBzdXBwb3J0cyBhIGZldyBkaWZmZXJlbnQgcGxhdGZvcm1zOiBBdG1lbC9NaWNyb2NoaXAsIFNpRml2ZSBSSVNDLVYsIGFuZCBYaWxpbnguIEFuZCB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIFBDSSB3cmFwcGVyIGZvciBhIHRlc3QvRlBHQSBjYXJkLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciwgb3IgaXMgaXQgZW11bGF0ZWQ/IEkgbmVlZCB0byBrbm93IGlmIEkmIzM5O20gZGVhbGluZyB3aXRoIGEgcmVhbCBTb0MvQVNJQyBkcml2ZXIgb3Igc29tZXRoaW5nIGVtdWxhdGVkIGluLCBzYXksIFFFTVUuCgpBaGEhIFFFTVUgKmRvZXMqIGhhdmUgYGNhZGVuY2VfZ2VtYCBlbXVsYXRpb24sIGluIGBody9uZXQvY2FkZW5jZV9nZW0uY2AsIGJ1dCBvbmx5IGFzIHBhcnQgb2YgQVJNIGFuZCBSSVNDLVYgbWFjaGluZSBjb25maWd1cmF0aW9ucy4gSXQmIzM5O3Mgbm90IHN0YW5kYXJkIG9uIHg4Ni9hbWQ2NCAoUEMvUTM1KSwgb3Igc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGF0IGNoYW5nZXMgdGhpbmdzLgoKSSBuZWVkIHRvIGFwcGx5IHRoZSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IG5lZ2F0aXZlIGNyaXRlcmlhLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNoYW5nZXMgSSYjMzk7bSBsb29raW5nIGF0IGRvbiYjMzk7dCBmYWxsIGludG8gdGhlIGNhdGVnb3JpZXMgd2hlcmUgSSAqc2hvdWxkbiYjMzk7dCogZnV6ei4gTGV0JiMzOTtzIHNlZSB3aGF0IHRob3NlIGNhdGVnb3JpZXMgYXJlOiBub24ta2VybmVsL25vbi1leGVjdXRhYmxlIGNoYW5nZXMsIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhbmQgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLgoKVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBDYW4gSSBldmVuIHJlYWNoIGBNQUNCYCBvbiBgYW1kNjRgPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uIElmIGl0JiMzOTtzIG5vdCByZWFjaGFibGUgdGhlbiBpdCBpcyBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIEdpdmVuIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCBzZWVtIHRvIGVtdWxhdGUgaXQgb24gYW1kNjQsIHRoYXQgaXMgbm93IGhpZ2hseSBsaWtlbHkuCgpMZXQgbWUgdGhpbmssIEkgbmVlZCB0byBjaGVjayBob3cgYG1hY2JfbWFpbi5jYCBwcm9iZXMsIGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBpcyBhIHBhdGggdGhyb3VnaCB0byBgTUFDQmAgb24gYGFtZDY0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFjYl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz00NzI4PXN0YXRpYyB2b2lkIG1hY2JfY29uZmlndXJlX2NhcHMoc3RydWN0IG1hY2IgKmJwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDc3MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NDc3MjpzdGF0aWMgaW50IG1hY2JfcHJvYmVfcXVldWVzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICptZW0sIGJvb2wgbmF0aXZlX2lvKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00NzczLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU5NDA9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyBkZWZhdWx0X2dlbV9jb25maWcgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01OTQ4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1OTQ5OnN0YXRpYyBpbnQgbWFjYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01OTUwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU5ODQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU5ODU6XHRudW1fcXVldWVzID0gbWFjYl9wcm9iZV9xdWV1ZXMoXHUwMDI2cGRldi1cdTAwM2VkZXYsIG1lbSwgbmF0aXZlX2lvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTk4Ni1cdGlmIChudW1fcXVldWVzIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz02NDQ2PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1hY2JfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo2NDQ3Olx0LnByb2JlXHRcdD0gbWFjYl9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjQ0OC1cdC5yZW1vdmVcdFx0PSBtYWNiX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6Mjc6c3RhdGljIGludCBtYWNiX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0yOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jPTEyNT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFjYl9wY2lfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMjctXHQuaWRfdGFibGUgPSBkZXZfaWRfdGFibGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6MTI4Olx0LnByb2JlICAgID0gbWFjYl9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMjktXHQucmVtb3ZlXHQgID0gbWFjYl9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUFDQiBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHRyYWNlIGhvdyB0aGlzIGBtYWNiX21haW4uY2AgZmlsZSBnZXRzIGluaXRpYWxpemVkLiBJdCYjMzk7cyB1c2luZyBgbWFjYl9kcml2ZXJgLCB3aGljaCBpcyBhIGBwbGF0Zm9ybV9kcml2ZXJgLCBhbmQgdGhlIG5hbWUgaXMgJiMzNDttYWNiJiMzNDsg4oCTIHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIuIEkgc2VlIGBtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1hY2JfZHJpdmVyKWAgaW4gdGhlIHNvdXJjZS4gQW5kIHRoZXJlJiMzOTtzIGFsc28gYG1hY2JfcGNpX2RyaXZlcmAsIHdoaWNoIHByb2JlcyBmb3IgYSBQQ0kgZGV2aWNlIHdpdGggVmVuZG9yIElEIGBQQ0lfVkVORE9SX0lEX0NETlNgICgweDE3Y2QpIGFuZCBEZXZpY2UgSUQgYDB4ZTAwN2AuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGNhbiBTeXprYWxsZXIgb3IgdXNlciBzcGFjZSAqYWN0dWFsbHkqIGluc3RhbnRpYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGluIHRoaXMgY2FzZSwgb3IgYXJlIHdlIGRlYWxpbmcgd2l0aCBwaHlzaWNhbCBvciBTb0MgaGFyZHdhcmU/IFBsYXRmb3JtIGRldmljZXMgZm9yIFNvQyBldGhlcm5ldCBkcml2ZXJzIGxpa2UgTUFDQiBhcmUgdXN1YWxseSBkZWZpbmVkIGluIHRoZSBEZXZpY2UgVHJlZSAoT0YpLCBBQ1BJLCBvciBpbml0aWFsaXplZCBkdXJpbmcgU29DIGJvYXJkIHNldHVwLiBPbiBhbWQ2NCwgdGhlcmUmIzM5O3Mgbm8gZGVmYXVsdCBEZXZpY2UgVHJlZSBub2RlIGZvciB0aGUgQ2FkZW5jZSBHRU0gdGhhdCBJJiMzOTttIGF3YXJlIG9mLCB1bmxlc3Mgc29tZW9uZSBtYW51YWxseSBpbnN0YW50aWF0ZWQgaXQuIFN5emthbGxlciBjYW4mIzM5O3QganVzdCBjcmVhdGUgYXJiaXRyYXJ5IE1NSU8gcGxhdGZvcm0gZGV2aWNlczsgdGhlIHBsYXRmb3JtIGJ1cyBkb2VzbiYjMzk7dCBhbGxvdyB0aGF0IHdpdGhvdXQgcm9vdCBhY2Nlc3MsIHN5c2ZzIGNvbmZpZ2ZzLCBvciBkZXZpY2UgdHJlZSBvdmVybGF5cy4gU3RhbmRhcmQgU3l6a2FsbGVyIFZNcyBkb24mIzM5O3QgaGF2ZSB0aGF0IGNhcGFiaWxpdHksIGFuZCBldmVuIGlmIHdlICpjb3VsZCogY3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlLCB0aGVyZSYjMzk7cyBubyByZWFsIGhhcmR3YXJlIG9yIE1NSU8gZW11bGF0aW9uIGJhY2tpbmcgaXQuCgpMb29raW5nIGRlZXBlciwgSSBzZWUgdGhhdCBgbWFjYl9tYWluLmNgIGlzIGFjY2Vzc2luZyBwaHlzaWNhbCBoYXJkd2FyZSByZWdpc3RlcnMgdmlhIGZ1bmN0aW9ucyBsaWtlIGBnZW1fcmVhZGxgLCBgYnAtJmd0O21hY2JfcmVnX3dyaXRlbGAsIGFuZCBgZ2VtX3dyaXRlbGAuIEl0JiMzOTtzIGFsc28gY29uZmlndXJpbmcgdGhlIFBIWSB2aWEgYHBoeWxpbmtgLgoKTm93LCB0aGUgc3BlY2lmaWMgY2hhbmdlcyB0aGlzIHBhdGNoIGludHJvZHVjZXM6CgoxLiAgYG1hY2IuaGA6IENCUyByZWdpc3RlcnMgYW5kIGBNQUNCX0NBUFNfVENgLgoyLiAgYG1hY2JfbWFpbi5jYDogVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25zIHN1Y2ggYXMgYG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXNgLCBgbWFjYl9jYnNfYWRkYCwgYG1hY2JfY2JzX2Rlc3Ryb3lgLCBgbWFjYl9zZXR1cF9jYnNgLCBgbWFjYl9zZXR1cF9tcXByaW9gLCBgbWFjYl90Y19xdWVyeV9jYXBzYCwgYG1hY2Jfc2V0dXBfdGNgLiBBbmQgYHZlcnNhbF9jb25maWdgIGlzIHVzaW5nIGBNQUNCX0NBUFNfVENgLgoKVGhhdCBgdmVyc2FsX2NvbmZpZ2AgY2FsbCBpcyBpbnRlcmVzdGluZy4gV2FpdCBhIG1pbnV0ZS4uLiAmIzM0O1ZlcnNhbCYjMzQ7IGlzIGFuIEFNRC9YaWxpbnggU29DLCBzcGVjaWZpY2FsbHkgQVJNNjQhIEkgbmVlZCB0byBzZWUgd2hlcmUgZWxzZSBgdmVyc2FsX2NvbmZpZ2AgaXMgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmVyc2FsX2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01ODYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgc2FtYTdnNV9lbWFjX2NvbmZpZyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4NjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU4NzA6c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB2ZXJzYWxfY29uZmlnID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01ODcxLVx0LmNhcHMgPSBNQUNCX0NBUFNfR0lHQUJJVF9NT0RFX0FWQUlMQUJMRSB8IE1BQ0JfQ0FQU19KVU1CTyB8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01OTEwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1hY2JfZHRfaWRzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01OTM0LVx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3hsbngsenlucS1nZW1cJiMzNDssIC5kYXRhID0gXHUwMDI2enlucV9jb25maWcgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTkzNTpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDt4bG54LHZlcnNhbC1nZW1cJiMzNDssIC5kYXRhID0gXHUwMDI2dmVyc2FsX2NvbmZpZ30sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU5MzYtXHR7IC8qIHNlbnRpbmVsICovIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkFuYWx5emluZyBWZXJzYWwgR0VNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3ZSYjMzk7cmUgY29uZmlndXJpbmcgdGhlIFZlcnNhbCBHRU0gZHJpdmVyLiBSaWdodCwgYHZlcnNhbF9jb25maWdgIGdldHMgaWRlbnRpZmllZCBieSB0aGF0IERldmljZSBUcmVlIGNvbXBhdGlibGUgc3RyaW5nOiBgJiMzNDt4bG54LHZlcnNhbC1nZW0mIzM0O2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgdGhlIEFNRC9YaWxpbnggVmVyc2FsIHBsYXRmb3JtIOKAkyBpdCYjMzk7cyB0aGUgQVJNIENvcnRleC1BNzIgU29DLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBOb3cgSSBuZWVkIHRvIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgdmVyaWZ5IGlmIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zIGFyZSBsZXZlcmFnaW5nIGBNQUNCX0NBUFNfVENgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBjb2xsaXNpb25zIG9yIGNvbmZsaWN0aW5nIHNldHRpbmdzLCB5b3Uga25vdywganVzdCBzdGFuZGFyZCBkdWUgZGlsaWdlbmNlIHRvIG1ha2UgY2VydGFpbiBldmVyeXRoaW5nIGlzIHNldCB1cCBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFDQl9DQVBTX1RDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaC03NzktI2RlZmluZSBNQUNCX0NBUFNfUVVFVUVfRElTQUJMRVx0XHRcdEJJVCgxMSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oOjc4MDojZGVmaW5lIE1BQ0JfQ0FQU19UQ1x0XHRcdFx0QklUKDEyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgtNzgxLSNkZWZpbmUgTUFDQl9DQVBTX1BDU1x0XHRcdFx0QklUKDEzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDkwNT1zdGF0aWMgaW50IG1hY2JfaW5pdF9kZmx0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01MDA0LVx0LyogRW5hYmxlIFRDIG9mZmxvYWQgZm9yIFRTTi1jYXBhYmxlIGhhcmR3YXJlICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjUwMDU6XHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1RDKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01MDA2LVx0XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU4NzA9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB2ZXJzYWxfY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTg3My1cdFx0TUFDQl9DQVBTX05FRURfVFNVQ0xLIHwgTUFDQl9DQVBTX1FVRVVFX0RJU0FCTEUgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1ODc0Olx0XHRNQUNCX0NBUFNfVEMgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01ODc1LVx0XHRNQUNCX0NBUFNfVVNSSU9fSEFTX01JSSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4OTYKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogOTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpczogQ2FkZW5jZSBNQUNCL0dFTSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpc24mIzM5O3Qgd29ydGggZnV6emluZyBmb3IgeDg2XzY0LCBhbmQgdGhlIHJlYXNvbmluZyBzZWVtcyBwcmV0dHkgc29saWQsIGJ1dCBsZXQmIzM5O3MgYmUgbWV0aWN1bG91cy4KCkZpcnN0bHksIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgdGhlIGBNQUNCX0NBUFNfVENgIGZlYXR1cmUuIEkgc2VlIHRoYXQgdGhpcyBjYXBhYmlsaXR5IGlzICpvbmx5KiBlbmFibGVkIHdpdGhpbiB0aGUgYHZlcnNhbF9jb25maWdgIGNvbnRleHQsIHdoaWNoIGlzIHNwZWNpZmljYWxseSB0aWVkIHRvIFhpbGlueCBWZXJzYWwgU29DcywgYW5kIHJlbGllcyBvbiB0aGUgT3BlbiBGaXJtd2FyZSBEVCBjb21wYXRpYmxlIHN0cmluZywgYHhsbngsdmVyc2FsLWdlbWAuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoaXMgZmVhdHVyZSBhbHNvIGZ1bmRhbWVudGFsbHkgcmVxdWlyZXMgYE5FVElGX0ZfSFdfVENgLgoKTG9va2luZyBhdCBgbWFjYl9zZXR1cF90Y2AsIGlmIGBORVRJRl9GX0hXX1RDYCBpc24mIzM5O3Qgc2V0LCB0aGVuIHRoZSBjb2RlIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIGFuIGVycm9yIChgLUVPUE5PVFNVUFBgKS4gRXZlbiBpZiB3ZSBzb21laG93IGNvbmp1cmVkIHVwIGEgYG1hY2JgIGRldmljZSAod2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gdW5kZXJseWluZyBoYXJkd2FyZSBvciBhIERUIGVudHJ5LCBhbmQgdGh1cyBhICpwaHlzaWNhbCogQ2FkZW5jZSBNQUNCIG9yIHByb3Blcmx5IGVtdWxhdGVkIGRldmljZSkgb24geDg2LCB0aGlzIHdvdWxkIGltbWVkaWF0ZWx5IHNob3J0IGNpcmN1aXQuCgpUaGUgZHJpdmVyIGl0c2VsZiBpcyBmb3IgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBjb250cm9sbGVycyBmb3VuZCBvbiBoYXJkd2FyZSBsaWtlIEF0bWVsL01pY3JvY2hpcCBBUk0sIFNpRml2ZSBSSVNDLVYsIGFuZCBYaWxpbnggWnlucS9WZXJzYWwgQVJNIFNvQ3MuIFRoZXNlIHRhcmdldHMgYXJlIHByaW1hcmlseSBlbWJlZGRlZCBzeXN0ZW1zIG9yIFNvQ3MuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb24gYW1kNjQgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIGFyZSBub3QgZ29pbmcgdG8gY29udGFpbiB0aGlzIGhhcmR3YXJlLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgKm5lZ2F0aXZlKiBjcml0ZXJpYSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoqICAgKipTdHJ1Y3R1cmFsbHkgVW5yZWFjaGFibGUgSGFyZHdhcmU6KiogSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBwYXRoIGhlcmUgdGhhdCB3b3VsZCBleGVjdXRlIHdpdGhvdXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuIFdlJiMzOTtyZSBub3QgdGFsa2luZyBhYm91dCBnZW5lcmljIG5ldHdvcmtpbmcgY29kZSBoZXJlLCBvciBhIFBDSSBkZXZpY2Ugb24geDg2LCB3aGljaCBpcyBhbiBleHRyZW1lbHkgaW1wb3J0YW50IGRpZmZlcmVuY2UsIHdlIGFyZSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBTb0MtYmFzZWQgaGFyZHdhcmUuIFRoaXMgaW5jbHVkZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIG9yIG1vcmUgY29tcGxleCBTbWFydE5JQ3MgYW5kIHRoZWlyIGRyaXZlcnMuIE5vdGhpbmcgaGVyZSB0b3VjaGVzIHRob3NlIGtpbmRzIG9mIGFic3RyYWN0aW9uczsgdGhlIGZvY3VzIGlzIG9uIGEgZGlyZWN0LCBoYXJkd2FyZS1kZXBlbmRlbnQgZmVhdHVyZS4KKiAgICoqVW5yZWFjaGFibGUgRXhlY3V0aW9uIFBhdGhzOioqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgKSBtaWdodCBleGVjdXRlIGF0IGRyaXZlciB1bmxvYWQuIEhvd2V2ZXIsIHRoZXNlIGFyZSB0eXBpY2FsbHkgb25seSByZWxldmFudCBkdXJpbmcgYSBob3QtdW5wbHVnLCBvciBkcml2ZXIgdW5iaW5kIGluIHN5c2ZzLCB3aGljaCBpcyBhbiBvcnRob2dvbmFsIGNvbmNlcm4uIEFnYWluLCB0aGUgY29yZSBsb2dpYyBpcyB0aWVkIHRvIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGFuZCBjYXBhYmlsaXRpZXMuIENvZGUgcGF0aHMgc3BlY2lmaWMgdG8gbm9uLXRhcmdldCBhcmNoaXRlY3R1cmVzIGFyZSBnZW5lcmFsbHkgYWxzbyBwcm9ibGVtYXRpYywgaG93ZXZlciwgd2UgYXJlIHJ1bm5pbmcgb24gYW1kNjQsIHNvIGl0JiMzOTtzIG5vdCBhIGNvbmNlcm4uCgpTcGVjaWZpYyB0byB0aGlzIGNoYW5nZToKCjEuICBNeSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIHg4NlxfNjQgKGFtZDY0KS4KMi4gIFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNgIChhbmQgYG1hY2IuaGApLCB3aGljaCBpcyBhIGRyaXZlciBmb3IgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBjb250cm9sbGVycy4KMy4gIFRoZSBmZWF0dXJlIGJlaW5nIGFkZGVkIChNUVBSSU8gYW5kIENCUyBvZmZsb2FkIHZpYSB0cmFmZmljIGNvbnRyb2wpIGlzICpvbmx5KiBlbmFibGVkIGZvciBYaWxpbnggVmVyc2FsLCBhbmQgdGhpcyBpcyBhbiBBUk0gU29DIHBsYXRmb3JtLgo0LiAgVGhpcyBtZWFucyB3ZSBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlLCBvciBhIHZlcnkgc3BlY2lmaWMgU29DIGVtdWxhdGlvbiAobm90IHByb3ZpZGVkIGJ5IHRoZSBzdGFuZGFyZCBRRU1VIHNldHVwKSBmb3IgdGhpcyBjb2RlIHRvIGV2ZW4gZXhlY3V0ZS4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbjogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuCgpMZXQmIzM5O3MgZG8gYSBmaW5hbCBjaGVjazoKCiogICBBcmUgd2UgdG91Y2hpbmcgYW55IGNvcmUgbmV0d29ya2luZyBvciBnZW5lcmljIGZpbGVzPyBObywganVzdCB0aGUgYG1hY2IuaGAgYW5kIGBtYWNiX21haW4uY2AgZmlsZXMgd2l0aGluIHRoZSBDYWRlbmNlLXNwZWNpZmljIGRpcmVjdG9yeS4gVGhpcyBmdXJ0aGVyIHJlaW5mb3JjZXMgdGhlIGlzb2xhdGlvbi4KKiAgIFdoYXQgYWJvdXQgdGhlIGBFbmFibGVDb25maWdzYD8gU2luY2UgYFdvcnRoRnV6emluZ2AgaXMgYGZhbHNlYCwgdGhlIHNjaGVtYSBkaWN0YXRlcyB0aGF0IGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AgY2FuIGJlIGVtcHR5IG9yIG51bGwuCgpPa2F5LCBsZXQmIzM5O3MgY3JhZnQgdGhlIHJlYXNvbmluZyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbDoKCiogICBUaGUgcGF0Y2ggaW50cm9kdWNlcyBDcmVkaXQtQmFzZWQgU2hhcGVyIChDQlMpIGFuZCBNUVBSSU8gdHJhZmZpYyBjb250cm9sIG9mZmxvYWQgc3VwcG9ydCB0byB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBuZXR3b3JrIGRyaXZlciAoYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvYCkuCiogICBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgb25seSBlbmFibGVkIGZvciBBTUQvWGlsaW54IFZlcnNhbCBTb0NzIChgdmVyc2FsX2NvbmZpZ2AsIHVzaW5nIHRoZSBEVCBtYXRjaCBmb3IgYHhsbngsdmVyc2FsLWdlbWApLCB3aGljaCBhcmUgQVJNNjQgaGFyZHdhcmUuCiogICBUaGUgZHJpdmVyLCBhcyBtb2RpZmllZCwgdGFyZ2V0cyBwaHlzaWNhbCBTb0MgaGFyZHdhcmUgLyBBU0lDcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODZcXzY0IC8gYW1kNjQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgcmVuZGVyaW5nIHRoZSBhZGRlZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgYW1kNjQgZnV6emluZy4KCkkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS8pIHRvIGFkZCBDQlMgYW5kIE1RUFJJTyBoYXJkd2FyZSB0cmFmZmljIGNvbnRyb2wgb2ZmbG9hZGluZywgc3BlY2lmaWNhbGx5IGVuYWJsZWQgZm9yIFhpbGlueCBWZXJzYWwgU29DcyAodmVyc2FsX2NvbmZpZykuIFRoaXMgZHJpdmVyIHRhcmdldHMgcGh5c2ljYWwgQVJNL1JJU0MtViBTb0MgbmV0d29yayBjb250cm9sbGVycyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGFtZDY0IHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvKSB0byBhZGQgQ0JTIGFuZCBNUVBSSU8gaGFyZHdhcmUgdHJhZmZpYyBjb250cm9sIG9mZmxvYWRpbmcsIHNwZWNpZmljYWxseSBlbmFibGVkIGZvciBYaWxpbnggVmVyc2FsIFNvQ3MgKHZlcnNhbF9jb25maWcpLiBUaGlzIGRyaXZlciB0YXJnZXRzIHBoeXNpY2FsIEFSTS9SSVNDLVYgU29DIG5ldHdvcmsgY29udHJvbGxlcnMgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBhbWQ2NCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjI5OjIxLjY2NDQ4NTM5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzk5NjU3MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlLykgdG8gYWRkIENCUyBhbmQgTVFQUklPIGhhcmR3YXJlIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkaW5nLCBzcGVjaWZpY2FsbHkgZW5hYmxlZCBmb3IgWGlsaW54IFZlcnNhbCBTb0NzICh2ZXJzYWxfY29uZmlnKS4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBBUk0vUklTQy1WIFNvQyBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjI5OjIxLjY2NDQ5MDc4M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgwNjg0MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzI0YjUxNTBhOTdkY2ZhZjRmZGY0ODAxY2E3ZDlhOGQ1OWFiZTVmN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjI5OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcXG5pbmRleCBkNjkzMWM0MWYzOWRhLi4yMGZhZWJhNzdkNmQ2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcXG5AQCAtMTg0LDYgKzE4NCw5IEBAXFxuICNkZWZpbmUgR0VNX0RDRkc4XFx0XFx0MHgwMjlDIC8qIERlc2lnbiBDb25maWcgOCAqL1xcbiAjZGVmaW5lIEdFTV9EQ0ZHMTBcXHRcXHQweDAyQTQgLyogRGVzaWduIENvbmZpZyAxMCAqL1xcbiAjZGVmaW5lIEdFTV9EQ0ZHMTJcXHRcXHQweDAyQUMgLyogRGVzaWduIENvbmZpZyAxMiAqL1xcbisjZGVmaW5lIEdFTV9DQlNfQ09OVFJPTFxcdFxcdDB4MDRCQyAvKiBDQlMgQ29udHJvbCBSZWdpc3RlciAqL1xcbisjZGVmaW5lIEdFTV9DQlNfSURMRVNMT1BFX1FfQVxcdDB4MDRDMCAvKiBDQlMgSWRsZVNsb3BlIFF1ZXVlIEEgKi9cXG4rI2RlZmluZSBHRU1fQ0JTX0lETEVTTE9QRV9RX0JcXHQweDA0QzQgLyogQ0JTIElkbGVTbG9wZSBRdWV1ZSBCICovXFxuICNkZWZpbmUgR0VNX0VOU1RfQ09OVFJPTFxcdDB4MDg4MCAvKiBFTlNUIGNvbnRyb2wgcmVnaXN0ZXIgKi9cXG4gI2RlZmluZSBHRU1fVVNYX0NPTlRST0xcXHRcXHQweDBBODAgLyogSGlnaCBzcGVlZCBQQ1MgY29udHJvbCByZWdpc3RlciAqL1xcbiAjZGVmaW5lIEdFTV9VU1hfU1RBVFVTXFx0XFx0MHgwQTg4IC8qIEhpZ2ggc3BlZWQgUENTIHN0YXR1cyByZWdpc3RlciAqL1xcbkBAIC0yMjQsNiArMjI3LDEyIEBAXFxuICNkZWZpbmUgR0VNX0VOU1RfT05fVElNRShod19xKVxcdFxcdCgweDA4MjAgKyAoKGh3X3EpIFxcdTAwM2NcXHUwMDNjIDIpKVxcbiAjZGVmaW5lIEdFTV9FTlNUX09GRl9USU1FKGh3X3EpXFx0XFx0KDB4MDg0MCArICgoaHdfcSkgXFx1MDAzY1xcdTAwM2MgMikpXFxuIFxcbisvKiBCaXRmaWVsZHMgaW4gQ0JTX0NPTlRST0wgKi9cXG4rI2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9BX09GRlNFVFxcdDBcXG4rI2RlZmluZSBHRU1fQ0JTX0VOQUJMRV9RVUVVRV9BX1NJWkVcXHQxXFxuKyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQl9PRkZTRVRcXHQxXFxuKyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQl9TSVpFXFx0MVxcbitcXG4gLyogQml0ZmllbGRzIGluIEVOU1RfQ09OVFJPTCAqL1xcbiAjZGVmaW5lIEdFTV9FTlNUX0RJU0FCTEVfUVVFVUVfT0ZGU0VUXFx0MTZcXG4gXFxuQEAgLTc2OCw3ICs3NzcsNyBAQFxcbiAjZGVmaW5lIE1BQ0JfQ0FQU19NSUlPTlJHTUlJXFx0XFx0XFx0QklUKDkpXFxuICNkZWZpbmUgTUFDQl9DQVBTX05FRURfVFNVQ0xLXFx0XFx0XFx0QklUKDEwKVxcbiAjZGVmaW5lIE1BQ0JfQ0FQU19RVUVVRV9ESVNBQkxFXFx0XFx0XFx0QklUKDExKVxcbi0jZGVmaW5lIE1BQ0JfQ0FQU19RQlZcXHRcXHRcXHRcXHRCSVQoMTIpXFxuKyNkZWZpbmUgTUFDQl9DQVBTX1RDXFx0XFx0XFx0XFx0QklUKDEyKVxcbiAjZGVmaW5lIE1BQ0JfQ0FQU19QQ1NcXHRcXHRcXHRcXHRCSVQoMTMpXFxuICNkZWZpbmUgTUFDQl9DQVBTX0hJR0hfU1BFRURcXHRcXHRcXHRCSVQoMTQpXFxuICNkZWZpbmUgTUFDQl9DQVBTX0NMS19IV19DSEdcXHRcXHRcXHRCSVQoMTUpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXFxuaW5kZXggYTQyN2E1YjlkODk0Yy4uMDBjMWM2MTlkZWE4YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xcbkBAIC05OSw2ICs5OSwxMCBAQCBzdHJ1Y3Qgc2lmaXZlX2Z1NTQwX21hY2JfbWdtdCB7XFxuIFxcbiAjZGVmaW5lIE1BQ0JfTURJT19USU1FT1VUXFx0MTAwMDAwMCAvKiBpbiB1c2VjcyAqL1xcbiBcXG4rLyogQ0JTIHBvcnQgdHJhbnNtaXQgcmF0ZSBmYWN0b3JzOiAxMDAwL2ludGVyZmFjZV93aWR0aCAqL1xcbisjZGVmaW5lIE1BQ0JfQ0JTX1BPUlRfUkFURV8xR1xcdFxcdDEyNVxcdC8qIDEwMDAvOCBmb3IgR01JSSAoOC1iaXQpICovXFxuKyNkZWZpbmUgTUFDQl9DQlNfUE9SVF9SQVRFXzEwXzEwME1cXHQyNTBcXHQvKiAxMDAwLzQgZm9yIE1JSSAoNC1iaXQpICovXFxuK1xcbiAvKiBETUEgYnVmZmVyIGRlc2NyaXB0b3IgbWlnaHQgYmUgZGlmZmVyZW50IHNpemVcXG4gICogZGVwZW5kcyBvbiBoYXJkd2FyZSBjb25maWd1cmF0aW9uOlxcbiAgKlxcbkBAIC00NDc2LDE4ICs0NDgwLDggQEAgc3RhdGljIHZvaWQgbWFjYl90YXByaW9fZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnRhcHJpbylcXG4ge1xcbi1cXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuLVxcdGlmICh1bmxpa2VseSghKG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1RDKSkpXFxuLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tXFxuLVxcdC8qIENoZWNrIGlmIERldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmQgKi9cXG4tXFx0aWYgKHVubGlrZWx5KHBtX3J1bnRpbWVfc3VzcGVuZGVkKFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KSkpIHtcXG4tXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi1cXHR9XFxuLVxcbiBcXHRzd2l0Y2ggKHRhcHJpby1cXHUwMDNlY21kKSB7XFxuIFxcdGNhc2UgVEFQUklPX0NNRF9SRVBMQUNFOlxcbiBcXHRcXHRlcnIgPSBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKG5ldGRldiwgdGFwcmlvKTtcXG5AQCAtNDUwMiwxMyArNDQ5NiwxOTcgQEAgc3RhdGljIGludCBtYWNiX3NldHVwX3RhcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoc3RydWN0IG1hY2IgKmJwLCB1OCBxdWV1ZV9udW0sXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyICplbmFibGVfYml0LCB1MzIgKmlkbGVzbG9wZV9yZWcpXFxuK3tcXG4rXFx0LyogUXVldWUgQSBpcyBoaWdoZXN0IHByaW9yaXR5IChudW1fcXVldWVzIC0gMSkgKi9cXG4rXFx0aWYgKHF1ZXVlX251bSA9PSBicC1cXHUwMDNlbnVtX3F1ZXVlcyAtIDEpIHtcXG4rXFx0XFx0KmVuYWJsZV9iaXQgPSBHRU1fQklUKENCU19FTkFCTEVfUVVFVUVfQSk7XFxuK1xcdFxcdCppZGxlc2xvcGVfcmVnID0gR0VNX0NCU19JRExFU0xPUEVfUV9BO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0LyogUXVldWUgQiBpcyBzZWNvbmQgaGlnaGVzdCBwcmlvcml0eSAobnVtX3F1ZXVlcyAtIDIpICovXFxuK1xcdGlmIChxdWV1ZV9udW0gPT0gYnAtXFx1MDAzZW51bV9xdWV1ZXMgLSAyKSB7XFxuK1xcdFxcdCplbmFibGVfYml0ID0gR0VNX0JJVChDQlNfRU5BQkxFX1FVRVVFX0IpO1xcbitcXHRcXHQqaWRsZXNsb3BlX3JlZyA9IEdFTV9DQlNfSURMRVNMT1BFX1FfQjtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1hY2JfY2JzX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdClcXG4re1xcbitcXHR1MzIgZW5hYmxlX2JpdCwgaWRsZXNsb3BlLCBzcGVlZF9rYnBzLCBjdHJsLCBpZGxlc2xvcGVfcmVnO1xcbitcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBrc2V0ID0ge307XFxuK1xcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKGJwLCBxb3B0LVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmVuYWJsZV9iaXQsIFxcdTAwMjZpZGxlc2xvcGVfcmVnKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkNCUzogUXVldWUgJWQgbm90IGVsaWdpYmxlIChvbmx5IHRvcCAyIHF1ZXVlcyBzdXBwb3J0IENCUylcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIHFvcHQtXFx1MDAzZXF1ZXVlKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIGlkbGVzbG9wZSBpcyBjYWxpYnJhdGVkIGZvciB0aGUgY3VycmVudCBsaW5rIHNwZWVkOyBDQlMgaXMgbm90XFxuK1xcdCAqIHJlcHJvZ3JhbW1lZCBvbiBsaW5rLXNwZWVkIGNoYW5nZXMsIHNvIGl0IG11c3QgYmUgcmVjb25maWd1cmVkXFxuK1xcdCAqIGlmIHRoZSBsaW5rIHNwZWVkIGNoYW5nZXMuXFxuK1xcdCAqL1xcbitcXHRwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldChicC1cXHUwMDNlcGh5bGluaywgXFx1MDAyNmtzZXQpO1xcbitcXG4rXFx0aWYgKCFrc2V0LmJhc2Uuc3BlZWQgfHwga3NldC5iYXNlLnNwZWVkID09IFNQRUVEX1VOS05PV04pIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJDQlM6IEludmFsaWQgbGluayBzcGVlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRzcGVlZF9rYnBzID0ga3NldC5iYXNlLnNwZWVkICogMTAwMDtcXG4rXFxuK1xcdGlmIChxb3B0LVxcdTAwM2VpZGxlc2xvcGUgXFx1MDAzYz0gMCB8fCAodTMyKXFvcHQtXFx1MDAzZWlkbGVzbG9wZSBcXHUwMDNlIHNwZWVkX2ticHMpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJDQlM6IGludmFsaWQgaWRsZXNsb3BlICVkIChtdXN0IGJlIDEuLiV1IGticHMpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBxb3B0LVxcdTAwM2VpZGxlc2xvcGUsIHNwZWVkX2ticHMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogcW9wdC1cXHUwMDNlaWRsZXNsb3BlIGlzIGluIGticHM7IGNvbnZlcnQgdG8gdGhlIHVuaXRzIHRoZSBoYXJkd2FyZVxcbitcXHQgKiByZWdpc3RlciBleHBlY3RzOlxcbitcXHQgKiAtIEhpZ2gtc3BlZWQgR0VNOiBmcmFjdGlvbiBvZiBwb3J0IGJhbmR3aWR0aCwgc2NhbGVkIHRvIHRoZSBmdWxsXFxuK1xcdCAqICAgMzItYml0IHJlZ2lzdGVyIHJhbmdlXFxuK1xcdCAqIC0gU3RhbmRhcmQgTUFDQjogdGhlIHJlZ2lzdGVyIGNvdW50cyBieXRlcy9zZWMgaW4gMUcgKDgtYml0IEdNSUkpXFxuK1xcdCAqICAgbW9kZSBhbmQgbmliYmxlcy9zZWMgaW4gMTAvMTAwICg0LWJpdCBNSUkpIG1vZGUsIHNvIHNjYWxlIGticHNcXG4rXFx0ICogICBieSAxMDAwLzggKDEyNSkgb3IgMTAwMC80ICgyNTApIHJlc3BlY3RpdmVseVxcbitcXHQgKi9cXG4rXFx0aWYgKGJwLVxcdTAwM2VjYXBzIFxcdTAwMjYgTUFDQl9DQVBTX0hJR0hfU1BFRUQpXFxuK1xcdFxcdGlkbGVzbG9wZSA9IERJVl9ST1VORF9VUF9VTEwoKHU2NClxb3B0LVxcdTAwM2VpZGxlc2xvcGUgKiBVMzJfTUFYLCBzcGVlZF9rYnBzKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRpZGxlc2xvcGUgPSAodTMyKXFvcHQtXFx1MDAzZWlkbGVzbG9wZSAqIChrc2V0LmJhc2Uuc3BlZWQgXFx1MDAzZT0gMTAwMCA/XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBNQUNCX0NCU19QT1JUX1JBVEVfMUcgOiBNQUNCX0NCU19QT1JUX1JBVEVfMTBfMTAwTSk7XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNmJwLVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdC8qIERpc2FibGUgQ0JTIGZvciB0aGUgcXVldWUgYmVmb3JlIHVwZGF0aW5nIGlkbGVzbG9wZSAqL1xcbitcXHRcXHRjdHJsID0gZ2VtX3JlYWRsKGJwLCBDQlNfQ09OVFJPTCkgXFx1MDAyNiB+ZW5hYmxlX2JpdDtcXG4rXFx0XFx0Z2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGN0cmwpO1xcbitcXHRcXHQvKiBVcGRhdGUgaWRsZXNsb3BlIGZvciB0aGUgcXVldWUgKi9cXG4rXFx0XFx0YnAtXFx1MDAzZW1hY2JfcmVnX3dyaXRlbChicCwgaWRsZXNsb3BlX3JlZywgaWRsZXNsb3BlKTtcXG4rXFx0XFx0LyogUmUtZW5hYmxlIENCUyBmb3IgdGhlIHF1ZXVlIHdpdGggbmV3IGlkbGVzbG9wZSAqL1xcbitcXHRcXHRnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCB8IGVuYWJsZV9iaXQpO1xcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcIkNCUzogQ29uZmlndXJlZCBxdWV1ZSAlZCB3aXRoIGlkbGVzbG9wZSAweCV4XFxcXG5cXFwiLFxcbitcXHRcXHQgICBxb3B0LVxcdTAwM2VxdWV1ZSwgaWRsZXNsb3BlKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtYWNiX2Nic19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHF1ZXVlX251bSlcXG4re1xcbitcXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHR1MzIgZW5hYmxlX2JpdCwgaWRsZXNsb3BlX3JlZztcXG4rXFxuK1xcdGlmIChtYWNiX2Nic19nZXRfcXVldWVfcGFyYW1zKGJwLCBxdWV1ZV9udW0sIFxcdTAwMjZlbmFibGVfYml0LCBcXHUwMDI2aWRsZXNsb3BlX3JlZykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcXHUwMDI2YnAtXFx1MDAzZWxvY2spIHtcXG4rXFx0XFx0Z2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGdlbV9yZWFkbChicCwgQ0JTX0NPTlRST0wpIFxcdTAwMjYgfmVuYWJsZV9iaXQpO1xcbitcXHRcXHRicC1cXHUwMDNlbWFjYl9yZWdfd3JpdGVsKGJwLCBpZGxlc2xvcGVfcmVnLCAwKTtcXG4rXFx0fVxcbitcXG4rXFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFxcXCJDQlM6IERpc2FibGVkIHF1ZXVlICVkXFxcXG5cXFwiLCBxdWV1ZV9udW0pO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1hY2Jfc2V0dXBfY2JzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpXFxuK3tcXG4rXFx0aWYgKHFvcHQtXFx1MDAzZWVuYWJsZSlcXG4rXFx0XFx0cmV0dXJuIG1hY2JfY2JzX2FkZChuZXRkZXYsIHFvcHQpO1xcbitcXG4rXFx0bWFjYl9jYnNfZGVzdHJveShuZXRkZXYsIHFvcHQtXFx1MDAzZXF1ZXVlKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWFjYl9zZXR1cF9tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxcbit7XFxuK1xcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFxcdTAwMjZtcXByaW8tXFx1MDAzZXFvcHQ7XFxuK1xcdHU4IG51bV90YyA9IHFvcHQtXFx1MDAzZW51bV90YztcXG4rXFx0aW50IGVycjtcXG4rXFx0dTggaTtcXG4rXFxuK1xcdC8qIEhhbmRsZSByZXNldCBjYXNlIGVhcmx5ICovXFxuK1xcdGlmICghbnVtX3RjKSB7XFxuK1xcdFxcdG5ldGRldl9yZXNldF90YyhuZXRkZXYpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0LyogQ29uZmlndXJlIHRyYWZmaWMgY2xhc3NlcyAqL1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcXG4rXFxuK1xcdGVyciA9IG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgbnVtX3RjKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fdGM7IGkrKykge1xcbitcXHRcXHRlcnIgPSBuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC1cXHUwMDNlY291bnRbaV0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgcW9wdC1cXHUwMDNlb2Zmc2V0W2ldKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzZXRfdGM7XFxuK1xcbitcXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcIk1RUFJJTzogVEMlZCAtXFx1MDAzZSBxdWV1ZSAldSAoY291bnQ9JXUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBpLCBxb3B0LVxcdTAwM2VvZmZzZXRbaV0sIHFvcHQtXFx1MDAzZWNvdW50W2ldKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcmVzZXRfdGM6XFxuK1xcdG5ldGRldl9yZXNldF90YyhuZXRkZXYpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1hY2JfdGNfcXVlcnlfY2FwcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKVxcbit7XFxuK1xcdHN3aXRjaCAoYmFzZS1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoge1xcbitcXHRcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXG4rXFx0XFx0Y2Fwcy1cXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcXG4rXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdCB2b2lkICp0eXBlX2RhdGEpXFxuIHtcXG4rXFx0c3RydWN0IG1hY2IgKmJwO1xcbitcXG4gXFx0aWYgKCFuZXRkZXYgfHwgIXR5cGVfZGF0YSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRpZiAodHlwZSA9PSBUQ19RVUVSWV9DQVBTKVxcbitcXHRcXHRyZXR1cm4gbWFjYl90Y19xdWVyeV9jYXBzKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4rXFxuK1xcdGJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghKG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1RDKSkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdC8qIENoZWNrIGlmIERldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KHBtX3J1bnRpbWVfc3VzcGVuZGVkKFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KSkpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJEZXZpY2UgaXMgaW4gcnVudGltZSBzdXNwZW5kXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XFxuK1xcdFxcdHJldHVybiBtYWNiX3NldHVwX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfQ0JTOlxcbitcXHRcXHRyZXR1cm4gbWFjYl9zZXR1cF9jYnMobmV0ZGV2LCB0eXBlX2RhdGEpO1xcbiBcXHRjYXNlIFRDX1NFVFVQX1FESVNDX1RBUFJJTzpcXG4gXFx0XFx0cmV0dXJuIG1hY2Jfc2V0dXBfdGFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0ZGVmYXVsdDpcXG5AQCAtNDgyMyw4ICs1MDAxLDggQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRcXHRuZXRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNO1xcbiBcXHRpZiAoYnAtXFx1MDAzZWNhcHMgXFx1MDAyNiBNQUNCX0NBUFNfU0dfRElTQUJMRUQpXFxuIFxcdFxcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgXFx1MDAyNj0gfk5FVElGX0ZfU0c7XFxuLVxcdC8qIEVuYWJsZSBIV19UQyBpZiBoYXJkd2FyZSBzdXBwb3J0cyBRQlYgKi9cXG4tXFx0aWYgKGJwLVxcdTAwM2VjYXBzIFxcdTAwMjYgTUFDQl9DQVBTX1FCVilcXG4rXFx0LyogRW5hYmxlIFRDIG9mZmxvYWQgZm9yIFRTTi1jYXBhYmxlIGhhcmR3YXJlICovXFxuK1xcdGlmIChicC1cXHUwMDNlY2FwcyBcXHUwMDI2IE1BQ0JfQ0FQU19UQylcXG4gXFx0XFx0bmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xcbiBcXG4gXFx0bmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyA9IG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXM7XFxuQEAgLTU2OTMsNyArNTg3MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgdmVyc2FsX2NvbmZpZyA9IHtcXG4gXFx0LmNhcHMgPSBNQUNCX0NBUFNfR0lHQUJJVF9NT0RFX0FWQUlMQUJMRSB8IE1BQ0JfQ0FQU19KVU1CTyB8XFxuIFxcdFxcdE1BQ0JfQ0FQU19HRU1fSEFTX1BUUCB8IE1BQ0JfQ0FQU19CRF9SRF9QUkVGRVRDSCB8XFxuIFxcdFxcdE1BQ0JfQ0FQU19ORUVEX1RTVUNMSyB8IE1BQ0JfQ0FQU19RVUVVRV9ESVNBQkxFIHxcXG4tXFx0XFx0TUFDQl9DQVBTX1FCViB8XFxuK1xcdFxcdE1BQ0JfQ0FQU19UQyB8XFxuIFxcdFxcdE1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLFxcbiBcXHQuZG1hX2J1cnN0X2xlbmd0aCA9IDE2LFxcbiBcXHQuaW5pdCA9IGluaXRfcmVzZXRfb3B0aW9uYWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjI5OjIyLjQ0NjI2MzE5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MjAxNzg2NjE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlLykgdG8gYWRkIENCUyBhbmQgTVFQUklPIGhhcmR3YXJlIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkaW5nLCBzcGVjaWZpY2FsbHkgZW5hYmxlZCBmb3IgWGlsaW54IFZlcnNhbCBTb0NzICh2ZXJzYWxfY29uZmlnKS4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBBUk0vUklTQy1WIFNvQyBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzI0YjUxNTBhOTdkY2ZhZjRmZGY0ODAxY2E3ZDlhOGQ1OWFiZTVmN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTU6Mjk6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG5pbmRleCBkNjkzMWM0MWYzOWRhLi4yMGZhZWJhNzdkNmQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG5AQCAtMTg0LDYgKzE4NCw5IEBAXG4gI2RlZmluZSBHRU1fRENGRzhcdFx0MHgwMjlDIC8qIERlc2lnbiBDb25maWcgOCAqL1xuICNkZWZpbmUgR0VNX0RDRkcxMFx0XHQweDAyQTQgLyogRGVzaWduIENvbmZpZyAxMCAqL1xuICNkZWZpbmUgR0VNX0RDRkcxMlx0XHQweDAyQUMgLyogRGVzaWduIENvbmZpZyAxMiAqL1xuKyNkZWZpbmUgR0VNX0NCU19DT05UUk9MXHRcdDB4MDRCQyAvKiBDQlMgQ29udHJvbCBSZWdpc3RlciAqL1xuKyNkZWZpbmUgR0VNX0NCU19JRExFU0xPUEVfUV9BXHQweDA0QzAgLyogQ0JTIElkbGVTbG9wZSBRdWV1ZSBBICovXG4rI2RlZmluZSBHRU1fQ0JTX0lETEVTTE9QRV9RX0JcdDB4MDRDNCAvKiBDQlMgSWRsZVNsb3BlIFF1ZXVlIEIgKi9cbiAjZGVmaW5lIEdFTV9FTlNUX0NPTlRST0xcdDB4MDg4MCAvKiBFTlNUIGNvbnRyb2wgcmVnaXN0ZXIgKi9cbiAjZGVmaW5lIEdFTV9VU1hfQ09OVFJPTFx0XHQweDBBODAgLyogSGlnaCBzcGVlZCBQQ1MgY29udHJvbCByZWdpc3RlciAqL1xuICNkZWZpbmUgR0VNX1VTWF9TVEFUVVNcdFx0MHgwQTg4IC8qIEhpZ2ggc3BlZWQgUENTIHN0YXR1cyByZWdpc3RlciAqL1xuQEAgLTIyNCw2ICsyMjcsMTIgQEBcbiAjZGVmaW5lIEdFTV9FTlNUX09OX1RJTUUoaHdfcSlcdFx0KDB4MDgyMCArICgoaHdfcSkgXHUwMDNjXHUwMDNjIDIpKVxuICNkZWZpbmUgR0VNX0VOU1RfT0ZGX1RJTUUoaHdfcSlcdFx0KDB4MDg0MCArICgoaHdfcSkgXHUwMDNjXHUwMDNjIDIpKVxuIFxuKy8qIEJpdGZpZWxkcyBpbiBDQlNfQ09OVFJPTCAqL1xuKyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQV9PRkZTRVRcdDBcbisjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0FfU0laRVx0MVxuKyNkZWZpbmUgR0VNX0NCU19FTkFCTEVfUVVFVUVfQl9PRkZTRVRcdDFcbisjZGVmaW5lIEdFTV9DQlNfRU5BQkxFX1FVRVVFX0JfU0laRVx0MVxuK1xuIC8qIEJpdGZpZWxkcyBpbiBFTlNUX0NPTlRST0wgKi9cbiAjZGVmaW5lIEdFTV9FTlNUX0RJU0FCTEVfUVVFVUVfT0ZGU0VUXHQxNlxuIFxuQEAgLTc2OCw3ICs3NzcsNyBAQFxuICNkZWZpbmUgTUFDQl9DQVBTX01JSU9OUkdNSUlcdFx0XHRCSVQoOSlcbiAjZGVmaW5lIE1BQ0JfQ0FQU19ORUVEX1RTVUNMS1x0XHRcdEJJVCgxMClcbiAjZGVmaW5lIE1BQ0JfQ0FQU19RVUVVRV9ESVNBQkxFXHRcdFx0QklUKDExKVxuLSNkZWZpbmUgTUFDQl9DQVBTX1FCVlx0XHRcdFx0QklUKDEyKVxuKyNkZWZpbmUgTUFDQl9DQVBTX1RDXHRcdFx0XHRCSVQoMTIpXG4gI2RlZmluZSBNQUNCX0NBUFNfUENTXHRcdFx0XHRCSVQoMTMpXG4gI2RlZmluZSBNQUNCX0NBUFNfSElHSF9TUEVFRFx0XHRcdEJJVCgxNClcbiAjZGVmaW5lIE1BQ0JfQ0FQU19DTEtfSFdfQ0hHXHRcdFx0QklUKDE1KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5pbmRleCBhNDI3YTViOWQ4OTRjLi4wMGMxYzYxOWRlYThjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuQEAgLTk5LDYgKzk5LDEwIEBAIHN0cnVjdCBzaWZpdmVfZnU1NDBfbWFjYl9tZ210IHtcbiBcbiAjZGVmaW5lIE1BQ0JfTURJT19USU1FT1VUXHQxMDAwMDAwIC8qIGluIHVzZWNzICovXG4gXG4rLyogQ0JTIHBvcnQgdHJhbnNtaXQgcmF0ZSBmYWN0b3JzOiAxMDAwL2ludGVyZmFjZV93aWR0aCAqL1xuKyNkZWZpbmUgTUFDQl9DQlNfUE9SVF9SQVRFXzFHXHRcdDEyNVx0LyogMTAwMC84IGZvciBHTUlJICg4LWJpdCkgKi9cbisjZGVmaW5lIE1BQ0JfQ0JTX1BPUlRfUkFURV8xMF8xMDBNXHQyNTBcdC8qIDEwMDAvNCBmb3IgTUlJICg0LWJpdCkgKi9cbitcbiAvKiBETUEgYnVmZmVyIGRlc2NyaXB0b3IgbWlnaHQgYmUgZGlmZmVyZW50IHNpemVcbiAgKiBkZXBlbmRzIG9uIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb246XG4gICpcbkBAIC00NDc2LDE4ICs0NDgwLDggQEAgc3RhdGljIHZvaWQgbWFjYl90YXByaW9fZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHQgICAgIHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICp0YXByaW8pXG4ge1xuLVx0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdGludCBlcnIgPSAwO1xuIFxuLVx0aWYgKHVubGlrZWx5KCEobmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1RDKSkpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cbi1cdC8qIENoZWNrIGlmIERldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmQgKi9cbi1cdGlmICh1bmxpa2VseShwbV9ydW50aW1lX3N1c3BlbmRlZChcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldikpKSB7XG4tXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIkRldmljZSBpcyBpbiBydW50aW1lIHN1c3BlbmRcXG5cIik7XG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cdH1cbi1cbiBcdHN3aXRjaCAodGFwcmlvLVx1MDAzZWNtZCkge1xuIFx0Y2FzZSBUQVBSSU9fQ01EX1JFUExBQ0U6XG4gXHRcdGVyciA9IG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2UobmV0ZGV2LCB0YXByaW8pO1xuQEAgLTQ1MDIsMTMgKzQ0OTYsMTk3IEBAIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtcyhzdHJ1Y3QgbWFjYiAqYnAsIHU4IHF1ZXVlX251bSxcbitcdFx0XHRcdCAgICAgdTMyICplbmFibGVfYml0LCB1MzIgKmlkbGVzbG9wZV9yZWcpXG4re1xuK1x0LyogUXVldWUgQSBpcyBoaWdoZXN0IHByaW9yaXR5IChudW1fcXVldWVzIC0gMSkgKi9cbitcdGlmIChxdWV1ZV9udW0gPT0gYnAtXHUwMDNlbnVtX3F1ZXVlcyAtIDEpIHtcbitcdFx0KmVuYWJsZV9iaXQgPSBHRU1fQklUKENCU19FTkFCTEVfUVVFVUVfQSk7XG4rXHRcdCppZGxlc2xvcGVfcmVnID0gR0VNX0NCU19JRExFU0xPUEVfUV9BO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qIFF1ZXVlIEIgaXMgc2Vjb25kIGhpZ2hlc3QgcHJpb3JpdHkgKG51bV9xdWV1ZXMgLSAyKSAqL1xuK1x0aWYgKHF1ZXVlX251bSA9PSBicC1cdTAwM2VudW1fcXVldWVzIC0gMikge1xuK1x0XHQqZW5hYmxlX2JpdCA9IEdFTV9CSVQoQ0JTX0VOQUJMRV9RVUVVRV9CKTtcbitcdFx0KmlkbGVzbG9wZV9yZWcgPSBHRU1fQ0JTX0lETEVTTE9QRV9RX0I7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FSU5WQUw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWFjYl9jYnNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0c3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpXG4re1xuK1x0dTMyIGVuYWJsZV9iaXQsIGlkbGVzbG9wZSwgc3BlZWRfa2JwcywgY3RybCwgaWRsZXNsb3BlX3JlZztcbitcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQgPSB7fTtcbitcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtcyhicCwgcW9wdC1cdTAwM2VxdWV1ZSwgXHUwMDI2ZW5hYmxlX2JpdCwgXHUwMDI2aWRsZXNsb3BlX3JlZyk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIkNCUzogUXVldWUgJWQgbm90IGVsaWdpYmxlIChvbmx5IHRvcCAyIHF1ZXVlcyBzdXBwb3J0IENCUylcXG5cIixcbitcdFx0XHQgICBxb3B0LVx1MDAzZXF1ZXVlKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHQvKiBpZGxlc2xvcGUgaXMgY2FsaWJyYXRlZCBmb3IgdGhlIGN1cnJlbnQgbGluayBzcGVlZDsgQ0JTIGlzIG5vdFxuK1x0ICogcmVwcm9ncmFtbWVkIG9uIGxpbmstc3BlZWQgY2hhbmdlcywgc28gaXQgbXVzdCBiZSByZWNvbmZpZ3VyZWRcbitcdCAqIGlmIHRoZSBsaW5rIHNwZWVkIGNoYW5nZXMuXG4rXHQgKi9cbitcdHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KGJwLVx1MDAzZXBoeWxpbmssIFx1MDAyNmtzZXQpO1xuK1xuK1x0aWYgKCFrc2V0LmJhc2Uuc3BlZWQgfHwga3NldC5iYXNlLnNwZWVkID09IFNQRUVEX1VOS05PV04pIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwiQ0JTOiBJbnZhbGlkIGxpbmsgc3BlZWRcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3BlZWRfa2JwcyA9IGtzZXQuYmFzZS5zcGVlZCAqIDEwMDA7XG4rXG4rXHRpZiAocW9wdC1cdTAwM2VpZGxlc2xvcGUgXHUwMDNjPSAwIHx8ICh1MzIpcW9wdC1cdTAwM2VpZGxlc2xvcGUgXHUwMDNlIHNwZWVkX2ticHMpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwiQ0JTOiBpbnZhbGlkIGlkbGVzbG9wZSAlZCAobXVzdCBiZSAxLi4ldSBrYnBzKVxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlaWRsZXNsb3BlLCBzcGVlZF9rYnBzKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHQvKiBxb3B0LVx1MDAzZWlkbGVzbG9wZSBpcyBpbiBrYnBzOyBjb252ZXJ0IHRvIHRoZSB1bml0cyB0aGUgaGFyZHdhcmVcbitcdCAqIHJlZ2lzdGVyIGV4cGVjdHM6XG4rXHQgKiAtIEhpZ2gtc3BlZWQgR0VNOiBmcmFjdGlvbiBvZiBwb3J0IGJhbmR3aWR0aCwgc2NhbGVkIHRvIHRoZSBmdWxsXG4rXHQgKiAgIDMyLWJpdCByZWdpc3RlciByYW5nZVxuK1x0ICogLSBTdGFuZGFyZCBNQUNCOiB0aGUgcmVnaXN0ZXIgY291bnRzIGJ5dGVzL3NlYyBpbiAxRyAoOC1iaXQgR01JSSlcbitcdCAqICAgbW9kZSBhbmQgbmliYmxlcy9zZWMgaW4gMTAvMTAwICg0LWJpdCBNSUkpIG1vZGUsIHNvIHNjYWxlIGticHNcbitcdCAqICAgYnkgMTAwMC84ICgxMjUpIG9yIDEwMDAvNCAoMjUwKSByZXNwZWN0aXZlbHlcbitcdCAqL1xuK1x0aWYgKGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19ISUdIX1NQRUVEKVxuK1x0XHRpZGxlc2xvcGUgPSBESVZfUk9VTkRfVVBfVUxMKCh1NjQpcW9wdC1cdTAwM2VpZGxlc2xvcGUgKiBVMzJfTUFYLCBzcGVlZF9rYnBzKTtcbitcdGVsc2VcbitcdFx0aWRsZXNsb3BlID0gKHUzMilxb3B0LVx1MDAzZWlkbGVzbG9wZSAqIChrc2V0LmJhc2Uuc3BlZWQgXHUwMDNlPSAxMDAwID9cbitcdFx0XHRcdFx0ICAgICAgIE1BQ0JfQ0JTX1BPUlRfUkFURV8xRyA6IE1BQ0JfQ0JTX1BPUlRfUkFURV8xMF8xMDBNKTtcbitcbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZicC1cdTAwM2Vsb2NrKSB7XG4rXHRcdC8qIERpc2FibGUgQ0JTIGZvciB0aGUgcXVldWUgYmVmb3JlIHVwZGF0aW5nIGlkbGVzbG9wZSAqL1xuK1x0XHRjdHJsID0gZ2VtX3JlYWRsKGJwLCBDQlNfQ09OVFJPTCkgXHUwMDI2IH5lbmFibGVfYml0O1xuK1x0XHRnZW1fd3JpdGVsKGJwLCBDQlNfQ09OVFJPTCwgY3RybCk7XG4rXHRcdC8qIFVwZGF0ZSBpZGxlc2xvcGUgZm9yIHRoZSBxdWV1ZSAqL1xuK1x0XHRicC1cdTAwM2VtYWNiX3JlZ193cml0ZWwoYnAsIGlkbGVzbG9wZV9yZWcsIGlkbGVzbG9wZSk7XG4rXHRcdC8qIFJlLWVuYWJsZSBDQlMgZm9yIHRoZSBxdWV1ZSB3aXRoIG5ldyBpZGxlc2xvcGUgKi9cbitcdFx0Z2VtX3dyaXRlbChicCwgQ0JTX0NPTlRST0wsIGN0cmwgfCBlbmFibGVfYml0KTtcbitcdH1cbitcbitcdG5ldGRldl9kYmcobmV0ZGV2LCBcIkNCUzogQ29uZmlndXJlZCBxdWV1ZSAlZCB3aXRoIGlkbGVzbG9wZSAweCV4XFxuXCIsXG4rXHRcdCAgIHFvcHQtXHUwMDNlcXVldWUsIGlkbGVzbG9wZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWFjYl9jYnNfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCBxdWV1ZV9udW0pXG4re1xuK1x0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHUzMiBlbmFibGVfYml0LCBpZGxlc2xvcGVfcmVnO1xuK1xuK1x0aWYgKG1hY2JfY2JzX2dldF9xdWV1ZV9wYXJhbXMoYnAsIHF1ZXVlX251bSwgXHUwMDI2ZW5hYmxlX2JpdCwgXHUwMDI2aWRsZXNsb3BlX3JlZykpXG4rXHRcdHJldHVybjtcbitcbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZicC1cdTAwM2Vsb2NrKSB7XG4rXHRcdGdlbV93cml0ZWwoYnAsIENCU19DT05UUk9MLCBnZW1fcmVhZGwoYnAsIENCU19DT05UUk9MKSBcdTAwMjYgfmVuYWJsZV9iaXQpO1xuK1x0XHRicC1cdTAwM2VtYWNiX3JlZ193cml0ZWwoYnAsIGlkbGVzbG9wZV9yZWcsIDApO1xuK1x0fVxuK1xuK1x0bmV0ZGV2X2RiZyhuZXRkZXYsIFwiQ0JTOiBEaXNhYmxlZCBxdWV1ZSAlZFxcblwiLCBxdWV1ZV9udW0pO1xuK31cbitcbitzdGF0aWMgaW50IG1hY2Jfc2V0dXBfY2JzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICBzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdClcbit7XG4rXHRpZiAocW9wdC1cdTAwM2VlbmFibGUpXG4rXHRcdHJldHVybiBtYWNiX2Nic19hZGQobmV0ZGV2LCBxb3B0KTtcbitcbitcdG1hY2JfY2JzX2Rlc3Ryb3kobmV0ZGV2LCBxb3B0LVx1MDAzZXF1ZXVlKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG1hY2Jfc2V0dXBfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0dTggbnVtX3RjID0gcW9wdC1cdTAwM2VudW1fdGM7XG4rXHRpbnQgZXJyO1xuK1x0dTggaTtcbitcbitcdC8qIEhhbmRsZSByZXNldCBjYXNlIGVhcmx5ICovXG4rXHRpZiAoIW51bV90Yykge1xuK1x0XHRuZXRkZXZfcmVzZXRfdGMobmV0ZGV2KTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzc2VzICovXG4rXHRxb3B0LVx1MDAzZWh3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTO1xuK1xuK1x0ZXJyID0gbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBudW1fdGMpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV90YzsgaSsrKSB7XG4rXHRcdGVyciA9IG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LVx1MDAzZWNvdW50W2ldLFxuK1x0XHRcdFx0XHQgIHFvcHQtXHUwMDNlb2Zmc2V0W2ldKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGVycl9yZXNldF90YztcbitcbitcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwiTVFQUklPOiBUQyVkIC1cdTAwM2UgcXVldWUgJXUgKGNvdW50PSV1KVxcblwiLFxuK1x0XHRcdCAgIGksIHFvcHQtXHUwMDNlb2Zmc2V0W2ldLCBxb3B0LVx1MDAzZWNvdW50W2ldKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9yZXNldF90YzpcbitcdG5ldGRldl9yZXNldF90YyhuZXRkZXYpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBtYWNiX3RjX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHQgICAgICBzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlKVxuK3tcbitcdHN3aXRjaCAoYmFzZS1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoge1xuK1x0XHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4rXG4rXHRcdGNhcHMtXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcbitcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWFjYl9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0XHQgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbitcdHN0cnVjdCBtYWNiICpicDtcbitcbiBcdGlmICghbmV0ZGV2IHx8ICF0eXBlX2RhdGEpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0aWYgKHR5cGUgPT0gVENfUVVFUllfQ0FQUylcbitcdFx0cmV0dXJuIG1hY2JfdGNfcXVlcnlfY2FwcyhuZXRkZXYsIHR5cGVfZGF0YSk7XG4rXG4rXHRicCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXG4rXHRpZiAodW5saWtlbHkoIShuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfVEMpKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogQ2hlY2sgaWYgRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZCAqL1xuK1x0aWYgKHVubGlrZWx5KHBtX3J1bnRpbWVfc3VzcGVuZGVkKFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2KSkpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwiRGV2aWNlIGlzIGluIHJ1bnRpbWUgc3VzcGVuZFxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcbitcdFx0cmV0dXJuIG1hY2Jfc2V0dXBfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbitcdGNhc2UgVENfU0VUVVBfUURJU0NfQ0JTOlxuK1x0XHRyZXR1cm4gbWFjYl9zZXR1cF9jYnMobmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19UQVBSSU86XG4gXHRcdHJldHVybiBtYWNiX3NldHVwX3RhcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7XG4gXHRkZWZhdWx0OlxuQEAgLTQ4MjMsOCArNTAwMSw4IEBAIHN0YXRpYyBpbnQgbWFjYl9pbml0X2RmbHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNO1xuIFx0aWYgKGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19TR19ESVNBQkxFRClcbiBcdFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIFx1MDAyNj0gfk5FVElGX0ZfU0c7XG4tXHQvKiBFbmFibGUgSFdfVEMgaWYgaGFyZHdhcmUgc3VwcG9ydHMgUUJWICovXG4tXHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1FCVilcbitcdC8qIEVuYWJsZSBUQyBvZmZsb2FkIGZvciBUU04tY2FwYWJsZSBoYXJkd2FyZSAqL1xuK1x0aWYgKGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19UQylcbiBcdFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVEM7XG4gXG4gXHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgPSBuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXM7XG5AQCAtNTY5Myw3ICs1ODcxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB2ZXJzYWxfY29uZmlnID0ge1xuIFx0LmNhcHMgPSBNQUNCX0NBUFNfR0lHQUJJVF9NT0RFX0FWQUlMQUJMRSB8IE1BQ0JfQ0FQU19KVU1CTyB8XG4gXHRcdE1BQ0JfQ0FQU19HRU1fSEFTX1BUUCB8IE1BQ0JfQ0FQU19CRF9SRF9QUkVGRVRDSCB8XG4gXHRcdE1BQ0JfQ0FQU19ORUVEX1RTVUNMSyB8IE1BQ0JfQ0FQU19RVUVVRV9ESVNBQkxFIHxcbi1cdFx0TUFDQl9DQVBTX1FCViB8XG4rXHRcdE1BQ0JfQ0FQU19UQyB8XG4gXHRcdE1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLFxuIFx0LmRtYV9idXJzdF9sZW5ndGggPSAxNixcbiBcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjI5OjIyLjQ0NjI2NTQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgwNDc1ODM2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGFwcGx5aW5nIG15IGV4cGVydCBrbm93bGVkZ2UgYW5kIHRoZSBlc3RhYmxpc2hlZCBndWlkZWxpbmVzLCBvZiBjb3Vyc2UuXG5cbkZpcnN0LCBsZXQncyBpZGVudGlmeSB0aGUgc2NvcGUuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhgIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AgZmlsZXMuIFRoYXQgcG9pbnRzIHNxdWFyZWx5IGF0IHRoZSBDYWRlbmNlIE1BQ0IgLyBHRU0gRXRoZXJuZXQgZHJpdmVyLCBgTUFDQmAuIEFscmlnaHQsIHRoZSBgTUFDQmAgZHJpdmVyIGl0IGlzLlxuXG5Ob3csIGEgY3JpdGljYWwgcXVlc3Rpb246IHdoYXQgaGFyZHdhcmUgb3IgcGxhdGZvcm1zIHVzZSB0aGlzIGRyaXZlcj8gQW5kLCBjcnVjaWFsbHksIGNhbiBJIGVhc2lseSByZWFjaCBpdCB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0Ugb24gYW1kNjQ/IFRoaXMgYWNjZXNzIGlzIGtleSB0byBlZmZlY3RpdmUgZnV6emluZy4gSG1tLCBJIHJlY2FsbCBpdCBiZWluZyBhIHBsYXRmb3JtIGRyaXZlciwgYnV0IEkgKnRoaW5rKiB0aGVyZSBtaWdodCBiZSBhIFBDSSBjb21wb25lbnQgdG9vLiBUbyBiZSBzdXJlLCBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUncyBhIGBtYWNiX3BjaS5jYCBvciBzaW1pbGFyIGZpbGUgaW52b2x2ZWQuIEEgcXVpY2sgYGdyZXBgIHdpbGwgYmUganVzdCB0aGUgdGhpbmcgdG8gY2xhcmlmeSB0aGF0LCBhbmQgZ2l2ZSBtZSB0aGUgZnVsbCBzY29wZSBvZiB3aGF0J3MgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2OTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyOTo1MC40OTM4NTUyN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODI1MTQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNiX3BjaVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZz00NT1jb25maWcgTUFDQl9QQ0lcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy01MS1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6NTI6XFx0ICB3aWxsIGJlIGNhbGxlZCBtYWNiX3BjaS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNTMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlPTExPW9iai0kKENPTkZJR19NQUNCKSArPSBtYWNiLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19NQUNCX1BDSSkgKz0gbWFjYl9wY2kub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoxOTojZGVmaW5lIFBDSV9EUklWRVJfTkFNRSBcXFwibWFjYl9wY2lcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTIwLSNkZWZpbmUgUExBVF9EUklWRVJfTkFNRSBcXFwibWFjYlxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYz0xMjA9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRldl9pZF90YWJsZVtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEyNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6MTI1OnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYWNiX3BjaV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEyNi1cXHQubmFtZSAgICAgPSBQQ0lfRFJJVkVSX05BTUUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTMxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoxMzI6bW9kdWxlX3BjaV9kcml2ZXIobWFjYl9wY2lfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTMzLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBkZXZfaWRfdGFibGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyOTo1MC41NzIxMTIwMzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTk3MjAyMjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gaW50byBDYWRlbmNlIEdFTSBFbXVsYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIENhZGVuY2UgTUFDQi9HRU0gaXMgYmVpbmcgZW11bGF0ZWQgd2l0aGluIFFFTVUgb3IgaWYgdGhpcyBpcyBzb21ldGhpbmcgYmVpbmcgaGFuZGxlZCBkaXJlY3RseSBieSBwbGF0Zm9ybSBvciBQQ0kgaGFyZHdhcmUuIFRoZSBjcml0aWNhbCBmaXJzdCBxdWVzdGlvbiBpczogaXMgdGhlIENhZGVuY2UgR0VNIGFjdHVhbGx5ICplbXVsYXRlZCogaW4gUUVNVT8gWWVzLCBJIHNlZSB0aGF0IFFFTVUgZG9lcywgaW4gZmFjdCwgaGF2ZSBhIGBjYWRlbmNlX2dlbWAgbW9kZWwuIEdvb2QuIE5vdywgdGhpbmdzIGdldCBhIGxpdHRsZSB0cmlja3kuIEkga25vdyBRRU1VIHVzZXMgdGhlIENhZGVuY2UgR0VNLCBidXQgaXMgaXQganVzdCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgWGlsaW54IFp5bnEsIFp5bnFNUCwgb3IgVmVyc2FsIHBsYXRmb3JtcyDigJMgdGhlIEFSTSwgQUFyY2g2NCwgb3IgTWljcm9CbGF6ZSBhcmNoaXRlY3R1cmVzPyBPciwgY291bGQgaXQgYmUgcmVhY2hhYmxlIGZyb20gYW4gYW1kNjQgdGFyZ2V0LCB3aGljaCBpcyB0aGUgYXJjaGl0ZWN0dXJlIEknbSBmb2N1c2VkIG9uIGhlcmU/IEhvbGQgb24sIHRoZSB0YXJnZXQgaXMgYW1kNjQuIFRoYXQncyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gTm93IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBtZW50aW9ucyBvZiBgTUFDQmAgYW5kIGBNQUNCX1BDSWAsIHRvIGRldGVybWluZSBpZiB0aGVyZSdzIGEgY29ubmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyOTo1My4xNjkzMTc3M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTczMzM3MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQ0JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9MjA9aWYgTkVUX1ZFTkRPUl9DQURFTkNFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzoyMjpjb25maWcgTUFDQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzozNzpjb25maWcgTUFDQl9VU0VfSFdTVEFNUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zOC1cXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQ1OmNvbmZpZyBNQUNCX1BDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBQQ0kgTUFDQi9HRU0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6Mjk6NTMuNzY2NjU3MjQ0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM1Mzg5NTE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ2AgZmlsZTpcblxuKipBbmFseXppbmcgdGhlIENhZGVuY2UgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmaWxlIGZvciB0aGUgQ2FkZW5jZSBFdGhlcm5ldCBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlciBjb25maWd1cmVzIHRoaXMgZHJpdmVyIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gRmlyc3QsIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIG1haW4gc3ltYm9sIHRoYXQgY29udHJvbHMgdGhlIGVudGlyZSBkcml2ZXIncyBpbmNsdXNpb24uIEl0J3MgbGlrZWx5IGF0IHRoZSB0b3AsIGEgYnJvYWQgYGNvbmZpZ2Agb3B0aW9uLiBJJ2xsIG5lZWQgdG8gc2VlIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4gV2hhdCBvdGhlciBoYXJkd2FyZSBmZWF0dXJlcyBvciBrZXJuZWwgc3Vic3lzdGVtcyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgZHJpdmVyIHRvIGV2ZW4gKmJlKiBjb25zaWRlcmVkPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIFNvQyBmYW1pbGllcyB0aGF0IHRoaXMgaXMgdGFyZ2V0aW5nP1xuXG5OZXh0LCBJJ2xsIGJlIHNjcnV0aW5pemluZyB0aGUgdmFyaW91cyBzdWItb3B0aW9ucy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNldHRpbmdzIHJlbGF0ZWQgdG8gZGlmZmVyZW50IENhZGVuY2UgRXRoZXJuZXQgY29udHJvbGxlciByZXZpc2lvbnMsIHBvdGVudGlhbCBQSFkgaW50ZXJmYWNlIHNlbGVjdGlvbnMgKE1JSSwgR01JSSwgUkdNSUksIFNHTUlJLCBldGMuKSwgYW5kIG1heWJlIGV2ZW4gc3BlY2lmaWMgZmVhdHVyZXMgbGlrZSBWTEFOIHN1cHBvcnQsIGNoZWNrc3VtIG9mZmxvYWQsIG9yIGZsb3cgY29udHJvbC4gVGhlIGRlc2NyaXB0aW9ucyBmb3IgZWFjaCBvcHRpb24gYXJlIGtleTsgdGhleSdsbCBjbHVlIG1lIGluIG9uIHdoYXQgZWFjaCBzZXR0aW5nIGFjdHVhbGx5ICpkb2VzKiBhbmQgdW5kZXIgd2hpY2ggY2lyY3Vtc3RhbmNlcyBJIG1pZ2h0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgaXQuXG5cbkknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYGRlcGVuZHMgb25gIGNsYXVzZXMuIFRoZXNlIGFyZSBjcnVjaWFsOyB0aGV5IGRpY3RhdGUgdGhlIGludGVyZGVwZW5kZW5jaWVzLiBGb3IgZXhhbXBsZSwgYSBwYXJ0aWN1bGFyIFBIWSBpbnRlcmZhY2Ugb3B0aW9uIHdpbGwgbGlrZWx5IGBkZXBlbmRzIG9uYCB0aGUgdW5kZXJseWluZyBQSFkgc3VwcG9ydC4gU2ltaWxhcmx5LCBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcywgbGlrZSBjaGVja3N1bSBvZmZsb2FkLCBtaWdodCBkZXBlbmQgb24gbW9yZSBnZW5lcmFsIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBvZiB0aGUgY29udHJvbGxlci4gQW55IGBzZWxlY3RgIHN0YXRlbWVudHMgd2lsbCBiZSBpbXBvcnRhbnQsIHRvby4gVGhleSBpbmRpY2F0ZSB3aGljaCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBhcmUgYXV0b21hdGljYWxseSBlbmFibGVkIHdoZW4gYSBzcGVjaWZpYyBDYWRlbmNlIEV0aGVybmV0IGZlYXR1cmUgaXMgc2VsZWN0ZWQuXG5cbkFuZCB3aGF0IGFib3V0IGRlZmF1bHQgdmFsdWVzPyBBcmUgdGhlcmUgcmVhc29uYWJsZSBkZWZhdWx0cyBwcm92aWRlZD8gQXJlIHRoZXkgYXBwcm9wcmlhdGUgZm9yIHRoZSBjb21tb24gdXNlIGNhc2VzPyBJJ2xsIGFzc2VzcyBpZiB0aGUgZGVmYXVsdHMgYXJlIHJlYXNvbmFibGUsIG9yIGlmIHRoZXkgbmVlZCBtb2RpZmljYXRpb24gZm9yIHR5cGljYWwgZGVwbG95bWVudHMgb24gY29tbW9uIFNvQ3MuXG5cbkZpbmFsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHBvdGVudGlhbCBjb25mbGljdHMgb3Igd2FybmluZ3MuIElzIHRoZSBgS2NvbmZpZ2AgZmlsZSB3ZWxsLXN0cnVjdHVyZWQgd2l0aCBjbGVhciByZWxhdGlvbnNoaXBzIGJldHdlZW4gb3B0aW9ucz8gQ2FuIHRoZSBidWlsZCBzeXN0ZW0gY2F0Y2ggY29tbW9uIGNvbmZpZ3VyYXRpb24gZXJyb3JzIGVhc2lseT8gSSdtIGhvcGluZyBpdCdzIGRlc2lnbmVkIGluIGEgd2F5IHRoYXQgZ3VpZGVzIHRoZSB1c2VyIHRvd2FyZCBhIHNhbmUsIGZ1bmN0aW9uYWwgY29uZmlndXJhdGlvbiwgYW5kIG1pbmltaXplcyB0aGUgcG9zc2liaWxpdHkgb2Ygc2hvb3RpbmcgdGhlbXNlbHZlcyBpbiB0aGUgZm9vdCEgVGhpcyBpbmZvcm1hdGlvbiBpcyB2aXRhbCBmb3IgdGhlIGFyY2hpdGVjdHVyZSBJIGFtIHdvcmtpbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyOTo1Ny4xMjA1NTc3MjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIENhZGVuY2UgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfQ0FERU5DRVxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiQ2FkZW5jZSBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cXG4gICA5OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAxNjpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAxNzpcXHRcXHQgIHJlbWFpbmluZyBDYWRlbmNlIG5ldHdvcmsgY2FyZCBxdWVzdGlvbnMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmVcXG4gIDE4OlxcdFxcdCAgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0aWYgTkVUX1ZFTkRPUl9DQURFTkNFXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBNQUNCXFxuICAyMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfRE1BIFxcdTAwMjZcXHUwMDI2IENPTU1PTl9DTEtcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDI2OlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICAyNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDI4OlxcdFxcdGhlbHBcXG4gIDI5OlxcdFxcdCAgVGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBpbnRlcmZhY2UgaXMgZm91bmQgb24gbWFueSBBdG1lbCBBVDMyIGFuZFxcbiAgMzA6XFx0XFx0ICBBVDkxIHBhcnRzLiAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQ2FkZW5jZSBHRU0gKEdpZ2FiaXRcXG4gIDMxOlxcdFxcdCAgRXRoZXJuZXQgTUFDIGZvdW5kIGluIHNvbWUgQVJNIFNvQyBkZXZpY2VzKS4gIFNheSBZIHRvIGluY2x1ZGVcXG4gIDMyOlxcdFxcdCAgc3VwcG9ydCBmb3IgdGhlIE1BQ0IvR0VNIGNoaXAuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMzU6XFx0XFx0ICB3aWxsIGJlIG1hY2IuXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuICAzODpcXHRcXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE1BQ0JcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gIDQxOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBNQUNCX1BDSVxcbiAgNDY6XFx0XFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIE1BQ0IgXFx1MDAyNlxcdTAwMjYgUENJXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIFRoaXMgaXMgUENJIHdyYXBwZXIgZm9yIE1BQ0IgZHJpdmVyLlxcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDUyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgbWFjYl9wY2kuXFxuICA1MzpcXHRcXG4gIDU0OlxcdGVuZGlmICMgTkVUX1ZFTkRPUl9DQURFTkNFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjI5OjU3LjEyMDY4NDgzNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjEwODE5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbWFjYl9wY2kuY2AgZm9yIFBDSSBEZXZpY2UgU3VwcG9ydCBhbmQgSW5zdGFudGlhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gYG1hY2JfcGNpLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgUENJIGRldmljZSBJRHMgdGhpcyBkcml2ZXIgaXMgZGVzaWduZWQgdG8gaGFuZGxlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZHJpdmVyIGFjdHVhbGx5ICppbnN0YW50aWF0ZXMqIHRoZXNlIGRldmljZXMuIEknbSB0aGlua2luZyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBsaWtlIGEgdGFibGUgb3IgYXJyYXkgdGhhdCBtYXBzIHNwZWNpZmljIFBDSSB2ZW5kb3IgYW5kIGRldmljZSBJRHMgdG8gdGhlIGRyaXZlcidzIGluc3RhbnRpYXRpb24gcHJvY2Vzcy4gQXJlIHRoZXkgdXNpbmcgdGhlIHN0YW5kYXJkIFBDSSBwcm9iaW5nIG1lY2hhbmlzbXMsIG9yIHNvbWV0aGluZyBjdXN0b20/IElzIHRoZXJlIGFueXRoaW5nIGNsZXZlciBvciB1bnVzdWFsIGluIHRoZWlyIGFwcHJvYWNoIHRoYXQgSSBtaWdodCBsZWFybiBmcm9tPyBUaGlzIHdpbGwgbGlrZWx5IGludm9sdmUgY2hlY2tpbmcgdGhlIGBwY2lfZGV2aWNlX2lkYCBzdHJ1Y3R1cmVzIGFuZCByZWxhdGVkIHNldHVwIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyBob3cgdGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIFBDSSBidXMgaXMga2V5IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1OTIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjI5OjU5LjI0MTc3MDI0M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBET0M6IENhZGVuY2UgR0VNIFBDSSB3cmFwcGVyLlxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIENvcHlyaWdodCAoQykgMjAxNiBDYWRlbmNlIERlc2lnbiBTeXN0ZW1zIC0gaHR0cHM6Ly93d3cuY2FkZW5jZS5jb21cXG4gICA2OlxcdCAqXFxuICAgNzpcXHQgKiBBdXRob3JzOiBSYWZhbCBPemllYmxvIFxcdTAwM2NyYWZhbG9AY2FkZW5jZS5jb21cXHUwMDNlXFxuICAgODpcXHQgKlxcdCAgICBCYXJ0b3N6IEZvbHRhIFxcdTAwM2NiZm9sdGFAY2FkZW5jZS5jb21cXHUwMDNlXFxuICAgOTpcXHQgKi9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay1wcm92aWRlci5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICAxNzpcXHQjaW5jbHVkZSBcXFwibWFjYi5oXFxcIlxcbiAgMTg6XFx0XFxuICAxOTpcXHQjZGVmaW5lIFBDSV9EUklWRVJfTkFNRSBcXFwibWFjYl9wY2lcXFwiXFxuICAyMDpcXHQjZGVmaW5lIFBMQVRfRFJJVkVSX05BTUUgXFxcIm1hY2JcXFwiXFxuICAyMTpcXHRcXG4gIDIyOlxcdCNkZWZpbmUgUENJX0RFVklDRV9JRF9DRE5TX01BQ0IgMHhlMDA3XFxuICAyMzpcXHRcXG4gIDI0OlxcdCNkZWZpbmUgR0VNX1BDTEtfUkFURSA1MDAwMDAwMFxcbiAgMjU6XFx0I2RlZmluZSBHRU1fSENMS19SQVRFIDUwMDAwMDAwXFxuICAyNjpcXHRcXG4gIDI3OlxcdHN0YXRpYyBpbnQgbWFjYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuICAyODpcXHR7XFxuICAyOTpcXHRcXHRpbnQgZXJyO1xcbiAgMzA6XFx0XFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjtcXG4gIDMxOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBwbGF0X2luZm87XFxuICAzMjpcXHRcXHRzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIHBsYXRfZGF0YTtcXG4gIDMzOlxcdFxcdHN0cnVjdCByZXNvdXJjZSByZXNbMl07XFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdC8qIGVuYWJsZSBwY2kgZGV2aWNlICovXFxuICAzNjpcXHRcXHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGNpKTtcXG4gIDM3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuICAzODpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgXFxcIkVuYWJsaW5nIFBDSSBkZXZpY2UgaGFzIGZhaWxlZDogJWRcXFwiLCBlcnIpO1xcbiAgMzk6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gIDQwOlxcdFxcdH1cXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0cGNpX3NldF9tYXN0ZXIocGNpKTtcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0Lyogc2V0IHVwIHJlc291cmNlcyAqL1xcbiAgNDU6XFx0XFx0bWVtc2V0KHJlcywgMHgwMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBBUlJBWV9TSVpFKHJlcykpO1xcbiAgNDY6XFx0XFx0cmVzWzBdLnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7XFxuICA0NzpcXHRcXHRyZXNbMF0uZW5kID0gcGNpX3Jlc291cmNlX2VuZChwY2ksIDApO1xcbiAgNDg6XFx0XFx0cmVzWzBdLm5hbWUgPSBQQ0lfRFJJVkVSX05BTUU7XFxuICA0OTpcXHRcXHRyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTtcXG4gIDUwOlxcdFxcdHJlc1sxXS5zdGFydCA9IHBjaV9pcnFfdmVjdG9yKHBjaSwgMCk7XFxuICA1MTpcXHRcXHRyZXNbMV0ubmFtZSA9IFBDSV9EUklWRVJfTkFNRTtcXG4gIDUyOlxcdFxcdHJlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIFxcXCJFTUFDIHBoeXNpY2FsIGJhc2UgYWRkcjogJXBhXFxcXG5cXFwiLFxcbiAgNTU6XFx0XFx0XFx0IFxcdTAwMjZyZXNbMF0uc3RhcnQpO1xcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHQvKiBzZXQgdXAgbWFjYiBwbGF0Zm9ybSBkYXRhICovXFxuICA1ODpcXHRcXHRtZW1zZXQoXFx1MDAyNnBsYXRfZGF0YSwgMCwgc2l6ZW9mKHBsYXRfZGF0YSkpO1xcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHQvKiBpbml0aWFsaXplIGNsb2NrcyAqL1xcbiAgNjE6XFx0XFx0cGxhdF9kYXRhLnBjbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIFxcXCJwY2xrXFxcIiwgTlVMTCwgMCxcXG4gIDYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBHRU1fUENMS19SQVRFKTtcXG4gIDYzOlxcdFxcdGlmIChJU19FUlIocGxhdF9kYXRhLnBjbGspKSB7XFxuICA2NDpcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKHBsYXRfZGF0YS5wY2xrKTtcXG4gIDY1OlxcdFxcdFxcdGdvdG8gZXJyX3BjbGtfcmVnaXN0ZXI7XFxuICA2NjpcXHRcXHR9XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdHBsYXRfZGF0YS5oY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBcXFwiaGNsa1xcXCIsIE5VTEwsIDAsXFxuICA2OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgR0VNX0hDTEtfUkFURSk7XFxuICA3MDpcXHRcXHRpZiAoSVNfRVJSKHBsYXRfZGF0YS5oY2xrKSkge1xcbiAgNzE6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihwbGF0X2RhdGEuaGNsayk7XFxuICA3MjpcXHRcXHRcXHRnb3RvIGVycl9oY2xrX3JlZ2lzdGVyO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHQvKiBzZXQgdXAgcGxhdGZvcm0gZGV2aWNlIGluZm8gKi9cXG4gIDc2OlxcdFxcdG1lbXNldChcXHUwMDI2cGxhdF9pbmZvLCAwLCBzaXplb2YocGxhdF9pbmZvKSk7XFxuICA3NzpcXHRcXHRwbGF0X2luZm8ucGFyZW50ID0gXFx1MDAyNnBjaS1cXHUwMDNlZGV2O1xcbiAgNzg6XFx0XFx0cGxhdF9pbmZvLmZ3bm9kZSA9IHBjaS1cXHUwMDNlZGV2LmZ3bm9kZTtcXG4gIDc5OlxcdFxcdHBsYXRfaW5mby5uYW1lID0gUExBVF9EUklWRVJfTkFNRTtcXG4gIDgwOlxcdFxcdHBsYXRfaW5mby5pZCA9IHBjaS1cXHUwMDNlZGV2Zm47XFxuICA4MTpcXHRcXHRwbGF0X2luZm8ucmVzID0gcmVzO1xcbiAgODI6XFx0XFx0cGxhdF9pbmZvLm51bV9yZXMgPSBBUlJBWV9TSVpFKHJlcyk7XFxuICA4MzpcXHRcXHRwbGF0X2luZm8uZGF0YSA9IFxcdTAwMjZwbGF0X2RhdGE7XFxuICA4NDpcXHRcXHRwbGF0X2luZm8uc2l6ZV9kYXRhID0gc2l6ZW9mKHBsYXRfZGF0YSk7XFxuICA4NTpcXHRcXHRwbGF0X2luZm8uZG1hX21hc2sgPSBwY2ktXFx1MDAzZWRtYV9tYXNrO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHQvKiByZWdpc3RlciBwbGF0Zm9ybSBkZXZpY2UgKi9cXG4gIDg4OlxcdFxcdHBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbChcXHUwMDI2cGxhdF9pbmZvKTtcXG4gIDg5OlxcdFxcdGlmIChJU19FUlIocGRldikpIHtcXG4gIDkwOlxcdFxcdFxcdGVyciA9IFBUUl9FUlIocGRldik7XFxuICA5MTpcXHRcXHRcXHRnb3RvIGVycl9wbGF0X2Rldl9yZWdpc3RlcjtcXG4gIDkyOlxcdFxcdH1cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBjaSwgcGRldik7XFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdHJldHVybiAwO1xcbiAgOTc6XFx0XFxuICA5ODpcXHRlcnJfcGxhdF9kZXZfcmVnaXN0ZXI6XFxuICA5OTpcXHRcXHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKHBsYXRfZGF0YS5oY2xrKTtcXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyOTo1OS4yNDE5NDA2ODNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2OTQ0MTYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gbWFjYl9wY2kuYyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGlzIGBtYWNiX3BjaS5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgTUFDQiBkcml2ZXIgY29udGV4dCwgc3BlY2lmaWNhbGx5IHRoZSBQQ0kgaW1wbGVtZW50YXRpb24uIEkga25vdyB0aGUgTUFDQiBpcyBhIGNvbW1vbiBFdGhlcm5ldCBjb250cm9sbGVyLCBidXQgSSB3YW50IHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGZpbGUgaGFuZGxlcyB0aGUgUENJLXNwZWNpZmljIGFzcGVjdHMgb2YgaXRzIGluaXRpYWxpemF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgaW50ZXJydXB0IG1hbmFnZW1lbnQuIEknbSB0aGlua2luZyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIFBDSSBkZXZpY2UgSUQgbWF0Y2hpbmcsIHByb2JpbmcgZnVuY3Rpb25zLCBhbmQgcGVyaGFwcyBob3cgaXQgc2V0cyB1cCBETUEgY2hhbm5lbHMgb3IgbWVtb3J5LW1hcHBlZCBJL08uIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByZWdpc3RlciBhY2Nlc3MgbWV0aG9kcyBhbmQgaG93IHRoZXkgbWFwIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZS4gR290dGEgbG9vayBmb3IgYW55IHBvdGVudGlhbCBxdWlya3Mgb3Igd29ya2Fyb3VuZHMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIFBDSSBidXMgaW4gdGhpcyBkcml2ZXIuIExldCdzIHNlZSBob3cgdGhleSd2ZSBoYW5kbGVkIHBvd2VyIG1hbmFnZW1lbnQgaWYgdGhhdCdzIHJlbGV2YW50LiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIgdGhhdCBhbGxvd3MgdGhlIE1BQ0IgdG8gaW50ZXJmYWNlIHdpdGggdGhlIFBDSSBidXMgZWZmaWNpZW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzY3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozMDowMS43MTEzODYxNDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDE6XFx0ZXJyX2hjbGtfcmVnaXN0ZXI6XFxuIDEwMjpcXHRcXHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKHBsYXRfZGF0YS5wY2xrKTtcXG4gMTAzOlxcdFxcbiAxMDQ6XFx0ZXJyX3BjbGtfcmVnaXN0ZXI6XFxuIDEwNTpcXHRcXHRyZXR1cm4gZXJyO1xcbiAxMDY6XFx0fVxcbiAxMDc6XFx0XFxuIDEwODpcXHRzdGF0aWMgdm9pZCBtYWNiX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKVxcbiAxMDk6XFx0e1xcbiAxMTA6XFx0XFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpO1xcbiAxMTE6XFx0XFx0c3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSAqcGxhdF9kYXRhID0gZGV2X2dldF9wbGF0ZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gMTEyOlxcdFxcdHN0cnVjdCBjbGsgKnBjbGsgPSBwbGF0X2RhdGEtXFx1MDAzZXBjbGs7XFxuIDExMzpcXHRcXHRzdHJ1Y3QgY2xrICpoY2xrID0gcGxhdF9kYXRhLVxcdTAwM2VoY2xrO1xcbiAxMTQ6XFx0XFxuIDExNTpcXHRcXHRwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTtcXG4gMTE2OlxcdFxcdGNsa191bnJlZ2lzdGVyX2ZpeGVkX3JhdGUocGNsayk7XFxuIDExNzpcXHRcXHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKGhjbGspO1xcbiAxMTg6XFx0fVxcbiAxMTk6XFx0XFxuIDEyMDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkX3RhYmxlW10gPSB7XFxuIDEyMTpcXHRcXHR7IFBDSV9WREVWSUNFKENETlMsIFBDSV9ERVZJQ0VfSURfQ0ROU19NQUNCKSB9LFxcbiAxMjI6XFx0XFx0eyAwLCB9XFxuIDEyMzpcXHR9O1xcbiAxMjQ6XFx0XFxuIDEyNTpcXHRzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFjYl9wY2lfZHJpdmVyID0ge1xcbiAxMjY6XFx0XFx0Lm5hbWUgICAgID0gUENJX0RSSVZFUl9OQU1FLFxcbiAxMjc6XFx0XFx0LmlkX3RhYmxlID0gZGV2X2lkX3RhYmxlLFxcbiAxMjg6XFx0XFx0LnByb2JlICAgID0gbWFjYl9wcm9iZSxcXG4gMTI5OlxcdFxcdC5yZW1vdmVcXHQgID0gbWFjYl9yZW1vdmUsXFxuIDEzMDpcXHR9O1xcbiAxMzE6XFx0XFxuIDEzMjpcXHRtb2R1bGVfcGNpX2RyaXZlcihtYWNiX3BjaV9kcml2ZXIpO1xcbiAxMzM6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRldl9pZF90YWJsZSk7XFxuIDEzNDpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIDEzNTpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkNhZGVuY2UgTklDIFBDSSB3cmFwcGVyXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjMwOjAxLjcxMTUxNDQ5NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjIyODI0NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDYWRlbmNlIE1BQ0IgRHJpdmVyIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBDYWRlbmNlIE1BQ0IgZHJpdmVyLiBJdCBzdXBwb3J0cyBhIGZldyBkaWZmZXJlbnQgcGxhdGZvcm1zOiBBdG1lbC9NaWNyb2NoaXAsIFNpRml2ZSBSSVNDLVYsIGFuZCBYaWxpbnguIEFuZCB0aGVyZSdzIGEgc3BlY2lmaWMgUENJIHdyYXBwZXIgZm9yIGEgdGVzdC9GUEdBIGNhcmQuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGEgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLCBvciBpcyBpdCBlbXVsYXRlZD8gSSBuZWVkIHRvIGtub3cgaWYgSSdtIGRlYWxpbmcgd2l0aCBhIHJlYWwgU29DL0FTSUMgZHJpdmVyIG9yIHNvbWV0aGluZyBlbXVsYXRlZCBpbiwgc2F5LCBRRU1VLlxuXG5BaGEhIFFFTVUgKmRvZXMqIGhhdmUgYGNhZGVuY2VfZ2VtYCBlbXVsYXRpb24sIGluIGBody9uZXQvY2FkZW5jZV9nZW0uY2AsIGJ1dCBvbmx5IGFzIHBhcnQgb2YgQVJNIGFuZCBSSVNDLVYgbWFjaGluZSBjb25maWd1cmF0aW9ucy4gSXQncyBub3Qgc3RhbmRhcmQgb24geDg2L2FtZDY0IChQQy9RMzUpLCBvciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoYXQgY2hhbmdlcyB0aGluZ3MuXG5cbkkgbmVlZCB0byBhcHBseSB0aGUgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjaGFuZ2VzIEknbSBsb29raW5nIGF0IGRvbid0IGZhbGwgaW50byB0aGUgY2F0ZWdvcmllcyB3aGVyZSBJICpzaG91bGRuJ3QqIGZ1enouIExldCdzIHNlZSB3aGF0IHRob3NlIGNhdGVnb3JpZXMgYXJlOiBub24ta2VybmVsL25vbi1leGVjdXRhYmxlIGNoYW5nZXMsIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhbmQgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLlxuXG5UaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIENhbiBJIGV2ZW4gcmVhY2ggYE1BQ0JgIG9uIGBhbWQ2NGA/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBJZiBpdCdzIG5vdCByZWFjaGFibGUgdGhlbiBpdCBpcyBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIEdpdmVuIHRoYXQgUUVNVSBkb2Vzbid0IHNlZW0gdG8gZW11bGF0ZSBpdCBvbiBhbWQ2NCwgdGhhdCBpcyBub3cgaGlnaGx5IGxpa2VseS5cblxuTGV0IG1lIHRoaW5rLCBJIG5lZWQgdG8gY2hlY2sgaG93IGBtYWNiX21haW4uY2AgcHJvYmVzLCBhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgYSBwYXRoIHRocm91Z2ggdG8gYE1BQ0JgIG9uIGBhbWQ2NGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjMzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MzA6MDYuMzM0MzQzMDE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ1NDU0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjYl9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDcyOD1zdGF0aWMgdm9pZCBtYWNiX2NvbmZpZ3VyZV9jYXBzKHN0cnVjdCBtYWNiICpicCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDc3MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjQ3NzI6c3RhdGljIGludCBtYWNiX3Byb2JlX3F1ZXVlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqbWVtLCBib29sIG5hdGl2ZV9pbylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ3NzMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01OTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgZGVmYXVsdF9nZW1fY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01OTQ4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTk0OTpzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU5NTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01OTg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTk4NTpcXHRudW1fcXVldWVzID0gbWFjYl9wcm9iZV9xdWV1ZXMoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgbWVtLCBuYXRpdmVfaW8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTk4Ni1cXHRpZiAobnVtX3F1ZXVlcyBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NjQ0Nj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWNiX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjY0NDc6XFx0LnByb2JlXFx0XFx0PSBtYWNiX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjQ0OC1cXHQucmVtb3ZlXFx0XFx0PSBtYWNiX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0yNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6Mjc6c3RhdGljIGludCBtYWNiX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMjgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jPTEyNT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFjYl9wY2lfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEyNy1cXHQuaWRfdGFibGUgPSBkZXZfaWRfdGFibGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjEyODpcXHQucHJvYmUgICAgPSBtYWNiX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMjktXFx0LnJlbW92ZVxcdCAgPSBtYWNiX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MzA6MDYuNDY4ODk2MDk1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4MTUyMTEyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNQUNCIERyaXZlciBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIHRyYWNlIGhvdyB0aGlzIGBtYWNiX21haW4uY2AgZmlsZSBnZXRzIGluaXRpYWxpemVkLiBJdCdzIHVzaW5nIGBtYWNiX2RyaXZlcmAsIHdoaWNoIGlzIGEgYHBsYXRmb3JtX2RyaXZlcmAsIGFuZCB0aGUgbmFtZSBpcyBcIm1hY2JcIiDigJMgc3RyYWlnaHRmb3J3YXJkIHNvIGZhci4gSSBzZWUgYG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobWFjYl9kcml2ZXIpYCBpbiB0aGUgc291cmNlLiBBbmQgdGhlcmUncyBhbHNvIGBtYWNiX3BjaV9kcml2ZXJgLCB3aGljaCBwcm9iZXMgZm9yIGEgUENJIGRldmljZSB3aXRoIFZlbmRvciBJRCBgUENJX1ZFTkRPUl9JRF9DRE5TYCAoMHgxN2NkKSBhbmQgRGV2aWNlIElEIGAweGUwMDdgLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIGNhbiBTeXprYWxsZXIgb3IgdXNlciBzcGFjZSAqYWN0dWFsbHkqIGluc3RhbnRpYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGluIHRoaXMgY2FzZSwgb3IgYXJlIHdlIGRlYWxpbmcgd2l0aCBwaHlzaWNhbCBvciBTb0MgaGFyZHdhcmU/IFBsYXRmb3JtIGRldmljZXMgZm9yIFNvQyBldGhlcm5ldCBkcml2ZXJzIGxpa2UgTUFDQiBhcmUgdXN1YWxseSBkZWZpbmVkIGluIHRoZSBEZXZpY2UgVHJlZSAoT0YpLCBBQ1BJLCBvciBpbml0aWFsaXplZCBkdXJpbmcgU29DIGJvYXJkIHNldHVwLiBPbiBhbWQ2NCwgdGhlcmUncyBubyBkZWZhdWx0IERldmljZSBUcmVlIG5vZGUgZm9yIHRoZSBDYWRlbmNlIEdFTSB0aGF0IEknbSBhd2FyZSBvZiwgdW5sZXNzIHNvbWVvbmUgbWFudWFsbHkgaW5zdGFudGlhdGVkIGl0LiBTeXprYWxsZXIgY2FuJ3QganVzdCBjcmVhdGUgYXJiaXRyYXJ5IE1NSU8gcGxhdGZvcm0gZGV2aWNlczsgdGhlIHBsYXRmb3JtIGJ1cyBkb2Vzbid0IGFsbG93IHRoYXQgd2l0aG91dCByb290IGFjY2Vzcywgc3lzZnMgY29uZmlnZnMsIG9yIGRldmljZSB0cmVlIG92ZXJsYXlzLiBTdGFuZGFyZCBTeXprYWxsZXIgVk1zIGRvbid0IGhhdmUgdGhhdCBjYXBhYmlsaXR5LCBhbmQgZXZlbiBpZiB3ZSAqY291bGQqIGNyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSwgdGhlcmUncyBubyByZWFsIGhhcmR3YXJlIG9yIE1NSU8gZW11bGF0aW9uIGJhY2tpbmcgaXQuXG5cbkxvb2tpbmcgZGVlcGVyLCBJIHNlZSB0aGF0IGBtYWNiX21haW4uY2AgaXMgYWNjZXNzaW5nIHBoeXNpY2FsIGhhcmR3YXJlIHJlZ2lzdGVycyB2aWEgZnVuY3Rpb25zIGxpa2UgYGdlbV9yZWFkbGAsIGBicC1cdTAwM2VtYWNiX3JlZ193cml0ZWxgLCBhbmQgYGdlbV93cml0ZWxgLiBJdCdzIGFsc28gY29uZmlndXJpbmcgdGhlIFBIWSB2aWEgYHBoeWxpbmtgLlxuXG5Ob3csIHRoZSBzcGVjaWZpYyBjaGFuZ2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlczpcblxuMS4gIGBtYWNiLmhgOiBDQlMgcmVnaXN0ZXJzIGFuZCBgTUFDQl9DQVBTX1RDYC5cbjIuICBgbWFjYl9tYWluLmNgOiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbnMgc3VjaCBhcyBgbWFjYl9jYnNfZ2V0X3F1ZXVlX3BhcmFtc2AsIGBtYWNiX2Nic19hZGRgLCBgbWFjYl9jYnNfZGVzdHJveWAsIGBtYWNiX3NldHVwX2Nic2AsIGBtYWNiX3NldHVwX21xcHJpb2AsIGBtYWNiX3RjX3F1ZXJ5X2NhcHNgLCBgbWFjYl9zZXR1cF90Y2AuIEFuZCBgdmVyc2FsX2NvbmZpZ2AgaXMgdXNpbmcgYE1BQ0JfQ0FQU19UQ2AuXG5cblRoYXQgYHZlcnNhbF9jb25maWdgIGNhbGwgaXMgaW50ZXJlc3RpbmcuIFdhaXQgYSBtaW51dGUuLi4gXCJWZXJzYWxcIiBpcyBhbiBBTUQvWGlsaW54IFNvQywgc3BlY2lmaWNhbGx5IEFSTTY0ISBJIG5lZWQgdG8gc2VlIHdoZXJlIGVsc2UgYHZlcnNhbF9jb25maWdgIGlzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjMwOjE0LjI4NDExMTIyMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAxMjU1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmVyc2FsX2NvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTg2MD1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIHNhbWE3ZzVfZW1hY19jb25maWcgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4NjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1ODcwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgdmVyc2FsX2NvbmZpZyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4NzEtXFx0LmNhcHMgPSBNQUNCX0NBUFNfR0lHQUJJVF9NT0RFX0FWQUlMQUJMRSB8IE1BQ0JfQ0FQU19KVU1CTyB8XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU5MTA9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWFjYl9kdF9pZHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTkzNC1cXHR7IC5jb21wYXRpYmxlID0gXFxcInhsbngsenlucS1nZW1cXFwiLCAuZGF0YSA9IFxcdTAwMjZ6eW5xX2NvbmZpZyB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTkzNTpcXHR7IC5jb21wYXRpYmxlID0gXFxcInhsbngsdmVyc2FsLWdlbVxcXCIsIC5kYXRhID0gXFx1MDAyNnZlcnNhbF9jb25maWd9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTkzNi1cXHR7IC8qIHNlbnRpbmVsICovIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MzA6MTQuMzc0MjQxODc4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTE0NDUxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgVmVyc2FsIEdFTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdlJ3JlIGNvbmZpZ3VyaW5nIHRoZSBWZXJzYWwgR0VNIGRyaXZlci4gUmlnaHQsIGB2ZXJzYWxfY29uZmlnYCBnZXRzIGlkZW50aWZpZWQgYnkgdGhhdCBEZXZpY2UgVHJlZSBjb21wYXRpYmxlIHN0cmluZzogYFwieGxueCx2ZXJzYWwtZ2VtXCJgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHRoZSBBTUQvWGlsaW54IFZlcnNhbCBwbGF0Zm9ybSDigJMgaXQncyB0aGUgQVJNIENvcnRleC1BNzIgU29DLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBOb3cgSSBuZWVkIHRvIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgdmVyaWZ5IGlmIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zIGFyZSBsZXZlcmFnaW5nIGBNQUNCX0NBUFNfVENgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBjb2xsaXNpb25zIG9yIGNvbmZsaWN0aW5nIHNldHRpbmdzLCB5b3Uga25vdywganVzdCBzdGFuZGFyZCBkdWUgZGlsaWdlbmNlIHRvIG1ha2UgY2VydGFpbiBldmVyeXRoaW5nIGlzIHNldCB1cCBhcyBleHBlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyMDUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozMDoxNi40NjU2OTEwMzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTU5NDY0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNQUNCX0NBUFNfVENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaC03NzktI2RlZmluZSBNQUNCX0NBUFNfUVVFVUVfRElTQUJMRVxcdFxcdFxcdEJJVCgxMSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaDo3ODA6I2RlZmluZSBNQUNCX0NBUFNfVENcXHRcXHRcXHRcXHRCSVQoMTIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgtNzgxLSNkZWZpbmUgTUFDQl9DQVBTX1BDU1xcdFxcdFxcdFxcdEJJVCgxMylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDkwNT1zdGF0aWMgaW50IG1hY2JfaW5pdF9kZmx0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTUwMDQtXFx0LyogRW5hYmxlIFRDIG9mZmxvYWQgZm9yIFRTTi1jYXBhYmxlIGhhcmR3YXJlICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1MDA1OlxcdGlmIChicC1cXHUwMDNlY2FwcyBcXHUwMDI2IE1BQ0JfQ0FQU19UQylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTUwMDYtXFx0XFx0bmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01ODcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgdmVyc2FsX2NvbmZpZyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTg3My1cXHRcXHRNQUNCX0NBUFNfTkVFRF9UU1VDTEsgfCBNQUNCX0NBUFNfUVVFVUVfRElTQUJMRSB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1ODc0OlxcdFxcdE1BQ0JfQ0FQU19UQyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01ODc1LVxcdFxcdE1BQ0JfQ0FQU19VU1JJT19IQVNfTUlJLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozMDoxNi41NzcyOTMyMDVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzg4NjgwOTI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IENhZGVuY2UgTUFDQi9HRU0gRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzbid0IHdvcnRoIGZ1enppbmcgZm9yIHg4Nl82NCwgYW5kIHRoZSByZWFzb25pbmcgc2VlbXMgcHJldHR5IHNvbGlkLCBidXQgbGV0J3MgYmUgbWV0aWN1bG91cy5cblxuRmlyc3RseSwgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCB0aGUgYE1BQ0JfQ0FQU19UQ2AgZmVhdHVyZS4gSSBzZWUgdGhhdCB0aGlzIGNhcGFiaWxpdHkgaXMgKm9ubHkqIGVuYWJsZWQgd2l0aGluIHRoZSBgdmVyc2FsX2NvbmZpZ2AgY29udGV4dCwgd2hpY2ggaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gWGlsaW54IFZlcnNhbCBTb0NzLCBhbmQgcmVsaWVzIG9uIHRoZSBPcGVuIEZpcm13YXJlIERUIGNvbXBhdGlibGUgc3RyaW5nLCBgeGxueCx2ZXJzYWwtZ2VtYC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgdGhpcyBmZWF0dXJlIGFsc28gZnVuZGFtZW50YWxseSByZXF1aXJlcyBgTkVUSUZfRl9IV19UQ2AuXG5cbkxvb2tpbmcgYXQgYG1hY2Jfc2V0dXBfdGNgLCBpZiBgTkVUSUZfRl9IV19UQ2AgaXNuJ3Qgc2V0LCB0aGVuIHRoZSBjb2RlIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIGFuIGVycm9yIChgLUVPUE5PVFNVUFBgKS4gRXZlbiBpZiB3ZSBzb21laG93IGNvbmp1cmVkIHVwIGEgYG1hY2JgIGRldmljZSAod2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gdW5kZXJseWluZyBoYXJkd2FyZSBvciBhIERUIGVudHJ5LCBhbmQgdGh1cyBhICpwaHlzaWNhbCogQ2FkZW5jZSBNQUNCIG9yIHByb3Blcmx5IGVtdWxhdGVkIGRldmljZSkgb24geDg2LCB0aGlzIHdvdWxkIGltbWVkaWF0ZWx5IHNob3J0IGNpcmN1aXQuXG5cblRoZSBkcml2ZXIgaXRzZWxmIGlzIGZvciBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGNvbnRyb2xsZXJzIGZvdW5kIG9uIGhhcmR3YXJlIGxpa2UgQXRtZWwvTWljcm9jaGlwIEFSTSwgU2lGaXZlIFJJU0MtViwgYW5kIFhpbGlueCBaeW5xL1ZlcnNhbCBBUk0gU29Dcy4gVGhlc2UgdGFyZ2V0cyBhcmUgcHJpbWFyaWx5IGVtYmVkZGVkIHN5c3RlbXMgb3IgU29Dcy4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvbiBhbWQ2NCBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgYXJlIG5vdCBnb2luZyB0byBjb250YWluIHRoaXMgaGFyZHdhcmUuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgKm5lZ2F0aXZlKiBjcml0ZXJpYSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cbiogICAqKlN0cnVjdHVyYWxseSBVbnJlYWNoYWJsZSBIYXJkd2FyZToqKiBJJ20gbm90IHNlZWluZyBhbnkgcGF0aCBoZXJlIHRoYXQgd291bGQgZXhlY3V0ZSB3aXRob3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLiBXZSdyZSBub3QgdGFsa2luZyBhYm91dCBnZW5lcmljIG5ldHdvcmtpbmcgY29kZSBoZXJlLCBvciBhIFBDSSBkZXZpY2Ugb24geDg2LCB3aGljaCBpcyBhbiBleHRyZW1lbHkgaW1wb3J0YW50IGRpZmZlcmVuY2UsIHdlIGFyZSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBTb0MtYmFzZWQgaGFyZHdhcmUuIFRoaXMgaW5jbHVkZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIG9yIG1vcmUgY29tcGxleCBTbWFydE5JQ3MgYW5kIHRoZWlyIGRyaXZlcnMuIE5vdGhpbmcgaGVyZSB0b3VjaGVzIHRob3NlIGtpbmRzIG9mIGFic3RyYWN0aW9uczsgdGhlIGZvY3VzIGlzIG9uIGEgZGlyZWN0LCBoYXJkd2FyZS1kZXBlbmRlbnQgZmVhdHVyZS5cbiogICAqKlVucmVhY2hhYmxlIEV4ZWN1dGlvbiBQYXRoczoqKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYCkgbWlnaHQgZXhlY3V0ZSBhdCBkcml2ZXIgdW5sb2FkLiBIb3dldmVyLCB0aGVzZSBhcmUgdHlwaWNhbGx5IG9ubHkgcmVsZXZhbnQgZHVyaW5nIGEgaG90LXVucGx1Zywgb3IgZHJpdmVyIHVuYmluZCBpbiBzeXNmcywgd2hpY2ggaXMgYW4gb3J0aG9nb25hbCBjb25jZXJuLiBBZ2FpbiwgdGhlIGNvcmUgbG9naWMgaXMgdGllZCB0byBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBhbmQgY2FwYWJpbGl0aWVzLiBDb2RlIHBhdGhzIHNwZWNpZmljIHRvIG5vbi10YXJnZXQgYXJjaGl0ZWN0dXJlcyBhcmUgZ2VuZXJhbGx5IGFsc28gcHJvYmxlbWF0aWMsIGhvd2V2ZXIsIHdlIGFyZSBydW5uaW5nIG9uIGFtZDY0LCBzbyBpdCdzIG5vdCBhIGNvbmNlcm4uXG5cblNwZWNpZmljIHRvIHRoaXMgY2hhbmdlOlxuXG4xLiAgTXkgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyB4ODZcXF82NCAoYW1kNjQpLlxuMi4gIFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNgIChhbmQgYG1hY2IuaGApLCB3aGljaCBpcyBhIGRyaXZlciBmb3IgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBjb250cm9sbGVycy5cbjMuICBUaGUgZmVhdHVyZSBiZWluZyBhZGRlZCAoTVFQUklPIGFuZCBDQlMgb2ZmbG9hZCB2aWEgdHJhZmZpYyBjb250cm9sKSBpcyAqb25seSogZW5hYmxlZCBmb3IgWGlsaW54IFZlcnNhbCwgYW5kIHRoaXMgaXMgYW4gQVJNIFNvQyBwbGF0Zm9ybS5cbjQuICBUaGlzIG1lYW5zIHdlIG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUsIG9yIGEgdmVyeSBzcGVjaWZpYyBTb0MgZW11bGF0aW9uIChub3QgcHJvdmlkZWQgYnkgdGhlIHN0YW5kYXJkIFFFTVUgc2V0dXApIGZvciB0aGlzIGNvZGUgdG8gZXZlbiBleGVjdXRlLlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb246IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5MZXQncyBkbyBhIGZpbmFsIGNoZWNrOlxuXG4qICAgQXJlIHdlIHRvdWNoaW5nIGFueSBjb3JlIG5ldHdvcmtpbmcgb3IgZ2VuZXJpYyBmaWxlcz8gTm8sIGp1c3QgdGhlIGBtYWNiLmhgIGFuZCBgbWFjYl9tYWluLmNgIGZpbGVzIHdpdGhpbiB0aGUgQ2FkZW5jZS1zcGVjaWZpYyBkaXJlY3RvcnkuIFRoaXMgZnVydGhlciByZWluZm9yY2VzIHRoZSBpc29sYXRpb24uXG4qICAgV2hhdCBhYm91dCB0aGUgYEVuYWJsZUNvbmZpZ3NgPyBTaW5jZSBgV29ydGhGdXp6aW5nYCBpcyBgZmFsc2VgLCB0aGUgc2NoZW1hIGRpY3RhdGVzIHRoYXQgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBjYW4gYmUgZW1wdHkgb3IgbnVsbC5cblxuT2theSwgbGV0J3MgY3JhZnQgdGhlIHJlYXNvbmluZyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbDpcblxuKiAgIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIENyZWRpdC1CYXNlZCBTaGFwZXIgKENCUykgYW5kIE1RUFJJTyB0cmFmZmljIGNvbnRyb2wgb2ZmbG9hZCBzdXBwb3J0IHRvIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIG5ldHdvcmsgZHJpdmVyIChgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9gKS5cbiogICBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgb25seSBlbmFibGVkIGZvciBBTUQvWGlsaW54IFZlcnNhbCBTb0NzIChgdmVyc2FsX2NvbmZpZ2AsIHVzaW5nIHRoZSBEVCBtYXRjaCBmb3IgYHhsbngsdmVyc2FsLWdlbWApLCB3aGljaCBhcmUgQVJNNjQgaGFyZHdhcmUuXG4qICAgVGhlIGRyaXZlciwgYXMgbW9kaWZpZWQsIHRhcmdldHMgcGh5c2ljYWwgU29DIGhhcmR3YXJlIC8gQVNJQ3Mgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgeDg2XFxfNjQgLyBhbWQ2NCB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCByZW5kZXJpbmcgdGhlIGFkZGVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBhbWQ2NCBmdXp6aW5nLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg5NiwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MzA6MjQuNDY0MTA0NTIxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlLykgdG8gYWRkIENCUyBhbmQgTVFQUklPIGhhcmR3YXJlIHRyYWZmaWMgY29udHJvbCBvZmZsb2FkaW5nLCBzcGVjaWZpY2FsbHkgZW5hYmxlZCBmb3IgWGlsaW54IFZlcnNhbCBTb0NzICh2ZXJzYWxfY29uZmlnKS4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBBUk0vUklTQy1WIFNvQyBuZXR3b3JrIGNvbnRyb2xsZXJzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS8pIHRvIGFkZCBDQlMgYW5kIE1RUFJJTyBoYXJkd2FyZSB0cmFmZmljIGNvbnRyb2wgb2ZmbG9hZGluZywgc3BlY2lmaWNhbGx5IGVuYWJsZWQgZm9yIFhpbGlueCBWZXJzYWwgU29DcyAodmVyc2FsX2NvbmZpZykuIFRoaXMgZHJpdmVyIHRhcmdldHMgcGh5c2ljYWwgQVJNL1JJU0MtViBTb0MgbmV0d29yayBjb250cm9sbGVycyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGFtZDY0IHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozMDoyNC40NjQxMzEyNzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8gkcw[1] Phase: Running StartedAt: 2026-09-09 15:30:36 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gkcw[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-09 15:30:36 +0000 UTC FinishedAt: 2026-09-09 15:30:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}