Name: series-workflowch7tf Phase: Failed StartedAt: 2026-08-19 08:58:15 +0000 UTC FinishedAt: 2026-08-19 09:01:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowch7tf[0] Phase: Succeeded StartedAt: 2026-08-19 08:58:15 +0000 UTC FinishedAt: 2026-08-19 09:01:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowch7tf[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 08:58:15 +0000 UTC FinishedAt: 2026-08-19 09:01:06 +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+CgkJCTx0ZD4yMDI2LzA4LzE5IDA4OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZGSU8gZHJpdmVyIGZvciB0aGUgRnJlZXNjYWxlL05YUCBNYW5hZ2VtZW50IENvbXBsZXggKGZzbC1tYykgYnVzLiBUaGlzIGJ1cyBhbmQgaXRzIGRldmljZXMgYXJlIHNwZWNpZmljIHRvIHBoeXNpY2FsIE5YUCBRb3JJUSBEUEFBMiBoYXJkd2FyZSBhbmQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aCBpbiBgdmZpb19mc2xfbWNfbW1hcGAgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA4OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjE2M2E2ZjZmMGNhODAyNjY2YjhlMjlkMmM0NjJiN2U1YzViYmMwYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA4OjU5OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYyBiL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY1xuaW5kZXggYjRjMzk1ODIwMWIyNS4uODVmNDc5ZGI5MzZjNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXG5AQCAtNDA3LDYgJiM0Mzs0MDcsMTAgQEAgc3RhdGljIGludCB2ZmlvX2ZzbF9tY19tbWFwKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LFxuIFx0XHRcdFx1MDAyNlx1MDAyNiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdC8qIFByZXZlbnQgcmVhZC1vbmx5IHJlZ2lvbiBtYXBwaW5ncyBmcm9tIGJlaW5nIHVwZ3JhZGVkIHdpdGggbXByb3RlY3QoKSAqL1xuJiM0MztcdGlmICghKHZkZXYtXHUwMDNlcmVnaW9uc1tpbmRleF0uZmxhZ3MgXHUwMDI2IFZGSU9fUkVHSU9OX0lORk9fRkxBR19XUklURSkpXG4mIzQzO1x0XHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX01BWVdSSVRFKTtcbiYjNDM7XG4gXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbWNfZGV2O1xuIFxuIFx0cmV0dXJuIHZmaW9fZnNsX21jX21tYXBfbW1pbyh2ZGV2LVx1MDAzZXJlZ2lvbnNbaW5kZXhdLCB2bWEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA4OjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBkcml2ZXIgZm9yIHRoZSBGcmVlc2NhbGUvTlhQIE1hbmFnZW1lbnQgQ29tcGxleCAoZnNsLW1jKSBidXMuIFRoaXMgYnVzIGFuZCBpdHMgZGV2aWNlcyBhcmUgc3BlY2lmaWMgdG8gcGh5c2ljYWwgTlhQIFFvcklRIERQQUEyIGhhcmR3YXJlIGFuZCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRoIGluIGB2ZmlvX2ZzbF9tY19tbWFwYCBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyMTYzYTZmNmYwY2E4MDI2NjZiOGUyOWQyYzQ2MmI3ZTVjNWJiYzBiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMDg6NTk6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMgYi9kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMKaW5kZXggYjRjMzk1ODIwMWIyNS4uODVmNDc5ZGI5MzZjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYwpAQCAtNDA3LDYgJiM0Mzs0MDcsMTAgQEAgc3RhdGljIGludCB2ZmlvX2ZzbF9tY19tbWFwKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LAogCQkJJmFtcDsmYW1wOyAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9XUklURSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CS8qIFByZXZlbnQgcmVhZC1vbmx5IHJlZ2lvbiBtYXBwaW5ncyBmcm9tIGJlaW5nIHVwZ3JhZGVkIHdpdGggbXByb3RlY3QoKSAqLwomIzQzOwlpZiAoISh2ZGV2LSZndDtyZWdpb25zW2luZGV4XS5mbGFncyAmYW1wOyBWRklPX1JFR0lPTl9JTkZPX0ZMQUdfV1JJVEUpKQomIzQzOwkJdm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9NQVlXUklURSk7CiYjNDM7CiAJdm1hLSZndDt2bV9wcml2YXRlX2RhdGEgPSBtY19kZXY7CiAKIAlyZXR1cm4gdmZpb19mc2xfbWNfbW1hcF9tbWlvKHZkZXYtJmd0O3JlZ2lvbnNbaW5kZXhdLCB2bWEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwODo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFZGSU8gUGF0Y2ggZm9yIEZyZWVzY2FsZSBNQyBCdXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIGFwcGxpZWQgdG8gYGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY2AuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgdHdlYWtlZCB0aGUgYHZmaW9fZnNsX21jX21tYXBgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGlzIGNoZWNrOgoKYGBgYwoJLyogUHJldmVudCByZWFkLW9ubHkgcmVnaW9uIG1hcHBpbmdzIGZyb20gYmVpbmcgdXBncmFkZWQgd2l0aCBtcHJvdGVjdCgpICovCglpZiAoISh2ZGV2LSZndDtyZWdpb25zW2luZGV4XS5mbGFncyAmYW1wOyBWRklPX1JFR0lPTl9JTkZPX0ZMQUdfV1JJVEUpKQoJCXZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fTUFZV1JJVEUpOwpgYGAKCkVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBwcmV2ZW50aW5nIHJlYWQtb25seSByZWdpb25zIGZyb20gYmVpbmcgbWFkZSB3cml0YWJsZSBsYXRlciBvbiwgdXNpbmcgYG1wcm90ZWN0KClgLiBUaGF0JiMzOTtzIGEgZ29vZCBzZWN1cml0eSBwcmFjdGljZTsgc291bmRzIGxpa2UgaXQgY291bGQgcHJldmVudCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBCdXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYW5kIHRlc3RhYmlsaXR5LiBUaGlzIGlzIGluIHRoZSBjb250ZXh0IG9mIHRoZSBWRklPIGRyaXZlciBmb3IgdGhlIEZyZWVzY2FsZSBNQyBidXMsIGBmc2wtbWNgLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuIHJlYWNoYWJsZSBpbiBhIHR5cGljYWwgUUVNVS9HQ0Ugc2V0dXA/IFRoZSBGcmVlc2NhbGUgTUMgYnVzIGlzIGdlbmVyYWxseSBhc3NvY2lhdGVkIHdpdGggTlhQL0ZyZWVzY2FsZSBTb0NzLCBzcGVjaWZpY2FsbHkgdGhpbmdzIGxpa2UgdGhlIERQQUEyIGFyY2hpdGVjdHVyZS4gSXMgdGhpcyBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZSBhY3R1YWxseSBlbXVsYXRlZCBpbiBRRU1VPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbi4gSWYgaXQmIzM5O3Mgbm90IGVtdWxhdGVkLCB0aGVuIHRoaXMgcGF0Y2gsIHdoaWxlIGxvZ2ljYWxseSBzb3VuZCwgbWlnaHQgbm90IGJlIHRlc3RhYmxlIG9yIGV2ZW4gcmVsZXZhbnQgaW4gbWFueSBjb21tb24gdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLgoKU28sIGxldCYjMzk7cyBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHRlc3RhYmxlLiBGcm9tIHdoYXQgSSByZW1lbWJlciwgYGZzbC1tY2AgaXMgYWxtb3N0IGV4Y2x1c2l2ZWx5IGEgTGF5ZXJzY2FwZSBTb0Mtc3BlY2lmaWMgdGhpbmcuIExldCBtZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBgZnNsLW1jYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgYW5kIGNvbmZpcm0gdGhhdCBzdXNwaWNpb24uIFRoYXQgd2lsbCBoZWxwIHRvIGdhdWdlIGlmIHRoZXJlIGFyZSBhbnkgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGlzIHBhdGNoIHdpdGhvdXQgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZzbC1tYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc9ND1jb25maWcgVkZJT19GU0xfTUNcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZzo1Olx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBRb3JJUSBEUEFBMiBmc2wtbWMgYnVzIGRldmljZXNcJiMzNDtcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy02LVx0c2VsZWN0IEVWRU5URkRcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy03LVx0aGVscFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnOjg6XHQgIERyaXZlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFZGSU8gUW9ySVEgRFBBQTIgZnNsLW1jXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctOS1cdCAgKE1hbmFnZW1lbnQgQ29tcGxleCkgZGV2aWNlcy4gVGhpcyBpcyByZXF1aXJlZCB0byBwYXNzdGhyb3VnaFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnOjEwOlx0ICBmc2wtbWMgYnVzIGRldmljZXMgdXNpbmcgdGhlIFZGSU8gZnJhbWV3b3JrLlxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnLTExLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVkZJT19GU0xfTUMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGlzIGBWRklPX0ZTTF9NQ2AgY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpY2FsbHkgYWJvdXQgZW5hYmxpbmcgVkZJTyBzdXBwb3J0IGZvciBOWFAgUW9ySVEgRFBBQTIgZnNsLW1jIGJ1cyBkZXZpY2VzLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCYjMzk7cyBhIHJlZCBmbGFnOyB0aGlzIGlzIGhhcmR3YXJlLXNwZWNpZmljLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIGV2ZW4gKnRlc3QqIHRoaXMgZWZmZWN0aXZlbHkgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlPyBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdGhhdCBzdGFuZGFyZCBRRU1VIGxpa2VseSAqZG9lc24mIzM5O3QqIGVtdWxhdGUgdGhpcyBEUEFBMiBmc2wtbWMgYnVzIGFyY2hpdGVjdHVyZSBlYXNpbHksIG9yIGF0IGFsbC4gSSBoYXZlbiYjMzk7dCBzZWVuIGdlbmVyaWMgZW11bGF0aW9uLiBJdCYjMzk7cyB0b28gbmljaGUuCgpUaGUgdGhvdWdodCB0aGVuIHNoaWZ0cyB0byBTeXprYWxsZXI7IGNhbiB0aGF0IGhlbHA/IFdhaXQsIGRvZXMgU3l6a2FsbGVyIGV2ZW4gaGF2ZSBhbnkgZnNsLW1jIGVtdWxhdGlvbj8gTGV0JiMzOTtzIGJlIHJlYWxpc3RpYywgcHJvYmFibHkgbm90LiBJJiMzOTtkIG5lZWQgdG8gbG9vaywgYnV0IEkmIzM5O20gZ3Vlc3NpbmcgU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgbmF0aXZlIHN1cHBvcnQgZm9yIGZ1enppbmcgZnNsLW1jIGRldmljZXMuIFRoaXMgaXNuJiMzOTt0IGFib3V0IGdlbmVyYWwgVkZJTyBmdXp6aW5nLCBpdCYjMzk7cyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gb2YgVkZJTyAqd2l0aCogYSB2ZXJ5IHBhcnRpY3VsYXIgYnVzIGRyaXZlciAoYGZzbC1tY2ApLiBWRklPICppdHNlbGYqIGlzIGZ1enplZCwgb2YgY291cnNlLCBidXQgZm9yIHNwZWNpZmljIGJ1cyBkcml2ZXJzIGxpa2UgdGhpcywgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRoZSBidXMgdG8gYmUgdGhlcmUsIGFuZCBkZXZpY2VzIHByb2JlZC4gVGhlIGhhcmR3YXJlICpuZWVkcyogdG8gYmUgcHJlc2VudC4KCk15IG5leHQgbGluZSBvZiB0aG91Z2h0IGlzIHRvIHNlZSBpZiBtYXliZSwganVzdCBtYXliZSwgSSBjYW4gY3JlYXRlIHRoaXMgYGZzbC1tY2AgYnVzIHZpcnR1YWxseS4gSXQmIzM5O3MgYSBsb25nIHNob3QsIGJ1dCBpZiB0aGVyZSYjMzk7cyBhIHdheSB0byBzeW50aGVzaXplIHRoZSBlbnZpcm9ubWVudCwgSSBtaWdodCBiZSBhYmxlIHRvIGdldCBzb21ld2hlcmUuIEJ1dCBJJiMzOTttIGdvaW5nIHRvIGJlIGhvbmVzdCwgSSYjMzk7bSBub3Qgb3B0aW1pc3RpYyBhYm91dCB0aGlzIGJlaW5nIGVhc2lseSBkb2FibGUgb3IgZWFzaWx5IGZ1enplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc2xfbWNfYnVzX3R5cGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0zMjQ9QVRUUklCVVRFX0dST1VQUyhmc2xfbWNfYnVzKTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzI1LVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzozMjY6Y29uc3Qgc3RydWN0IGJ1c190eXBlIGZzbF9tY19idXNfdHlwZSA9IHtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzI3LVx0Lm5hbWUgPSBcJiMzNDtmc2wtbWNcJiMzNDssXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0zMzgtfTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MzM5OkVYUE9SVF9TWU1CT0xfR1BMKGZzbF9tY19idXNfdHlwZSk7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTM0MC1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTQ2MT1pbnQgX19mc2xfbWNfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBmc2xfbWNfZHJpdmVyICptY19kcml2ZXIsXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy00NjYtXHRtY19kcml2ZXItXHUwMDNlZHJpdmVyLm93bmVyID0gb3duZXI7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjQ2NzpcdG1jX2RyaXZlci1cdTAwM2Vkcml2ZXIuYnVzID0gXHUwMDI2ZnNsX21jX2J1c190eXBlO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy00NjgtXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz03NTI9aW50IGZzbF9tY19kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2MgKm9ial9kZXNjLFxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNzg5LVx0bWNfZGV2LVx1MDAzZWRldi5wYXJlbnQgPSBwYXJlbnRfZGV2O1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo3OTA6XHRtY19kZXYtXHUwMDNlZGV2LmJ1cyA9IFx1MDAyNmZzbF9tY19idXNfdHlwZTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNzkxLVx0bWNfZGV2LVx1MDAzZWRldi5yZWxlYXNlID0gZnNsX21jX2RldmljZV9yZWxlYXNlO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTE3NT1zdGF0aWMgdm9pZCBmc2xfbWNfYnVzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTE4My1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTE4NDpcdGJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNmZzbF9tY19idXNfdHlwZSwgXHUwMDI2ZnNsX21jX25iKTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTE4NS1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTEyNjA9c3RhdGljIGludCBfX2luaXQgZnNsX21jX2J1c19kcml2ZXJfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI2My1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTI2NDpcdGVycm9yID0gYnVzX3JlZ2lzdGVyKFx1MDAyNmZzbF9tY19idXNfdHlwZSk7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyNjUtXHRpZiAoZXJyb3IgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyOTItZXJyb3JfY2xlYW51cF9idXM6XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyOTM6XHRidXNfdW5yZWdpc3RlcihcdTAwMjZmc2xfbWNfYnVzX3R5cGUpO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjk0LVxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXUuYz0xODY9c3RhdGljIGNvbnN0IHN0cnVjdCBidXNfdHlwZSAqIGNvbnN0IGlvbW11X2J1c2VzW10gPSB7XG4tLVxuZHJpdmVycy9pb21tdS9pb21tdS5jLTE5NC0jaWZkZWYgQ09ORklHX0ZTTF9NQ19CVVNcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYzoxOTU6XHRcdTAwMjZmc2xfbWNfYnVzX3R5cGUsXG5kcml2ZXJzL2lvbW11L2lvbW11LmMtMTk2LSNlbmRpZlxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz00NDk9c3RhdGljIGludCB2ZmlvX2ZzbF9tY19pbml0X2RldmljZShzdHJ1Y3QgdmZpb19mc2xfbWNfZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NjItXHR2ZGV2LVx1MDAzZW5iLm5vdGlmaWVyX2NhbGwgPSB2ZmlvX2ZzbF9tY19idXNfbm90aWZpZXI7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NDYzOlx0cmV0ID0gYnVzX3JlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNmZzbF9tY19idXNfdHlwZSwgXHUwMDI2dmRldi1cdTAwM2VuYik7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDY0LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDc1LW91dF9uY191bnJlZzpcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0NzY6XHRidXNfdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZmc2xfbWNfYnVzX3R5cGUsIFx1MDAyNnZkZXYtXHUwMDNlbmIpO1xuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQ3Ny1cdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTQ5Nz1zdGF0aWMgdm9pZCB2ZmlvX2ZzbF91bmluaXRfZGV2aWNlKHN0cnVjdCB2ZmlvX2ZzbF9tY19kZXZpY2UgKnZkZXYpXG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTUwNC1cdGRwcmNfY2xlYW51cChtY19kZXYpO1xuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjUwNTpcdGJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNmZzbF9tY19idXNfdHlwZSwgXHUwMDI2dmRldi1cdTAwM2VuYik7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNTA2LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oPTM1Nj1pbnQgbWNfc2VuZF9jb21tYW5kKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCBzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgKmNtZCk7XG4tLVxuaW5jbHVkZS9saW51eC9mc2wvbWMuaC0zNTgtI2lmZGVmIENPTkZJR19GU0xfTUNfQlVTXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oOjM1OTojZGVmaW5lIGRldl9pc19mc2xfbWMoX2RldikgKChfZGV2KS1cdTAwM2VidXMgPT0gXHUwMDI2ZnNsX21jX2J1c190eXBlKVxuaW5jbHVkZS9saW51eC9mc2wvbWMuaC0zNjAtdTMyIGZzbF9tY19nZXRfbXNpX2lkKHN0cnVjdCBkZXZpY2UgKmRldik7XG4tLVxuaW5jbHVkZS9saW51eC9mc2wvbWMuaD00Mjg9c3RydWN0IGZzbF9tY19kZXZpY2UgKmZzbF9tY19nZXRfZW5kcG9pbnQoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2Rldixcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oLTQzMC1cbmluY2x1ZGUvbGludXgvZnNsL21jLmg6NDMxOmV4dGVybiBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgZnNsX21jX2J1c190eXBlO1xuaW5jbHVkZS9saW51eC9mc2wvbWMuaC00MzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzNQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgVmlydHVhbCBGU0wtTUMgRGV2aWNlIFBvc3NpYmlsaXRpZXMqKgoKQWxyaWdodCwgc28gdGhlIEZTTC1NQyBidXMgaXMgaW5oZXJlbnRseSB0aWVkIHRvIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSDigJMgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gd2Ugc29tZWhvdyBhYnN0cmFjdCB0aGF0PyBJcyB0aGVyZSBhIG1lY2hhbmlzbSwgYSBjbGV2ZXIgaGFjaywgb3IgZXZlbiBhIG1vcmUgZnVuZGFtZW50YWwgYXBwcm9hY2gsIHRvIGNyZWF0ZSBhIHZpcnR1YWwgRlNMLU1DIGRldmljZT8gSSYjMzk7bSB0aGlua2luZywgcGVyaGFwcywgYSBkcml2ZXIgdGhhdCBlbXVsYXRlcyB0aGUgYmVoYXZpb3IsIG9yIG1heWJlIHNvbWV0aGluZyBsYXllcmVkIG9uIHRvcCBvZiBhIGRpZmZlcmVudCBoYXJkd2FyZSBhYnN0cmFjdGlvbi4gVGhlIGdvYWwgd291bGQgYmUgdG8gZ2FpbiB0aGUgYWR2YW50YWdlcyBvZiB0ZXN0aW5nIG9yIGRldmVsb3BtZW50IHdpdGhvdXQgZGlyZWN0IGhhcmR3YXJlIGFjY2Vzcy4gTXkgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMgd2l0aCBleHBsb3JpbmcgZXhpc3RpbmcgdmlydHVhbGl6YXRpb24gdGVjaG5pcXVlcyBhbmQgY2hlY2tpbmcgaWYgYW55IGV4aXN0aW5nIGZyYW1ld29ya3MgYXJlIGV4dGVuc2libGUgdG8gc2ltdWxhdGUgdGhpcyBidXMuIFRoZSBwb3RlbnRpYWwgaXMgdGhlcmUsIHRoZSBwYXRoIGlzbiYjMzk7dCB5ZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnNsX21jX2RldmljZV9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM9MTY5PXN0YXRpYyB2b2lkIGZzbF9tY19vYmpfZGV2aWNlX2FkZChzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfYnVzX2Rldixcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy0xODItXHR9IGVsc2Uge1xuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6MTgzOlx0XHRlcnJvciA9IGZzbF9tY19kZXZpY2VfYWRkKG9ial9kZXNjLCBOVUxMLCBcdTAwMjZtY19idXNfZGV2LVx1MDAzZWRldixcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTE4NC1cdFx0XHRcdFx0ICBcdTAwMjZjaGlsZF9kZXYpO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9NzM3PXN0YXRpYyB2b2lkIGZzbF9tY19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03NTEtICovXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjc1MjppbnQgZnNsX21jX2RldmljZV9hZGQoc3RydWN0IGZzbF9tY19vYmpfZGVzYyAqb2JqX2Rlc2MsXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTc1My1cdFx0ICAgICAgc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy04NzktfVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo4ODA6RVhQT1JUX1NZTUJPTF9HUEwoZnNsX21jX2RldmljZV9hZGQpO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy04ODEtXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMDM5PXN0YXRpYyBpbnQgZnNsX21jX2J1c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTE1Ny1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTE1ODpcdGVycm9yID0gZnNsX21jX2RldmljZV9hZGQoXHUwMDI2b2JqX2Rlc2MsIG1jX2lvLCBcdTAwMjZwZGV2LVx1MDAzZWRldiwgXHUwMDI2bWNfYnVzX2Rldik7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTExNTktXHRpZiAoZXJyb3IgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1wcml2YXRlLmg9NjAxPXN0cnVjdCBmc2xfbWNfYnVzIHtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaC02MTMtXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaDo2MTQ6aW50IF9fbXVzdF9jaGVjayBmc2xfbWNfZGV2aWNlX2FkZChzdHJ1Y3QgZnNsX21jX29ial9kZXNjICpvYmpfZGVzYyxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oLTYxNS1cdFx0XHRcdCAgIHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGVtYmVkZGVkIHN5c3RlbXMgZXhwZXJ0OgoKKipVbmRlcnN0YW5kaW5nIHRoZSBEZXZpY2UgQWRkaXRpb24gU2VxdWVuY2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpbW1lZGlhdGVseSBmbGFncyBgZnNsX21jX2RldmljZV9hZGRgLiBUaGF0IGZ1bmN0aW9uIGNhbGwsIHdoaWNoIEkga25vdyBpcyBwcmV0dHkgZnVuZGFtZW50YWwgZm9yIGFkZGluZyBhIGRldmljZSB0byB0aGUgc3lzdGVtLCBpcyB0cmlnZ2VyZWQgZnJvbSB3aXRoaW4gYGZzbF9tY19idXNfcHJvYmVgLiBBbmQgYGZzbF9tY19idXNfcHJvYmVgPyBBaCwgcmlnaHQsIHRoYXQmIzM5O3MgcGFydCBvZiB0aGUgc3RhbmRhcmQgcGxhdGZvcm0gZHJpdmVyIGxpZmVjeWNsZS4gU28sIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBgZnNsX21jX2J1c19kcml2ZXJgLiBUaGlzIG1lYW5zIHRoZSBwcm9jZXNzIG9mIGRldGVjdGluZyBhbmQgaW50ZWdyYXRpbmcgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSB3aXRoIHRoZSBNb3Rpb24gQ29udHJvbCBmcmFtZXdvcmsgaXMgaW5pdGlhdGVkIGJ5IHRoZSBwbGF0Zm9ybSBkcml2ZXIsIGBmc2xfbWNfYnVzX2RyaXZlcmAsIGFuZCB0aGUgYWN0dWFsIGRldmljZSBhZGRpdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiBpdCYjMzk7cyBgcHJvYmVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCB0aGUgY2FsbCB0byBgZnNsX21jX2RldmljZV9hZGRgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIGZsb3c6IHBsYXRmb3JtIGRyaXZlciBwcm9iaW5nLCBmb2xsb3dlZCBieSB0aGUgZGV2aWNlIGFkZGl0aW9uIGZ1bmN0aW9uLiBHb3QgaXQuIFRoaXMgaXMgdGhlIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgcmVnaXN0ZXJpbmcgYSBuZXcgZGV2aWNlIGNvbnRyb2xsZWQgdmlhIHRoZSBNb3Rpb24gQ29udHJvbCBBUEkgdG8gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnNsX21jX2J1c19kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjA4PU1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgZnNsX21jX2J1c19hY3BpX21hdGNoX3RhYmxlKTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTIwOS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTIxMDpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmc2xfbWNfYnVzX2RyaXZlciA9IHtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTIxMS1cdC5kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjU2PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZnNsX21jX25iID0ge1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI1OS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTI2MDpzdGF0aWMgaW50IF9faW5pdCBmc2xfbWNfYnVzX2RyaXZlcl9pbml0KHZvaWQpXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyNjEte1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI2OS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTI3MDpcdGVycm9yID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmZzbF9tY19idXNfZHJpdmVyKTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI3MS1cdGlmIChlcnJvciBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI4OS1lcnJvcl9jbGVhbnVwX2RyaXZlcjpcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTI5MDpcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmZzbF9tY19idXNfZHJpdmVyKTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI5MS1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyOTctfVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMjk4OnBvc3Rjb3JlX2luaXRjYWxsKGZzbF9tY19idXNfZHJpdmVyX2luaXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTM0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUGxhdGZvcm0gRHJpdmVyIE1hdGNoaW5nOiBBQ1BJIG9yIE9GIOKAkyBUaGF0JiMzOTtzIHRoZSBRdWVzdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGxhdGZvcm0gZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byBpZGVudGlmeSB0aGlzIGhhcmR3YXJlPyYjMzQ7IEl0JiMzOTtzIGEgcXVpY2sgbWVudGFsIGNoZWNrbGlzdDogRG9lcyBpdCB1c2UgQUNQSSB0YWJsZXM/IE9yIGlzIGl0IGFuIE9wZW4gRmlybXdhcmUgKE9GKSBkZXZpY2U/IFRob3NlIGFyZSB0aGUgdHdvIHByaW1hcnkgbWV0aG9kcyBJJiMzOTttIGdvaW5nIHRvIGNvbnNpZGVyIGZvciBtYXRjaGluZyB0aGlzIGRyaXZlciB0byB0aGUgaGFyZHdhcmUgaXQmIzM5O3MgbWVhbnQgdG8gY29udHJvbC4gTXkgZHJpdmVyIG5lZWRzIHRvIGJlIGFibGUgdG8gaWRlbnRpZnkgaXRzIHRhcmdldCBlZmZlY3RpdmVseTsgaXQmIzM5O3MgZ290IHRvIGNsYWltIG93bmVyc2hpcCBvZiBpdHMgcGxhdGZvcm0gZGV2aWNlIHRocm91Z2ggdGhlc2Ugd2VsbC1kZWZpbmVkIHByb3RvY29scy4gQW5kIGJhc2VkIG9uIHdoYXQgSSBzZWUsIGl0IHNlZW1zIHRoYXQgdGhlIHBsYXRmb3JtIGRyaXZlciBpcyBleHBlY3RpbmcgQUNQSSBvciBPRiBpbmZvcm1hdGlvbiwgb3IgZWxzZSBpdCBpcyBleHBlY3RpbmcgdG8gbWF0Y2ggb25lLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgaG93IHRvIHN1cHBvcnQgdGhlIHBhcnRpY3VsYXIgYnVzIHR5cGUgKEFDUEkgb3IgT0YpLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc2xfbWNfYnVzX21hdGNoX3RhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTE3NT1zdGF0aWMgdm9pZCBmc2xfbWNfYnVzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTE5Ni1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTE5NzpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBmc2xfbWNfYnVzX21hdGNoX3RhYmxlW10gPSB7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTExOTgtXHR7LmNvbXBhdGlibGUgPSBcJiMzNDtmc2wscW9yaXEtbWNcJiMzNDssfSxcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMDEtXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyMDI6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZnNsX21jX2J1c19tYXRjaF90YWJsZSk7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMDMtXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjEwPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9tY19idXNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTIxMy1cdFx0ICAgLnBtID0gTlVMTCxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTIxNDpcdFx0ICAgLm9mX21hdGNoX3RhYmxlID0gZnNsX21jX2J1c19tYXRjaF90YWJsZSxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTIxNS1cdFx0ICAgLmFjcGlfbWF0Y2hfdGFibGUgPSBmc2xfbWNfYnVzX2FjcGlfbWF0Y2hfdGFibGUsXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjIyPXN0YXRpYyBpbnQgZnNsX21jX2J1c19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTIzMS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTIzMjpcdGlmICghb2ZfbWF0Y2hfZGV2aWNlKGZzbF9tY19idXNfbWF0Y2hfdGFibGUsIGRldikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMzMtXHQgICAgIWFjcGlfbWF0Y2hfZGV2aWNlKGZzbF9tY19idXNfYWNwaV9tYXRjaF90YWJsZSwgZGV2KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk2NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSAmIzM0O2ZzbCxxb3JpcS1tYyYjMzQ7IENvbXBhdGlibGUgU3RyaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyAmIzM0O2ZzbCxxb3JpcS1tYyYjMzQ7IGNvbXBhdGlibGUgc3RyaW5nIGFuZCB3aGV0aGVyIGl0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIENhbiBJIGdldCBhd2F5IHdpdGggdGhyb3dpbmcgcmFuZG9tIGRhdGEgYXQgaXQgYW5kIHNlZWluZyB3aGF0IHN0aWNrcz8gVGhlIGltbWVkaWF0ZSBodXJkbGUgaXMgcmVtZW1iZXJpbmcgaG93IFN5emthbGxlciBoYW5kbGVzIHBsYXRmb3JtIGRldmljZXMuIERvZXMgaXQgbmF0aXZlbHkgaW5qZWN0IHRoZW0gd2l0aCBzcGVjaWZpYyBjb21wYXRpYmxlcyAqdW5sZXNzKiBpdCYjMzk7cyBwYXJ0IG9mIGEgdmVyeSBwYXJ0aWN1bGFyLCBjb250cm9sbGVkIHNldHVwPyBUaGF0JiMzOTtzIHR5cGljYWxseSB0aGUgaXNzdWUuIEkgcmVjYWxsIGl0IGRvZXNuJiMzOTt0IGp1c3QgbGV0IHlvdSBpbmplY3QgYW55dGhpbmcgdmlhIHN5c2ZzLCBzbyB0aGF0JiMzOTtzIGEgZGVhZCBlbmQuCgpUaGVuIHRoZXJlJiMzOTtzIHRoZSBgZnNsLW1jYCBidXMgaXRzZWxmLiBJdCYjMzk7cyBub3QgYSBzaW1wbGUgY2FzZSBvZiBqdXN0IGZpbmRpbmcgdGhlIHJpZ2h0IGRyaXZlci4gVGhpcyBidXMgcmVxdWlyZXMgYWN0dWFsbHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFyZHdhcmUgdGhyb3VnaCBNQyBjb21tYW5kcyB0byBlbnVtZXJhdGUgdGhlIGRldmljZXMuIEp1c3QgdGhyb3dpbmcgYXJiaXRyYXJ5IHN0cmluZ3MgbWlnaHQgbm90IGV2ZW4gdHJpZ2dlciBtZWFuaW5nZnVsIGJlaGF2aW9yLCBvciBtb3JlIGxpa2VseSB3aWxsIGxlYWQgdG8gYSBjcmFzaC4KCkFscmlnaHQsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYGZzbF9tY19idXNfcHJvYmVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnVtZXJhdGlvbiBwcm9jZXNzIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGVudHJ5IHBvaW50cyBvciB2dWxuZXJhYmlsaXRpZXMgdGhhdCBJIGNhbiBleHBsb2l0LiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdG8gZnV6eiB0aGlzIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnNsX21jX2J1c19wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTEwMDU9c3RhdGljIGludCBmc2xfbWNfZmlybXdhcmVfY2hlY2soc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMzUtLypcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAzNjogKiBmc2xfbWNfYnVzX3Byb2JlIC0gY2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSByb290IE1DIGJ1cyBpcyBiZWluZ1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDM3LSAqIGFkZGVkXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMzgtICovXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEwMzk6c3RhdGljIGludCBmc2xfbWNfYnVzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwNDAte1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTIxMD1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmc2xfbWNfYnVzX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMTYtXHRcdCAgIH0sXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyMTc6XHQucHJvYmUgPSBmc2xfbWNfYnVzX3Byb2JlLFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjE4LVx0LnJlbW92ZSA9IGZzbF9tY19idXNfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzQ5CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgYGZzbF9tY19idXNfcHJvYmVgOgoKKipBbmFseXppbmcgYGZzbF9tY19idXNfcHJvYmVgKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bnBhY2sgd2hhdCBgZnNsX21jX2J1c19wcm9iZWAgaXMgYWxsIGFib3V0LiBCYXNlZCBvbiB0aGUgbmFtZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgZnVuY3Rpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHByb2JpbmcgYSBGcmVlc2NhbGUgKGxpa2VseSBOWFApIE11bHRpLUNvcmUgQnVzIChNQyBCdXMpLiBUaGUgJiMzNDtwcm9iZSYjMzQ7IHBhcnQgdGVsbHMgbWUgaXQmIzM5O3MgcHJvYmFibHkgY29uY2VybmVkIHdpdGggZGV2aWNlIGRpc2NvdmVyeSBvciBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhhdCBidXMgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgaGFyZHdhcmUgdGhpcyBpcyBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aCwgd2hldGhlciBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBQb3dlciBBcmNoaXRlY3R1cmUsIG9yIG1heWJlIEFSTS1iYXNlZCBTb0NzIGZyb20gTlhQLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYXJjaGl0ZWN0dXJhbCBjb250ZXh0IHRvIHJlYWxseSBncmFzcCB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZS4gSSYjMzk7bSBhc3N1bWluZyBpdCBpbnRlcmFjdHMgd2l0aCBzb21lIHNvcnQgb2YgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMgdG8gYWNoaWV2ZSB0aGlzIHByb2JpbmcgYW5kIGxpa2VseSBoYW5kbGVzIGluaXRpYWxpemF0aW9uIHRhc2tzIGJhc2VkIG9uIHRoZSBkZXZpY2VzIGZvdW5kIG9uIHRoZSBidXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMzk6XHRzdGF0aWMgaW50IGZzbF9tY19idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbjEwNDA6XHR7XG4xMDQxOlx0XHRzdHJ1Y3QgZnNsX21jX29ial9kZXNjIG9ial9kZXNjO1xuMTA0MjpcdFx0aW50IGVycm9yO1xuMTA0MzpcdFx0c3RydWN0IGZzbF9tYyAqbWM7XG4xMDQ0Olx0XHRzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfYnVzX2RldiA9IE5VTEw7XG4xMDQ1Olx0XHRzdHJ1Y3QgZnNsX21jX2lvICptY19pbyA9IE5VTEw7XG4xMDQ2Olx0XHRpbnQgY29udGFpbmVyX2lkO1xuMTA0NzpcdFx0cGh5c19hZGRyX3QgbWNfcG9ydGFsX3BoeXNfYWRkcjtcbjEwNDg6XHRcdHUzMiBtY19wb3J0YWxfc2l6ZSwgbWNfc3RyZWFtX2lkO1xuMTA0OTpcdFx0c3RydWN0IHJlc291cmNlICpwbGF0X3JlcztcbjEwNTA6XHRcbjEwNTE6XHRcdG1jID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKm1jKSwgR0ZQX0tFUk5FTCk7XG4xMDUyOlx0XHRpZiAoIW1jKVxuMTA1MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEwNTQ6XHRcbjEwNTU6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jKTtcbjEwNTY6XHRcbjEwNTc6XHRcdHBsYXRfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTtcbjEwNTg6XHRcdGlmIChwbGF0X3Jlcykge1xuMTA1OTpcdFx0XHRtYy1cdTAwM2Vmc2xfbWNfcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9yZXMpO1xuMTA2MDpcdFx0XHRpZiAoSVNfRVJSKG1jLVx1MDAzZWZzbF9tY19yZWdzKSlcbjEwNjE6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihtYy1cdTAwM2Vmc2xfbWNfcmVncyk7XG4xMDYyOlx0XHR9XG4xMDYzOlx0XG4xMDY0Olx0XHRpZiAobWMtXHUwMDNlZnNsX21jX3JlZ3MpIHtcbjEwNjU6XHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FDUEkpIFx1MDAyNlx1MDAyNiAhZGV2X29mX25vZGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpKSB7XG4xMDY2Olx0XHRcdFx0bWNfc3RyZWFtX2lkID0gcmVhZGwobWMtXHUwMDNlZnNsX21jX3JlZ3MgJiM0MzsgRlNMX01DX0ZBUFIpO1xuMTA2NzpcdFx0XHRcdC8qXG4xMDY4Olx0XHRcdFx0ICogSFcgT1JzIHRoZSBQTCBhbmQgQk1UIGJpdCwgcGxhY2VzIHRoZSByZXN1bHQgaW4gYml0XG4xMDY5Olx0XHRcdFx0ICogMTQgb2YgdGhlIFN0cmVhbUlEIGFuZCBPUnMgaW4gdGhlIElDSUQuIENhbGN1bGF0ZSBpdFxuMTA3MDpcdFx0XHRcdCAqIGFjY29yZGluZ2x5LlxuMTA3MTpcdFx0XHRcdCAqL1xuMTA3MjpcdFx0XHRcdG1jX3N0cmVhbV9pZCA9IChtY19zdHJlYW1faWQgXHUwMDI2IDB4ZmZmZikgfFxuMTA3MzpcdFx0XHRcdFx0KChtY19zdHJlYW1faWQgXHUwMDI2IChNQ19GQVBSX1BMIHwgTUNfRkFQUl9CTVQpKSA/XG4xMDc0Olx0XHRcdFx0XHRcdEJJVCgxNCkgOiAwKTtcbjEwNzU6XHRcdFx0XHRlcnJvciA9IGFjcGlfZG1hX2NvbmZpZ3VyZV9pZChcdTAwMjZwZGV2LVx1MDAzZWRldixcbjEwNzY6XHRcdFx0XHRcdFx0XHQgICAgICBERVZfRE1BX0NPSEVSRU5ULFxuMTA3NzpcdFx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNm1jX3N0cmVhbV9pZCk7XG4xMDc4Olx0XHRcdFx0aWYgKGVycm9yID09IC1FUFJPQkVfREVGRVIpXG4xMDc5Olx0XHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4xMDgwOlx0XHRcdFx0aWYgKGVycm9yKVxuMTA4MTpcdFx0XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4xMDgyOlx0XHRcdFx0XHRcdCBcJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIGRtYTogJWQuXFxuXCYjMzQ7LFxuMTA4MzpcdFx0XHRcdFx0XHQgZXJyb3IpO1xuMTA4NDpcdFx0XHR9XG4xMDg1Olx0XG4xMDg2Olx0XHRcdC8qXG4xMDg3Olx0XHRcdCAqIFNvbWUgYm9vdGxvYWRlcnMgcGF1c2UgdGhlIE1DIGZpcm13YXJlIGJlZm9yZSBib290aW5nIHRoZVxuMTA4ODpcdFx0XHQgKiBrZXJuZWwgc28gdGhhdCBNQyB3aWxsIG5vdCBjYXVzZSBmYXVsdHMgYXMgc29vbiBhcyB0aGVcbjEwODk6XHRcdFx0ICogU01NVSBwcm9iZXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhlcmUmIzM5O3Mgbm8gY29uZmlndXJhdGlvblxuMTA5MDpcdFx0XHQgKiBpbiBwbGFjZSBmb3IgTUMuXG4xMDkxOlx0XHRcdCAqIEF0IHRoaXMgcG9pbnQgTUMgc2hvdWxkIGhhdmUgYWxsIGl0cyBTTU1VIHNldHVwIGRvbmUgc28gbWFrZVxuMTA5MjpcdFx0XHQgKiBzdXJlIGl0IGlzIHJlc3VtZWQuXG4xMDkzOlx0XHRcdCAqL1xuMTA5NDpcdFx0XHR3cml0ZWwocmVhZGwobWMtXHUwMDNlZnNsX21jX3JlZ3MgJiM0MzsgRlNMX01DX0dDUjEpIFx1MDAyNlxuMTA5NTpcdFx0XHRcdCAgICAgKH4oR0NSMV9QMV9TVE9QIHwgR0NSMV9QMl9TVE9QKSksXG4xMDk2Olx0XHRcdCAgICAgICBtYy1cdTAwM2Vmc2xfbWNfcmVncyAmIzQzOyBGU0xfTUNfR0NSMSk7XG4xMDk3Olx0XHR9XG4xMDk4Olx0XG4xMDk5Olx0XHRlcnJvciA9IGZzbF9tY19maXJtd2FyZV9jaGVjayhwZGV2KTtcbjExMDA6XHRcdGlmIChlcnJvcilcbjExMDE6XHRcdFx0cmV0dXJuIGVycm9yO1xuMTEwMjpcdFxuMTEwMzpcdFx0LypcbjExMDQ6XHRcdCAqIEdldCBwaHlzaWNhbCBhZGRyZXNzIG9mIE1DIHBvcnRhbCBmb3IgdGhlIHJvb3QgRFBSQzpcbjExMDU6XHRcdCAqL1xuMTEwNjpcdFx0cGxhdF9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApO1xuMTEwNzpcdFx0aWYgKCFwbGF0X3JlcylcbjExMDg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTA5Olx0XG4xMTEwOlx0XHRtY19wb3J0YWxfcGh5c19hZGRyID0gcGxhdF9yZXMtXHUwMDNlc3RhcnQ7XG4xMTExOlx0XHRtY19wb3J0YWxfc2l6ZSA9IHJlc291cmNlX3NpemUocGxhdF9yZXMpO1xuMTExMjpcdFx0bWNfcG9ydGFsX2Jhc2VfcGh5c19hZGRyID0gbWNfcG9ydGFsX3BoeXNfYWRkciBcdTAwMjYgfjB4M2ZmZmZmZjtcbjExMTM6XHRcbjExMTQ6XHRcdGVycm9yID0gZnNsX2NyZWF0ZV9tY19pbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgbWNfcG9ydGFsX3BoeXNfYWRkcixcbjExMTU6XHRcdFx0XHRcdCBtY19wb3J0YWxfc2l6ZSwgTlVMTCxcbjExMTY6XHRcdFx0XHRcdCBGU0xfTUNfSU9fQVRPTUlDX0NPTlRFWFRfUE9SVEFMLCBcdTAwMjZtY19pbyk7XG4xMTE3Olx0XHRpZiAoZXJyb3IgXHUwMDNjIDApXG4xMTE4Olx0XHRcdHJldHVybiBlcnJvcjtcbjExMTk6XHRcbjExMjA6XHRcdGVycm9yID0gbWNfZ2V0X3ZlcnNpb24obWNfaW8sIDAsIFx1MDAyNm1jX3ZlcnNpb24pO1xuMTEyMTpcdFx0aWYgKGVycm9yICE9IDApIHtcbjExMjI6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldixcbjExMjM6XHRcdFx0XHRcJiMzNDttY19nZXRfdmVyc2lvbigpIGZhaWxlZCB3aXRoIGVycm9yICVkXFxuXCYjMzQ7LCBlcnJvcik7XG4xMTI0Olx0XHRcdGdvdG8gZXJyb3JfY2xlYW51cF9tY19pbztcbjExMjU6XHRcdH1cbjExMjY6XHRcbjExMjc6XHRcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtNQyBmaXJtd2FyZSB2ZXJzaW9uOiAldS4ldS4ldVxcblwmIzM0OyxcbjExMjg6XHRcdFx0IG1jX3ZlcnNpb24ubWFqb3IsIG1jX3ZlcnNpb24ubWlub3IsIG1jX3ZlcnNpb24ucmV2aXNpb24pO1xuMTEyOTpcdFxuMTEzMDpcdFx0aWYgKGRldl9vZl9ub2RlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KSkge1xuMTEzMTpcdFx0XHRlcnJvciA9IGdldF9tY19hZGRyX3RyYW5zbGF0aW9uX3JhbmdlcyhcdTAwMjZwZGV2LVx1MDAzZWRldixcbjExMzI6XHRcdFx0XHRcdFx0XHRcdTAwMjZtYy1cdTAwM2V0cmFuc2xhdGlvbl9yYW5nZXMsXG4xMTMzOlx0XHRcdFx0XHRcdFx0XHUwMDI2bWMtXHUwMDNlbnVtX3RyYW5zbGF0aW9uX3Jhbmdlcyk7XG4xMTM0Olx0XHRcdGlmIChlcnJvciBcdTAwM2MgMClcbjExMzU6XHRcdFx0XHRnb3RvIGVycm9yX2NsZWFudXBfbWNfaW87XG4xMTM2Olx0XHR9XG4xMTM3Olx0XG4xMTM4Olx0XHRlcnJvciA9IGRwcmNfZ2V0X2NvbnRhaW5lcl9pZChtY19pbywgMCwgXHUwMDI2Y29udGFpbmVyX2lkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MTUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHZmaW9fZnNsX21jYCBEcml2ZXImIzM5O3MgVGVzdGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgZGVwZW5kZW5jeSBvbiB0aGUgYG1jLSZndDtmc2xfbWNfcmVncyAmIzQzOyBGU0xfTUNfRkFQUmAgcmVnaXN0ZXIgYWNjZXNzIGFuZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZmlybXdhcmUgdGhyb3VnaCBgbWNfZ2V0X3ZlcnNpb25gIGFuZCBgZHByY19nZXRfY29udGFpbmVyX2lkYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgc2NyZWFtcyBoYXJkd2FyZSBkZXBlbmRlbmN5LCBvciBhdCBsZWFzdCBhIHZlcnkgc3BlY2lmaWMgUUVNVSBlbXVsYXRpb24uIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBRRU1VIGV2ZW4gKmVtdWxhdGUqIHRoZSBgZnNsLHFvcmlxLW1jYCBkZXZpY2U/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleHBsb3JlIG1vY2tpbmcgdGhpcyBzb21laG93LiBJJiMzOTtsbCBjaGVjayBpZiBzeXprYWxsZXIgaGFzIGFueSBwcm92aXNpb25zIGZvciBtb2NraW5nIHRoZXNlIGludGVyYWN0aW9ucywgYnV0IEkgZG9uJiMzOTt0IHJlY2FsbCBzZWVpbmcgYW55dGhpbmcgbGlrZSB0aGF0LiBUaGUgZmFjdCB0aGF0IHRoZSBwYXRjaCByZXNpZGVzIGluIGBkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNgIGlzIGFsc28gYSBjbHVlOyBpdCBtZWFucyB0aGlzIGlzIFZGSU8gc3BlY2lmaWMuCgpUaGlzIGNvZGUgcGF0aCBzcGVjaWZpY2FsbHkgdXNlcyBgVkZJT19GU0xfTUNgLCB3aGljaCBpbiB0dXJuIHJlbGllcyBvbiBgRlNMX01DX0JVU2AuIE5vdywgYEZTTF9NQ19CVVNgIGlzIGZ1bmRhbWVudGFsbHkgdGllZCB0byBOWFAgaGFyZHdhcmUgYW5kIHRoZSBgZnNsLW1jYCBidXMuIFNvLCBJIG5lZWQgdG8gYXNrIG15c2VsZiwgaXMgdGhlcmUgYW55IHdheSB0byB0ZXN0IGBWRklPX0ZTTF9NQ2AgcmVsaWFibHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8KCkJhc2VkIG9uIHRoZSBjb2RlJiMzOTtzIGRlcGVuZGVuY2Ugb24gdGhlIGBmc2wtbWNgIGJ1cyBiZWluZyBwb3B1bGF0ZWQgd2l0aCBkZXZpY2VzIOKAkyBtZWFuaW5nIGBmc2xfbWNfYnVzX3Byb2JlYCBoYXMgdG8gc3VjY2VlZCwgd2hpY2ggaW4gdHVybiBuZWNlc3NpdGF0ZXMgdGhlIE1DIGZpcm13YXJlIHJlc3BvbmRpbmcg4oCTIGl0IGxvb2tzIGluY3JlZGlibHkgdW5saWtlbHkuIEl0IHNlZW1zIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aCBpcyBmdW5kYW1lbnRhbGx5IGluYWNjZXNzaWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgZXZlbiBhIGdlbmVyaWMgUUVNVSBzZXR1cC4gSXQgcmVhbGx5IGZlZWxzIGxpa2UgdGhpcyBpcyBvbmx5IHRlc3RhYmxlIGluIGEgcGh5c2ljYWwgTlhQLWJhc2VkIHN5c3RlbSB3aXRoIHRoZSBjb3JyZWN0IGZpcm13YXJlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBkb3VibGUtY2hlY2sgaWYgdGhlcmUmIzM5O3MgKmFueSogc29mdHdhcmUgZW11bGF0aW9uIGZvciBgZnNsLW1jYCB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYuIEkgY2FuJiMzOTt0IHRoaW5rIG9mIGFueSBvZmZoYW5kLCBidXQgaXQmIzM5O3Mgd29ydGggYSBxdWljayBsb29rIHRvIGVsaW1pbmF0ZSBhbnkgbGluZ2VyaW5nIGRvdWJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc2xfbWNfYnVzX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTAwNT1zdGF0aWMgaW50IGZzbF9tY19maXJtd2FyZV9jaGVjayhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTAzNS0vKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMDM2OiAqIGZzbF9tY19idXNfcHJvYmUgLSBjYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIHJvb3QgTUMgYnVzIGlzIGJlaW5nXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMzctICogYWRkZWRcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTAzOC0gKi9cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAzOTpzdGF0aWMgaW50IGZzbF9tY19idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTA0MC17XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjEwPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9tY19idXNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTIxNi1cdFx0ICAgfSxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTIxNzpcdC5wcm9iZSA9IGZzbF9tY19idXNfcHJvYmUsXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMTgtXHQucmVtb3ZlID0gZnNsX21jX2J1c19yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODY4CgkJCQkJCQlvdXRwdXQ6IDExNAoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBXb3J0aEZ1enppbmcgPSBGYWxzZSoqCgpPa2F5LCBzbyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gaXMgaW52b2x2ZWQgaGVyZSwgd2hpY2ggaXMgdGhlIGZpcnN0IHRoaW5nIEkgY2hlY2suIFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYHZmaW9fZnNsX21jX21tYXBgLiBUaGUga2V5IHBvaW50IGlzIHRoYXQgYGZzbC1tY2AgZGV2aWNlcywgYmVpbmcgdGllZCB0byB0aGUgRnJlZXNjYWxlL05YUCBNYW5hZ2VtZW50IENvbXBsZXgsIGFyZSAqbm90KiBzb21ldGhpbmcgdGhhdCBjYW4gYmUgY3JlYXRlZCB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC4gQmVjYXVzZSBvZiB0aGlzIGFyY2hpdGVjdHVyYWwgY29uc3RyYWludCwgYHZmaW9fZnNsX21jX21tYXBgICpjYW5ub3QqIGJlIHJlYWNoZWQgaW4gdGhlc2UgdmlydHVhbGl6ZWQgc2V0dGluZ3MuCgpMZXQgbWUgcmVmcmVzaCB0aGUgZ3VpZGVsaW5lcyBmb3IgdGhlc2Ugc2NlbmFyaW9zLiBJIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBmYWxscyBpbnRvIGVpdGhlciBvZiB0aGVzZSB0d28gY2FzZXM6IGNvZGUgcGF0aHMgdGhhdCBhcmUgaW5oZXJlbnRseSBpbmFjY2Vzc2libGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiBpbmNsdWRpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIFRoZSBzZWNvbmQgY29uZGl0aW9uIGlzIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgcmVxdWlyaW5nIGFjdHVhbCBQQ0llIGNhcmRzLCBsaWtlIFNtYXJ0TklDcywgR1BVcyBhbmQgc28gb24sIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgoKVGhpcyBwYXRjaCwgZGVhbGluZyB3aXRoIHRoZSBgZnNsLW1jYCBidXMsIHBlcmZlY3RseSBhbGlnbnMgd2l0aCBib3RoIG9mIHRoZXNlIGV4Y2x1c2lvbiBjcml0ZXJpYS4gYGZzbC1tY2AgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgYnVzIHRoYXQgbWFuZGF0ZXMgcGh5c2ljYWwgaGFyZHdhcmUsIHdoaWNoIGlzIHNpbXBseSBub3QgYWNjZXNzaWJsZSB3aXRoaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyIGFuZCBkZWZpbml0aXZlOiBJJiMzOTtsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZGSU8gZHJpdmVyIGZvciB0aGUgRnJlZXNjYWxlL05YUCBNYW5hZ2VtZW50IENvbXBsZXggKGZzbC1tYykgYnVzLiBUaGlzIGJ1cyBhbmQgaXRzIGRldmljZXMgYXJlIHNwZWNpZmljIHRvIHBoeXNpY2FsIE5YUCBRb3JJUSBEUEFBMiBoYXJkd2FyZSBhbmQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aCBpbiBgdmZpb19mc2xfbWNfbW1hcGAgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBkcml2ZXIgZm9yIHRoZSBGcmVlc2NhbGUvTlhQIE1hbmFnZW1lbnQgQ29tcGxleCAoZnNsLW1jKSBidXMuIFRoaXMgYnVzIGFuZCBpdHMgZGV2aWNlcyBhcmUgc3BlY2lmaWMgdG8gcGh5c2ljYWwgTlhQIFFvcklRIERQQUEyIGhhcmR3YXJlIGFuZCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRoIGluIGB2ZmlvX2ZzbF9tY19tbWFwYCBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwODo1OTo1Ny4yMTc3NzQwMzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA1NzgxODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIGRyaXZlciBmb3IgdGhlIEZyZWVzY2FsZS9OWFAgTWFuYWdlbWVudCBDb21wbGV4IChmc2wtbWMpIGJ1cy4gVGhpcyBidXMgYW5kIGl0cyBkZXZpY2VzIGFyZSBzcGVjaWZpYyB0byBwaHlzaWNhbCBOWFAgUW9ySVEgRFBBQTIgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGggaW4gYHZmaW9fZnNsX21jX21tYXBgIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NTk6NTcuMjE3NzgxNDk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTYyOTExOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyMTYzYTZmNmYwY2E4MDI2NjZiOGUyOWQyYzQ2MmI3ZTVjNWJiYzBiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDE5IDA4OjU5OjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYyBiL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY1xcbmluZGV4IGI0YzM5NTgyMDFiMjUuLjg1ZjQ3OWRiOTM2YzYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXFxuKysrIGIvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXFxuQEAgLTQwNyw2ICs0MDcsMTAgQEAgc3RhdGljIGludCB2ZmlvX2ZzbF9tY19tbWFwKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LFxcbiBcXHRcXHRcXHRcXHUwMDI2XFx1MDAyNiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1dSSVRFKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHQvKiBQcmV2ZW50IHJlYWQtb25seSByZWdpb24gbWFwcGluZ3MgZnJvbSBiZWluZyB1cGdyYWRlZCB3aXRoIG1wcm90ZWN0KCkgKi9cXG4rXFx0aWYgKCEodmRldi1cXHUwMDNlcmVnaW9uc1tpbmRleF0uZmxhZ3MgXFx1MDAyNiBWRklPX1JFR0lPTl9JTkZPX0ZMQUdfV1JJVEUpKVxcbitcXHRcXHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX01BWVdSSVRFKTtcXG4rXFxuIFxcdHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbWNfZGV2O1xcbiBcXG4gXFx0cmV0dXJuIHZmaW9fZnNsX21jX21tYXBfbW1pbyh2ZGV2LVxcdTAwM2VyZWdpb25zW2luZGV4XSwgdm1hKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NTk6NTcuNzc0NzEzMjU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTc1MDA4NjU5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIGRyaXZlciBmb3IgdGhlIEZyZWVzY2FsZS9OWFAgTWFuYWdlbWVudCBDb21wbGV4IChmc2wtbWMpIGJ1cy4gVGhpcyBidXMgYW5kIGl0cyBkZXZpY2VzIGFyZSBzcGVjaWZpYyB0byBwaHlzaWNhbCBOWFAgUW9ySVEgRFBBQTIgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGggaW4gYHZmaW9fZnNsX21jX21tYXBgIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjE2M2E2ZjZmMGNhODAyNjY2YjhlMjlkMmM0NjJiN2U1YzViYmMwYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA4OjU5OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jIGIvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXG5pbmRleCBiNGMzOTU4MjAxYjI1Li44NWY0NzlkYjkzNmM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXG4rKysgYi9kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNcbkBAIC00MDcsNiArNDA3LDEwIEBAIHN0YXRpYyBpbnQgdmZpb19mc2xfbWNfbW1hcChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldixcbiBcdFx0XHRcdTAwMjZcdTAwMjYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV1JJVEUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdC8qIFByZXZlbnQgcmVhZC1vbmx5IHJlZ2lvbiBtYXBwaW5ncyBmcm9tIGJlaW5nIHVwZ3JhZGVkIHdpdGggbXByb3RlY3QoKSAqL1xuK1x0aWYgKCEodmRldi1cdTAwM2VyZWdpb25zW2luZGV4XS5mbGFncyBcdTAwMjYgVkZJT19SRUdJT05fSU5GT19GTEFHX1dSSVRFKSlcbitcdFx0dm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9NQVlXUklURSk7XG4rXG4gXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbWNfZGV2O1xuIFxuIFx0cmV0dXJuIHZmaW9fZnNsX21jX21tYXBfbW1pbyh2ZGV2LVx1MDAzZXJlZ2lvbnNbaW5kZXhdLCB2bWEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NTk6NTcuNzc0NzE0OTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzM4MTUwMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZGSU8gUGF0Y2ggZm9yIEZyZWVzY2FsZSBNQyBCdXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBiZWVuIGFwcGxpZWQgdG8gYGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY2AuIFNwZWNpZmljYWxseSwgdGhleSd2ZSB0d2Vha2VkIHRoZSBgdmZpb19mc2xfbWNfbW1hcGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHRoaXMgY2hlY2s6XG5cbmBgYGNcblx0LyogUHJldmVudCByZWFkLW9ubHkgcmVnaW9uIG1hcHBpbmdzIGZyb20gYmVpbmcgdXBncmFkZWQgd2l0aCBtcHJvdGVjdCgpICovXG5cdGlmICghKHZkZXYtXHUwMDNlcmVnaW9uc1tpbmRleF0uZmxhZ3MgXHUwMDI2IFZGSU9fUkVHSU9OX0lORk9fRkxBR19XUklURSkpXG5cdFx0dm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9NQVlXUklURSk7XG5gYGBcblxuRXNzZW50aWFsbHksIHRoZXkncmUgcHJldmVudGluZyByZWFkLW9ubHkgcmVnaW9ucyBmcm9tIGJlaW5nIG1hZGUgd3JpdGFibGUgbGF0ZXIgb24sIHVzaW5nIGBtcHJvdGVjdCgpYC4gVGhhdCdzIGEgZ29vZCBzZWN1cml0eSBwcmFjdGljZTsgc291bmRzIGxpa2UgaXQgY291bGQgcHJldmVudCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBCdXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYW5kIHRlc3RhYmlsaXR5LiBUaGlzIGlzIGluIHRoZSBjb250ZXh0IG9mIHRoZSBWRklPIGRyaXZlciBmb3IgdGhlIEZyZWVzY2FsZSBNQyBidXMsIGBmc2wtbWNgLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGluIGEgdHlwaWNhbCBRRU1VL0dDRSBzZXR1cD8gVGhlIEZyZWVzY2FsZSBNQyBidXMgaXMgZ2VuZXJhbGx5IGFzc29jaWF0ZWQgd2l0aCBOWFAvRnJlZXNjYWxlIFNvQ3MsIHNwZWNpZmljYWxseSB0aGluZ3MgbGlrZSB0aGUgRFBBQTIgYXJjaGl0ZWN0dXJlLiBJcyB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIGhhcmR3YXJlIGFjdHVhbGx5IGVtdWxhdGVkIGluIFFFTVU/IFRoYXQncyB0aGUgY3JpdGljYWwgcXVlc3Rpb24uIElmIGl0J3Mgbm90IGVtdWxhdGVkLCB0aGVuIHRoaXMgcGF0Y2gsIHdoaWxlIGxvZ2ljYWxseSBzb3VuZCwgbWlnaHQgbm90IGJlIHRlc3RhYmxlIG9yIGV2ZW4gcmVsZXZhbnQgaW4gbWFueSBjb21tb24gdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLlxuXG5TbywgbGV0J3MgZmlndXJlIG91dCBpZiBpdCdzIHRlc3RhYmxlLiBGcm9tIHdoYXQgSSByZW1lbWJlciwgYGZzbC1tY2AgaXMgYWxtb3N0IGV4Y2x1c2l2ZWx5IGEgTGF5ZXJzY2FwZSBTb0Mtc3BlY2lmaWMgdGhpbmcuIExldCBtZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBgZnNsLW1jYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgYW5kIGNvbmZpcm0gdGhhdCBzdXNwaWNpb24uIFRoYXQgd2lsbCBoZWxwIHRvIGdhdWdlIGlmIHRoZXJlIGFyZSBhbnkgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGlzIHBhdGNoIHdpdGhvdXQgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDgyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MDA6MDMuNTEyODY4MTAxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MTg5ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZzbC1tY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnPTQ9Y29uZmlnIFZGSU9fRlNMX01DXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnOjU6XFx0dHJpc3RhdGUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgUW9ySVEgRFBBQTIgZnNsLW1jIGJ1cyBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy02LVxcdHNlbGVjdCBFVkVOVEZEXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnLTctXFx0aGVscFxcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZzo4OlxcdCAgRHJpdmVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgVkZJTyBRb3JJUSBEUEFBMiBmc2wtbWNcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctOS1cXHQgIChNYW5hZ2VtZW50IENvbXBsZXgpIGRldmljZXMuIFRoaXMgaXMgcmVxdWlyZWQgdG8gcGFzc3Rocm91Z2hcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc6MTA6XFx0ICBmc2wtbWMgYnVzIGRldmljZXMgdXNpbmcgdGhlIFZGSU8gZnJhbWV3b3JrLlxcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy0xMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MDA6MDMuNTc5MDY0MDI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE3ODE4Mjg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBWRklPX0ZTTF9NQyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhpcyBgVkZJT19GU0xfTUNgIGNvbmZpZ3VyYXRpb24gaXMgc3BlY2lmaWNhbGx5IGFib3V0IGVuYWJsaW5nIFZGSU8gc3VwcG9ydCBmb3IgTlhQIFFvcklRIERQQUEyIGZzbC1tYyBidXMgZGV2aWNlcy4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQncyBhIHJlZCBmbGFnOyB0aGlzIGlzIGhhcmR3YXJlLXNwZWNpZmljLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIGV2ZW4gKnRlc3QqIHRoaXMgZWZmZWN0aXZlbHkgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlPyBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdGhhdCBzdGFuZGFyZCBRRU1VIGxpa2VseSAqZG9lc24ndCogZW11bGF0ZSB0aGlzIERQQUEyIGZzbC1tYyBidXMgYXJjaGl0ZWN0dXJlIGVhc2lseSwgb3IgYXQgYWxsLiBJIGhhdmVuJ3Qgc2VlbiBnZW5lcmljIGVtdWxhdGlvbi4gSXQncyB0b28gbmljaGUuXG5cblRoZSB0aG91Z2h0IHRoZW4gc2hpZnRzIHRvIFN5emthbGxlcjsgY2FuIHRoYXQgaGVscD8gV2FpdCwgZG9lcyBTeXprYWxsZXIgZXZlbiBoYXZlIGFueSBmc2wtbWMgZW11bGF0aW9uPyBMZXQncyBiZSByZWFsaXN0aWMsIHByb2JhYmx5IG5vdC4gSSdkIG5lZWQgdG8gbG9vaywgYnV0IEknbSBndWVzc2luZyBTeXprYWxsZXIgZG9lc24ndCBoYXZlIG5hdGl2ZSBzdXBwb3J0IGZvciBmdXp6aW5nIGZzbC1tYyBkZXZpY2VzLiBUaGlzIGlzbid0IGFib3V0IGdlbmVyYWwgVkZJTyBmdXp6aW5nLCBpdCdzIGFib3V0IHRoZSBpbnRlcmFjdGlvbiBvZiBWRklPICp3aXRoKiBhIHZlcnkgcGFydGljdWxhciBidXMgZHJpdmVyIChgZnNsLW1jYCkuIFZGSU8gKml0c2VsZiogaXMgZnV6emVkLCBvZiBjb3Vyc2UsIGJ1dCBmb3Igc3BlY2lmaWMgYnVzIGRyaXZlcnMgbGlrZSB0aGlzLCBJJ20gZ29pbmcgdG8gbmVlZCB0aGUgYnVzIHRvIGJlIHRoZXJlLCBhbmQgZGV2aWNlcyBwcm9iZWQuIFRoZSBoYXJkd2FyZSAqbmVlZHMqIHRvIGJlIHByZXNlbnQuXG5cbk15IG5leHQgbGluZSBvZiB0aG91Z2h0IGlzIHRvIHNlZSBpZiBtYXliZSwganVzdCBtYXliZSwgSSBjYW4gY3JlYXRlIHRoaXMgYGZzbC1tY2AgYnVzIHZpcnR1YWxseS4gSXQncyBhIGxvbmcgc2hvdCwgYnV0IGlmIHRoZXJlJ3MgYSB3YXkgdG8gc3ludGhlc2l6ZSB0aGUgZW52aXJvbm1lbnQsIEkgbWlnaHQgYmUgYWJsZSB0byBnZXQgc29tZXdoZXJlLiBCdXQgSSdtIGdvaW5nIHRvIGJlIGhvbmVzdCwgSSdtIG5vdCBvcHRpbWlzdGljIGFib3V0IHRoaXMgYmVpbmcgZWFzaWx5IGRvYWJsZSBvciBlYXNpbHkgZnV6emVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTgwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjAwOjEwLjc1NzI1MjQxMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc2NzM1MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZzbF9tY19idXNfdHlwZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0zMjQ9QVRUUklCVVRFX0dST1VQUyhmc2xfbWNfYnVzKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTMyNS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjMyNjpjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgZnNsX21jX2J1c190eXBlID0ge1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzI3LVxcdC5uYW1lID0gXFxcImZzbC1tY1xcXCIsXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTMzOC19O1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MzM5OkVYUE9SVF9TWU1CT0xfR1BMKGZzbF9tY19idXNfdHlwZSk7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0zNDAtXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTQ2MT1pbnQgX19mc2xfbWNfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBmc2xfbWNfZHJpdmVyICptY19kcml2ZXIsXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTQ2Ni1cXHRtY19kcml2ZXItXFx1MDAzZWRyaXZlci5vd25lciA9IG93bmVyO1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6NDY3OlxcdG1jX2RyaXZlci1cXHUwMDNlZHJpdmVyLmJ1cyA9IFxcdTAwMjZmc2xfbWNfYnVzX3R5cGU7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy00NjgtXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTc1Mj1pbnQgZnNsX21jX2RldmljZV9hZGQoc3RydWN0IGZzbF9tY19vYmpfZGVzYyAqb2JqX2Rlc2MsXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTc4OS1cXHRtY19kZXYtXFx1MDAzZWRldi5wYXJlbnQgPSBwYXJlbnRfZGV2O1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6NzkwOlxcdG1jX2Rldi1cXHUwMDNlZGV2LmJ1cyA9IFxcdTAwMjZmc2xfbWNfYnVzX3R5cGU7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03OTEtXFx0bWNfZGV2LVxcdTAwM2VkZXYucmVsZWFzZSA9IGZzbF9tY19kZXZpY2VfcmVsZWFzZTtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTE3NT1zdGF0aWMgdm9pZCBmc2xfbWNfYnVzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMTgzLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTE4NDpcXHRidXNfdW5yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2ZnNsX21jX2J1c190eXBlLCBcXHUwMDI2ZnNsX21jX25iKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTExODUtXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTEyNjA9c3RhdGljIGludCBfX2luaXQgZnNsX21jX2J1c19kcml2ZXJfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjYzLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTI2NDpcXHRlcnJvciA9IGJ1c19yZWdpc3RlcihcXHUwMDI2ZnNsX21jX2J1c190eXBlKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyNjUtXFx0aWYgKGVycm9yIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjkyLWVycm9yX2NsZWFudXBfYnVzOlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTI5MzpcXHRidXNfdW5yZWdpc3RlcihcXHUwMDI2ZnNsX21jX2J1c190eXBlKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyOTQtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11LmM9MTg2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgKiBjb25zdCBpb21tdV9idXNlc1tdID0ge1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdS5jLTE5NC0jaWZkZWYgQ09ORklHX0ZTTF9NQ19CVVNcXG5kcml2ZXJzL2lvbW11L2lvbW11LmM6MTk1OlxcdFxcdTAwMjZmc2xfbWNfYnVzX3R5cGUsXFxuZHJpdmVycy9pb21tdS9pb21tdS5jLTE5Ni0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz00NDk9c3RhdGljIGludCB2ZmlvX2ZzbF9tY19pbml0X2RldmljZShzdHJ1Y3QgdmZpb19mc2xfbWNfZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQ2Mi1cXHR2ZGV2LVxcdTAwM2VuYi5ub3RpZmllcl9jYWxsID0gdmZpb19mc2xfbWNfYnVzX25vdGlmaWVyO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0NjM6XFx0cmV0ID0gYnVzX3JlZ2lzdGVyX25vdGlmaWVyKFxcdTAwMjZmc2xfbWNfYnVzX3R5cGUsIFxcdTAwMjZ2ZGV2LVxcdTAwM2VuYik7XFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQ2NC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQ3NS1vdXRfbmNfdW5yZWc6XFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjQ3NjpcXHRidXNfdW5yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2ZnNsX21jX2J1c190eXBlLCBcXHUwMDI2dmRldi1cXHUwMDNlbmIpO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NzctXFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz00OTc9c3RhdGljIHZvaWQgdmZpb19mc2xfdW5pbml0X2RldmljZShzdHJ1Y3QgdmZpb19mc2xfbWNfZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTUwNC1cXHRkcHJjX2NsZWFudXAobWNfZGV2KTtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NTA1OlxcdGJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKFxcdTAwMjZmc2xfbWNfYnVzX3R5cGUsIFxcdTAwMjZ2ZGV2LVxcdTAwM2VuYik7XFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTUwNi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oPTM1Nj1pbnQgbWNfc2VuZF9jb21tYW5kKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCBzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgKmNtZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oLTM1OC0jaWZkZWYgQ09ORklHX0ZTTF9NQ19CVVNcXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oOjM1OTojZGVmaW5lIGRldl9pc19mc2xfbWMoX2RldikgKChfZGV2KS1cXHUwMDNlYnVzID09IFxcdTAwMjZmc2xfbWNfYnVzX3R5cGUpXFxuaW5jbHVkZS9saW51eC9mc2wvbWMuaC0zNjAtdTMyIGZzbF9tY19nZXRfbXNpX2lkKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oPTQyOD1zdHJ1Y3QgZnNsX21jX2RldmljZSAqZnNsX21jX2dldF9lbmRwb2ludChzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9mc2wvbWMuaC00MzAtXFxuaW5jbHVkZS9saW51eC9mc2wvbWMuaDo0MzE6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBidXNfdHlwZSBmc2xfbWNfYnVzX3R5cGU7XFxuaW5jbHVkZS9saW51eC9mc2wvbWMuaC00MzItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjAwOjEzLjIzMzk5ODE1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTEwNjI4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgVmlydHVhbCBGU0wtTUMgRGV2aWNlIFBvc3NpYmlsaXRpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgRlNMLU1DIGJ1cyBpcyBpbmhlcmVudGx5IHRpZWQgdG8gdGhlIHBoeXNpY2FsIGhhcmR3YXJlIOKAkyB0aGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHdlIHNvbWVob3cgYWJzdHJhY3QgdGhhdD8gSXMgdGhlcmUgYSBtZWNoYW5pc20sIGEgY2xldmVyIGhhY2ssIG9yIGV2ZW4gYSBtb3JlIGZ1bmRhbWVudGFsIGFwcHJvYWNoLCB0byBjcmVhdGUgYSB2aXJ0dWFsIEZTTC1NQyBkZXZpY2U/IEknbSB0aGlua2luZywgcGVyaGFwcywgYSBkcml2ZXIgdGhhdCBlbXVsYXRlcyB0aGUgYmVoYXZpb3IsIG9yIG1heWJlIHNvbWV0aGluZyBsYXllcmVkIG9uIHRvcCBvZiBhIGRpZmZlcmVudCBoYXJkd2FyZSBhYnN0cmFjdGlvbi4gVGhlIGdvYWwgd291bGQgYmUgdG8gZ2FpbiB0aGUgYWR2YW50YWdlcyBvZiB0ZXN0aW5nIG9yIGRldmVsb3BtZW50IHdpdGhvdXQgZGlyZWN0IGhhcmR3YXJlIGFjY2Vzcy4gTXkgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMgd2l0aCBleHBsb3JpbmcgZXhpc3RpbmcgdmlydHVhbGl6YXRpb24gdGVjaG5pcXVlcyBhbmQgY2hlY2tpbmcgaWYgYW55IGV4aXN0aW5nIGZyYW1ld29ya3MgYXJlIGV4dGVuc2libGUgdG8gc2ltdWxhdGUgdGhpcyBidXMuIFRoZSBwb3RlbnRpYWwgaXMgdGhlcmUsIHRoZSBwYXRoIGlzbid0IHlldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMzNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjAwOjE2Ljc0NTA2Mzg4NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgzODg2NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZzbF9tY19kZXZpY2VfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYz0xNjk9c3RhdGljIHZvaWQgZnNsX21jX29ial9kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19idXNfZGV2LFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTgyLVxcdH0gZWxzZSB7XFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6MTgzOlxcdFxcdGVycm9yID0gZnNsX21jX2RldmljZV9hZGQob2JqX2Rlc2MsIE5VTEwsIFxcdTAwMjZtY19idXNfZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTg0LVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNoaWxkX2Rldik7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTczNz1zdGF0aWMgdm9pZCBmc2xfbWNfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03NTEtICovXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo3NTI6aW50IGZzbF9tY19kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2MgKm9ial9kZXNjLFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNzUzLVxcdFxcdCAgICAgIHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy04NzktfVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6ODgwOkVYUE9SVF9TWU1CT0xfR1BMKGZzbF9tY19kZXZpY2VfYWRkKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTg4MS1cXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTAzOT1zdGF0aWMgaW50IGZzbF9tY19idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTE1Ny1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjExNTg6XFx0ZXJyb3IgPSBmc2xfbWNfZGV2aWNlX2FkZChcXHUwMDI2b2JqX2Rlc2MsIG1jX2lvLCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2bWNfYnVzX2Rldik7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMTU5LVxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaD02MDE9c3RydWN0IGZzbF9tY19idXMge1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1wcml2YXRlLmgtNjEzLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oOjYxNDppbnQgX19tdXN0X2NoZWNrIGZzbF9tY19kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2MgKm9ial9kZXNjLFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oLTYxNS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnNsX21jX2lvICptY19pbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MDA6MTkuMTI4OTU2MTA0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwNzU3OTE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZW1iZWRkZWQgc3lzdGVtcyBleHBlcnQ6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgRGV2aWNlIEFkZGl0aW9uIFNlcXVlbmNlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYWdzIGBmc2xfbWNfZGV2aWNlX2FkZGAuIFRoYXQgZnVuY3Rpb24gY2FsbCwgd2hpY2ggSSBrbm93IGlzIHByZXR0eSBmdW5kYW1lbnRhbCBmb3IgYWRkaW5nIGEgZGV2aWNlIHRvIHRoZSBzeXN0ZW0sIGlzIHRyaWdnZXJlZCBmcm9tIHdpdGhpbiBgZnNsX21jX2J1c19wcm9iZWAuIEFuZCBgZnNsX21jX2J1c19wcm9iZWA/IEFoLCByaWdodCwgdGhhdCdzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIHBsYXRmb3JtIGRyaXZlciBsaWZlY3ljbGUuIFNvLCB3ZSdyZSBsb29raW5nIGF0IHRoZSBgZnNsX21jX2J1c19kcml2ZXJgLiBUaGlzIG1lYW5zIHRoZSBwcm9jZXNzIG9mIGRldGVjdGluZyBhbmQgaW50ZWdyYXRpbmcgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSB3aXRoIHRoZSBNb3Rpb24gQ29udHJvbCBmcmFtZXdvcmsgaXMgaW5pdGlhdGVkIGJ5IHRoZSBwbGF0Zm9ybSBkcml2ZXIsIGBmc2xfbWNfYnVzX2RyaXZlcmAsIGFuZCB0aGUgYWN0dWFsIGRldmljZSBhZGRpdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiBpdCdzIGBwcm9iZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBjYWxsIHRvIGBmc2xfbWNfZGV2aWNlX2FkZGAuIFRoYXQncyB0aGUgY29yZSBmbG93OiBwbGF0Zm9ybSBkcml2ZXIgcHJvYmluZywgZm9sbG93ZWQgYnkgdGhlIGRldmljZSBhZGRpdGlvbiBmdW5jdGlvbi4gR290IGl0LiBUaGlzIGlzIHRoZSBzdGFuZGFyZCBwcm9jZWR1cmUgZm9yIHJlZ2lzdGVyaW5nIGEgbmV3IGRldmljZSBjb250cm9sbGVkIHZpYSB0aGUgTW90aW9uIENvbnRyb2wgQVBJIHRvIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNzcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTowMDoyMy4yMzY1Mzg4MDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTQwNzg1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnNsX21jX2J1c19kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTIwOD1NT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGZzbF9tY19idXNfYWNwaV9tYXRjaF90YWJsZSk7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjA5LVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTIxMDpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmc2xfbWNfYnVzX2RyaXZlciA9IHtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMTEtXFx0LmRyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTI1Nj1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZzbF9tY19uYiA9IHtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI1OS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyNjA6c3RhdGljIGludCBfX2luaXQgZnNsX21jX2J1c19kcml2ZXJfaW5pdCh2b2lkKVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI2MS17XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyNjktXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMjcwOlxcdGVycm9yID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZmc2xfbWNfYnVzX2RyaXZlcik7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjcxLVxcdGlmIChlcnJvciBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI4OS1lcnJvcl9jbGVhbnVwX2RyaXZlcjpcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyOTA6XFx0cGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNmZzbF9tY19idXNfZHJpdmVyKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyOTEtXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyOTctfVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTI5ODpwb3N0Y29yZV9pbml0Y2FsbChmc2xfbWNfYnVzX2RyaXZlcl9pbml0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MDA6MjUuNjkwNjI2ODY0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3OTU3NjQxMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipQbGF0Zm9ybSBEcml2ZXIgTWF0Y2hpbmc6IEFDUEkgb3IgT0Yg4oCTIFRoYXQncyB0aGUgUXVlc3Rpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYSBwbGF0Zm9ybSBkcml2ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGUgYmVzdCB3YXkgdG8gaWRlbnRpZnkgdGhpcyBoYXJkd2FyZT9cIiBJdCdzIGEgcXVpY2sgbWVudGFsIGNoZWNrbGlzdDogRG9lcyBpdCB1c2UgQUNQSSB0YWJsZXM/IE9yIGlzIGl0IGFuIE9wZW4gRmlybXdhcmUgKE9GKSBkZXZpY2U/IFRob3NlIGFyZSB0aGUgdHdvIHByaW1hcnkgbWV0aG9kcyBJJ20gZ29pbmcgdG8gY29uc2lkZXIgZm9yIG1hdGNoaW5nIHRoaXMgZHJpdmVyIHRvIHRoZSBoYXJkd2FyZSBpdCdzIG1lYW50IHRvIGNvbnRyb2wuIE15IGRyaXZlciBuZWVkcyB0byBiZSBhYmxlIHRvIGlkZW50aWZ5IGl0cyB0YXJnZXQgZWZmZWN0aXZlbHk7IGl0J3MgZ290IHRvIGNsYWltIG93bmVyc2hpcCBvZiBpdHMgcGxhdGZvcm0gZGV2aWNlIHRocm91Z2ggdGhlc2Ugd2VsbC1kZWZpbmVkIHByb3RvY29scy4gQW5kIGJhc2VkIG9uIHdoYXQgSSBzZWUsIGl0IHNlZW1zIHRoYXQgdGhlIHBsYXRmb3JtIGRyaXZlciBpcyBleHBlY3RpbmcgQUNQSSBvciBPRiBpbmZvcm1hdGlvbiwgb3IgZWxzZSBpdCBpcyBleHBlY3RpbmcgdG8gbWF0Y2ggb25lLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgaG93IHRvIHN1cHBvcnQgdGhlIHBhcnRpY3VsYXIgYnVzIHR5cGUgKEFDUEkgb3IgT0YpLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTM0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTowMDoyOC40ODYzOTMyNTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjE1MjExMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnNsX21jX2J1c19tYXRjaF90YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMTc1PXN0YXRpYyB2b2lkIGZzbF9tY19idXNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTExOTYtXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMTk3OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbF9tY19idXNfbWF0Y2hfdGFibGVbXSA9IHtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTExOTgtXFx0ey5jb21wYXRpYmxlID0gXFxcImZzbCxxb3JpcS1tY1xcXCIsfSxcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTIwMS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyMDI6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZnNsX21jX2J1c19tYXRjaF90YWJsZSk7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjAzLVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjEwPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9tY19idXNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjEzLVxcdFxcdCAgIC5wbSA9IE5VTEwsXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMjE0OlxcdFxcdCAgIC5vZl9tYXRjaF90YWJsZSA9IGZzbF9tY19idXNfbWF0Y2hfdGFibGUsXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjE1LVxcdFxcdCAgIC5hY3BpX21hdGNoX3RhYmxlID0gZnNsX21jX2J1c19hY3BpX21hdGNoX3RhYmxlLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjIyPXN0YXRpYyBpbnQgZnNsX21jX2J1c19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjMxLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTIzMjpcXHRpZiAoIW9mX21hdGNoX2RldmljZShmc2xfbWNfYnVzX21hdGNoX3RhYmxlLCBkZXYpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjMzLVxcdCAgICAhYWNwaV9tYXRjaF9kZXZpY2UoZnNsX21jX2J1c19hY3BpX21hdGNoX3RhYmxlLCBkZXYpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTowMDozMC45MDc5MjEwODhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1MjU3NzgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBcImZzbCxxb3JpcS1tY1wiIENvbXBhdGlibGUgU3RyaW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgXCJmc2wscW9yaXEtbWNcIiBjb21wYXRpYmxlIHN0cmluZyBhbmQgd2hldGhlciBpdCdzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIENhbiBJIGdldCBhd2F5IHdpdGggdGhyb3dpbmcgcmFuZG9tIGRhdGEgYXQgaXQgYW5kIHNlZWluZyB3aGF0IHN0aWNrcz8gVGhlIGltbWVkaWF0ZSBodXJkbGUgaXMgcmVtZW1iZXJpbmcgaG93IFN5emthbGxlciBoYW5kbGVzIHBsYXRmb3JtIGRldmljZXMuIERvZXMgaXQgbmF0aXZlbHkgaW5qZWN0IHRoZW0gd2l0aCBzcGVjaWZpYyBjb21wYXRpYmxlcyAqdW5sZXNzKiBpdCdzIHBhcnQgb2YgYSB2ZXJ5IHBhcnRpY3VsYXIsIGNvbnRyb2xsZWQgc2V0dXA/IFRoYXQncyB0eXBpY2FsbHkgdGhlIGlzc3VlLiBJIHJlY2FsbCBpdCBkb2Vzbid0IGp1c3QgbGV0IHlvdSBpbmplY3QgYW55dGhpbmcgdmlhIHN5c2ZzLCBzbyB0aGF0J3MgYSBkZWFkIGVuZC5cblxuVGhlbiB0aGVyZSdzIHRoZSBgZnNsLW1jYCBidXMgaXRzZWxmLiBJdCdzIG5vdCBhIHNpbXBsZSBjYXNlIG9mIGp1c3QgZmluZGluZyB0aGUgcmlnaHQgZHJpdmVyLiBUaGlzIGJ1cyByZXF1aXJlcyBhY3R1YWxseSBpbnRlcmFjdGluZyB3aXRoIHRoZSBoYXJkd2FyZSB0aHJvdWdoIE1DIGNvbW1hbmRzIHRvIGVudW1lcmF0ZSB0aGUgZGV2aWNlcy4gSnVzdCB0aHJvd2luZyBhcmJpdHJhcnkgc3RyaW5ncyBtaWdodCBub3QgZXZlbiB0cmlnZ2VyIG1lYW5pbmdmdWwgYmVoYXZpb3IsIG9yIG1vcmUgbGlrZWx5IHdpbGwgbGVhZCB0byBhIGNyYXNoLlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBmc2xfbWNfYnVzX3Byb2JlYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnVtZXJhdGlvbiBwcm9jZXNzIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGVudHJ5IHBvaW50cyBvciB2dWxuZXJhYmlsaXRpZXMgdGhhdCBJIGNhbiBleHBsb2l0LiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0byBmdXp6IHRoaXMgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTY3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjAwOjM1LjA2MDUwMjk1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMxNDc2MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZzbF9tY19idXNfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTAwNT1zdGF0aWMgaW50IGZzbF9tY19maXJtd2FyZV9jaGVjayhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDM1LS8qXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMDM2OiAqIGZzbF9tY19idXNfcHJvYmUgLSBjYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIHJvb3QgTUMgYnVzIGlzIGJlaW5nXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDM3LSAqIGFkZGVkXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDM4LSAqL1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAzOTpzdGF0aWMgaW50IGZzbF9tY19idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwNDAte1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjEwPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9tY19idXNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjE2LVxcdFxcdCAgIH0sXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMjE3OlxcdC5wcm9iZSA9IGZzbF9tY19idXNfcHJvYmUsXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjE4LVxcdC5yZW1vdmUgPSBmc2xfbWNfYnVzX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MDA6MzcuNDkxOTg2MjI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzgwMjQwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIGBmc2xfbWNfYnVzX3Byb2JlYDpcblxuKipBbmFseXppbmcgYGZzbF9tY19idXNfcHJvYmVgKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIHVucGFjayB3aGF0IGBmc2xfbWNfYnVzX3Byb2JlYCBpcyBhbGwgYWJvdXQuIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGZ1bmN0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCBwcm9iaW5nIGEgRnJlZXNjYWxlIChsaWtlbHkgTlhQKSBNdWx0aS1Db3JlIEJ1cyAoTUMgQnVzKS4gVGhlIFwicHJvYmVcIiBwYXJ0IHRlbGxzIG1lIGl0J3MgcHJvYmFibHkgY29uY2VybmVkIHdpdGggZGV2aWNlIGRpc2NvdmVyeSBvciBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhhdCBidXMgaW5mcmFzdHJ1Y3R1cmUuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBoYXJkd2FyZSB0aGlzIGlzIGRlc2lnbmVkIHRvIGludGVyZmFjZSB3aXRoLCB3aGV0aGVyIGl0J3MgcmVsYXRlZCB0byB0aGUgUG93ZXIgQXJjaGl0ZWN0dXJlLCBvciBtYXliZSBBUk0tYmFzZWQgU29DcyBmcm9tIE5YUC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGFyY2hpdGVjdHVyYWwgY29udGV4dCB0byByZWFsbHkgZ3Jhc3AgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZS4gSSdtIGFzc3VtaW5nIGl0IGludGVyYWN0cyB3aXRoIHNvbWUgc29ydCBvZiBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycyB0byBhY2hpZXZlIHRoaXMgcHJvYmluZyBhbmQgbGlrZWx5IGhhbmRsZXMgaW5pdGlhbGl6YXRpb24gdGFza3MgYmFzZWQgb24gdGhlIGRldmljZXMgZm91bmQgb24gdGhlIGJ1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc0OSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjAwOjQwLjY3MDAxMzQwNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDM5LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAzOTpcXHRzdGF0aWMgaW50IGZzbF9tY19idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4xMDQwOlxcdHtcXG4xMDQxOlxcdFxcdHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2Mgb2JqX2Rlc2M7XFxuMTA0MjpcXHRcXHRpbnQgZXJyb3I7XFxuMTA0MzpcXHRcXHRzdHJ1Y3QgZnNsX21jICptYztcXG4xMDQ0OlxcdFxcdHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19idXNfZGV2ID0gTlVMTDtcXG4xMDQ1OlxcdFxcdHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvID0gTlVMTDtcXG4xMDQ2OlxcdFxcdGludCBjb250YWluZXJfaWQ7XFxuMTA0NzpcXHRcXHRwaHlzX2FkZHJfdCBtY19wb3J0YWxfcGh5c19hZGRyO1xcbjEwNDg6XFx0XFx0dTMyIG1jX3BvcnRhbF9zaXplLCBtY19zdHJlYW1faWQ7XFxuMTA0OTpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgKnBsYXRfcmVzO1xcbjEwNTA6XFx0XFxuMTA1MTpcXHRcXHRtYyA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKm1jKSwgR0ZQX0tFUk5FTCk7XFxuMTA1MjpcXHRcXHRpZiAoIW1jKVxcbjEwNTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTA1NDpcXHRcXG4xMDU1OlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jKTtcXG4xMDU2OlxcdFxcbjEwNTc6XFx0XFx0cGxhdF9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpO1xcbjEwNTg6XFx0XFx0aWYgKHBsYXRfcmVzKSB7XFxuMTA1OTpcXHRcXHRcXHRtYy1cXHUwMDNlZnNsX21jX3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9yZXMpO1xcbjEwNjA6XFx0XFx0XFx0aWYgKElTX0VSUihtYy1cXHUwMDNlZnNsX21jX3JlZ3MpKVxcbjEwNjE6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobWMtXFx1MDAzZWZzbF9tY19yZWdzKTtcXG4xMDYyOlxcdFxcdH1cXG4xMDYzOlxcdFxcbjEwNjQ6XFx0XFx0aWYgKG1jLVxcdTAwM2Vmc2xfbWNfcmVncykge1xcbjEwNjU6XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FDUEkpIFxcdTAwMjZcXHUwMDI2ICFkZXZfb2Zfbm9kZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KSkge1xcbjEwNjY6XFx0XFx0XFx0XFx0bWNfc3RyZWFtX2lkID0gcmVhZGwobWMtXFx1MDAzZWZzbF9tY19yZWdzICsgRlNMX01DX0ZBUFIpO1xcbjEwNjc6XFx0XFx0XFx0XFx0LypcXG4xMDY4OlxcdFxcdFxcdFxcdCAqIEhXIE9ScyB0aGUgUEwgYW5kIEJNVCBiaXQsIHBsYWNlcyB0aGUgcmVzdWx0IGluIGJpdFxcbjEwNjk6XFx0XFx0XFx0XFx0ICogMTQgb2YgdGhlIFN0cmVhbUlEIGFuZCBPUnMgaW4gdGhlIElDSUQuIENhbGN1bGF0ZSBpdFxcbjEwNzA6XFx0XFx0XFx0XFx0ICogYWNjb3JkaW5nbHkuXFxuMTA3MTpcXHRcXHRcXHRcXHQgKi9cXG4xMDcyOlxcdFxcdFxcdFxcdG1jX3N0cmVhbV9pZCA9IChtY19zdHJlYW1faWQgXFx1MDAyNiAweGZmZmYpIHxcXG4xMDczOlxcdFxcdFxcdFxcdFxcdCgobWNfc3RyZWFtX2lkIFxcdTAwMjYgKE1DX0ZBUFJfUEwgfCBNQ19GQVBSX0JNVCkpID9cXG4xMDc0OlxcdFxcdFxcdFxcdFxcdFxcdEJJVCgxNCkgOiAwKTtcXG4xMDc1OlxcdFxcdFxcdFxcdGVycm9yID0gYWNwaV9kbWFfY29uZmlndXJlX2lkKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMTA3NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBERVZfRE1BX0NPSEVSRU5ULFxcbjEwNzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm1jX3N0cmVhbV9pZCk7XFxuMTA3ODpcXHRcXHRcXHRcXHRpZiAoZXJyb3IgPT0gLUVQUk9CRV9ERUZFUilcXG4xMDc5OlxcdFxcdFxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4xMDgwOlxcdFxcdFxcdFxcdGlmIChlcnJvcilcXG4xMDgxOlxcdFxcdFxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMTA4MjpcXHRcXHRcXHRcXHRcXHRcXHQgXFxcImZhaWxlZCB0byBjb25maWd1cmUgZG1hOiAlZC5cXFxcblxcXCIsXFxuMTA4MzpcXHRcXHRcXHRcXHRcXHRcXHQgZXJyb3IpO1xcbjEwODQ6XFx0XFx0XFx0fVxcbjEwODU6XFx0XFxuMTA4NjpcXHRcXHRcXHQvKlxcbjEwODc6XFx0XFx0XFx0ICogU29tZSBib290bG9hZGVycyBwYXVzZSB0aGUgTUMgZmlybXdhcmUgYmVmb3JlIGJvb3RpbmcgdGhlXFxuMTA4ODpcXHRcXHRcXHQgKiBrZXJuZWwgc28gdGhhdCBNQyB3aWxsIG5vdCBjYXVzZSBmYXVsdHMgYXMgc29vbiBhcyB0aGVcXG4xMDg5OlxcdFxcdFxcdCAqIFNNTVUgcHJvYmVzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZXJlJ3Mgbm8gY29uZmlndXJhdGlvblxcbjEwOTA6XFx0XFx0XFx0ICogaW4gcGxhY2UgZm9yIE1DLlxcbjEwOTE6XFx0XFx0XFx0ICogQXQgdGhpcyBwb2ludCBNQyBzaG91bGQgaGF2ZSBhbGwgaXRzIFNNTVUgc2V0dXAgZG9uZSBzbyBtYWtlXFxuMTA5MjpcXHRcXHRcXHQgKiBzdXJlIGl0IGlzIHJlc3VtZWQuXFxuMTA5MzpcXHRcXHRcXHQgKi9cXG4xMDk0OlxcdFxcdFxcdHdyaXRlbChyZWFkbChtYy1cXHUwMDNlZnNsX21jX3JlZ3MgKyBGU0xfTUNfR0NSMSkgXFx1MDAyNlxcbjEwOTU6XFx0XFx0XFx0XFx0ICAgICAofihHQ1IxX1AxX1NUT1AgfCBHQ1IxX1AyX1NUT1ApKSxcXG4xMDk2OlxcdFxcdFxcdCAgICAgICBtYy1cXHUwMDNlZnNsX21jX3JlZ3MgKyBGU0xfTUNfR0NSMSk7XFxuMTA5NzpcXHRcXHR9XFxuMTA5ODpcXHRcXG4xMDk5OlxcdFxcdGVycm9yID0gZnNsX21jX2Zpcm13YXJlX2NoZWNrKHBkZXYpO1xcbjExMDA6XFx0XFx0aWYgKGVycm9yKVxcbjExMDE6XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHQvKlxcbjExMDQ6XFx0XFx0ICogR2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgTUMgcG9ydGFsIGZvciB0aGUgcm9vdCBEUFJDOlxcbjExMDU6XFx0XFx0ICovXFxuMTEwNjpcXHRcXHRwbGF0X3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7XFxuMTEwNzpcXHRcXHRpZiAoIXBsYXRfcmVzKVxcbjExMDg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTEwOTpcXHRcXG4xMTEwOlxcdFxcdG1jX3BvcnRhbF9waHlzX2FkZHIgPSBwbGF0X3Jlcy1cXHUwMDNlc3RhcnQ7XFxuMTExMTpcXHRcXHRtY19wb3J0YWxfc2l6ZSA9IHJlc291cmNlX3NpemUocGxhdF9yZXMpO1xcbjExMTI6XFx0XFx0bWNfcG9ydGFsX2Jhc2VfcGh5c19hZGRyID0gbWNfcG9ydGFsX3BoeXNfYWRkciBcXHUwMDI2IH4weDNmZmZmZmY7XFxuMTExMzpcXHRcXG4xMTE0OlxcdFxcdGVycm9yID0gZnNsX2NyZWF0ZV9tY19pbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBtY19wb3J0YWxfcGh5c19hZGRyLFxcbjExMTU6XFx0XFx0XFx0XFx0XFx0IG1jX3BvcnRhbF9zaXplLCBOVUxMLFxcbjExMTY6XFx0XFx0XFx0XFx0XFx0IEZTTF9NQ19JT19BVE9NSUNfQ09OVEVYVF9QT1JUQUwsIFxcdTAwMjZtY19pbyk7XFxuMTExNzpcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbjExMTg6XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbjExMTk6XFx0XFxuMTEyMDpcXHRcXHRlcnJvciA9IG1jX2dldF92ZXJzaW9uKG1jX2lvLCAwLCBcXHUwMDI2bWNfdmVyc2lvbik7XFxuMTEyMTpcXHRcXHRpZiAoZXJyb3IgIT0gMCkge1xcbjExMjI6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbjExMjM6XFx0XFx0XFx0XFx0XFxcIm1jX2dldF92ZXJzaW9uKCkgZmFpbGVkIHdpdGggZXJyb3IgJWRcXFxcblxcXCIsIGVycm9yKTtcXG4xMTI0OlxcdFxcdFxcdGdvdG8gZXJyb3JfY2xlYW51cF9tY19pbztcXG4xMTI1OlxcdFxcdH1cXG4xMTI2OlxcdFxcbjExMjc6XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIk1DIGZpcm13YXJlIHZlcnNpb246ICV1LiV1LiV1XFxcXG5cXFwiLFxcbjExMjg6XFx0XFx0XFx0IG1jX3ZlcnNpb24ubWFqb3IsIG1jX3ZlcnNpb24ubWlub3IsIG1jX3ZlcnNpb24ucmV2aXNpb24pO1xcbjExMjk6XFx0XFxuMTEzMDpcXHRcXHRpZiAoZGV2X29mX25vZGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldikpIHtcXG4xMTMxOlxcdFxcdFxcdGVycm9yID0gZ2V0X21jX2FkZHJfdHJhbnNsYXRpb25fcmFuZ2VzKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMTEzMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2bWMtXFx1MDAzZXRyYW5zbGF0aW9uX3JhbmdlcyxcXG4xMTMzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZtYy1cXHUwMDNlbnVtX3RyYW5zbGF0aW9uX3Jhbmdlcyk7XFxuMTEzNDpcXHRcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbjExMzU6XFx0XFx0XFx0XFx0Z290byBlcnJvcl9jbGVhbnVwX21jX2lvO1xcbjExMzY6XFx0XFx0fVxcbjExMzc6XFx0XFxuMTEzODpcXHRcXHRlcnJvciA9IGRwcmNfZ2V0X2NvbnRhaW5lcl9pZChtY19pbywgMCwgXFx1MDAyNmNvbnRhaW5lcl9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjAwOjQwLjY3MDE2NjcyNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjcyOTU0NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGB2ZmlvX2ZzbF9tY2AgRHJpdmVyJ3MgVGVzdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGRlcGVuZGVuY3kgb24gdGhlIGBtYy1cdTAwM2Vmc2xfbWNfcmVncyArIEZTTF9NQ19GQVBSYCByZWdpc3RlciBhY2Nlc3MgYW5kIGludGVyYWN0aW9ucyB3aXRoIHRoZSBmaXJtd2FyZSB0aHJvdWdoIGBtY19nZXRfdmVyc2lvbmAgYW5kIGBkcHJjX2dldF9jb250YWluZXJfaWRgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCBzY3JlYW1zIGhhcmR3YXJlIGRlcGVuZGVuY3ksIG9yIGF0IGxlYXN0IGEgdmVyeSBzcGVjaWZpYyBRRU1VIGVtdWxhdGlvbi4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIFFFTVUgZXZlbiAqZW11bGF0ZSogdGhlIGBmc2wscW9yaXEtbWNgIGRldmljZT8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhwbG9yZSBtb2NraW5nIHRoaXMgc29tZWhvdy4gSSdsbCBjaGVjayBpZiBzeXprYWxsZXIgaGFzIGFueSBwcm92aXNpb25zIGZvciBtb2NraW5nIHRoZXNlIGludGVyYWN0aW9ucywgYnV0IEkgZG9uJ3QgcmVjYWxsIHNlZWluZyBhbnl0aGluZyBsaWtlIHRoYXQuIFRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIHJlc2lkZXMgaW4gYGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY2AgaXMgYWxzbyBhIGNsdWU7IGl0IG1lYW5zIHRoaXMgaXMgVkZJTyBzcGVjaWZpYy5cblxuVGhpcyBjb2RlIHBhdGggc3BlY2lmaWNhbGx5IHVzZXMgYFZGSU9fRlNMX01DYCwgd2hpY2ggaW4gdHVybiByZWxpZXMgb24gYEZTTF9NQ19CVVNgLiBOb3csIGBGU0xfTUNfQlVTYCBpcyBmdW5kYW1lbnRhbGx5IHRpZWQgdG8gTlhQIGhhcmR3YXJlIGFuZCB0aGUgYGZzbC1tY2AgYnVzLiBTbywgSSBuZWVkIHRvIGFzayBteXNlbGYsIGlzIHRoZXJlIGFueSB3YXkgdG8gdGVzdCBgVkZJT19GU0xfTUNgIHJlbGlhYmx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/XG5cbkJhc2VkIG9uIHRoZSBjb2RlJ3MgZGVwZW5kZW5jZSBvbiB0aGUgYGZzbC1tY2AgYnVzIGJlaW5nIHBvcHVsYXRlZCB3aXRoIGRldmljZXMg4oCTIG1lYW5pbmcgYGZzbF9tY19idXNfcHJvYmVgIGhhcyB0byBzdWNjZWVkLCB3aGljaCBpbiB0dXJuIG5lY2Vzc2l0YXRlcyB0aGUgTUMgZmlybXdhcmUgcmVzcG9uZGluZyDigJMgaXQgbG9va3MgaW5jcmVkaWJseSB1bmxpa2VseS4gSXQgc2VlbXMgdGhhdCB0aGlzIHBhcnRpY3VsYXIgY29kZSBwYXRoIGlzIGZ1bmRhbWVudGFsbHkgaW5hY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBldmVuIGEgZ2VuZXJpYyBRRU1VIHNldHVwLiBJdCByZWFsbHkgZmVlbHMgbGlrZSB0aGlzIGlzIG9ubHkgdGVzdGFibGUgaW4gYSBwaHlzaWNhbCBOWFAtYmFzZWQgc3lzdGVtIHdpdGggdGhlIGNvcnJlY3QgZmlybXdhcmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrIGlmIHRoZXJlJ3MgKmFueSogc29mdHdhcmUgZW11bGF0aW9uIGZvciBgZnNsLW1jYCB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYuIEkgY2FuJ3QgdGhpbmsgb2YgYW55IG9mZmhhbmQsIGJ1dCBpdCdzIHdvcnRoIGEgcXVpY2sgbG9vayB0byBlbGltaW5hdGUgYW55IGxpbmdlcmluZyBkb3VidC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTowMDo0Ni45NDMxMjUxMjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDc5NDU0OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnNsX21jX2J1c19wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMDA1PXN0YXRpYyBpbnQgZnNsX21jX2Zpcm13YXJlX2NoZWNrKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMzUtLypcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEwMzY6ICogZnNsX21jX2J1c19wcm9iZSAtIGNhbGxiYWNrIGludm9rZWQgd2hlbiB0aGUgcm9vdCBNQyBidXMgaXMgYmVpbmdcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMzctICogYWRkZWRcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMzgtICovXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMDM5OnN0YXRpYyBpbnQgZnNsX21jX2J1c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTA0MC17XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTEyMTA9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZnNsX21jX2J1c19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMTYtXFx0XFx0ICAgfSxcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyMTc6XFx0LnByb2JlID0gZnNsX21jX2J1c19wcm9iZSxcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMTgtXFx0LnJlbW92ZSA9IGZzbF9tY19idXNfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTowMDo0OS4zNTEwNzc5NjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkyNDQ3MzUyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBXb3J0aEZ1enppbmcgPSBGYWxzZSoqXG5cbk9rYXksIHNvIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBpcyBpbnZvbHZlZCBoZXJlLCB3aGljaCBpcyB0aGUgZmlyc3QgdGhpbmcgSSBjaGVjay4gVGhlIHBhdGNoIGluIHF1ZXN0aW9uIHNwZWNpZmljYWxseSBtb2RpZmllcyBgdmZpb19mc2xfbWNfbW1hcGAuIFRoZSBrZXkgcG9pbnQgaXMgdGhhdCBgZnNsLW1jYCBkZXZpY2VzLCBiZWluZyB0aWVkIHRvIHRoZSBGcmVlc2NhbGUvTlhQIE1hbmFnZW1lbnQgQ29tcGxleCwgYXJlICpub3QqIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBjcmVhdGVkIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBCZWNhdXNlIG9mIHRoaXMgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50LCBgdmZpb19mc2xfbWNfbW1hcGAgKmNhbm5vdCogYmUgcmVhY2hlZCBpbiB0aGVzZSB2aXJ0dWFsaXplZCBzZXR0aW5ncy5cblxuTGV0IG1lIHJlZnJlc2ggdGhlIGd1aWRlbGluZXMgZm9yIHRoZXNlIHNjZW5hcmlvcy4gSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggZmFsbHMgaW50byBlaXRoZXIgb2YgdGhlc2UgdHdvIGNhc2VzOiBjb2RlIHBhdGhzIHRoYXQgYXJlIGluaGVyZW50bHkgaW5hY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gaW5jbHVkaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBUaGUgc2Vjb25kIGNvbmRpdGlvbiBpcyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIHJlcXVpcmluZyBhY3R1YWwgUENJZSBjYXJkcywgbGlrZSBTbWFydE5JQ3MsIEdQVXMgYW5kIHNvIG9uLCB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cblxuVGhpcyBwYXRjaCwgZGVhbGluZyB3aXRoIHRoZSBgZnNsLW1jYCBidXMsIHBlcmZlY3RseSBhbGlnbnMgd2l0aCBib3RoIG9mIHRoZXNlIGV4Y2x1c2lvbiBjcml0ZXJpYS4gYGZzbC1tY2AgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgYnVzIHRoYXQgbWFuZGF0ZXMgcGh5c2ljYWwgaGFyZHdhcmUsIHdoaWNoIGlzIHNpbXBseSBub3QgYWNjZXNzaWJsZSB3aXRoaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyIGFuZCBkZWZpbml0aXZlOiBJJ2xsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NjgsIk91dHB1dFRva2VucyI6MTE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjAwOjU1LjI3NTU1Mzg2NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIGRyaXZlciBmb3IgdGhlIEZyZWVzY2FsZS9OWFAgTWFuYWdlbWVudCBDb21wbGV4IChmc2wtbWMpIGJ1cy4gVGhpcyBidXMgYW5kIGl0cyBkZXZpY2VzIGFyZSBzcGVjaWZpYyB0byBwaHlzaWNhbCBOWFAgUW9ySVEgRFBBQTIgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGggaW4gYHZmaW9fZnNsX21jX21tYXBgIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZGSU8gZHJpdmVyIGZvciB0aGUgRnJlZXNjYWxlL05YUCBNYW5hZ2VtZW50IENvbXBsZXggKGZzbC1tYykgYnVzLiBUaGlzIGJ1cyBhbmQgaXRzIGRldmljZXMgYXJlIHNwZWNpZmljIHRvIHBoeXNpY2FsIE5YUCBRb3JJUSBEUEFBMiBoYXJkd2FyZSBhbmQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aCBpbiBgdmZpb19mc2xfbWNfbW1hcGAgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTowMDo1NS4yNzU1ODE0MDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowch7tf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 08:58:15 +0000 UTC FinishedAt: 2026-08-19 09:00:56 +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+CgkJCTx0ZD4yMDI2LzA4LzE5IDA4OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZGSU8gZHJpdmVyIGZvciB0aGUgRnJlZXNjYWxlL05YUCBNYW5hZ2VtZW50IENvbXBsZXggKGZzbC1tYykgYnVzLiBUaGlzIGJ1cyBhbmQgaXRzIGRldmljZXMgYXJlIHNwZWNpZmljIHRvIHBoeXNpY2FsIE5YUCBRb3JJUSBEUEFBMiBoYXJkd2FyZSBhbmQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aCBpbiBgdmZpb19mc2xfbWNfbW1hcGAgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA4OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjE2M2E2ZjZmMGNhODAyNjY2YjhlMjlkMmM0NjJiN2U1YzViYmMwYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA4OjU5OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYyBiL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY1xuaW5kZXggYjRjMzk1ODIwMWIyNS4uODVmNDc5ZGI5MzZjNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXG5AQCAtNDA3LDYgJiM0Mzs0MDcsMTAgQEAgc3RhdGljIGludCB2ZmlvX2ZzbF9tY19tbWFwKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LFxuIFx0XHRcdFx1MDAyNlx1MDAyNiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdC8qIFByZXZlbnQgcmVhZC1vbmx5IHJlZ2lvbiBtYXBwaW5ncyBmcm9tIGJlaW5nIHVwZ3JhZGVkIHdpdGggbXByb3RlY3QoKSAqL1xuJiM0MztcdGlmICghKHZkZXYtXHUwMDNlcmVnaW9uc1tpbmRleF0uZmxhZ3MgXHUwMDI2IFZGSU9fUkVHSU9OX0lORk9fRkxBR19XUklURSkpXG4mIzQzO1x0XHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX01BWVdSSVRFKTtcbiYjNDM7XG4gXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbWNfZGV2O1xuIFxuIFx0cmV0dXJuIHZmaW9fZnNsX21jX21tYXBfbW1pbyh2ZGV2LVx1MDAzZXJlZ2lvbnNbaW5kZXhdLCB2bWEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA4OjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBkcml2ZXIgZm9yIHRoZSBGcmVlc2NhbGUvTlhQIE1hbmFnZW1lbnQgQ29tcGxleCAoZnNsLW1jKSBidXMuIFRoaXMgYnVzIGFuZCBpdHMgZGV2aWNlcyBhcmUgc3BlY2lmaWMgdG8gcGh5c2ljYWwgTlhQIFFvcklRIERQQUEyIGhhcmR3YXJlIGFuZCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRoIGluIGB2ZmlvX2ZzbF9tY19tbWFwYCBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyMTYzYTZmNmYwY2E4MDI2NjZiOGUyOWQyYzQ2MmI3ZTVjNWJiYzBiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMDg6NTk6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMgYi9kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMKaW5kZXggYjRjMzk1ODIwMWIyNS4uODVmNDc5ZGI5MzZjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYwpAQCAtNDA3LDYgJiM0Mzs0MDcsMTAgQEAgc3RhdGljIGludCB2ZmlvX2ZzbF9tY19tbWFwKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LAogCQkJJmFtcDsmYW1wOyAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9XUklURSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CS8qIFByZXZlbnQgcmVhZC1vbmx5IHJlZ2lvbiBtYXBwaW5ncyBmcm9tIGJlaW5nIHVwZ3JhZGVkIHdpdGggbXByb3RlY3QoKSAqLwomIzQzOwlpZiAoISh2ZGV2LSZndDtyZWdpb25zW2luZGV4XS5mbGFncyAmYW1wOyBWRklPX1JFR0lPTl9JTkZPX0ZMQUdfV1JJVEUpKQomIzQzOwkJdm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9NQVlXUklURSk7CiYjNDM7CiAJdm1hLSZndDt2bV9wcml2YXRlX2RhdGEgPSBtY19kZXY7CiAKIAlyZXR1cm4gdmZpb19mc2xfbWNfbW1hcF9tbWlvKHZkZXYtJmd0O3JlZ2lvbnNbaW5kZXhdLCB2bWEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwODo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFZGSU8gUGF0Y2ggZm9yIEZyZWVzY2FsZSBNQyBCdXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIGFwcGxpZWQgdG8gYGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY2AuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgdHdlYWtlZCB0aGUgYHZmaW9fZnNsX21jX21tYXBgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGlzIGNoZWNrOgoKYGBgYwoJLyogUHJldmVudCByZWFkLW9ubHkgcmVnaW9uIG1hcHBpbmdzIGZyb20gYmVpbmcgdXBncmFkZWQgd2l0aCBtcHJvdGVjdCgpICovCglpZiAoISh2ZGV2LSZndDtyZWdpb25zW2luZGV4XS5mbGFncyAmYW1wOyBWRklPX1JFR0lPTl9JTkZPX0ZMQUdfV1JJVEUpKQoJCXZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fTUFZV1JJVEUpOwpgYGAKCkVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBwcmV2ZW50aW5nIHJlYWQtb25seSByZWdpb25zIGZyb20gYmVpbmcgbWFkZSB3cml0YWJsZSBsYXRlciBvbiwgdXNpbmcgYG1wcm90ZWN0KClgLiBUaGF0JiMzOTtzIGEgZ29vZCBzZWN1cml0eSBwcmFjdGljZTsgc291bmRzIGxpa2UgaXQgY291bGQgcHJldmVudCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBCdXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYW5kIHRlc3RhYmlsaXR5LiBUaGlzIGlzIGluIHRoZSBjb250ZXh0IG9mIHRoZSBWRklPIGRyaXZlciBmb3IgdGhlIEZyZWVzY2FsZSBNQyBidXMsIGBmc2wtbWNgLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuIHJlYWNoYWJsZSBpbiBhIHR5cGljYWwgUUVNVS9HQ0Ugc2V0dXA/IFRoZSBGcmVlc2NhbGUgTUMgYnVzIGlzIGdlbmVyYWxseSBhc3NvY2lhdGVkIHdpdGggTlhQL0ZyZWVzY2FsZSBTb0NzLCBzcGVjaWZpY2FsbHkgdGhpbmdzIGxpa2UgdGhlIERQQUEyIGFyY2hpdGVjdHVyZS4gSXMgdGhpcyBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZSBhY3R1YWxseSBlbXVsYXRlZCBpbiBRRU1VPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbi4gSWYgaXQmIzM5O3Mgbm90IGVtdWxhdGVkLCB0aGVuIHRoaXMgcGF0Y2gsIHdoaWxlIGxvZ2ljYWxseSBzb3VuZCwgbWlnaHQgbm90IGJlIHRlc3RhYmxlIG9yIGV2ZW4gcmVsZXZhbnQgaW4gbWFueSBjb21tb24gdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLgoKU28sIGxldCYjMzk7cyBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHRlc3RhYmxlLiBGcm9tIHdoYXQgSSByZW1lbWJlciwgYGZzbC1tY2AgaXMgYWxtb3N0IGV4Y2x1c2l2ZWx5IGEgTGF5ZXJzY2FwZSBTb0Mtc3BlY2lmaWMgdGhpbmcuIExldCBtZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBgZnNsLW1jYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgYW5kIGNvbmZpcm0gdGhhdCBzdXNwaWNpb24uIFRoYXQgd2lsbCBoZWxwIHRvIGdhdWdlIGlmIHRoZXJlIGFyZSBhbnkgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGlzIHBhdGNoIHdpdGhvdXQgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZzbC1tYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc9ND1jb25maWcgVkZJT19GU0xfTUNcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZzo1Olx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBRb3JJUSBEUEFBMiBmc2wtbWMgYnVzIGRldmljZXNcJiMzNDtcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy02LVx0c2VsZWN0IEVWRU5URkRcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy03LVx0aGVscFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnOjg6XHQgIERyaXZlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFZGSU8gUW9ySVEgRFBBQTIgZnNsLW1jXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctOS1cdCAgKE1hbmFnZW1lbnQgQ29tcGxleCkgZGV2aWNlcy4gVGhpcyBpcyByZXF1aXJlZCB0byBwYXNzdGhyb3VnaFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnOjEwOlx0ICBmc2wtbWMgYnVzIGRldmljZXMgdXNpbmcgdGhlIFZGSU8gZnJhbWV3b3JrLlxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnLTExLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVkZJT19GU0xfTUMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGlzIGBWRklPX0ZTTF9NQ2AgY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpY2FsbHkgYWJvdXQgZW5hYmxpbmcgVkZJTyBzdXBwb3J0IGZvciBOWFAgUW9ySVEgRFBBQTIgZnNsLW1jIGJ1cyBkZXZpY2VzLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCYjMzk7cyBhIHJlZCBmbGFnOyB0aGlzIGlzIGhhcmR3YXJlLXNwZWNpZmljLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIGV2ZW4gKnRlc3QqIHRoaXMgZWZmZWN0aXZlbHkgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlPyBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdGhhdCBzdGFuZGFyZCBRRU1VIGxpa2VseSAqZG9lc24mIzM5O3QqIGVtdWxhdGUgdGhpcyBEUEFBMiBmc2wtbWMgYnVzIGFyY2hpdGVjdHVyZSBlYXNpbHksIG9yIGF0IGFsbC4gSSBoYXZlbiYjMzk7dCBzZWVuIGdlbmVyaWMgZW11bGF0aW9uLiBJdCYjMzk7cyB0b28gbmljaGUuCgpUaGUgdGhvdWdodCB0aGVuIHNoaWZ0cyB0byBTeXprYWxsZXI7IGNhbiB0aGF0IGhlbHA/IFdhaXQsIGRvZXMgU3l6a2FsbGVyIGV2ZW4gaGF2ZSBhbnkgZnNsLW1jIGVtdWxhdGlvbj8gTGV0JiMzOTtzIGJlIHJlYWxpc3RpYywgcHJvYmFibHkgbm90LiBJJiMzOTtkIG5lZWQgdG8gbG9vaywgYnV0IEkmIzM5O20gZ3Vlc3NpbmcgU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgbmF0aXZlIHN1cHBvcnQgZm9yIGZ1enppbmcgZnNsLW1jIGRldmljZXMuIFRoaXMgaXNuJiMzOTt0IGFib3V0IGdlbmVyYWwgVkZJTyBmdXp6aW5nLCBpdCYjMzk7cyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gb2YgVkZJTyAqd2l0aCogYSB2ZXJ5IHBhcnRpY3VsYXIgYnVzIGRyaXZlciAoYGZzbC1tY2ApLiBWRklPICppdHNlbGYqIGlzIGZ1enplZCwgb2YgY291cnNlLCBidXQgZm9yIHNwZWNpZmljIGJ1cyBkcml2ZXJzIGxpa2UgdGhpcywgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRoZSBidXMgdG8gYmUgdGhlcmUsIGFuZCBkZXZpY2VzIHByb2JlZC4gVGhlIGhhcmR3YXJlICpuZWVkcyogdG8gYmUgcHJlc2VudC4KCk15IG5leHQgbGluZSBvZiB0aG91Z2h0IGlzIHRvIHNlZSBpZiBtYXliZSwganVzdCBtYXliZSwgSSBjYW4gY3JlYXRlIHRoaXMgYGZzbC1tY2AgYnVzIHZpcnR1YWxseS4gSXQmIzM5O3MgYSBsb25nIHNob3QsIGJ1dCBpZiB0aGVyZSYjMzk7cyBhIHdheSB0byBzeW50aGVzaXplIHRoZSBlbnZpcm9ubWVudCwgSSBtaWdodCBiZSBhYmxlIHRvIGdldCBzb21ld2hlcmUuIEJ1dCBJJiMzOTttIGdvaW5nIHRvIGJlIGhvbmVzdCwgSSYjMzk7bSBub3Qgb3B0aW1pc3RpYyBhYm91dCB0aGlzIGJlaW5nIGVhc2lseSBkb2FibGUgb3IgZWFzaWx5IGZ1enplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc2xfbWNfYnVzX3R5cGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0zMjQ9QVRUUklCVVRFX0dST1VQUyhmc2xfbWNfYnVzKTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzI1LVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzozMjY6Y29uc3Qgc3RydWN0IGJ1c190eXBlIGZzbF9tY19idXNfdHlwZSA9IHtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzI3LVx0Lm5hbWUgPSBcJiMzNDtmc2wtbWNcJiMzNDssXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0zMzgtfTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MzM5OkVYUE9SVF9TWU1CT0xfR1BMKGZzbF9tY19idXNfdHlwZSk7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTM0MC1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTQ2MT1pbnQgX19mc2xfbWNfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBmc2xfbWNfZHJpdmVyICptY19kcml2ZXIsXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy00NjYtXHRtY19kcml2ZXItXHUwMDNlZHJpdmVyLm93bmVyID0gb3duZXI7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjQ2NzpcdG1jX2RyaXZlci1cdTAwM2Vkcml2ZXIuYnVzID0gXHUwMDI2ZnNsX21jX2J1c190eXBlO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy00NjgtXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz03NTI9aW50IGZzbF9tY19kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2MgKm9ial9kZXNjLFxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNzg5LVx0bWNfZGV2LVx1MDAzZWRldi5wYXJlbnQgPSBwYXJlbnRfZGV2O1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo3OTA6XHRtY19kZXYtXHUwMDNlZGV2LmJ1cyA9IFx1MDAyNmZzbF9tY19idXNfdHlwZTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNzkxLVx0bWNfZGV2LVx1MDAzZWRldi5yZWxlYXNlID0gZnNsX21jX2RldmljZV9yZWxlYXNlO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTE3NT1zdGF0aWMgdm9pZCBmc2xfbWNfYnVzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTE4My1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTE4NDpcdGJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNmZzbF9tY19idXNfdHlwZSwgXHUwMDI2ZnNsX21jX25iKTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTE4NS1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTEyNjA9c3RhdGljIGludCBfX2luaXQgZnNsX21jX2J1c19kcml2ZXJfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI2My1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTI2NDpcdGVycm9yID0gYnVzX3JlZ2lzdGVyKFx1MDAyNmZzbF9tY19idXNfdHlwZSk7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyNjUtXHRpZiAoZXJyb3IgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyOTItZXJyb3JfY2xlYW51cF9idXM6XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyOTM6XHRidXNfdW5yZWdpc3RlcihcdTAwMjZmc2xfbWNfYnVzX3R5cGUpO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjk0LVxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXUuYz0xODY9c3RhdGljIGNvbnN0IHN0cnVjdCBidXNfdHlwZSAqIGNvbnN0IGlvbW11X2J1c2VzW10gPSB7XG4tLVxuZHJpdmVycy9pb21tdS9pb21tdS5jLTE5NC0jaWZkZWYgQ09ORklHX0ZTTF9NQ19CVVNcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYzoxOTU6XHRcdTAwMjZmc2xfbWNfYnVzX3R5cGUsXG5kcml2ZXJzL2lvbW11L2lvbW11LmMtMTk2LSNlbmRpZlxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz00NDk9c3RhdGljIGludCB2ZmlvX2ZzbF9tY19pbml0X2RldmljZShzdHJ1Y3QgdmZpb19mc2xfbWNfZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NjItXHR2ZGV2LVx1MDAzZW5iLm5vdGlmaWVyX2NhbGwgPSB2ZmlvX2ZzbF9tY19idXNfbm90aWZpZXI7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NDYzOlx0cmV0ID0gYnVzX3JlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNmZzbF9tY19idXNfdHlwZSwgXHUwMDI2dmRldi1cdTAwM2VuYik7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDY0LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDc1LW91dF9uY191bnJlZzpcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0NzY6XHRidXNfdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZmc2xfbWNfYnVzX3R5cGUsIFx1MDAyNnZkZXYtXHUwMDNlbmIpO1xuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQ3Ny1cdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTQ5Nz1zdGF0aWMgdm9pZCB2ZmlvX2ZzbF91bmluaXRfZGV2aWNlKHN0cnVjdCB2ZmlvX2ZzbF9tY19kZXZpY2UgKnZkZXYpXG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTUwNC1cdGRwcmNfY2xlYW51cChtY19kZXYpO1xuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjUwNTpcdGJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNmZzbF9tY19idXNfdHlwZSwgXHUwMDI2dmRldi1cdTAwM2VuYik7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNTA2LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oPTM1Nj1pbnQgbWNfc2VuZF9jb21tYW5kKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCBzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgKmNtZCk7XG4tLVxuaW5jbHVkZS9saW51eC9mc2wvbWMuaC0zNTgtI2lmZGVmIENPTkZJR19GU0xfTUNfQlVTXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oOjM1OTojZGVmaW5lIGRldl9pc19mc2xfbWMoX2RldikgKChfZGV2KS1cdTAwM2VidXMgPT0gXHUwMDI2ZnNsX21jX2J1c190eXBlKVxuaW5jbHVkZS9saW51eC9mc2wvbWMuaC0zNjAtdTMyIGZzbF9tY19nZXRfbXNpX2lkKHN0cnVjdCBkZXZpY2UgKmRldik7XG4tLVxuaW5jbHVkZS9saW51eC9mc2wvbWMuaD00Mjg9c3RydWN0IGZzbF9tY19kZXZpY2UgKmZzbF9tY19nZXRfZW5kcG9pbnQoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2Rldixcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oLTQzMC1cbmluY2x1ZGUvbGludXgvZnNsL21jLmg6NDMxOmV4dGVybiBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgZnNsX21jX2J1c190eXBlO1xuaW5jbHVkZS9saW51eC9mc2wvbWMuaC00MzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzNQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgVmlydHVhbCBGU0wtTUMgRGV2aWNlIFBvc3NpYmlsaXRpZXMqKgoKQWxyaWdodCwgc28gdGhlIEZTTC1NQyBidXMgaXMgaW5oZXJlbnRseSB0aWVkIHRvIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSDigJMgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gd2Ugc29tZWhvdyBhYnN0cmFjdCB0aGF0PyBJcyB0aGVyZSBhIG1lY2hhbmlzbSwgYSBjbGV2ZXIgaGFjaywgb3IgZXZlbiBhIG1vcmUgZnVuZGFtZW50YWwgYXBwcm9hY2gsIHRvIGNyZWF0ZSBhIHZpcnR1YWwgRlNMLU1DIGRldmljZT8gSSYjMzk7bSB0aGlua2luZywgcGVyaGFwcywgYSBkcml2ZXIgdGhhdCBlbXVsYXRlcyB0aGUgYmVoYXZpb3IsIG9yIG1heWJlIHNvbWV0aGluZyBsYXllcmVkIG9uIHRvcCBvZiBhIGRpZmZlcmVudCBoYXJkd2FyZSBhYnN0cmFjdGlvbi4gVGhlIGdvYWwgd291bGQgYmUgdG8gZ2FpbiB0aGUgYWR2YW50YWdlcyBvZiB0ZXN0aW5nIG9yIGRldmVsb3BtZW50IHdpdGhvdXQgZGlyZWN0IGhhcmR3YXJlIGFjY2Vzcy4gTXkgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMgd2l0aCBleHBsb3JpbmcgZXhpc3RpbmcgdmlydHVhbGl6YXRpb24gdGVjaG5pcXVlcyBhbmQgY2hlY2tpbmcgaWYgYW55IGV4aXN0aW5nIGZyYW1ld29ya3MgYXJlIGV4dGVuc2libGUgdG8gc2ltdWxhdGUgdGhpcyBidXMuIFRoZSBwb3RlbnRpYWwgaXMgdGhlcmUsIHRoZSBwYXRoIGlzbiYjMzk7dCB5ZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnNsX21jX2RldmljZV9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM9MTY5PXN0YXRpYyB2b2lkIGZzbF9tY19vYmpfZGV2aWNlX2FkZChzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfYnVzX2Rldixcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYy0xODItXHR9IGVsc2Uge1xuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6MTgzOlx0XHRlcnJvciA9IGZzbF9tY19kZXZpY2VfYWRkKG9ial9kZXNjLCBOVUxMLCBcdTAwMjZtY19idXNfZGV2LVx1MDAzZWRldixcbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTE4NC1cdFx0XHRcdFx0ICBcdTAwMjZjaGlsZF9kZXYpO1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9NzM3PXN0YXRpYyB2b2lkIGZzbF9tY19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03NTEtICovXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjc1MjppbnQgZnNsX21jX2RldmljZV9hZGQoc3RydWN0IGZzbF9tY19vYmpfZGVzYyAqb2JqX2Rlc2MsXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTc1My1cdFx0ICAgICAgc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy04NzktfVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo4ODA6RVhQT1JUX1NZTUJPTF9HUEwoZnNsX21jX2RldmljZV9hZGQpO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy04ODEtXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMDM5PXN0YXRpYyBpbnQgZnNsX21jX2J1c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTE1Ny1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTE1ODpcdGVycm9yID0gZnNsX21jX2RldmljZV9hZGQoXHUwMDI2b2JqX2Rlc2MsIG1jX2lvLCBcdTAwMjZwZGV2LVx1MDAzZWRldiwgXHUwMDI2bWNfYnVzX2Rldik7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTExNTktXHRpZiAoZXJyb3IgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1wcml2YXRlLmg9NjAxPXN0cnVjdCBmc2xfbWNfYnVzIHtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaC02MTMtXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaDo2MTQ6aW50IF9fbXVzdF9jaGVjayBmc2xfbWNfZGV2aWNlX2FkZChzdHJ1Y3QgZnNsX21jX29ial9kZXNjICpvYmpfZGVzYyxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oLTYxNS1cdFx0XHRcdCAgIHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGVtYmVkZGVkIHN5c3RlbXMgZXhwZXJ0OgoKKipVbmRlcnN0YW5kaW5nIHRoZSBEZXZpY2UgQWRkaXRpb24gU2VxdWVuY2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpbW1lZGlhdGVseSBmbGFncyBgZnNsX21jX2RldmljZV9hZGRgLiBUaGF0IGZ1bmN0aW9uIGNhbGwsIHdoaWNoIEkga25vdyBpcyBwcmV0dHkgZnVuZGFtZW50YWwgZm9yIGFkZGluZyBhIGRldmljZSB0byB0aGUgc3lzdGVtLCBpcyB0cmlnZ2VyZWQgZnJvbSB3aXRoaW4gYGZzbF9tY19idXNfcHJvYmVgLiBBbmQgYGZzbF9tY19idXNfcHJvYmVgPyBBaCwgcmlnaHQsIHRoYXQmIzM5O3MgcGFydCBvZiB0aGUgc3RhbmRhcmQgcGxhdGZvcm0gZHJpdmVyIGxpZmVjeWNsZS4gU28sIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBgZnNsX21jX2J1c19kcml2ZXJgLiBUaGlzIG1lYW5zIHRoZSBwcm9jZXNzIG9mIGRldGVjdGluZyBhbmQgaW50ZWdyYXRpbmcgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSB3aXRoIHRoZSBNb3Rpb24gQ29udHJvbCBmcmFtZXdvcmsgaXMgaW5pdGlhdGVkIGJ5IHRoZSBwbGF0Zm9ybSBkcml2ZXIsIGBmc2xfbWNfYnVzX2RyaXZlcmAsIGFuZCB0aGUgYWN0dWFsIGRldmljZSBhZGRpdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiBpdCYjMzk7cyBgcHJvYmVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCB0aGUgY2FsbCB0byBgZnNsX21jX2RldmljZV9hZGRgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIGZsb3c6IHBsYXRmb3JtIGRyaXZlciBwcm9iaW5nLCBmb2xsb3dlZCBieSB0aGUgZGV2aWNlIGFkZGl0aW9uIGZ1bmN0aW9uLiBHb3QgaXQuIFRoaXMgaXMgdGhlIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgcmVnaXN0ZXJpbmcgYSBuZXcgZGV2aWNlIGNvbnRyb2xsZWQgdmlhIHRoZSBNb3Rpb24gQ29udHJvbCBBUEkgdG8gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnNsX21jX2J1c19kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjA4PU1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgZnNsX21jX2J1c19hY3BpX21hdGNoX3RhYmxlKTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTIwOS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTIxMDpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmc2xfbWNfYnVzX2RyaXZlciA9IHtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTIxMS1cdC5kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjU2PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZnNsX21jX25iID0ge1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI1OS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTI2MDpzdGF0aWMgaW50IF9faW5pdCBmc2xfbWNfYnVzX2RyaXZlcl9pbml0KHZvaWQpXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyNjEte1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI2OS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTI3MDpcdGVycm9yID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmZzbF9tY19idXNfZHJpdmVyKTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI3MS1cdGlmIChlcnJvciBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI4OS1lcnJvcl9jbGVhbnVwX2RyaXZlcjpcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTI5MDpcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmZzbF9tY19idXNfZHJpdmVyKTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI5MS1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyOTctfVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMjk4OnBvc3Rjb3JlX2luaXRjYWxsKGZzbF9tY19idXNfZHJpdmVyX2luaXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTM0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUGxhdGZvcm0gRHJpdmVyIE1hdGNoaW5nOiBBQ1BJIG9yIE9GIOKAkyBUaGF0JiMzOTtzIHRoZSBRdWVzdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGxhdGZvcm0gZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byBpZGVudGlmeSB0aGlzIGhhcmR3YXJlPyYjMzQ7IEl0JiMzOTtzIGEgcXVpY2sgbWVudGFsIGNoZWNrbGlzdDogRG9lcyBpdCB1c2UgQUNQSSB0YWJsZXM/IE9yIGlzIGl0IGFuIE9wZW4gRmlybXdhcmUgKE9GKSBkZXZpY2U/IFRob3NlIGFyZSB0aGUgdHdvIHByaW1hcnkgbWV0aG9kcyBJJiMzOTttIGdvaW5nIHRvIGNvbnNpZGVyIGZvciBtYXRjaGluZyB0aGlzIGRyaXZlciB0byB0aGUgaGFyZHdhcmUgaXQmIzM5O3MgbWVhbnQgdG8gY29udHJvbC4gTXkgZHJpdmVyIG5lZWRzIHRvIGJlIGFibGUgdG8gaWRlbnRpZnkgaXRzIHRhcmdldCBlZmZlY3RpdmVseTsgaXQmIzM5O3MgZ290IHRvIGNsYWltIG93bmVyc2hpcCBvZiBpdHMgcGxhdGZvcm0gZGV2aWNlIHRocm91Z2ggdGhlc2Ugd2VsbC1kZWZpbmVkIHByb3RvY29scy4gQW5kIGJhc2VkIG9uIHdoYXQgSSBzZWUsIGl0IHNlZW1zIHRoYXQgdGhlIHBsYXRmb3JtIGRyaXZlciBpcyBleHBlY3RpbmcgQUNQSSBvciBPRiBpbmZvcm1hdGlvbiwgb3IgZWxzZSBpdCBpcyBleHBlY3RpbmcgdG8gbWF0Y2ggb25lLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgaG93IHRvIHN1cHBvcnQgdGhlIHBhcnRpY3VsYXIgYnVzIHR5cGUgKEFDUEkgb3IgT0YpLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc2xfbWNfYnVzX21hdGNoX3RhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTE3NT1zdGF0aWMgdm9pZCBmc2xfbWNfYnVzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTE5Ni1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTE5NzpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBmc2xfbWNfYnVzX21hdGNoX3RhYmxlW10gPSB7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTExOTgtXHR7LmNvbXBhdGlibGUgPSBcJiMzNDtmc2wscW9yaXEtbWNcJiMzNDssfSxcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMDEtXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyMDI6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZnNsX21jX2J1c19tYXRjaF90YWJsZSk7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMDMtXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjEwPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9tY19idXNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTIxMy1cdFx0ICAgLnBtID0gTlVMTCxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTIxNDpcdFx0ICAgLm9mX21hdGNoX3RhYmxlID0gZnNsX21jX2J1c19tYXRjaF90YWJsZSxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTIxNS1cdFx0ICAgLmFjcGlfbWF0Y2hfdGFibGUgPSBmc2xfbWNfYnVzX2FjcGlfbWF0Y2hfdGFibGUsXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjIyPXN0YXRpYyBpbnQgZnNsX21jX2J1c19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTIzMS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTIzMjpcdGlmICghb2ZfbWF0Y2hfZGV2aWNlKGZzbF9tY19idXNfbWF0Y2hfdGFibGUsIGRldikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMzMtXHQgICAgIWFjcGlfbWF0Y2hfZGV2aWNlKGZzbF9tY19idXNfYWNwaV9tYXRjaF90YWJsZSwgZGV2KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk2NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSAmIzM0O2ZzbCxxb3JpcS1tYyYjMzQ7IENvbXBhdGlibGUgU3RyaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyAmIzM0O2ZzbCxxb3JpcS1tYyYjMzQ7IGNvbXBhdGlibGUgc3RyaW5nIGFuZCB3aGV0aGVyIGl0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIENhbiBJIGdldCBhd2F5IHdpdGggdGhyb3dpbmcgcmFuZG9tIGRhdGEgYXQgaXQgYW5kIHNlZWluZyB3aGF0IHN0aWNrcz8gVGhlIGltbWVkaWF0ZSBodXJkbGUgaXMgcmVtZW1iZXJpbmcgaG93IFN5emthbGxlciBoYW5kbGVzIHBsYXRmb3JtIGRldmljZXMuIERvZXMgaXQgbmF0aXZlbHkgaW5qZWN0IHRoZW0gd2l0aCBzcGVjaWZpYyBjb21wYXRpYmxlcyAqdW5sZXNzKiBpdCYjMzk7cyBwYXJ0IG9mIGEgdmVyeSBwYXJ0aWN1bGFyLCBjb250cm9sbGVkIHNldHVwPyBUaGF0JiMzOTtzIHR5cGljYWxseSB0aGUgaXNzdWUuIEkgcmVjYWxsIGl0IGRvZXNuJiMzOTt0IGp1c3QgbGV0IHlvdSBpbmplY3QgYW55dGhpbmcgdmlhIHN5c2ZzLCBzbyB0aGF0JiMzOTtzIGEgZGVhZCBlbmQuCgpUaGVuIHRoZXJlJiMzOTtzIHRoZSBgZnNsLW1jYCBidXMgaXRzZWxmLiBJdCYjMzk7cyBub3QgYSBzaW1wbGUgY2FzZSBvZiBqdXN0IGZpbmRpbmcgdGhlIHJpZ2h0IGRyaXZlci4gVGhpcyBidXMgcmVxdWlyZXMgYWN0dWFsbHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFyZHdhcmUgdGhyb3VnaCBNQyBjb21tYW5kcyB0byBlbnVtZXJhdGUgdGhlIGRldmljZXMuIEp1c3QgdGhyb3dpbmcgYXJiaXRyYXJ5IHN0cmluZ3MgbWlnaHQgbm90IGV2ZW4gdHJpZ2dlciBtZWFuaW5nZnVsIGJlaGF2aW9yLCBvciBtb3JlIGxpa2VseSB3aWxsIGxlYWQgdG8gYSBjcmFzaC4KCkFscmlnaHQsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYGZzbF9tY19idXNfcHJvYmVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnVtZXJhdGlvbiBwcm9jZXNzIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGVudHJ5IHBvaW50cyBvciB2dWxuZXJhYmlsaXRpZXMgdGhhdCBJIGNhbiBleHBsb2l0LiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdG8gZnV6eiB0aGlzIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnNsX21jX2J1c19wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTEwMDU9c3RhdGljIGludCBmc2xfbWNfZmlybXdhcmVfY2hlY2soc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMzUtLypcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAzNjogKiBmc2xfbWNfYnVzX3Byb2JlIC0gY2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSByb290IE1DIGJ1cyBpcyBiZWluZ1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDM3LSAqIGFkZGVkXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMzgtICovXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEwMzk6c3RhdGljIGludCBmc2xfbWNfYnVzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwNDAte1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTIxMD1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmc2xfbWNfYnVzX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMTYtXHRcdCAgIH0sXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyMTc6XHQucHJvYmUgPSBmc2xfbWNfYnVzX3Byb2JlLFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjE4LVx0LnJlbW92ZSA9IGZzbF9tY19idXNfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzQ5CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgYGZzbF9tY19idXNfcHJvYmVgOgoKKipBbmFseXppbmcgYGZzbF9tY19idXNfcHJvYmVgKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bnBhY2sgd2hhdCBgZnNsX21jX2J1c19wcm9iZWAgaXMgYWxsIGFib3V0LiBCYXNlZCBvbiB0aGUgbmFtZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgZnVuY3Rpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHByb2JpbmcgYSBGcmVlc2NhbGUgKGxpa2VseSBOWFApIE11bHRpLUNvcmUgQnVzIChNQyBCdXMpLiBUaGUgJiMzNDtwcm9iZSYjMzQ7IHBhcnQgdGVsbHMgbWUgaXQmIzM5O3MgcHJvYmFibHkgY29uY2VybmVkIHdpdGggZGV2aWNlIGRpc2NvdmVyeSBvciBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhhdCBidXMgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgaGFyZHdhcmUgdGhpcyBpcyBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aCwgd2hldGhlciBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBQb3dlciBBcmNoaXRlY3R1cmUsIG9yIG1heWJlIEFSTS1iYXNlZCBTb0NzIGZyb20gTlhQLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYXJjaGl0ZWN0dXJhbCBjb250ZXh0IHRvIHJlYWxseSBncmFzcCB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZS4gSSYjMzk7bSBhc3N1bWluZyBpdCBpbnRlcmFjdHMgd2l0aCBzb21lIHNvcnQgb2YgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMgdG8gYWNoaWV2ZSB0aGlzIHByb2JpbmcgYW5kIGxpa2VseSBoYW5kbGVzIGluaXRpYWxpemF0aW9uIHRhc2tzIGJhc2VkIG9uIHRoZSBkZXZpY2VzIGZvdW5kIG9uIHRoZSBidXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMzk6XHRzdGF0aWMgaW50IGZzbF9tY19idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbjEwNDA6XHR7XG4xMDQxOlx0XHRzdHJ1Y3QgZnNsX21jX29ial9kZXNjIG9ial9kZXNjO1xuMTA0MjpcdFx0aW50IGVycm9yO1xuMTA0MzpcdFx0c3RydWN0IGZzbF9tYyAqbWM7XG4xMDQ0Olx0XHRzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfYnVzX2RldiA9IE5VTEw7XG4xMDQ1Olx0XHRzdHJ1Y3QgZnNsX21jX2lvICptY19pbyA9IE5VTEw7XG4xMDQ2Olx0XHRpbnQgY29udGFpbmVyX2lkO1xuMTA0NzpcdFx0cGh5c19hZGRyX3QgbWNfcG9ydGFsX3BoeXNfYWRkcjtcbjEwNDg6XHRcdHUzMiBtY19wb3J0YWxfc2l6ZSwgbWNfc3RyZWFtX2lkO1xuMTA0OTpcdFx0c3RydWN0IHJlc291cmNlICpwbGF0X3JlcztcbjEwNTA6XHRcbjEwNTE6XHRcdG1jID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKm1jKSwgR0ZQX0tFUk5FTCk7XG4xMDUyOlx0XHRpZiAoIW1jKVxuMTA1MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEwNTQ6XHRcbjEwNTU6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jKTtcbjEwNTY6XHRcbjEwNTc6XHRcdHBsYXRfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTtcbjEwNTg6XHRcdGlmIChwbGF0X3Jlcykge1xuMTA1OTpcdFx0XHRtYy1cdTAwM2Vmc2xfbWNfcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9yZXMpO1xuMTA2MDpcdFx0XHRpZiAoSVNfRVJSKG1jLVx1MDAzZWZzbF9tY19yZWdzKSlcbjEwNjE6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihtYy1cdTAwM2Vmc2xfbWNfcmVncyk7XG4xMDYyOlx0XHR9XG4xMDYzOlx0XG4xMDY0Olx0XHRpZiAobWMtXHUwMDNlZnNsX21jX3JlZ3MpIHtcbjEwNjU6XHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FDUEkpIFx1MDAyNlx1MDAyNiAhZGV2X29mX25vZGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpKSB7XG4xMDY2Olx0XHRcdFx0bWNfc3RyZWFtX2lkID0gcmVhZGwobWMtXHUwMDNlZnNsX21jX3JlZ3MgJiM0MzsgRlNMX01DX0ZBUFIpO1xuMTA2NzpcdFx0XHRcdC8qXG4xMDY4Olx0XHRcdFx0ICogSFcgT1JzIHRoZSBQTCBhbmQgQk1UIGJpdCwgcGxhY2VzIHRoZSByZXN1bHQgaW4gYml0XG4xMDY5Olx0XHRcdFx0ICogMTQgb2YgdGhlIFN0cmVhbUlEIGFuZCBPUnMgaW4gdGhlIElDSUQuIENhbGN1bGF0ZSBpdFxuMTA3MDpcdFx0XHRcdCAqIGFjY29yZGluZ2x5LlxuMTA3MTpcdFx0XHRcdCAqL1xuMTA3MjpcdFx0XHRcdG1jX3N0cmVhbV9pZCA9IChtY19zdHJlYW1faWQgXHUwMDI2IDB4ZmZmZikgfFxuMTA3MzpcdFx0XHRcdFx0KChtY19zdHJlYW1faWQgXHUwMDI2IChNQ19GQVBSX1BMIHwgTUNfRkFQUl9CTVQpKSA/XG4xMDc0Olx0XHRcdFx0XHRcdEJJVCgxNCkgOiAwKTtcbjEwNzU6XHRcdFx0XHRlcnJvciA9IGFjcGlfZG1hX2NvbmZpZ3VyZV9pZChcdTAwMjZwZGV2LVx1MDAzZWRldixcbjEwNzY6XHRcdFx0XHRcdFx0XHQgICAgICBERVZfRE1BX0NPSEVSRU5ULFxuMTA3NzpcdFx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNm1jX3N0cmVhbV9pZCk7XG4xMDc4Olx0XHRcdFx0aWYgKGVycm9yID09IC1FUFJPQkVfREVGRVIpXG4xMDc5Olx0XHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4xMDgwOlx0XHRcdFx0aWYgKGVycm9yKVxuMTA4MTpcdFx0XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4xMDgyOlx0XHRcdFx0XHRcdCBcJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIGRtYTogJWQuXFxuXCYjMzQ7LFxuMTA4MzpcdFx0XHRcdFx0XHQgZXJyb3IpO1xuMTA4NDpcdFx0XHR9XG4xMDg1Olx0XG4xMDg2Olx0XHRcdC8qXG4xMDg3Olx0XHRcdCAqIFNvbWUgYm9vdGxvYWRlcnMgcGF1c2UgdGhlIE1DIGZpcm13YXJlIGJlZm9yZSBib290aW5nIHRoZVxuMTA4ODpcdFx0XHQgKiBrZXJuZWwgc28gdGhhdCBNQyB3aWxsIG5vdCBjYXVzZSBmYXVsdHMgYXMgc29vbiBhcyB0aGVcbjEwODk6XHRcdFx0ICogU01NVSBwcm9iZXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhlcmUmIzM5O3Mgbm8gY29uZmlndXJhdGlvblxuMTA5MDpcdFx0XHQgKiBpbiBwbGFjZSBmb3IgTUMuXG4xMDkxOlx0XHRcdCAqIEF0IHRoaXMgcG9pbnQgTUMgc2hvdWxkIGhhdmUgYWxsIGl0cyBTTU1VIHNldHVwIGRvbmUgc28gbWFrZVxuMTA5MjpcdFx0XHQgKiBzdXJlIGl0IGlzIHJlc3VtZWQuXG4xMDkzOlx0XHRcdCAqL1xuMTA5NDpcdFx0XHR3cml0ZWwocmVhZGwobWMtXHUwMDNlZnNsX21jX3JlZ3MgJiM0MzsgRlNMX01DX0dDUjEpIFx1MDAyNlxuMTA5NTpcdFx0XHRcdCAgICAgKH4oR0NSMV9QMV9TVE9QIHwgR0NSMV9QMl9TVE9QKSksXG4xMDk2Olx0XHRcdCAgICAgICBtYy1cdTAwM2Vmc2xfbWNfcmVncyAmIzQzOyBGU0xfTUNfR0NSMSk7XG4xMDk3Olx0XHR9XG4xMDk4Olx0XG4xMDk5Olx0XHRlcnJvciA9IGZzbF9tY19maXJtd2FyZV9jaGVjayhwZGV2KTtcbjExMDA6XHRcdGlmIChlcnJvcilcbjExMDE6XHRcdFx0cmV0dXJuIGVycm9yO1xuMTEwMjpcdFxuMTEwMzpcdFx0LypcbjExMDQ6XHRcdCAqIEdldCBwaHlzaWNhbCBhZGRyZXNzIG9mIE1DIHBvcnRhbCBmb3IgdGhlIHJvb3QgRFBSQzpcbjExMDU6XHRcdCAqL1xuMTEwNjpcdFx0cGxhdF9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApO1xuMTEwNzpcdFx0aWYgKCFwbGF0X3JlcylcbjExMDg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTA5Olx0XG4xMTEwOlx0XHRtY19wb3J0YWxfcGh5c19hZGRyID0gcGxhdF9yZXMtXHUwMDNlc3RhcnQ7XG4xMTExOlx0XHRtY19wb3J0YWxfc2l6ZSA9IHJlc291cmNlX3NpemUocGxhdF9yZXMpO1xuMTExMjpcdFx0bWNfcG9ydGFsX2Jhc2VfcGh5c19hZGRyID0gbWNfcG9ydGFsX3BoeXNfYWRkciBcdTAwMjYgfjB4M2ZmZmZmZjtcbjExMTM6XHRcbjExMTQ6XHRcdGVycm9yID0gZnNsX2NyZWF0ZV9tY19pbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgbWNfcG9ydGFsX3BoeXNfYWRkcixcbjExMTU6XHRcdFx0XHRcdCBtY19wb3J0YWxfc2l6ZSwgTlVMTCxcbjExMTY6XHRcdFx0XHRcdCBGU0xfTUNfSU9fQVRPTUlDX0NPTlRFWFRfUE9SVEFMLCBcdTAwMjZtY19pbyk7XG4xMTE3Olx0XHRpZiAoZXJyb3IgXHUwMDNjIDApXG4xMTE4Olx0XHRcdHJldHVybiBlcnJvcjtcbjExMTk6XHRcbjExMjA6XHRcdGVycm9yID0gbWNfZ2V0X3ZlcnNpb24obWNfaW8sIDAsIFx1MDAyNm1jX3ZlcnNpb24pO1xuMTEyMTpcdFx0aWYgKGVycm9yICE9IDApIHtcbjExMjI6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldixcbjExMjM6XHRcdFx0XHRcJiMzNDttY19nZXRfdmVyc2lvbigpIGZhaWxlZCB3aXRoIGVycm9yICVkXFxuXCYjMzQ7LCBlcnJvcik7XG4xMTI0Olx0XHRcdGdvdG8gZXJyb3JfY2xlYW51cF9tY19pbztcbjExMjU6XHRcdH1cbjExMjY6XHRcbjExMjc6XHRcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtNQyBmaXJtd2FyZSB2ZXJzaW9uOiAldS4ldS4ldVxcblwmIzM0OyxcbjExMjg6XHRcdFx0IG1jX3ZlcnNpb24ubWFqb3IsIG1jX3ZlcnNpb24ubWlub3IsIG1jX3ZlcnNpb24ucmV2aXNpb24pO1xuMTEyOTpcdFxuMTEzMDpcdFx0aWYgKGRldl9vZl9ub2RlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KSkge1xuMTEzMTpcdFx0XHRlcnJvciA9IGdldF9tY19hZGRyX3RyYW5zbGF0aW9uX3JhbmdlcyhcdTAwMjZwZGV2LVx1MDAzZWRldixcbjExMzI6XHRcdFx0XHRcdFx0XHRcdTAwMjZtYy1cdTAwM2V0cmFuc2xhdGlvbl9yYW5nZXMsXG4xMTMzOlx0XHRcdFx0XHRcdFx0XHUwMDI2bWMtXHUwMDNlbnVtX3RyYW5zbGF0aW9uX3Jhbmdlcyk7XG4xMTM0Olx0XHRcdGlmIChlcnJvciBcdTAwM2MgMClcbjExMzU6XHRcdFx0XHRnb3RvIGVycm9yX2NsZWFudXBfbWNfaW87XG4xMTM2Olx0XHR9XG4xMTM3Olx0XG4xMTM4Olx0XHRlcnJvciA9IGRwcmNfZ2V0X2NvbnRhaW5lcl9pZChtY19pbywgMCwgXHUwMDI2Y29udGFpbmVyX2lkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MTUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHZmaW9fZnNsX21jYCBEcml2ZXImIzM5O3MgVGVzdGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgZGVwZW5kZW5jeSBvbiB0aGUgYG1jLSZndDtmc2xfbWNfcmVncyAmIzQzOyBGU0xfTUNfRkFQUmAgcmVnaXN0ZXIgYWNjZXNzIGFuZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZmlybXdhcmUgdGhyb3VnaCBgbWNfZ2V0X3ZlcnNpb25gIGFuZCBgZHByY19nZXRfY29udGFpbmVyX2lkYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgc2NyZWFtcyBoYXJkd2FyZSBkZXBlbmRlbmN5LCBvciBhdCBsZWFzdCBhIHZlcnkgc3BlY2lmaWMgUUVNVSBlbXVsYXRpb24uIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBRRU1VIGV2ZW4gKmVtdWxhdGUqIHRoZSBgZnNsLHFvcmlxLW1jYCBkZXZpY2U/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleHBsb3JlIG1vY2tpbmcgdGhpcyBzb21laG93LiBJJiMzOTtsbCBjaGVjayBpZiBzeXprYWxsZXIgaGFzIGFueSBwcm92aXNpb25zIGZvciBtb2NraW5nIHRoZXNlIGludGVyYWN0aW9ucywgYnV0IEkgZG9uJiMzOTt0IHJlY2FsbCBzZWVpbmcgYW55dGhpbmcgbGlrZSB0aGF0LiBUaGUgZmFjdCB0aGF0IHRoZSBwYXRjaCByZXNpZGVzIGluIGBkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNgIGlzIGFsc28gYSBjbHVlOyBpdCBtZWFucyB0aGlzIGlzIFZGSU8gc3BlY2lmaWMuCgpUaGlzIGNvZGUgcGF0aCBzcGVjaWZpY2FsbHkgdXNlcyBgVkZJT19GU0xfTUNgLCB3aGljaCBpbiB0dXJuIHJlbGllcyBvbiBgRlNMX01DX0JVU2AuIE5vdywgYEZTTF9NQ19CVVNgIGlzIGZ1bmRhbWVudGFsbHkgdGllZCB0byBOWFAgaGFyZHdhcmUgYW5kIHRoZSBgZnNsLW1jYCBidXMuIFNvLCBJIG5lZWQgdG8gYXNrIG15c2VsZiwgaXMgdGhlcmUgYW55IHdheSB0byB0ZXN0IGBWRklPX0ZTTF9NQ2AgcmVsaWFibHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8KCkJhc2VkIG9uIHRoZSBjb2RlJiMzOTtzIGRlcGVuZGVuY2Ugb24gdGhlIGBmc2wtbWNgIGJ1cyBiZWluZyBwb3B1bGF0ZWQgd2l0aCBkZXZpY2VzIOKAkyBtZWFuaW5nIGBmc2xfbWNfYnVzX3Byb2JlYCBoYXMgdG8gc3VjY2VlZCwgd2hpY2ggaW4gdHVybiBuZWNlc3NpdGF0ZXMgdGhlIE1DIGZpcm13YXJlIHJlc3BvbmRpbmcg4oCTIGl0IGxvb2tzIGluY3JlZGlibHkgdW5saWtlbHkuIEl0IHNlZW1zIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aCBpcyBmdW5kYW1lbnRhbGx5IGluYWNjZXNzaWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgZXZlbiBhIGdlbmVyaWMgUUVNVSBzZXR1cC4gSXQgcmVhbGx5IGZlZWxzIGxpa2UgdGhpcyBpcyBvbmx5IHRlc3RhYmxlIGluIGEgcGh5c2ljYWwgTlhQLWJhc2VkIHN5c3RlbSB3aXRoIHRoZSBjb3JyZWN0IGZpcm13YXJlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBkb3VibGUtY2hlY2sgaWYgdGhlcmUmIzM5O3MgKmFueSogc29mdHdhcmUgZW11bGF0aW9uIGZvciBgZnNsLW1jYCB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYuIEkgY2FuJiMzOTt0IHRoaW5rIG9mIGFueSBvZmZoYW5kLCBidXQgaXQmIzM5O3Mgd29ydGggYSBxdWljayBsb29rIHRvIGVsaW1pbmF0ZSBhbnkgbGluZ2VyaW5nIGRvdWJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc2xfbWNfYnVzX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTAwNT1zdGF0aWMgaW50IGZzbF9tY19maXJtd2FyZV9jaGVjayhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTAzNS0vKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMDM2OiAqIGZzbF9tY19idXNfcHJvYmUgLSBjYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIHJvb3QgTUMgYnVzIGlzIGJlaW5nXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMzctICogYWRkZWRcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTAzOC0gKi9cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAzOTpzdGF0aWMgaW50IGZzbF9tY19idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTA0MC17XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjEwPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9tY19idXNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTIxNi1cdFx0ICAgfSxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTIxNzpcdC5wcm9iZSA9IGZzbF9tY19idXNfcHJvYmUsXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMTgtXHQucmVtb3ZlID0gZnNsX21jX2J1c19yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODY4CgkJCQkJCQlvdXRwdXQ6IDExNAoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBXb3J0aEZ1enppbmcgPSBGYWxzZSoqCgpPa2F5LCBzbyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gaXMgaW52b2x2ZWQgaGVyZSwgd2hpY2ggaXMgdGhlIGZpcnN0IHRoaW5nIEkgY2hlY2suIFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYHZmaW9fZnNsX21jX21tYXBgLiBUaGUga2V5IHBvaW50IGlzIHRoYXQgYGZzbC1tY2AgZGV2aWNlcywgYmVpbmcgdGllZCB0byB0aGUgRnJlZXNjYWxlL05YUCBNYW5hZ2VtZW50IENvbXBsZXgsIGFyZSAqbm90KiBzb21ldGhpbmcgdGhhdCBjYW4gYmUgY3JlYXRlZCB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC4gQmVjYXVzZSBvZiB0aGlzIGFyY2hpdGVjdHVyYWwgY29uc3RyYWludCwgYHZmaW9fZnNsX21jX21tYXBgICpjYW5ub3QqIGJlIHJlYWNoZWQgaW4gdGhlc2UgdmlydHVhbGl6ZWQgc2V0dGluZ3MuCgpMZXQgbWUgcmVmcmVzaCB0aGUgZ3VpZGVsaW5lcyBmb3IgdGhlc2Ugc2NlbmFyaW9zLiBJIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBmYWxscyBpbnRvIGVpdGhlciBvZiB0aGVzZSB0d28gY2FzZXM6IGNvZGUgcGF0aHMgdGhhdCBhcmUgaW5oZXJlbnRseSBpbmFjY2Vzc2libGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiBpbmNsdWRpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIFRoZSBzZWNvbmQgY29uZGl0aW9uIGlzIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgcmVxdWlyaW5nIGFjdHVhbCBQQ0llIGNhcmRzLCBsaWtlIFNtYXJ0TklDcywgR1BVcyBhbmQgc28gb24sIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgoKVGhpcyBwYXRjaCwgZGVhbGluZyB3aXRoIHRoZSBgZnNsLW1jYCBidXMsIHBlcmZlY3RseSBhbGlnbnMgd2l0aCBib3RoIG9mIHRoZXNlIGV4Y2x1c2lvbiBjcml0ZXJpYS4gYGZzbC1tY2AgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgYnVzIHRoYXQgbWFuZGF0ZXMgcGh5c2ljYWwgaGFyZHdhcmUsIHdoaWNoIGlzIHNpbXBseSBub3QgYWNjZXNzaWJsZSB3aXRoaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyIGFuZCBkZWZpbml0aXZlOiBJJiMzOTtsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZGSU8gZHJpdmVyIGZvciB0aGUgRnJlZXNjYWxlL05YUCBNYW5hZ2VtZW50IENvbXBsZXggKGZzbC1tYykgYnVzLiBUaGlzIGJ1cyBhbmQgaXRzIGRldmljZXMgYXJlIHNwZWNpZmljIHRvIHBoeXNpY2FsIE5YUCBRb3JJUSBEUEFBMiBoYXJkd2FyZSBhbmQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aCBpbiBgdmZpb19mc2xfbWNfbW1hcGAgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBkcml2ZXIgZm9yIHRoZSBGcmVlc2NhbGUvTlhQIE1hbmFnZW1lbnQgQ29tcGxleCAoZnNsLW1jKSBidXMuIFRoaXMgYnVzIGFuZCBpdHMgZGV2aWNlcyBhcmUgc3BlY2lmaWMgdG8gcGh5c2ljYWwgTlhQIFFvcklRIERQQUEyIGhhcmR3YXJlIGFuZCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRoIGluIGB2ZmlvX2ZzbF9tY19tbWFwYCBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwODo1OTo1Ny4yMTc3NzQwMzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA1NzgxODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIGRyaXZlciBmb3IgdGhlIEZyZWVzY2FsZS9OWFAgTWFuYWdlbWVudCBDb21wbGV4IChmc2wtbWMpIGJ1cy4gVGhpcyBidXMgYW5kIGl0cyBkZXZpY2VzIGFyZSBzcGVjaWZpYyB0byBwaHlzaWNhbCBOWFAgUW9ySVEgRFBBQTIgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGggaW4gYHZmaW9fZnNsX21jX21tYXBgIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NTk6NTcuMjE3NzgxNDk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTYyOTExOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyMTYzYTZmNmYwY2E4MDI2NjZiOGUyOWQyYzQ2MmI3ZTVjNWJiYzBiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDE5IDA4OjU5OjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYyBiL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY1xcbmluZGV4IGI0YzM5NTgyMDFiMjUuLjg1ZjQ3OWRiOTM2YzYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXFxuKysrIGIvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXFxuQEAgLTQwNyw2ICs0MDcsMTAgQEAgc3RhdGljIGludCB2ZmlvX2ZzbF9tY19tbWFwKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LFxcbiBcXHRcXHRcXHRcXHUwMDI2XFx1MDAyNiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1dSSVRFKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHQvKiBQcmV2ZW50IHJlYWQtb25seSByZWdpb24gbWFwcGluZ3MgZnJvbSBiZWluZyB1cGdyYWRlZCB3aXRoIG1wcm90ZWN0KCkgKi9cXG4rXFx0aWYgKCEodmRldi1cXHUwMDNlcmVnaW9uc1tpbmRleF0uZmxhZ3MgXFx1MDAyNiBWRklPX1JFR0lPTl9JTkZPX0ZMQUdfV1JJVEUpKVxcbitcXHRcXHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX01BWVdSSVRFKTtcXG4rXFxuIFxcdHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbWNfZGV2O1xcbiBcXG4gXFx0cmV0dXJuIHZmaW9fZnNsX21jX21tYXBfbW1pbyh2ZGV2LVxcdTAwM2VyZWdpb25zW2luZGV4XSwgdm1hKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NTk6NTcuNzc0NzEzMjU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTc1MDA4NjU5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIGRyaXZlciBmb3IgdGhlIEZyZWVzY2FsZS9OWFAgTWFuYWdlbWVudCBDb21wbGV4IChmc2wtbWMpIGJ1cy4gVGhpcyBidXMgYW5kIGl0cyBkZXZpY2VzIGFyZSBzcGVjaWZpYyB0byBwaHlzaWNhbCBOWFAgUW9ySVEgRFBBQTIgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGggaW4gYHZmaW9fZnNsX21jX21tYXBgIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjE2M2E2ZjZmMGNhODAyNjY2YjhlMjlkMmM0NjJiN2U1YzViYmMwYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA4OjU5OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jIGIvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXG5pbmRleCBiNGMzOTU4MjAxYjI1Li44NWY0NzlkYjkzNmM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXG4rKysgYi9kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNcbkBAIC00MDcsNiArNDA3LDEwIEBAIHN0YXRpYyBpbnQgdmZpb19mc2xfbWNfbW1hcChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldixcbiBcdFx0XHRcdTAwMjZcdTAwMjYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV1JJVEUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdC8qIFByZXZlbnQgcmVhZC1vbmx5IHJlZ2lvbiBtYXBwaW5ncyBmcm9tIGJlaW5nIHVwZ3JhZGVkIHdpdGggbXByb3RlY3QoKSAqL1xuK1x0aWYgKCEodmRldi1cdTAwM2VyZWdpb25zW2luZGV4XS5mbGFncyBcdTAwMjYgVkZJT19SRUdJT05fSU5GT19GTEFHX1dSSVRFKSlcbitcdFx0dm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9NQVlXUklURSk7XG4rXG4gXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbWNfZGV2O1xuIFxuIFx0cmV0dXJuIHZmaW9fZnNsX21jX21tYXBfbW1pbyh2ZGV2LVx1MDAzZXJlZ2lvbnNbaW5kZXhdLCB2bWEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NTk6NTcuNzc0NzE0OTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzM4MTUwMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZGSU8gUGF0Y2ggZm9yIEZyZWVzY2FsZSBNQyBCdXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBiZWVuIGFwcGxpZWQgdG8gYGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY2AuIFNwZWNpZmljYWxseSwgdGhleSd2ZSB0d2Vha2VkIHRoZSBgdmZpb19mc2xfbWNfbW1hcGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHRoaXMgY2hlY2s6XG5cbmBgYGNcblx0LyogUHJldmVudCByZWFkLW9ubHkgcmVnaW9uIG1hcHBpbmdzIGZyb20gYmVpbmcgdXBncmFkZWQgd2l0aCBtcHJvdGVjdCgpICovXG5cdGlmICghKHZkZXYtXHUwMDNlcmVnaW9uc1tpbmRleF0uZmxhZ3MgXHUwMDI2IFZGSU9fUkVHSU9OX0lORk9fRkxBR19XUklURSkpXG5cdFx0dm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9NQVlXUklURSk7XG5gYGBcblxuRXNzZW50aWFsbHksIHRoZXkncmUgcHJldmVudGluZyByZWFkLW9ubHkgcmVnaW9ucyBmcm9tIGJlaW5nIG1hZGUgd3JpdGFibGUgbGF0ZXIgb24sIHVzaW5nIGBtcHJvdGVjdCgpYC4gVGhhdCdzIGEgZ29vZCBzZWN1cml0eSBwcmFjdGljZTsgc291bmRzIGxpa2UgaXQgY291bGQgcHJldmVudCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBCdXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYW5kIHRlc3RhYmlsaXR5LiBUaGlzIGlzIGluIHRoZSBjb250ZXh0IG9mIHRoZSBWRklPIGRyaXZlciBmb3IgdGhlIEZyZWVzY2FsZSBNQyBidXMsIGBmc2wtbWNgLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGluIGEgdHlwaWNhbCBRRU1VL0dDRSBzZXR1cD8gVGhlIEZyZWVzY2FsZSBNQyBidXMgaXMgZ2VuZXJhbGx5IGFzc29jaWF0ZWQgd2l0aCBOWFAvRnJlZXNjYWxlIFNvQ3MsIHNwZWNpZmljYWxseSB0aGluZ3MgbGlrZSB0aGUgRFBBQTIgYXJjaGl0ZWN0dXJlLiBJcyB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIGhhcmR3YXJlIGFjdHVhbGx5IGVtdWxhdGVkIGluIFFFTVU/IFRoYXQncyB0aGUgY3JpdGljYWwgcXVlc3Rpb24uIElmIGl0J3Mgbm90IGVtdWxhdGVkLCB0aGVuIHRoaXMgcGF0Y2gsIHdoaWxlIGxvZ2ljYWxseSBzb3VuZCwgbWlnaHQgbm90IGJlIHRlc3RhYmxlIG9yIGV2ZW4gcmVsZXZhbnQgaW4gbWFueSBjb21tb24gdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLlxuXG5TbywgbGV0J3MgZmlndXJlIG91dCBpZiBpdCdzIHRlc3RhYmxlLiBGcm9tIHdoYXQgSSByZW1lbWJlciwgYGZzbC1tY2AgaXMgYWxtb3N0IGV4Y2x1c2l2ZWx5IGEgTGF5ZXJzY2FwZSBTb0Mtc3BlY2lmaWMgdGhpbmcuIExldCBtZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBgZnNsLW1jYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgYW5kIGNvbmZpcm0gdGhhdCBzdXNwaWNpb24uIFRoYXQgd2lsbCBoZWxwIHRvIGdhdWdlIGlmIHRoZXJlIGFyZSBhbnkgb3B0aW9ucyBmb3IgdGVzdGluZyB0aGlzIHBhdGNoIHdpdGhvdXQgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDgyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MDA6MDMuNTEyODY4MTAxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MTg5ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZzbC1tY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnPTQ9Y29uZmlnIFZGSU9fRlNMX01DXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnOjU6XFx0dHJpc3RhdGUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgUW9ySVEgRFBBQTIgZnNsLW1jIGJ1cyBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy02LVxcdHNlbGVjdCBFVkVOVEZEXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnLTctXFx0aGVscFxcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZzo4OlxcdCAgRHJpdmVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgVkZJTyBRb3JJUSBEUEFBMiBmc2wtbWNcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctOS1cXHQgIChNYW5hZ2VtZW50IENvbXBsZXgpIGRldmljZXMuIFRoaXMgaXMgcmVxdWlyZWQgdG8gcGFzc3Rocm91Z2hcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc6MTA6XFx0ICBmc2wtbWMgYnVzIGRldmljZXMgdXNpbmcgdGhlIFZGSU8gZnJhbWV3b3JrLlxcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy0xMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MDA6MDMuNTc5MDY0MDI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE3ODE4Mjg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBWRklPX0ZTTF9NQyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhpcyBgVkZJT19GU0xfTUNgIGNvbmZpZ3VyYXRpb24gaXMgc3BlY2lmaWNhbGx5IGFib3V0IGVuYWJsaW5nIFZGSU8gc3VwcG9ydCBmb3IgTlhQIFFvcklRIERQQUEyIGZzbC1tYyBidXMgZGV2aWNlcy4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQncyBhIHJlZCBmbGFnOyB0aGlzIGlzIGhhcmR3YXJlLXNwZWNpZmljLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIGV2ZW4gKnRlc3QqIHRoaXMgZWZmZWN0aXZlbHkgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlPyBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdGhhdCBzdGFuZGFyZCBRRU1VIGxpa2VseSAqZG9lc24ndCogZW11bGF0ZSB0aGlzIERQQUEyIGZzbC1tYyBidXMgYXJjaGl0ZWN0dXJlIGVhc2lseSwgb3IgYXQgYWxsLiBJIGhhdmVuJ3Qgc2VlbiBnZW5lcmljIGVtdWxhdGlvbi4gSXQncyB0b28gbmljaGUuXG5cblRoZSB0aG91Z2h0IHRoZW4gc2hpZnRzIHRvIFN5emthbGxlcjsgY2FuIHRoYXQgaGVscD8gV2FpdCwgZG9lcyBTeXprYWxsZXIgZXZlbiBoYXZlIGFueSBmc2wtbWMgZW11bGF0aW9uPyBMZXQncyBiZSByZWFsaXN0aWMsIHByb2JhYmx5IG5vdC4gSSdkIG5lZWQgdG8gbG9vaywgYnV0IEknbSBndWVzc2luZyBTeXprYWxsZXIgZG9lc24ndCBoYXZlIG5hdGl2ZSBzdXBwb3J0IGZvciBmdXp6aW5nIGZzbC1tYyBkZXZpY2VzLiBUaGlzIGlzbid0IGFib3V0IGdlbmVyYWwgVkZJTyBmdXp6aW5nLCBpdCdzIGFib3V0IHRoZSBpbnRlcmFjdGlvbiBvZiBWRklPICp3aXRoKiBhIHZlcnkgcGFydGljdWxhciBidXMgZHJpdmVyIChgZnNsLW1jYCkuIFZGSU8gKml0c2VsZiogaXMgZnV6emVkLCBvZiBjb3Vyc2UsIGJ1dCBmb3Igc3BlY2lmaWMgYnVzIGRyaXZlcnMgbGlrZSB0aGlzLCBJJ20gZ29pbmcgdG8gbmVlZCB0aGUgYnVzIHRvIGJlIHRoZXJlLCBhbmQgZGV2aWNlcyBwcm9iZWQuIFRoZSBoYXJkd2FyZSAqbmVlZHMqIHRvIGJlIHByZXNlbnQuXG5cbk15IG5leHQgbGluZSBvZiB0aG91Z2h0IGlzIHRvIHNlZSBpZiBtYXliZSwganVzdCBtYXliZSwgSSBjYW4gY3JlYXRlIHRoaXMgYGZzbC1tY2AgYnVzIHZpcnR1YWxseS4gSXQncyBhIGxvbmcgc2hvdCwgYnV0IGlmIHRoZXJlJ3MgYSB3YXkgdG8gc3ludGhlc2l6ZSB0aGUgZW52aXJvbm1lbnQsIEkgbWlnaHQgYmUgYWJsZSB0byBnZXQgc29tZXdoZXJlLiBCdXQgSSdtIGdvaW5nIHRvIGJlIGhvbmVzdCwgSSdtIG5vdCBvcHRpbWlzdGljIGFib3V0IHRoaXMgYmVpbmcgZWFzaWx5IGRvYWJsZSBvciBlYXNpbHkgZnV6emVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTgwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjAwOjEwLjc1NzI1MjQxMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc2NzM1MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZzbF9tY19idXNfdHlwZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0zMjQ9QVRUUklCVVRFX0dST1VQUyhmc2xfbWNfYnVzKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTMyNS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjMyNjpjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgZnNsX21jX2J1c190eXBlID0ge1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzI3LVxcdC5uYW1lID0gXFxcImZzbC1tY1xcXCIsXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTMzOC19O1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MzM5OkVYUE9SVF9TWU1CT0xfR1BMKGZzbF9tY19idXNfdHlwZSk7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0zNDAtXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTQ2MT1pbnQgX19mc2xfbWNfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBmc2xfbWNfZHJpdmVyICptY19kcml2ZXIsXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTQ2Ni1cXHRtY19kcml2ZXItXFx1MDAzZWRyaXZlci5vd25lciA9IG93bmVyO1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6NDY3OlxcdG1jX2RyaXZlci1cXHUwMDNlZHJpdmVyLmJ1cyA9IFxcdTAwMjZmc2xfbWNfYnVzX3R5cGU7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy00NjgtXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTc1Mj1pbnQgZnNsX21jX2RldmljZV9hZGQoc3RydWN0IGZzbF9tY19vYmpfZGVzYyAqb2JqX2Rlc2MsXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTc4OS1cXHRtY19kZXYtXFx1MDAzZWRldi5wYXJlbnQgPSBwYXJlbnRfZGV2O1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6NzkwOlxcdG1jX2Rldi1cXHUwMDNlZGV2LmJ1cyA9IFxcdTAwMjZmc2xfbWNfYnVzX3R5cGU7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03OTEtXFx0bWNfZGV2LVxcdTAwM2VkZXYucmVsZWFzZSA9IGZzbF9tY19kZXZpY2VfcmVsZWFzZTtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTE3NT1zdGF0aWMgdm9pZCBmc2xfbWNfYnVzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMTgzLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTE4NDpcXHRidXNfdW5yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2ZnNsX21jX2J1c190eXBlLCBcXHUwMDI2ZnNsX21jX25iKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTExODUtXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTEyNjA9c3RhdGljIGludCBfX2luaXQgZnNsX21jX2J1c19kcml2ZXJfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjYzLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTI2NDpcXHRlcnJvciA9IGJ1c19yZWdpc3RlcihcXHUwMDI2ZnNsX21jX2J1c190eXBlKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyNjUtXFx0aWYgKGVycm9yIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjkyLWVycm9yX2NsZWFudXBfYnVzOlxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTI5MzpcXHRidXNfdW5yZWdpc3RlcihcXHUwMDI2ZnNsX21jX2J1c190eXBlKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyOTQtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11LmM9MTg2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgKiBjb25zdCBpb21tdV9idXNlc1tdID0ge1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdS5jLTE5NC0jaWZkZWYgQ09ORklHX0ZTTF9NQ19CVVNcXG5kcml2ZXJzL2lvbW11L2lvbW11LmM6MTk1OlxcdFxcdTAwMjZmc2xfbWNfYnVzX3R5cGUsXFxuZHJpdmVycy9pb21tdS9pb21tdS5jLTE5Ni0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz00NDk9c3RhdGljIGludCB2ZmlvX2ZzbF9tY19pbml0X2RldmljZShzdHJ1Y3QgdmZpb19mc2xfbWNfZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQ2Mi1cXHR2ZGV2LVxcdTAwM2VuYi5ub3RpZmllcl9jYWxsID0gdmZpb19mc2xfbWNfYnVzX25vdGlmaWVyO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0NjM6XFx0cmV0ID0gYnVzX3JlZ2lzdGVyX25vdGlmaWVyKFxcdTAwMjZmc2xfbWNfYnVzX3R5cGUsIFxcdTAwMjZ2ZGV2LVxcdTAwM2VuYik7XFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQ2NC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQ3NS1vdXRfbmNfdW5yZWc6XFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjQ3NjpcXHRidXNfdW5yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2ZnNsX21jX2J1c190eXBlLCBcXHUwMDI2dmRldi1cXHUwMDNlbmIpO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NzctXFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz00OTc9c3RhdGljIHZvaWQgdmZpb19mc2xfdW5pbml0X2RldmljZShzdHJ1Y3QgdmZpb19mc2xfbWNfZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTUwNC1cXHRkcHJjX2NsZWFudXAobWNfZGV2KTtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NTA1OlxcdGJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKFxcdTAwMjZmc2xfbWNfYnVzX3R5cGUsIFxcdTAwMjZ2ZGV2LVxcdTAwM2VuYik7XFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTUwNi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oPTM1Nj1pbnQgbWNfc2VuZF9jb21tYW5kKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCBzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgKmNtZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oLTM1OC0jaWZkZWYgQ09ORklHX0ZTTF9NQ19CVVNcXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oOjM1OTojZGVmaW5lIGRldl9pc19mc2xfbWMoX2RldikgKChfZGV2KS1cXHUwMDNlYnVzID09IFxcdTAwMjZmc2xfbWNfYnVzX3R5cGUpXFxuaW5jbHVkZS9saW51eC9mc2wvbWMuaC0zNjAtdTMyIGZzbF9tY19nZXRfbXNpX2lkKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oPTQyOD1zdHJ1Y3QgZnNsX21jX2RldmljZSAqZnNsX21jX2dldF9lbmRwb2ludChzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9mc2wvbWMuaC00MzAtXFxuaW5jbHVkZS9saW51eC9mc2wvbWMuaDo0MzE6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBidXNfdHlwZSBmc2xfbWNfYnVzX3R5cGU7XFxuaW5jbHVkZS9saW51eC9mc2wvbWMuaC00MzItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjAwOjEzLjIzMzk5ODE1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTEwNjI4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgVmlydHVhbCBGU0wtTUMgRGV2aWNlIFBvc3NpYmlsaXRpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgRlNMLU1DIGJ1cyBpcyBpbmhlcmVudGx5IHRpZWQgdG8gdGhlIHBoeXNpY2FsIGhhcmR3YXJlIOKAkyB0aGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHdlIHNvbWVob3cgYWJzdHJhY3QgdGhhdD8gSXMgdGhlcmUgYSBtZWNoYW5pc20sIGEgY2xldmVyIGhhY2ssIG9yIGV2ZW4gYSBtb3JlIGZ1bmRhbWVudGFsIGFwcHJvYWNoLCB0byBjcmVhdGUgYSB2aXJ0dWFsIEZTTC1NQyBkZXZpY2U/IEknbSB0aGlua2luZywgcGVyaGFwcywgYSBkcml2ZXIgdGhhdCBlbXVsYXRlcyB0aGUgYmVoYXZpb3IsIG9yIG1heWJlIHNvbWV0aGluZyBsYXllcmVkIG9uIHRvcCBvZiBhIGRpZmZlcmVudCBoYXJkd2FyZSBhYnN0cmFjdGlvbi4gVGhlIGdvYWwgd291bGQgYmUgdG8gZ2FpbiB0aGUgYWR2YW50YWdlcyBvZiB0ZXN0aW5nIG9yIGRldmVsb3BtZW50IHdpdGhvdXQgZGlyZWN0IGhhcmR3YXJlIGFjY2Vzcy4gTXkgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMgd2l0aCBleHBsb3JpbmcgZXhpc3RpbmcgdmlydHVhbGl6YXRpb24gdGVjaG5pcXVlcyBhbmQgY2hlY2tpbmcgaWYgYW55IGV4aXN0aW5nIGZyYW1ld29ya3MgYXJlIGV4dGVuc2libGUgdG8gc2ltdWxhdGUgdGhpcyBidXMuIFRoZSBwb3RlbnRpYWwgaXMgdGhlcmUsIHRoZSBwYXRoIGlzbid0IHlldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMzNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjAwOjE2Ljc0NTA2Mzg4NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgzODg2NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZzbF9tY19kZXZpY2VfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYz0xNjk9c3RhdGljIHZvaWQgZnNsX21jX29ial9kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19idXNfZGV2LFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTgyLVxcdH0gZWxzZSB7XFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6MTgzOlxcdFxcdGVycm9yID0gZnNsX21jX2RldmljZV9hZGQob2JqX2Rlc2MsIE5VTEwsIFxcdTAwMjZtY19idXNfZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTg0LVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNoaWxkX2Rldik7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTczNz1zdGF0aWMgdm9pZCBmc2xfbWNfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03NTEtICovXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo3NTI6aW50IGZzbF9tY19kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2MgKm9ial9kZXNjLFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNzUzLVxcdFxcdCAgICAgIHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy04NzktfVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6ODgwOkVYUE9SVF9TWU1CT0xfR1BMKGZzbF9tY19kZXZpY2VfYWRkKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTg4MS1cXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTAzOT1zdGF0aWMgaW50IGZzbF9tY19idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTE1Ny1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjExNTg6XFx0ZXJyb3IgPSBmc2xfbWNfZGV2aWNlX2FkZChcXHUwMDI2b2JqX2Rlc2MsIG1jX2lvLCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2bWNfYnVzX2Rldik7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMTU5LVxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaD02MDE9c3RydWN0IGZzbF9tY19idXMge1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1wcml2YXRlLmgtNjEzLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oOjYxNDppbnQgX19tdXN0X2NoZWNrIGZzbF9tY19kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2MgKm9ial9kZXNjLFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oLTYxNS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnNsX21jX2lvICptY19pbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MDA6MTkuMTI4OTU2MTA0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwNzU3OTE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZW1iZWRkZWQgc3lzdGVtcyBleHBlcnQ6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgRGV2aWNlIEFkZGl0aW9uIFNlcXVlbmNlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYWdzIGBmc2xfbWNfZGV2aWNlX2FkZGAuIFRoYXQgZnVuY3Rpb24gY2FsbCwgd2hpY2ggSSBrbm93IGlzIHByZXR0eSBmdW5kYW1lbnRhbCBmb3IgYWRkaW5nIGEgZGV2aWNlIHRvIHRoZSBzeXN0ZW0sIGlzIHRyaWdnZXJlZCBmcm9tIHdpdGhpbiBgZnNsX21jX2J1c19wcm9iZWAuIEFuZCBgZnNsX21jX2J1c19wcm9iZWA/IEFoLCByaWdodCwgdGhhdCdzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIHBsYXRmb3JtIGRyaXZlciBsaWZlY3ljbGUuIFNvLCB3ZSdyZSBsb29raW5nIGF0IHRoZSBgZnNsX21jX2J1c19kcml2ZXJgLiBUaGlzIG1lYW5zIHRoZSBwcm9jZXNzIG9mIGRldGVjdGluZyBhbmQgaW50ZWdyYXRpbmcgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSB3aXRoIHRoZSBNb3Rpb24gQ29udHJvbCBmcmFtZXdvcmsgaXMgaW5pdGlhdGVkIGJ5IHRoZSBwbGF0Zm9ybSBkcml2ZXIsIGBmc2xfbWNfYnVzX2RyaXZlcmAsIGFuZCB0aGUgYWN0dWFsIGRldmljZSBhZGRpdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiBpdCdzIGBwcm9iZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBjYWxsIHRvIGBmc2xfbWNfZGV2aWNlX2FkZGAuIFRoYXQncyB0aGUgY29yZSBmbG93OiBwbGF0Zm9ybSBkcml2ZXIgcHJvYmluZywgZm9sbG93ZWQgYnkgdGhlIGRldmljZSBhZGRpdGlvbiBmdW5jdGlvbi4gR290IGl0LiBUaGlzIGlzIHRoZSBzdGFuZGFyZCBwcm9jZWR1cmUgZm9yIHJlZ2lzdGVyaW5nIGEgbmV3IGRldmljZSBjb250cm9sbGVkIHZpYSB0aGUgTW90aW9uIENvbnRyb2wgQVBJIHRvIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNzcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTowMDoyMy4yMzY1Mzg4MDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTQwNzg1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnNsX21jX2J1c19kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTIwOD1NT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGZzbF9tY19idXNfYWNwaV9tYXRjaF90YWJsZSk7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjA5LVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTIxMDpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmc2xfbWNfYnVzX2RyaXZlciA9IHtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMTEtXFx0LmRyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTI1Nj1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZzbF9tY19uYiA9IHtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI1OS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyNjA6c3RhdGljIGludCBfX2luaXQgZnNsX21jX2J1c19kcml2ZXJfaW5pdCh2b2lkKVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI2MS17XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyNjktXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMjcwOlxcdGVycm9yID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZmc2xfbWNfYnVzX2RyaXZlcik7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjcxLVxcdGlmIChlcnJvciBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI4OS1lcnJvcl9jbGVhbnVwX2RyaXZlcjpcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyOTA6XFx0cGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNmZzbF9tY19idXNfZHJpdmVyKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyOTEtXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyOTctfVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTI5ODpwb3N0Y29yZV9pbml0Y2FsbChmc2xfbWNfYnVzX2RyaXZlcl9pbml0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MDA6MjUuNjkwNjI2ODY0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3OTU3NjQxMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipQbGF0Zm9ybSBEcml2ZXIgTWF0Y2hpbmc6IEFDUEkgb3IgT0Yg4oCTIFRoYXQncyB0aGUgUXVlc3Rpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYSBwbGF0Zm9ybSBkcml2ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGUgYmVzdCB3YXkgdG8gaWRlbnRpZnkgdGhpcyBoYXJkd2FyZT9cIiBJdCdzIGEgcXVpY2sgbWVudGFsIGNoZWNrbGlzdDogRG9lcyBpdCB1c2UgQUNQSSB0YWJsZXM/IE9yIGlzIGl0IGFuIE9wZW4gRmlybXdhcmUgKE9GKSBkZXZpY2U/IFRob3NlIGFyZSB0aGUgdHdvIHByaW1hcnkgbWV0aG9kcyBJJ20gZ29pbmcgdG8gY29uc2lkZXIgZm9yIG1hdGNoaW5nIHRoaXMgZHJpdmVyIHRvIHRoZSBoYXJkd2FyZSBpdCdzIG1lYW50IHRvIGNvbnRyb2wuIE15IGRyaXZlciBuZWVkcyB0byBiZSBhYmxlIHRvIGlkZW50aWZ5IGl0cyB0YXJnZXQgZWZmZWN0aXZlbHk7IGl0J3MgZ290IHRvIGNsYWltIG93bmVyc2hpcCBvZiBpdHMgcGxhdGZvcm0gZGV2aWNlIHRocm91Z2ggdGhlc2Ugd2VsbC1kZWZpbmVkIHByb3RvY29scy4gQW5kIGJhc2VkIG9uIHdoYXQgSSBzZWUsIGl0IHNlZW1zIHRoYXQgdGhlIHBsYXRmb3JtIGRyaXZlciBpcyBleHBlY3RpbmcgQUNQSSBvciBPRiBpbmZvcm1hdGlvbiwgb3IgZWxzZSBpdCBpcyBleHBlY3RpbmcgdG8gbWF0Y2ggb25lLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgaG93IHRvIHN1cHBvcnQgdGhlIHBhcnRpY3VsYXIgYnVzIHR5cGUgKEFDUEkgb3IgT0YpLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTM0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTowMDoyOC40ODYzOTMyNTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjE1MjExMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnNsX21jX2J1c19tYXRjaF90YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMTc1PXN0YXRpYyB2b2lkIGZzbF9tY19idXNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTExOTYtXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMTk3OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbF9tY19idXNfbWF0Y2hfdGFibGVbXSA9IHtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTExOTgtXFx0ey5jb21wYXRpYmxlID0gXFxcImZzbCxxb3JpcS1tY1xcXCIsfSxcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTIwMS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyMDI6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZnNsX21jX2J1c19tYXRjaF90YWJsZSk7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjAzLVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjEwPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9tY19idXNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjEzLVxcdFxcdCAgIC5wbSA9IE5VTEwsXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMjE0OlxcdFxcdCAgIC5vZl9tYXRjaF90YWJsZSA9IGZzbF9tY19idXNfbWF0Y2hfdGFibGUsXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjE1LVxcdFxcdCAgIC5hY3BpX21hdGNoX3RhYmxlID0gZnNsX21jX2J1c19hY3BpX21hdGNoX3RhYmxlLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjIyPXN0YXRpYyBpbnQgZnNsX21jX2J1c19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjMxLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTIzMjpcXHRpZiAoIW9mX21hdGNoX2RldmljZShmc2xfbWNfYnVzX21hdGNoX3RhYmxlLCBkZXYpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjMzLVxcdCAgICAhYWNwaV9tYXRjaF9kZXZpY2UoZnNsX21jX2J1c19hY3BpX21hdGNoX3RhYmxlLCBkZXYpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTowMDozMC45MDc5MjEwODhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1MjU3NzgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBcImZzbCxxb3JpcS1tY1wiIENvbXBhdGlibGUgU3RyaW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgXCJmc2wscW9yaXEtbWNcIiBjb21wYXRpYmxlIHN0cmluZyBhbmQgd2hldGhlciBpdCdzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIENhbiBJIGdldCBhd2F5IHdpdGggdGhyb3dpbmcgcmFuZG9tIGRhdGEgYXQgaXQgYW5kIHNlZWluZyB3aGF0IHN0aWNrcz8gVGhlIGltbWVkaWF0ZSBodXJkbGUgaXMgcmVtZW1iZXJpbmcgaG93IFN5emthbGxlciBoYW5kbGVzIHBsYXRmb3JtIGRldmljZXMuIERvZXMgaXQgbmF0aXZlbHkgaW5qZWN0IHRoZW0gd2l0aCBzcGVjaWZpYyBjb21wYXRpYmxlcyAqdW5sZXNzKiBpdCdzIHBhcnQgb2YgYSB2ZXJ5IHBhcnRpY3VsYXIsIGNvbnRyb2xsZWQgc2V0dXA/IFRoYXQncyB0eXBpY2FsbHkgdGhlIGlzc3VlLiBJIHJlY2FsbCBpdCBkb2Vzbid0IGp1c3QgbGV0IHlvdSBpbmplY3QgYW55dGhpbmcgdmlhIHN5c2ZzLCBzbyB0aGF0J3MgYSBkZWFkIGVuZC5cblxuVGhlbiB0aGVyZSdzIHRoZSBgZnNsLW1jYCBidXMgaXRzZWxmLiBJdCdzIG5vdCBhIHNpbXBsZSBjYXNlIG9mIGp1c3QgZmluZGluZyB0aGUgcmlnaHQgZHJpdmVyLiBUaGlzIGJ1cyByZXF1aXJlcyBhY3R1YWxseSBpbnRlcmFjdGluZyB3aXRoIHRoZSBoYXJkd2FyZSB0aHJvdWdoIE1DIGNvbW1hbmRzIHRvIGVudW1lcmF0ZSB0aGUgZGV2aWNlcy4gSnVzdCB0aHJvd2luZyBhcmJpdHJhcnkgc3RyaW5ncyBtaWdodCBub3QgZXZlbiB0cmlnZ2VyIG1lYW5pbmdmdWwgYmVoYXZpb3IsIG9yIG1vcmUgbGlrZWx5IHdpbGwgbGVhZCB0byBhIGNyYXNoLlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBmc2xfbWNfYnVzX3Byb2JlYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnVtZXJhdGlvbiBwcm9jZXNzIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGVudHJ5IHBvaW50cyBvciB2dWxuZXJhYmlsaXRpZXMgdGhhdCBJIGNhbiBleHBsb2l0LiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0byBmdXp6IHRoaXMgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTY3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjAwOjM1LjA2MDUwMjk1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMxNDc2MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZzbF9tY19idXNfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTAwNT1zdGF0aWMgaW50IGZzbF9tY19maXJtd2FyZV9jaGVjayhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDM1LS8qXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMDM2OiAqIGZzbF9tY19idXNfcHJvYmUgLSBjYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIHJvb3QgTUMgYnVzIGlzIGJlaW5nXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDM3LSAqIGFkZGVkXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDM4LSAqL1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAzOTpzdGF0aWMgaW50IGZzbF9tY19idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwNDAte1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjEwPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9tY19idXNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjE2LVxcdFxcdCAgIH0sXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMjE3OlxcdC5wcm9iZSA9IGZzbF9tY19idXNfcHJvYmUsXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjE4LVxcdC5yZW1vdmUgPSBmc2xfbWNfYnVzX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MDA6MzcuNDkxOTg2MjI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzgwMjQwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIGBmc2xfbWNfYnVzX3Byb2JlYDpcblxuKipBbmFseXppbmcgYGZzbF9tY19idXNfcHJvYmVgKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIHVucGFjayB3aGF0IGBmc2xfbWNfYnVzX3Byb2JlYCBpcyBhbGwgYWJvdXQuIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGZ1bmN0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCBwcm9iaW5nIGEgRnJlZXNjYWxlIChsaWtlbHkgTlhQKSBNdWx0aS1Db3JlIEJ1cyAoTUMgQnVzKS4gVGhlIFwicHJvYmVcIiBwYXJ0IHRlbGxzIG1lIGl0J3MgcHJvYmFibHkgY29uY2VybmVkIHdpdGggZGV2aWNlIGRpc2NvdmVyeSBvciBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhhdCBidXMgaW5mcmFzdHJ1Y3R1cmUuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBoYXJkd2FyZSB0aGlzIGlzIGRlc2lnbmVkIHRvIGludGVyZmFjZSB3aXRoLCB3aGV0aGVyIGl0J3MgcmVsYXRlZCB0byB0aGUgUG93ZXIgQXJjaGl0ZWN0dXJlLCBvciBtYXliZSBBUk0tYmFzZWQgU29DcyBmcm9tIE5YUC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGFyY2hpdGVjdHVyYWwgY29udGV4dCB0byByZWFsbHkgZ3Jhc3AgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZS4gSSdtIGFzc3VtaW5nIGl0IGludGVyYWN0cyB3aXRoIHNvbWUgc29ydCBvZiBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycyB0byBhY2hpZXZlIHRoaXMgcHJvYmluZyBhbmQgbGlrZWx5IGhhbmRsZXMgaW5pdGlhbGl6YXRpb24gdGFza3MgYmFzZWQgb24gdGhlIGRldmljZXMgZm91bmQgb24gdGhlIGJ1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc0OSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjAwOjQwLjY3MDAxMzQwNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDM5LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAzOTpcXHRzdGF0aWMgaW50IGZzbF9tY19idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4xMDQwOlxcdHtcXG4xMDQxOlxcdFxcdHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2Mgb2JqX2Rlc2M7XFxuMTA0MjpcXHRcXHRpbnQgZXJyb3I7XFxuMTA0MzpcXHRcXHRzdHJ1Y3QgZnNsX21jICptYztcXG4xMDQ0OlxcdFxcdHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19idXNfZGV2ID0gTlVMTDtcXG4xMDQ1OlxcdFxcdHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvID0gTlVMTDtcXG4xMDQ2OlxcdFxcdGludCBjb250YWluZXJfaWQ7XFxuMTA0NzpcXHRcXHRwaHlzX2FkZHJfdCBtY19wb3J0YWxfcGh5c19hZGRyO1xcbjEwNDg6XFx0XFx0dTMyIG1jX3BvcnRhbF9zaXplLCBtY19zdHJlYW1faWQ7XFxuMTA0OTpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgKnBsYXRfcmVzO1xcbjEwNTA6XFx0XFxuMTA1MTpcXHRcXHRtYyA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKm1jKSwgR0ZQX0tFUk5FTCk7XFxuMTA1MjpcXHRcXHRpZiAoIW1jKVxcbjEwNTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTA1NDpcXHRcXG4xMDU1OlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jKTtcXG4xMDU2OlxcdFxcbjEwNTc6XFx0XFx0cGxhdF9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpO1xcbjEwNTg6XFx0XFx0aWYgKHBsYXRfcmVzKSB7XFxuMTA1OTpcXHRcXHRcXHRtYy1cXHUwMDNlZnNsX21jX3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9yZXMpO1xcbjEwNjA6XFx0XFx0XFx0aWYgKElTX0VSUihtYy1cXHUwMDNlZnNsX21jX3JlZ3MpKVxcbjEwNjE6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobWMtXFx1MDAzZWZzbF9tY19yZWdzKTtcXG4xMDYyOlxcdFxcdH1cXG4xMDYzOlxcdFxcbjEwNjQ6XFx0XFx0aWYgKG1jLVxcdTAwM2Vmc2xfbWNfcmVncykge1xcbjEwNjU6XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FDUEkpIFxcdTAwMjZcXHUwMDI2ICFkZXZfb2Zfbm9kZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KSkge1xcbjEwNjY6XFx0XFx0XFx0XFx0bWNfc3RyZWFtX2lkID0gcmVhZGwobWMtXFx1MDAzZWZzbF9tY19yZWdzICsgRlNMX01DX0ZBUFIpO1xcbjEwNjc6XFx0XFx0XFx0XFx0LypcXG4xMDY4OlxcdFxcdFxcdFxcdCAqIEhXIE9ScyB0aGUgUEwgYW5kIEJNVCBiaXQsIHBsYWNlcyB0aGUgcmVzdWx0IGluIGJpdFxcbjEwNjk6XFx0XFx0XFx0XFx0ICogMTQgb2YgdGhlIFN0cmVhbUlEIGFuZCBPUnMgaW4gdGhlIElDSUQuIENhbGN1bGF0ZSBpdFxcbjEwNzA6XFx0XFx0XFx0XFx0ICogYWNjb3JkaW5nbHkuXFxuMTA3MTpcXHRcXHRcXHRcXHQgKi9cXG4xMDcyOlxcdFxcdFxcdFxcdG1jX3N0cmVhbV9pZCA9IChtY19zdHJlYW1faWQgXFx1MDAyNiAweGZmZmYpIHxcXG4xMDczOlxcdFxcdFxcdFxcdFxcdCgobWNfc3RyZWFtX2lkIFxcdTAwMjYgKE1DX0ZBUFJfUEwgfCBNQ19GQVBSX0JNVCkpID9cXG4xMDc0OlxcdFxcdFxcdFxcdFxcdFxcdEJJVCgxNCkgOiAwKTtcXG4xMDc1OlxcdFxcdFxcdFxcdGVycm9yID0gYWNwaV9kbWFfY29uZmlndXJlX2lkKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMTA3NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBERVZfRE1BX0NPSEVSRU5ULFxcbjEwNzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm1jX3N0cmVhbV9pZCk7XFxuMTA3ODpcXHRcXHRcXHRcXHRpZiAoZXJyb3IgPT0gLUVQUk9CRV9ERUZFUilcXG4xMDc5OlxcdFxcdFxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4xMDgwOlxcdFxcdFxcdFxcdGlmIChlcnJvcilcXG4xMDgxOlxcdFxcdFxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMTA4MjpcXHRcXHRcXHRcXHRcXHRcXHQgXFxcImZhaWxlZCB0byBjb25maWd1cmUgZG1hOiAlZC5cXFxcblxcXCIsXFxuMTA4MzpcXHRcXHRcXHRcXHRcXHRcXHQgZXJyb3IpO1xcbjEwODQ6XFx0XFx0XFx0fVxcbjEwODU6XFx0XFxuMTA4NjpcXHRcXHRcXHQvKlxcbjEwODc6XFx0XFx0XFx0ICogU29tZSBib290bG9hZGVycyBwYXVzZSB0aGUgTUMgZmlybXdhcmUgYmVmb3JlIGJvb3RpbmcgdGhlXFxuMTA4ODpcXHRcXHRcXHQgKiBrZXJuZWwgc28gdGhhdCBNQyB3aWxsIG5vdCBjYXVzZSBmYXVsdHMgYXMgc29vbiBhcyB0aGVcXG4xMDg5OlxcdFxcdFxcdCAqIFNNTVUgcHJvYmVzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZXJlJ3Mgbm8gY29uZmlndXJhdGlvblxcbjEwOTA6XFx0XFx0XFx0ICogaW4gcGxhY2UgZm9yIE1DLlxcbjEwOTE6XFx0XFx0XFx0ICogQXQgdGhpcyBwb2ludCBNQyBzaG91bGQgaGF2ZSBhbGwgaXRzIFNNTVUgc2V0dXAgZG9uZSBzbyBtYWtlXFxuMTA5MjpcXHRcXHRcXHQgKiBzdXJlIGl0IGlzIHJlc3VtZWQuXFxuMTA5MzpcXHRcXHRcXHQgKi9cXG4xMDk0OlxcdFxcdFxcdHdyaXRlbChyZWFkbChtYy1cXHUwMDNlZnNsX21jX3JlZ3MgKyBGU0xfTUNfR0NSMSkgXFx1MDAyNlxcbjEwOTU6XFx0XFx0XFx0XFx0ICAgICAofihHQ1IxX1AxX1NUT1AgfCBHQ1IxX1AyX1NUT1ApKSxcXG4xMDk2OlxcdFxcdFxcdCAgICAgICBtYy1cXHUwMDNlZnNsX21jX3JlZ3MgKyBGU0xfTUNfR0NSMSk7XFxuMTA5NzpcXHRcXHR9XFxuMTA5ODpcXHRcXG4xMDk5OlxcdFxcdGVycm9yID0gZnNsX21jX2Zpcm13YXJlX2NoZWNrKHBkZXYpO1xcbjExMDA6XFx0XFx0aWYgKGVycm9yKVxcbjExMDE6XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHQvKlxcbjExMDQ6XFx0XFx0ICogR2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgTUMgcG9ydGFsIGZvciB0aGUgcm9vdCBEUFJDOlxcbjExMDU6XFx0XFx0ICovXFxuMTEwNjpcXHRcXHRwbGF0X3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7XFxuMTEwNzpcXHRcXHRpZiAoIXBsYXRfcmVzKVxcbjExMDg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTEwOTpcXHRcXG4xMTEwOlxcdFxcdG1jX3BvcnRhbF9waHlzX2FkZHIgPSBwbGF0X3Jlcy1cXHUwMDNlc3RhcnQ7XFxuMTExMTpcXHRcXHRtY19wb3J0YWxfc2l6ZSA9IHJlc291cmNlX3NpemUocGxhdF9yZXMpO1xcbjExMTI6XFx0XFx0bWNfcG9ydGFsX2Jhc2VfcGh5c19hZGRyID0gbWNfcG9ydGFsX3BoeXNfYWRkciBcXHUwMDI2IH4weDNmZmZmZmY7XFxuMTExMzpcXHRcXG4xMTE0OlxcdFxcdGVycm9yID0gZnNsX2NyZWF0ZV9tY19pbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBtY19wb3J0YWxfcGh5c19hZGRyLFxcbjExMTU6XFx0XFx0XFx0XFx0XFx0IG1jX3BvcnRhbF9zaXplLCBOVUxMLFxcbjExMTY6XFx0XFx0XFx0XFx0XFx0IEZTTF9NQ19JT19BVE9NSUNfQ09OVEVYVF9QT1JUQUwsIFxcdTAwMjZtY19pbyk7XFxuMTExNzpcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbjExMTg6XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbjExMTk6XFx0XFxuMTEyMDpcXHRcXHRlcnJvciA9IG1jX2dldF92ZXJzaW9uKG1jX2lvLCAwLCBcXHUwMDI2bWNfdmVyc2lvbik7XFxuMTEyMTpcXHRcXHRpZiAoZXJyb3IgIT0gMCkge1xcbjExMjI6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbjExMjM6XFx0XFx0XFx0XFx0XFxcIm1jX2dldF92ZXJzaW9uKCkgZmFpbGVkIHdpdGggZXJyb3IgJWRcXFxcblxcXCIsIGVycm9yKTtcXG4xMTI0OlxcdFxcdFxcdGdvdG8gZXJyb3JfY2xlYW51cF9tY19pbztcXG4xMTI1OlxcdFxcdH1cXG4xMTI2OlxcdFxcbjExMjc6XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIk1DIGZpcm13YXJlIHZlcnNpb246ICV1LiV1LiV1XFxcXG5cXFwiLFxcbjExMjg6XFx0XFx0XFx0IG1jX3ZlcnNpb24ubWFqb3IsIG1jX3ZlcnNpb24ubWlub3IsIG1jX3ZlcnNpb24ucmV2aXNpb24pO1xcbjExMjk6XFx0XFxuMTEzMDpcXHRcXHRpZiAoZGV2X29mX25vZGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldikpIHtcXG4xMTMxOlxcdFxcdFxcdGVycm9yID0gZ2V0X21jX2FkZHJfdHJhbnNsYXRpb25fcmFuZ2VzKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMTEzMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2bWMtXFx1MDAzZXRyYW5zbGF0aW9uX3JhbmdlcyxcXG4xMTMzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZtYy1cXHUwMDNlbnVtX3RyYW5zbGF0aW9uX3Jhbmdlcyk7XFxuMTEzNDpcXHRcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbjExMzU6XFx0XFx0XFx0XFx0Z290byBlcnJvcl9jbGVhbnVwX21jX2lvO1xcbjExMzY6XFx0XFx0fVxcbjExMzc6XFx0XFxuMTEzODpcXHRcXHRlcnJvciA9IGRwcmNfZ2V0X2NvbnRhaW5lcl9pZChtY19pbywgMCwgXFx1MDAyNmNvbnRhaW5lcl9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjAwOjQwLjY3MDE2NjcyNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjcyOTU0NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGB2ZmlvX2ZzbF9tY2AgRHJpdmVyJ3MgVGVzdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGRlcGVuZGVuY3kgb24gdGhlIGBtYy1cdTAwM2Vmc2xfbWNfcmVncyArIEZTTF9NQ19GQVBSYCByZWdpc3RlciBhY2Nlc3MgYW5kIGludGVyYWN0aW9ucyB3aXRoIHRoZSBmaXJtd2FyZSB0aHJvdWdoIGBtY19nZXRfdmVyc2lvbmAgYW5kIGBkcHJjX2dldF9jb250YWluZXJfaWRgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCBzY3JlYW1zIGhhcmR3YXJlIGRlcGVuZGVuY3ksIG9yIGF0IGxlYXN0IGEgdmVyeSBzcGVjaWZpYyBRRU1VIGVtdWxhdGlvbi4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIFFFTVUgZXZlbiAqZW11bGF0ZSogdGhlIGBmc2wscW9yaXEtbWNgIGRldmljZT8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhwbG9yZSBtb2NraW5nIHRoaXMgc29tZWhvdy4gSSdsbCBjaGVjayBpZiBzeXprYWxsZXIgaGFzIGFueSBwcm92aXNpb25zIGZvciBtb2NraW5nIHRoZXNlIGludGVyYWN0aW9ucywgYnV0IEkgZG9uJ3QgcmVjYWxsIHNlZWluZyBhbnl0aGluZyBsaWtlIHRoYXQuIFRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIHJlc2lkZXMgaW4gYGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY2AgaXMgYWxzbyBhIGNsdWU7IGl0IG1lYW5zIHRoaXMgaXMgVkZJTyBzcGVjaWZpYy5cblxuVGhpcyBjb2RlIHBhdGggc3BlY2lmaWNhbGx5IHVzZXMgYFZGSU9fRlNMX01DYCwgd2hpY2ggaW4gdHVybiByZWxpZXMgb24gYEZTTF9NQ19CVVNgLiBOb3csIGBGU0xfTUNfQlVTYCBpcyBmdW5kYW1lbnRhbGx5IHRpZWQgdG8gTlhQIGhhcmR3YXJlIGFuZCB0aGUgYGZzbC1tY2AgYnVzLiBTbywgSSBuZWVkIHRvIGFzayBteXNlbGYsIGlzIHRoZXJlIGFueSB3YXkgdG8gdGVzdCBgVkZJT19GU0xfTUNgIHJlbGlhYmx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/XG5cbkJhc2VkIG9uIHRoZSBjb2RlJ3MgZGVwZW5kZW5jZSBvbiB0aGUgYGZzbC1tY2AgYnVzIGJlaW5nIHBvcHVsYXRlZCB3aXRoIGRldmljZXMg4oCTIG1lYW5pbmcgYGZzbF9tY19idXNfcHJvYmVgIGhhcyB0byBzdWNjZWVkLCB3aGljaCBpbiB0dXJuIG5lY2Vzc2l0YXRlcyB0aGUgTUMgZmlybXdhcmUgcmVzcG9uZGluZyDigJMgaXQgbG9va3MgaW5jcmVkaWJseSB1bmxpa2VseS4gSXQgc2VlbXMgdGhhdCB0aGlzIHBhcnRpY3VsYXIgY29kZSBwYXRoIGlzIGZ1bmRhbWVudGFsbHkgaW5hY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBldmVuIGEgZ2VuZXJpYyBRRU1VIHNldHVwLiBJdCByZWFsbHkgZmVlbHMgbGlrZSB0aGlzIGlzIG9ubHkgdGVzdGFibGUgaW4gYSBwaHlzaWNhbCBOWFAtYmFzZWQgc3lzdGVtIHdpdGggdGhlIGNvcnJlY3QgZmlybXdhcmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrIGlmIHRoZXJlJ3MgKmFueSogc29mdHdhcmUgZW11bGF0aW9uIGZvciBgZnNsLW1jYCB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYuIEkgY2FuJ3QgdGhpbmsgb2YgYW55IG9mZmhhbmQsIGJ1dCBpdCdzIHdvcnRoIGEgcXVpY2sgbG9vayB0byBlbGltaW5hdGUgYW55IGxpbmdlcmluZyBkb3VidC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTowMDo0Ni45NDMxMjUxMjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDc5NDU0OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnNsX21jX2J1c19wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMDA1PXN0YXRpYyBpbnQgZnNsX21jX2Zpcm13YXJlX2NoZWNrKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMzUtLypcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEwMzY6ICogZnNsX21jX2J1c19wcm9iZSAtIGNhbGxiYWNrIGludm9rZWQgd2hlbiB0aGUgcm9vdCBNQyBidXMgaXMgYmVpbmdcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMzctICogYWRkZWRcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMzgtICovXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMDM5OnN0YXRpYyBpbnQgZnNsX21jX2J1c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTA0MC17XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTEyMTA9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZnNsX21jX2J1c19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMTYtXFx0XFx0ICAgfSxcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyMTc6XFx0LnByb2JlID0gZnNsX21jX2J1c19wcm9iZSxcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMTgtXFx0LnJlbW92ZSA9IGZzbF9tY19idXNfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTowMDo0OS4zNTEwNzc5NjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkyNDQ3MzUyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBXb3J0aEZ1enppbmcgPSBGYWxzZSoqXG5cbk9rYXksIHNvIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBpcyBpbnZvbHZlZCBoZXJlLCB3aGljaCBpcyB0aGUgZmlyc3QgdGhpbmcgSSBjaGVjay4gVGhlIHBhdGNoIGluIHF1ZXN0aW9uIHNwZWNpZmljYWxseSBtb2RpZmllcyBgdmZpb19mc2xfbWNfbW1hcGAuIFRoZSBrZXkgcG9pbnQgaXMgdGhhdCBgZnNsLW1jYCBkZXZpY2VzLCBiZWluZyB0aWVkIHRvIHRoZSBGcmVlc2NhbGUvTlhQIE1hbmFnZW1lbnQgQ29tcGxleCwgYXJlICpub3QqIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBjcmVhdGVkIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBCZWNhdXNlIG9mIHRoaXMgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50LCBgdmZpb19mc2xfbWNfbW1hcGAgKmNhbm5vdCogYmUgcmVhY2hlZCBpbiB0aGVzZSB2aXJ0dWFsaXplZCBzZXR0aW5ncy5cblxuTGV0IG1lIHJlZnJlc2ggdGhlIGd1aWRlbGluZXMgZm9yIHRoZXNlIHNjZW5hcmlvcy4gSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggZmFsbHMgaW50byBlaXRoZXIgb2YgdGhlc2UgdHdvIGNhc2VzOiBjb2RlIHBhdGhzIHRoYXQgYXJlIGluaGVyZW50bHkgaW5hY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gaW5jbHVkaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBUaGUgc2Vjb25kIGNvbmRpdGlvbiBpcyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIHJlcXVpcmluZyBhY3R1YWwgUENJZSBjYXJkcywgbGlrZSBTbWFydE5JQ3MsIEdQVXMgYW5kIHNvIG9uLCB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cblxuVGhpcyBwYXRjaCwgZGVhbGluZyB3aXRoIHRoZSBgZnNsLW1jYCBidXMsIHBlcmZlY3RseSBhbGlnbnMgd2l0aCBib3RoIG9mIHRoZXNlIGV4Y2x1c2lvbiBjcml0ZXJpYS4gYGZzbC1tY2AgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgYnVzIHRoYXQgbWFuZGF0ZXMgcGh5c2ljYWwgaGFyZHdhcmUsIHdoaWNoIGlzIHNpbXBseSBub3QgYWNjZXNzaWJsZSB3aXRoaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyIGFuZCBkZWZpbml0aXZlOiBJJ2xsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NjgsIk91dHB1dFRva2VucyI6MTE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjAwOjU1LjI3NTU1Mzg2NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIGRyaXZlciBmb3IgdGhlIEZyZWVzY2FsZS9OWFAgTWFuYWdlbWVudCBDb21wbGV4IChmc2wtbWMpIGJ1cy4gVGhpcyBidXMgYW5kIGl0cyBkZXZpY2VzIGFyZSBzcGVjaWZpYyB0byBwaHlzaWNhbCBOWFAgUW9ySVEgRFBBQTIgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGggaW4gYHZmaW9fZnNsX21jX21tYXBgIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZGSU8gZHJpdmVyIGZvciB0aGUgRnJlZXNjYWxlL05YUCBNYW5hZ2VtZW50IENvbXBsZXggKGZzbC1tYykgYnVzLiBUaGlzIGJ1cyBhbmQgaXRzIGRldmljZXMgYXJlIHNwZWNpZmljIHRvIHBoeXNpY2FsIE5YUCBRb3JJUSBEUEFBMiBoYXJkd2FyZSBhbmQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aCBpbiBgdmZpb19mc2xfbWNfbW1hcGAgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTowMDo1NS4yNzU1ODE0MDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowch7tf[1] Phase: Running StartedAt: 2026-08-19 09:01:06 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowch7tf[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-19 09:01:06 +0000 UTC FinishedAt: 2026-08-19 09:01:12 +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,}