Name: series-workflowsmsxp Phase: Failed StartedAt: 2026-08-23 11:10:34 +0000 UTC FinishedAt: 2026-08-23 11:34:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsmsxp[0] Phase: Succeeded StartedAt: 2026-08-23 11:10:34 +0000 UTC FinishedAt: 2026-08-23 11:34:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsmsxp[0].run-triage Phase: Succeeded StartedAt: 2026-08-23 11:10:34 +0000 UTC FinishedAt: 2026-08-23 11:34:05 +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+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgYSBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciB3cml0ZSBmb3IgTEVEIEdQSU8gY29uZmlndXJhdGlvbiBmcm9tIHRoZSBwcm9iZSBmdW5jdGlvbiB0byB0aGUgY29uZmlnX2luaXQgZnVuY3Rpb24gaW4gdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIGZvciBhIHNwZWNpZmljIHBoeXNpY2FsIFBIWSBjaGlwIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoZSBjaGFuZ2UgZG9lcyBub3QgYWZmZWN0IGNvcmUga2VybmVsIGxvZ2ljIG9yIHJlYWNoYWJsZSB2aXJ0dWFsaXplZCBjb2RlIHBhdGhzLCBhbmQgaXMgcHVyZWx5IGEgaGFyZHdhcmUtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gZml4LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk5ZDNiZGJjMTAwMThhMzlhYjdjOGU1N2IwNjU5ZWNkNWNiYTY1YThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxMTozMDo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXG5pbmRleCBlZGQ0OWMxOTNlNDc2Li44ZjQ0OThjZjBhN2MxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXG5AQCAtMTE2OSwxOCAmIzQzOzExNjksNyBAQCBzdGF0aWMgaW50IGVuODgxMWhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcbiBcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuIFx0LyogQ28tQ2xvY2sgT3V0cHV0ICovXG4tXHRyZXQgPSBlbjg4MTFoX2Nsa19wcm92aWRlcl9zZXR1cChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIFx1MDAyNnByaXYtXHUwMDNlaHcpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIENvbmZpZ3VyZSBsZWQgZ3BpbyBwaW5zIGFzIG91dHB1dCAqL1xuLVx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9HUElPX09VVFBVVCxcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0dQSU9fT1VUUFVUXzM0NSxcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0dQSU9fT1VUUFVUXzM0NSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGVuODgxMWhfY2xrX3Byb3ZpZGVyX3NldHVwKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgXHUwMDI2cHJpdi1cdTAwM2Vodyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYW44ODExaGJfY29uZmlnX3NlcmRlc19wb2xhcml0eShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuQEAgLTEzMjQsNiAmIzQzOzEzMTMsMTcgQEAgc3RhdGljIGludCBlbjg4MTFoX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4mIzQzO1x0LyogQ29uZmlndXJlIGxlZCBncGlvIHBpbnMgYXMgb3V0cHV0LiBNdXN0IGJlIHJlZG9uZSBvbiBldmVyeVxuJiM0MztcdCAqIC5jb25maWdfaW5pdCgpLCBub3QganVzdCBvbmNlIGluIC5wcm9iZSgpOiBlbjg4MTFoX3Jlc3RhcnRfbWN1KClcbiYjNDM7XHQgKiByZXNldHMgYnVja3BidXMtbWFwcGVkIE1DVSBzdGF0ZSAoaW5jbC4gdGhpcyByZWdpc3Rlcikgb24gZXZlcnlcbiYjNDM7XHQgKiBjYWxsIGFmdGVyIHRoZSBmaXJzdCwgZS5nLiBvbiBsaW5rIHJlbmVnb3RpYXRpb24gb3IgaWZ1cC9pZmRvd24uXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9HUElPX09VVFBVVCxcbiYjNDM7XHRcdFx0XHRcdCAgRU44ODExSF9HUElPX09VVFBVVF8zNDUsXG4mIzQzO1x0XHRcdFx0XHQgIEVOODgxMUhfR1BJT19PVVRQVVRfMzQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgd3JpdGUgZm9yIExFRCBHUElPIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgcHJvYmUgZnVuY3Rpb24gdG8gdGhlIGNvbmZpZ19pbml0IGZ1bmN0aW9uIGluIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgYSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgY2hpcCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyBvciByZWFjaGFibGUgdmlydHVhbGl6ZWQgY29kZSBwYXRocywgYW5kIGlzIHB1cmVseSBhIGhhcmR3YXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZpeC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5OWQzYmRiYzEwMDE4YTM5YWI3YzhlNTdiMDY1OWVjZDVjYmE2NWE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMTE6MzA6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jCmluZGV4IGVkZDQ5YzE5M2U0NzYuLjhmNDQ5OGNmMGE3YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jCkBAIC0xMTY5LDE4ICYjNDM7MTE2OSw3IEBAIHN0YXRpYyBpbnQgZW44ODExaF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCiAJcHJpdi0mZ3Q7cGh5ZGV2ID0gcGh5ZGV2OwogCS8qIENvLUNsb2NrIE91dHB1dCAqLwotCXJldCA9IGVuODgxMWhfY2xrX3Byb3ZpZGVyX3NldHVwKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldiwgJmFtcDtwcml2LSZndDtodyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIENvbmZpZ3VyZSBsZWQgZ3BpbyBwaW5zIGFzIG91dHB1dCAqLwotCXJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfR1BJT19PVVRQVVQsCi0JCQkJCSAgRU44ODExSF9HUElPX09VVFBVVF8zNDUsCi0JCQkJCSAgRU44ODExSF9HUElPX09VVFBVVF8zNDUpOwotCWlmIChyZXQgJmx0OyAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBlbjg4MTFoX2Nsa19wcm92aWRlcl9zZXR1cCgmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYsICZhbXA7cHJpdi0mZ3Q7aHcpOwogfQogCiBzdGF0aWMgaW50IGFuODgxMWhiX2NvbmZpZ19zZXJkZXNfcG9sYXJpdHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKQEAgLTEzMjQsNiAmIzQzOzEzMTMsMTcgQEAgc3RhdGljIGludCBlbjg4MTFoX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJCXJldHVybiByZXQ7CiAJfQogCiYjNDM7CS8qIENvbmZpZ3VyZSBsZWQgZ3BpbyBwaW5zIGFzIG91dHB1dC4gTXVzdCBiZSByZWRvbmUgb24gZXZlcnkKJiM0MzsJICogLmNvbmZpZ19pbml0KCksIG5vdCBqdXN0IG9uY2UgaW4gLnByb2JlKCk6IGVuODgxMWhfcmVzdGFydF9tY3UoKQomIzQzOwkgKiByZXNldHMgYnVja3BidXMtbWFwcGVkIE1DVSBzdGF0ZSAoaW5jbC4gdGhpcyByZWdpc3Rlcikgb24gZXZlcnkKJiM0MzsJICogY2FsbCBhZnRlciB0aGUgZmlyc3QsIGUuZy4gb24gbGluayByZW5lZ290aWF0aW9uIG9yIGlmdXAvaWZkb3duLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9HUElPX09VVFBVVCwKJiM0MzsJCQkJCSAgRU44ODExSF9HUElPX09VVFBVVF8zNDUsCiYjNDM7CQkJCQkgIEVOODgxMUhfR1BJT19PVVRQVVRfMzQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUEhZIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHR3ZWFraW5nIHRoZSBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtb3Zpbmcgc29tZSBHUElPIGNvbmZpZ3VyYXRpb24gY29kZSBmb3IgTEVEcyBmcm9tIHRoZSBgZW44ODExaF9wcm9iZWAgZnVuY3Rpb24gdG8gYGVuODgxMWhfY29uZmlnX2luaXRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBQSFkgZHJpdmVyLCB3aGljaCBtZWFucyBpdCYjMzk7cyBsaWtlbHkgdGllZCB0byAqYWN0dWFsKiBoYXJkd2FyZS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBoZXJlLgoKTm93LCB0eXBpY2FsbHksIFBIWSBkcml2ZXJzIGFyZSBhc3NvY2lhdGVkIHdpdGggcGh5c2ljYWwgbmV0d29yayBjYXJkcywgYnV0IEkga25vdyB0aGF0IE1ESU8gYnVzZXMgY2FuIGJlIHVzZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlbS4gQW5kLCBvZiBjb3Vyc2UsIHRoZXNlIE1ESU8gYnVzZXMgY2FuIGJlIGVtdWxhdGVkIG9yIGV2ZW4gc29mdHdhcmUtZGVmaW5lZCDigJMgdGhpbmsgYG1kaW8tbW9ja3VwYCBhbmQgc3VjaCwgdGhvdWdoIHVzdWFsbHkgc3l6a2FsbGVyIHdvdWxkIGF2b2lkIHRhcmdldGluZyBhIHZlcnkgc3BlY2lmaWMgUEhZIHVubGVzcyBpdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCBhIGNvbW1vbiBpbnRlcmZhY2UsIG9yIHZpcnR1YWxpemVkIGhhcmR3YXJlLiBCdXQgd2FpdCwgSSByZWNhbGwgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgY2FwYWJpbGl0eSB0byBmdXp6IFBIWXMgdXNpbmcgTURJTywgYXNzdW1pbmcgdGhleSBhcmUgYWN0dWFsbHkgcmVnaXN0ZXJlZCBpbiB0aGUgc3lzdGVtLgoKU28sIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGUgY2hhbmdlIGlzIGEgcmVnaXN0ZXIgbW9kaWZpY2F0aW9uIG1vdmUuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBQSFkgZHJpdmVyLCB0aGF0JiMzOTtzIHdoYXQgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgbm93LiBDYW4gd2UgZXZlbiB0cmlnZ2VyIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cD8gVXN1YWxseSwgZnV6emluZyBQSFkgZHJpdmVycyBpcyBhIG5vLWdvIHVubGVzcyBhIHZpcnR1YWwgTURJTyBidXMgaXMgcHJlc2VudC4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCBmaWxlIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgbWlnaHQgcG9pbnQgdG8gYSBwb3NzaWJsZSB2aXJ0dWFsaXplZCBvciBlbXVsYXRlZCBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaXJfZW44ODExaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTMzPW9iai0kKENPTkZJR19BSVJfQU44ODAxX1BIWSlcdCYjNDM7PSBhaXJfYW44ODAxLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQUlSX0VOODgxMUhfUEhZKSAgICYjNDM7PSBhaXJfZW44ODExaC5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMzUtb2JqLSQoQ09ORklHX0FJUl9ORVRfUEhZTElCKVx0JiM0Mzs9IGFpcl9waHlfbGliLm9cbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTMyNC0vKiBMRUQgYmFzaWMgY29udHJvbCByZWdpc3RlciwgcGFydCBvZiB0aGUgc2FtZSBMRUQgYmxvY2sgYXMgdGhlIExFRDAvTEVEMVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYzozMjU6ICogY29udHJvbCByZWdpc3RlcnMgYWJvdmUuIFRoZSBhaXJfZW44ODExaCBkcml2ZXIgZGVzY3JpYmVzIHRoZSBzYW1lXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTMyNi0gKiByZWdpc3RlciBhcyBBSVJfUEhZX0xFRF9CQ1IuXG4tLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYz0xNDgyPXN0YXRpYyBpbnQgZW43NTI4X3BoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTQ4Ni1cdCAqIHByb2dyYW1tZWQgaW50byB0aGUgTEVEIGNvbnRyb2wgcmVnaXN0ZXJzLiBIYW5kIHRoZSBwaW5zIG92ZXIgdG9cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM6MTQ4NzpcdCAqIHRoZSBMRUQgY29udHJvbCByZWdpc3RlcnMgdGhlIHNhbWUgd2F5IHRoZSBhaXJfZW44ODExaCBkcml2ZXJcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTQ4OC1cdCAqIGRvZXM7IHRoZSBtb2RlIGZpZWxkIG9mIHRoaXMgcmVnaXN0ZXIgaXMgYWxyZWFkeSBzZXQgb3V0IG9mIHJlc2V0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYSBQSFkgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgc3lzdGVtJiMzOTtzIGNvbmZpZ3VyZWQgZm9yIGBDT05GSUdfQUlSX0VOODgxMUhfUEhZYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBQSFkgY29uZmlndXJhdGlvbiBmaWxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNwZWNpZmljIFBIWSwgdGhlIEFJUl9FTjg4MTFILCBpcyBhbGwgYWJvdXQuIFdoZXJlIGRvZXMgdGhlIGtlcm5lbCBkZWZpbmUgaXQ/IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBqdW1wIG92ZXIgdG8gYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBwYXJ0aWN1bGFyIFBIWSwgc3BlY2lmaWNhbGx5IHRoZSBgQUlSX0VOODgxMUhfUEhZYCBzeW1ib2wuIEkmIzM5O20gbG9va2luZyBmb3IgaXRzIGRlZmluaXRpb24sIGFueSBhc3NvY2lhdGVkIGZlYXR1cmVzIGl0IGVuYWJsZXMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMsIGFuZCwgY3J1Y2lhbGx5LCBhbnkgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gaXRzIGludGVuZGVkIHVzZSBjYXNlIG9yIGFueSBzcGVjaWZpYyBxdWlya3MgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBSVJfRU44ODExSF9QSFkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTkzPWNvbmZpZyBBSVJfQU44ODAxX1BIWVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk4LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6OTk6Y29uZmlnIEFJUl9FTjg4MTFIX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTAwLVx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIEVOODgxMUggMi41IEdpZ2FiaXQgUEhZXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkyMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEcml2ZXImIzM5O3MgRnV6emFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGRyaXZlciBpcyBldmVuICpyZWFjaGFibGUqIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQuIE9mdGVuLCB0aGVzZSBQSFkgZHJpdmVycyBhcmUgZXNzZW50aWFsbHkgTURJTyBkZXZpY2VzLCBhbmQgTURJTyBkZXZpY2VzIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLCBlc3BlY2lhbGx5IGlmIHRoZXJlJiMzOTtzIGEgdmlydHVhbCBNRElPIGJ1cyBhdmFpbGFibGUuIEkmIzM5O3ZlIGdvdCB0byBjaGVjayB0aGUgaW5zdHJ1Y3Rpb25zIGFnYWluLCB0aG91Z2guIEFoLCByaWdodCwgdGhlIGNhdmVhdDogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsKCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IERvZXMgYSBQSFkgZHJpdmVyIGZhbGwgaW50byB0aGF0ICYjMzQ7dmVuZG9yLXNwZWNpZmljJiMzNDsgY2F0ZWdvcnkgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZT8gSXQmIzM5O3MgYSBiaXQgb2YgYSBncmF5IGFyZWEuIFVzdWFsbHksIHRoZXNlIFBIWSBkcml2ZXJzIGFyZSBwcm9iZWQgd2hlbiB0aGUgTURJTyBidXMgc2NhbnMgZm9yIGF2YWlsYWJsZSBQSFlzIGFuZCBmaW5kcyBhIG1hdGNoaW5nIFBIWSBJRC4gVGhlIGNhdGNoIHdpdGggUUVNVSBpcyB0aGF0LCAqdW5sZXNzKiB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGVtdWxhdGVkIG5ldHdvcmsgY2FyZCB0aGF0IHNwZWNpZmljYWxseSBleHBvc2VzIGFuZCBtb2RlbHMgdGhpcyBQSFksIHRoZSBkcml2ZXIgd29uJiMzOTt0IGV2ZW4gYmUgcHJvYmVkLCBoZW5jZSB1bi1mdXp6YWJsZS4KCkJ1dCwgaGFuZyBvbiBhIHNlY29uZC4gRGlkbiYjMzk7dCBJIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgc3l6a2FsbGVyIGhhdmluZyBhIHZpcnR1YWwgTURJTyBidXM/IEkgdGhpbmsgdGhlcmUmIzM5O3MgYSAmIzM0O21kaW8tbW9ja3VwJiMzNDsgb3Igc29tZXRoaW5nIHNpbWlsYXIuLi4gTm8sIHdhaXQsIG1heWJlIG5vdC4gSSBzaG91bGQgdmVyaWZ5LiBBaCwgeWVzISBJJiMzOTttIHByZXR0eSBzdXJlIHRoZXJlJiMzOTtzIGEgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYCBvciBzb21ldGhpbmcgdmVyeSBzaW1pbGFyLiBUaGF0IGNvdWxkIGNoYW5nZSBldmVyeXRoaW5nISBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHkgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIGFzIHRoYXQgY291bGQgbWVhbiBpdCAqaXMqIGZ1enphYmxlIGluIFFFTVUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvLW1vY2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNRElPIEJ1cyBBc3Nlc3NtZW50KioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgZGVlcGVyLCBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHByZXNlbmNlIG9mIGEgdmlydHVhbCBNRElPIGJ1cy4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSBzeXN0ZW0gdXRpbGl6ZXMgYSB2aXJ0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNRElPIChNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0KSBpbnRlcmZhY2UsIHBlcmhhcHMgZW11bGF0ZWQgb3Igc29mdHdhcmUtZGVmaW5lZC4gVGhpcyBwcmVsaW1pbmFyeSBzdGVwIGlzIGNydWNpYWwuIFRoaXMgd2lsbCBoZWxwIGluZm9ybSB3aGV0aGVyIEkmIzM5O20gd29ya2luZyB3aXRoIGEgc3RhbmRhcmQgaGFyZHdhcmUgaW50ZXJmYWNlIG9yIGEgbW9yZSBhYnN0cmFjdGVkIGVudmlyb25tZW50LCB3aGljaCB3aWxsIGRyYXN0aWNhbGx5IGFmZmVjdCBob3cgSSBwcm9jZWVkIHdpdGggYW55IHN1YnNlcXVlbnQgYW5hbHlzaXMgb3IgY29uZmlndXJhdGlvbiB0YXNrcyByZWxhdGVkIHRvIFBIWSBpbnRlcmFjdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gaXQgY29tZXMgdG8gYW55IE1ESU8gaW50ZXJhY3Rpb24uIEkgd2FudCB0byBrbm93IHRoaXMgKmJlZm9yZSogZ29pbmcgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2NrdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc3MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIE1ESU8gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmsgaXNzdWUuIE15IGluaXRpYWwgZ3V0IHRlbGxzIG1lIHRvIGNoZWNrIHRoZSBNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UgKE1ESU8pIGRyaXZlcnMuIFRoZXkmIzM5O3JlIG9mdGVuIHRoZSBnYXRld2F5IHRvIFBIWSBpbnRlcmFjdGlvbnMsIGFuZCBwcm9ibGVtcyB0aGVyZSBjYW4gbWFuaWZlc3QgaW4gYSB2YXJpZXR5IG9mIHdheXMuIFNvLCBmaXJzdCB0aGluZyYjMzk7cyBmaXJzdCwgSSYjMzk7bSBoZWFkaW5nIG92ZXIgdG8gdGhlIGBkcml2ZXJzL25ldC9tZGlvL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIGludGVyYWN0cyB3aXRoIHRoZSBwaHlzaWNhbCBsYXllciBkZXZpY2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBpbiB0aGVyZS4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1vcmdhbml6ZWQgYW5kIGNsZWFybHkgc3RydWN0dXJlZC4uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb21tb24gaW1wbGVtZW50YXRpb25zLCBnZW5lcmljIE1ESU8gYWNjZXNzIHJvdXRpbmVzLCBhbmQgYW55dGhpbmcgc3BlY2lmaWMgdG8gdGhlIHRhcmdldCBoYXJkd2FyZSwgcmlnaHQgYXdheS4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIHdoYXQgbWlnaHQgYmUgZ29pbmcgd3JvbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9ja3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDIxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhwbG9yaW5nIFVzZXIgU3BhY2UgQWNjZXNzIHRvIFBIWSBEcml2ZXJzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55IGNsZXZlciB3YXkgdG8gcG9rZSBhdCBQSFkgZHJpdmVycyBkaXJlY3RseSBmcm9tIHVzZXIgc3BhY2UsIHdpdGhvdXQgYWN0dWFsbHkgaGF2aW5nIHRoZSBoYXJkd2FyZSBpbiBmcm9udCBvZiBtZS4gSSYjMzk7dmUgYmVlbiBwb25kZXJpbmcgdGhpcy4gSXQgZmVlbHMgbGlrZSB0aGVyZSBoYXMgdG8gYmUgYSB2aXJ0dWFsIHBhdGguIENvdWxkIEkgdXNlIHNvbWV0aGluZyBsaWtlIGBkc2FfbG9vcGAgb3IgbWF5YmUgZXZlbiBgZml4ZWQtcGh5YD8gSG9sZCBvbiwgdGhvdWdoLi4uIGBmaXhlZC1waHlgIGlzIHJlYWxseSBkZXNpZ25lZCBmb3IgdGhvc2UgZml4ZWQgbGlua3MsIG5vdCBmb3Igc29tZSBnZW5lcmFsIGV4cGxvcmF0aW9uIG9mIGRpZmZlcmVudCBQSFkgZHJpdmVycy4gVGhhdCYjMzk7cyBub3QgZ29pbmcgdG8gZG8gd2hhdCBJIHdhbnQuIEhtbSwgd2hhdCBhYm91dCBgbmV0ZGV2c2ltYD8gTm93IHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIERvZXMgdGhhdCBoYXZlIGEgc2ltdWxhdGVkIE1ESU8gYnVzPyBJZiBpdCBkb2VzLCBtYXliZSBJIGNhbiB1c2UgdGhhdCB0byB0ZXN0IGFuZCBwcm90b3R5cGUgc29tZSB0aGluZ3MuLi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXRhaWxzIGFuZCBkb2N1bWVudGF0aW9uIG9uIHRoYXQuIFRoaXMgaXMgd2hlcmUgaXQgc3RhcnRzIHRvIGdldCBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMTgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgd2FpdCBhIG1pbnV0ZS4gU29tZXRoaW5nIGZlZWxzIG9mZi4gR2VuZXJhbGx5LCBzeXprYWxsZXIgaXNuJiMzOTt0IHVzZWQgdG8gZnV6eiBQSFkgZHJpdmVycyBkaXJlY3RseSwgcmlnaHQ/IFRoZXkmIzM5O3JlIHVzdWFsbHkgaGFyZHdhcmUtc3BlY2lmaWMsIG1lYW5pbmcgdGhleSBuZWVkIHRoZSBleGFjdCBoYXJkd2FyZSB0byBldmVuIGJlIGFjY2Vzc2libGUgYW5kIGZ1enphYmxlLiBTbywgdGhlIHVzdWFsIGFwcHJvYWNoIGRvZXNuJiMzOTt0IHJlYWxseSB3b3JrLgoKTGV0JiMzOTtzIHBhdXNlIGFuZCBkb3VibGUtY2hlY2suIEkgc2hvdWxkIHJlYWxseSBsb29rIGF0IHRoZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIE1ESU8gb3IgUEhZLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbiBleGlzdGluZyBmcmFtZXdvcmsgdGhhdCBJIGNhbiB1c2UuIFRoaXMgd2lsbCBjbGFyaWZ5IGhvdyB0aGlzIHBhcnRpY3VsYXIgc2l0dWF0aW9uIHNob3VsZCBiZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL2RzYS5jPTYyMj1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbm5ldC9kc2EvZHNhLmMtNjU0LVx0aWYgKCFkcy1cdTAwM2V1c2VyX21paV9idXMgXHUwMDI2XHUwMDI2IGRzLVx1MDAzZW9wcy1cdTAwM2VwaHlfcmVhZCkge1xubmV0L2RzYS9kc2EuYzo2NTU6XHRcdGRzLVx1MDAzZXVzZXJfbWlpX2J1cyA9IG1kaW9idXNfYWxsb2MoKTtcbm5ldC9kc2EvZHNhLmMtNjU2LVx0XHRpZiAoIWRzLVx1MDAzZXVzZXJfbWlpX2J1cykge1xuLS1cbm5ldC9kc2EvZHNhLmMtNjYyLVxubmV0L2RzYS9kc2EuYzo2NjM6XHRcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoZHMtXHUwMDNldXNlcl9taWlfYnVzKTtcbm5ldC9kc2EvZHNhLmMtNjY0LVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9kc2EvZHNhLmMtNjc0LVx0aWYgKGRzLVx1MDAzZXVzZXJfbWlpX2J1cyBcdTAwMjZcdTAwMjYgZHMtXHUwMDNlb3BzLVx1MDAzZXBoeV9yZWFkKVxubmV0L2RzYS9kc2EuYzo2NzU6XHRcdG1kaW9idXNfZnJlZShkcy1cdTAwM2V1c2VyX21paV9idXMpO1xubmV0L2RzYS9kc2EuYy02NzYtdGVhcmRvd246XG4tLVxubmV0L2RzYS9kc2EuYz02ODY9c3RhdGljIHZvaWQgZHNhX3N3aXRjaF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxubmV0L2RzYS9kc2EuYy02OTMtXHRpZiAoZHMtXHUwMDNldXNlcl9taWlfYnVzIFx1MDAyNlx1MDAyNiBkcy1cdTAwM2VvcHMtXHUwMDNlcGh5X3JlYWQpIHtcbm5ldC9kc2EvZHNhLmM6Njk0Olx0XHRtZGlvYnVzX3VucmVnaXN0ZXIoZHMtXHUwMDNldXNlcl9taWlfYnVzKTtcbm5ldC9kc2EvZHNhLmM6Njk1Olx0XHRtZGlvYnVzX2ZyZWUoZHMtXHUwMDNldXNlcl9taWlfYnVzKTtcbm5ldC9kc2EvZHNhLmMtNjk2LVx0XHRkcy1cdTAwM2V1c2VyX21paV9idXMgPSBOVUxMO1xuLS1cbm5ldC9kc2EvcG9ydC5jLTExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2Vcbm5ldC9kc2EvcG9ydC5jOjEyOiNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxubmV0L2RzYS9wb3J0LmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbmV0LmhcdTAwM2Vcbi0tXG5uZXQvZHNhL3BvcnQuYz0xNzI2PXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZHNhX3N3aXRjaGVzX2FwcGx5X3dvcmthcm91bmRzW10gPSB7XG4tLVxubmV0L2RzYS9wb3J0LmMtMTc5Ni0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTylcbm5ldC9kc2EvcG9ydC5jOjE3OTc6XHRcJiMzNDtzbXNjLGxhbjkzMDMtbWRpb1wmIzM0Oyxcbm5ldC9kc2EvcG9ydC5jLTE3OTgtI2VuZGlmXG4tLVxubmV0L2RzYS91c2VyLmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbmV0LmhcdTAwM2Vcbm5ldC9kc2EvdXNlci5jOjE0OiNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxubmV0L2RzYS91c2VyLmM6MTU6I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG5uZXQvZHNhL3VzZXIuYy0xNi0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFx1MDAzZVxuLS1cbm5ldC9kc2EvdXNlci5jPTI2Mzc9c3RhdGljIGludCBkc2FfdXNlcl9waHlfY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqdXNlcl9kZXYsIGludCBhZGRyLFxuLS1cbm5ldC9kc2EvdXNlci5jLTI2NDItXG5uZXQvZHNhL3VzZXIuYzoyNjQzOlx0dXNlcl9kZXYtXHUwMDNlcGh5ZGV2ID0gbWRpb2J1c19nZXRfcGh5KGRzLVx1MDAzZXVzZXJfbWlpX2J1cywgYWRkcik7XG5uZXQvZHNhL3VzZXIuYy0yNjQ0LVx0aWYgKCF1c2VyX2Rldi1cdTAwM2VwaHlkZXYpIHtcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uYz01ODc9Y29udmVydF9sZWdhY3lfc2V0dGluZ3NfdG9fbGlua19rc2V0dGluZ3MoXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmMtNjIxLVx0XHQ9IGxlZ2FjeV9zZXR0aW5ncy1cdTAwM2VhdXRvbmVnO1xubmV0L2V0aHRvb2wvY29tbW9uLmM6NjIyOlx0bGlua19rc2V0dGluZ3MtXHUwMDNlYmFzZS5tZGlvX3N1cHBvcnRcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjYyMzpcdFx0PSBsZWdhY3lfc2V0dGluZ3MtXHUwMDNlbWRpb19zdXBwb3J0O1xubmV0L2V0aHRvb2wvY29tbW9uLmMtNjI0LVx0bGlua19rc2V0dGluZ3MtXHUwMDNlYmFzZS5ldGhfdHBfbWRpeFxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9MzgyPWNvbnZlcnRfbGlua19rc2V0dGluZ3NfdG9fbGVnYWN5X3NldHRpbmdzKFxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtNDEyLVx0XHQ9IGxpbmtfa3NldHRpbmdzLVx1MDAzZWJhc2UuYXV0b25lZztcbm5ldC9ldGh0b29sL2lvY3RsLmM6NDEzOlx0bGVnYWN5X3NldHRpbmdzLVx1MDAzZW1kaW9fc3VwcG9ydFxubmV0L2V0aHRvb2wvaW9jdGwuYzo0MTQ6XHRcdD0gbGlua19rc2V0dGluZ3MtXHUwMDNlYmFzZS5tZGlvX3N1cHBvcnQ7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTQxNS1cdGxlZ2FjeV9zZXR0aW5ncy1cdTAwM2VldGhfdHBfbWRpeFxuLS1cbm5ldC9ldGh0b29sL3BoeS5jPTcwPXN0YXRpYyBpbnQgcGh5X3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuLS1cbm5ldC9ldGh0b29sL3BoeS5jLTkxLVxubmV0L2V0aHRvb2wvcGh5LmM6OTI6XHRyZXBfZGF0YS1cdTAwM2VuYW1lID0ga3N0cmR1cChkZXZfbmFtZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpLCBHRlBfS0VSTkVMKTtcbm5ldC9ldGh0b29sL3BoeS5jLTkzLVx0aWYgKCFyZXBfZGF0YS1cdTAwM2VuYW1lKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBVc2VyLVNwYWNlIFBIWSBEZXZpY2UgQ3JlYXRpb24qKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gQ2FuIGEgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBzb21laG93IGNvbmp1cmUgdXAgYSBQSFkgZGV2aWNlIGF0IHdpbGwsIHVzaW5nIG5ldGxpbmsgb3IgYnkgbWFuaXB1bGF0aW5nIHN5c2ZzPyBNeSBpbml0aWFsIGh1bmNoIGlzIG5vLCBub3QgcmVhbGx5LiBQSFkgZGV2aWNlcywgYXMgSSB1bmRlcnN0YW5kIGl0LCBhcmUgZnVuZGFtZW50YWxseSBsaW5rZWQgdG8gdGhlIHBoeXNpY2FsIE1ESU8gYnVzIGFuZCBhcmUgaW5zdGFudGlhdGVkIGR1cmluZyB0aGF0IGJ1cyYjMzk7cyBzY2FuIHByb2Nlc3MsIHJlYWRpbmcgdGhvc2UgY3J1Y2lhbCBQSFkgSUQgcmVnaXN0ZXJzLiBJZiB0aGVyZSYjMzk7cyBubyBhY3R1YWwgcGh5c2ljYWwgTURJTyBidXMsIHRoZW4gdHlwaWNhbGx5LCB0aGVyZSBhcmUgbm8gUEhZIGRldmljZXMsIHNpbXBsZSBhcyB0aGF0LgoKQnV0IHdhaXQgYSBtaW51dGUsIEkgdGhpbmsgSeKAmW0gZm9yZ2V0dGluZyBzb21ldGhpbmfigKYgaXNu4oCZdCBgZHNhX2xvb3BgIGEgbW9jayBEU0Egc3dpdGNoLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gc2ltdWxhdGUgYW4gTURJTyBidXM/IElmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCB0aGF0IHNob3VsZCBwcm92aWRlIG1lIHdpdGggdGhlIGFuc3dlciBJIG5lZWQuIFRoYXQmIzM5O3MgaXQhIEkgbmVlZCB0byBjb25zdWx0IHRoZSBzb3VyY2UuIExldCYjMzk7cyBkaWcgaW50byBgZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNgIGFuZCBjb25maXJtIG15IGh5cG90aGVzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz03ND1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldnNbUEhZX01BWF9BRERSXTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjc1OnN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2UgKnN3aXRjaF9tZGlvZGV2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNzYtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9MTg0PXN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3JlYWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xODktXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxOTA6XHRyZXQgPSBtZGlvYnVzX3JlYWRfbmVzdGVkKGJ1cywgcHMtXHUwMDNlcG9ydF9iYXNlICYjNDM7IHBvcnQsIHJlZ251bSk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xOTEtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTE5OT1zdGF0aWMgaW50IGRzYV9sb29wX3BoeV93cml0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwNS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIwNjpcdHJldCA9IG1kaW9idXNfd3JpdGVfbmVzdGVkKGJ1cywgcHMtXHUwMDNlcG9ydF9iYXNlICYjNDM7IHBvcnQsIHJlZ251bSwgdmFsdWUpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjA3LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz0yNTA9c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjYzLVx0LyogSnVzdCBkbyBhIHNsZWVwaW5nIG9wZXJhdGlvbiB0byBtYWtlIGxvY2tkZXAgY2hlY2tzIGVmZmVjdGl2ZSAqL1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjY0Olx0bWRpb2J1c19yZWFkKGJ1cywgcHMtXHUwMDNlcG9ydF9iYXNlICYjNDM7IHBvcnQsIE1JSV9CTVNSKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI2NS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz0yODM9c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkyLVx0LyogSnVzdCBkbyBhIHNsZWVwaW5nIG9wZXJhdGlvbiB0byBtYWtlIGxvY2tkZXAgY2hlY2tzIGVmZmVjdGl2ZSAqL1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjkzOlx0bWRpb2J1c19yZWFkKGJ1cywgcHMtXHUwMDNlcG9ydF9iYXNlICYjNDM7IHBvcnQsIE1JSV9CTVNSKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI5NC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz0zMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBkc2FfbG9vcF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU1OnN0YXRpYyBpbnQgZHNhX2xvb3BfZHJ2X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM1Ni17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTc6XHRzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEgKnBkYXRhID0gbWRpb2Rldi1cdTAwM2VkZXYucGxhdGZvcm1fZGF0YTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM1OC1cdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcztcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNjQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNjU6XHRkcyA9IGRldm1fa3phbGxvYyhcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpkcyksIEdGUF9LRVJORUwpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzY2LVx0aWYgKCFkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNjgtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNjk6XHRkcy1cdTAwM2VkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM3MC1cdGRzLVx1MDAzZW51bV9wb3J0cyA9IERTQV9MT09QX05VTV9QT1JUUztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM3MS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM3MjpcdHBzID0gZGV2bV9remFsbG9jKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LCBzaXplb2YoKnBzKSwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNzMtXHRpZiAoIXBzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4MS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM4MjpcdGRzLVx1MDAzZWRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzgzLVx0ZHMtXHUwMDNlb3BzID0gXHUwMDI2ZHNhX2xvb3BfZHJpdmVyO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg0LVx0ZHMtXHUwMDNlcHJpdiA9IHBzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzg1Olx0cHMtXHUwMDNlYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODc6XHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4OC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTAtXHRpZiAoIXJldClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM5MTpcdFx0ZGV2X2luZm8oXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiAweCUweFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5Mi1cdFx0XHQgcGRhdGEtXHUwMDNlbmFtZSwgcGRhdGEtXHUwMDNlZW5hYmxlZF9wb3J0cyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk4LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM5OTpcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MDAtXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDEwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDExOnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDEzOlx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxNC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTktXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MjA6XHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIE5VTEwpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIxLX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyMi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyNDpcdC5tZGlvZHJ2LmRyaXZlclx0PSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjUtXHRcdC5uYW1lXHQ9IFwmIzM0O2RzYS1sb29wXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTQzMj1zdGF0aWMgaW50IGRzYV9sb29wX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM0LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzNTpcdHJldHVybiBkcnYgPT0gXHUwMDI2ZHNhX2xvb3BfZHJ2Lm1kaW9kcnYuZHJpdmVyO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM2LX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00Mzg9c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ1LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ2OnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2Rldih2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ3LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NjM6XHRidXMgPSBtZGlvX2ZpbmRfYnVzKFwmIzM0O2ZpeGVkLTBcJiMzNDspO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDY0LVx0aWYgKFdBUk5fT04oIWJ1cykpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDY2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDY3Olx0c3dpdGNoX21kaW9kZXYgPSBtZGlvX2RldmljZV9jcmVhdGUoYnVzLCAzMSk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Njg6XHRpZiAoSVNfRVJSKHN3aXRjaF9tZGlvZGV2KSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ2OS1cdFx0Z290byBvdXQ7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NzAtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzE6XHRzd2l0Y2hfbWRpb2Rldi1cdTAwM2VidXNfbWF0Y2ggPSBkc2FfbG9vcF9idXNfbWF0Y2g7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzI6XHRzd2l0Y2hfbWRpb2Rldi1cdTAwM2VkZXYucGxhdGZvcm1fZGF0YSA9IFx1MDAyNmRzYV9sb29wX3BkYXRhO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDczLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDc0Olx0cmV0ID0gbWRpb19kZXZpY2VfcmVnaXN0ZXIoc3dpdGNoX21kaW9kZXYpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDc1LVx0aWYgKHJldClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3NjpcdFx0bWRpb19kZXZpY2VfZnJlZShzd2l0Y2hfbWRpb2Rldik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00Nzctb3V0OlxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTQ4Mj1zdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDg2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDg3Olx0cmV0ID0gZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2KCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5My1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NDpcdHJldCA9IG1kaW9fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmRzYV9sb29wX2Rydik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTUtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTYtXHRcdGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3RlcigpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk3Olx0XHRtZGlvX2RldmljZV9yZW1vdmUoc3dpdGNoX21kaW9kZXYpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk4Olx0XHRtZGlvX2RldmljZV9mcmVlKHN3aXRjaF9tZGlvZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5OS1cdH1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz01MDU9c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNi17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDc6XHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmRzYV9sb29wX2Rydik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDgtXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwOTpcdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MTA6XHRtZGlvX2RldmljZV9mcmVlKHN3aXRjaF9tZGlvZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTY5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGRzYV9sb29wYCBhbmQgYG1kaW8tbW9ja3VwYCBDb251bmRydW0qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgZHNhX2xvb3BgIGlzIGxldmVyYWdpbmcgdGhlIGBmaXhlZC0wYCBidXMuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gdG8gYG1kaW8tbW9ja3VwYC4gSG1tLCBkb2VzIHRoaXMgZXZlbiBleGlzdD8gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGJ5IGNoZWNraW5nIGBkcml2ZXJzL25ldC9waHkvbWRpby1tb2NrdXAuY2AuIE5vcGUsIHRoYXQgd2FzbiYjMzk7dCB0aGUgcmlnaHQgcGF0aC4gT2theSwgcGVyaGFwcyBpdCYjMzk7cyB1bmRlciBgZHJpdmVycy9uZXQvbWRpby9tZGlvLW1vY2t1cC5jYCBpbnN0ZWFkPyBTdGlsbCBubyBsdWNrLiBUaW1lIHRvIHRha2UgYSBicm9hZGVyIGFwcHJvYWNoOyBJJiMzOTtsbCBicm93c2UgdGhlIGBkcml2ZXJzL25ldC9waHkvYCBkaXJlY3RvcnkgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSByZWxldmFudCBjb2RlIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGlzIGBkc2FfbG9vcGAgLyBgZml4ZWQtMGAgLyBgbWRpby1tb2NrdXBgIGludGVyYWN0aW9uLiBIb3BlZnVsbHksIEkgY2FuIGZpbmQgc29tZXRoaW5nIHVzZWZ1bCBpbiB0aG9zZSBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2FkaW4uYyYjMzQ7LAogICAgJiMzNDthZGluMTEwMC5jJiMzNDssCiAgICAmIzM0O2FkaW4xMTQwLXBoeS5jJiMzNDssCiAgICAmIzM0O2Fpcl9hbjg4MDEuYyYjMzQ7LAogICAgJiMzNDthaXJfZW44ODExaC5jJiMzNDssCiAgICAmIzM0O2Fpcl9waHlfbGliLmMmIzM0OywKICAgICYjMzQ7YWlyX3BoeV9saWIuaCYjMzQ7LAogICAgJiMzNDthbWQuYyYjMzQ7LAogICAgJiMzNDthczIxeHh4LmMmIzM0OywKICAgICYjMzQ7YXg4ODc5NmIuYyYjMzQ7LAogICAgJiMzNDtheDg4Nzk2Yl9ydXN0LnJzJiMzNDssCiAgICAmIzM0O2JjbS1jeWdudXMuYyYjMzQ7LAogICAgJiMzNDtiY20tcGh5LWxpYi5jJiMzNDssCiAgICAmIzM0O2JjbS1waHktbGliLmgmIzM0OywKICAgICYjMzQ7YmNtLXBoeS1wdHAuYyYjMzQ7LAogICAgJiMzNDtiY201NDE0MC5jJiMzNDssCiAgICAmIzM0O2JjbTYzeHguYyYjMzQ7LAogICAgJiMzNDtiY203eHh4LmMmIzM0OywKICAgICYjMzQ7YmNtODQ4ODEuYyYjMzQ7LAogICAgJiMzNDtiY204N3h4LmMmIzM0OywKICAgICYjMzQ7YnJvYWRjb20uYyYjMzQ7LAogICAgJiMzNDtjaWNhZGEuYyYjMzQ7LAogICAgJiMzNDtjb3J0aW5hLmMmIzM0OywKICAgICYjMzQ7ZGFwODIxMXIuYyYjMzQ7LAogICAgJiMzNDtkYXZpY29tLmMmIzM0OywKICAgICYjMzQ7ZHA4MzY0MC5jJiMzNDssCiAgICAmIzM0O2RwODM2NDBfcmVnLmgmIzM0OywKICAgICYjMzQ7ZHA4MzgyMi5jJiMzNDssCiAgICAmIzM0O2RwODM4NDguYyYjMzQ7LAogICAgJiMzNDtkcDgzODY3LmMmIzM0OywKICAgICYjMzQ7ZHA4Mzg2OS5jJiMzNDssCiAgICAmIzM0O2RwODN0YzgxMS5jJiMzNDssCiAgICAmIzM0O2RwODN0ZDUxMC5jJiMzNDssCiAgICAmIzM0O2RwODN0ZzcyMC5jJiMzNDssCiAgICAmIzM0O2V0MTAxMWMuYyYjMzQ7LAogICAgJiMzNDtmaXhlZF9waHkuYyYjMzQ7LAogICAgJiMzNDtpY3BsdXMuYyYjMzQ7LAogICAgJiMzNDtpbnRlbC14d2F5LmMmIzM0OywKICAgICYjMzQ7bGlua21vZGUuYyYjMzQ7LAogICAgJiMzNDtseHQuYyYjMzQ7LAogICAgJiMzNDttYXJ2ZWxsLTg4cTJ4eHguYyYjMzQ7LAogICAgJiMzNDttYXJ2ZWxsLTg4eDIyMjIuYyYjMzQ7LAogICAgJiMzNDttYXJ2ZWxsLmMmIzM0OywKICAgICYjMzQ7bWFydmVsbDEwZy5jJiMzNDssCiAgICAmIzM0O21kaW8tb3Blbi1hbGxpYW5jZS5oJiMzNDssCiAgICAmIzM0O21kaW9fYnVzLmMmIzM0OywKICAgICYjMzQ7bWRpb19idXNfcHJvdmlkZXIuYyYjMzQ7LAogICAgJiMzNDttZGlvX2RldmljZS5jJiMzNDssCiAgICAmIzM0O21kaW9fZGV2cmVzLmMmIzM0OywKICAgICYjMzQ7bWVzb24tZ3hsLmMmIzM0OywKICAgICYjMzQ7bWljcmVsLmMmIzM0OywKICAgICYjMzQ7bWljcm9jaGlwLmMmIzM0OywKICAgICYjMzQ7bWljcm9jaGlwX3Jkc19wdHAuYyYjMzQ7LAogICAgJiMzNDttaWNyb2NoaXBfcmRzX3B0cC5oJiMzNDssCiAgICAmIzM0O21pY3JvY2hpcF90MS5jJiMzNDssCiAgICAmIzM0O21pY3JvY2hpcF90MXMuYyYjMzQ7LAogICAgJiMzNDttaWlfdGltZXN0YW1wZXIuYyYjMzQ7LAogICAgJiMzNDttb3RvcmNvbW0uYyYjMzQ7LAogICAgJiMzNDtteGwtODYxMTAuYyYjMzQ7LAogICAgJiMzNDtteGwtZ3B5LmMmIzM0OywKICAgICYjMzQ7bmF0aW9uYWwuYyYjMzQ7LAogICAgJiMzNDtuY24yNjAwMC5jJiMzNDssCiAgICAmIzM0O254cC1jNDUtdGphMTF4eC1tYWNzZWMuYyYjMzQ7LAogICAgJiMzNDtueHAtYzQ1LXRqYTExeHguYyYjMzQ7LAogICAgJiMzNDtueHAtYzQ1LXRqYTExeHguaCYjMzQ7LAogICAgJiMzNDtueHAtY2J0eC5jJiMzNDssCiAgICAmIzM0O254cC10amExMXh4LmMmIzM0OywKICAgICYjMzQ7b3Blbl9hbGxpYW5jZV9oZWxwZXJzLmMmIzM0OywKICAgICYjMzQ7b3Blbl9hbGxpYW5jZV9oZWxwZXJzLmgmIzM0OywKICAgICYjMzQ7cGh5LWM0NS5jJiMzNDssCiAgICAmIzM0O3BoeS1jYXBzLmgmIzM0OywKICAgICYjMzQ7cGh5LWNvcmUuYyYjMzQ7LAogICAgJiMzNDtwaHkuYyYjMzQ7LAogICAgJiMzNDtwaHlfY2Fwcy5jJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2UuYyYjMzQ7LAogICAgJiMzNDtwaHlfbGVkX3RyaWdnZXJzLmMmIzM0OywKICAgICYjMzQ7cGh5X2xpbmtfdG9wb2xvZ3kuYyYjMzQ7LAogICAgJiMzNDtwaHlfcGFja2FnZS5jJiMzNDssCiAgICAmIzM0O3BoeV9wb3J0LmMmIzM0OywKICAgICYjMzQ7cGh5bGliLWludGVybmFsLmgmIzM0OywKICAgICYjMzQ7cGh5bGliLmgmIzM0OywKICAgICYjMzQ7cGh5bGluay5jJiMzNDssCiAgICAmIzM0O3FzZW1pLmMmIzM0OywKICAgICYjMzQ7cXQyMDI1LnJzJiMzNDssCiAgICAmIzM0O3JvY2tjaGlwLmMmIzM0OywKICAgICYjMzQ7c2ZwLWJ1cy5jJiMzNDssCiAgICAmIzM0O3NmcC5jJiMzNDssCiAgICAmIzM0O3NmcC5oJiMzNDssCiAgICAmIzM0O3Ntc2MuYyYjMzQ7LAogICAgJiMzNDtzdGUxMFhwLmMmIzM0OywKICAgICYjMzQ7c3R1YnMuYyYjMzQ7LAogICAgJiMzNDtzd3BoeS5jJiMzNDssCiAgICAmIzM0O3N3cGh5LmgmIzM0OywKICAgICYjMzQ7dGVyYW5ldGljcy5jJiMzNDssCiAgICAmIzM0O3VQRDYwNjIwLmMmIzM0OywKICAgICYjMzQ7dml0ZXNzZS5jJiMzNDssCiAgICAmIzM0O3hpbGlueF9nbWlpMnJnbWlpLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IFsKICAgICYjMzQ7YXF1YW50aWEmIzM0OywKICAgICYjMzQ7bWVkaWF0ZWsmIzM0OywKICAgICYjMzQ7bXNjYyYjMzQ7LAogICAgJiMzNDtxY29tJiMzNDssCiAgICAmIzM0O3JlYWx0ZWsmIzM0OwogIF0KfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ5MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUEhZIERyaXZlciBJbnN0YW50aWF0aW9uIFdpdGhvdXQgSGFyZHdhcmUqKgoKT2theSwgc28gSSBzZWUgYG1kaW9fYnVzLmNgIGlzIHByZXNlbnQsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgcHJpbWFyeSBxdWVzdGlvbiBub3cgaXM6IGNhbiBJIGluc3RhbnRpYXRlIGEgUEhZIGRyaXZlciB3aXRob3V0IGFjdHVhbGx5IGhhdmluZyB0aGUgcGh5c2ljYWwgaGFyZHdhcmU/IEkmIzM5O20gdHJ5aW5nIHRvIGV4cGxvcmUgdGhpcyB0aGVvcmV0aWNhbGx5LCBtYXliZSBmb3Igc29tZSBmdXp6aW5nIG9yIHRlc3RpbmcgcHVycG9zZXMuIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIGFib3V0IFN5emthbGxlciBoYXZpbmcgc29tZSBleGlzdGluZyBzdXBwb3J0IGZvciBmdXp6aW5nIHRoZXNlIGRyaXZlcnMuIExldCBtZSBkaWcgaW50byB0aGF0IGFuZCBzZWUgaWYgSSBjYW4gZmluZCBhbnkgU3l6a2FsbGVyIGRlc2NyaXB0aW9ucyByZWxhdGVkIHRvIFBIWXMuIFRoYXQgbWlnaHQgZ2l2ZSBtZSBzb21lIGNsdWVzIGFib3V0IGhvdyB0byBhcHByb2FjaCB0aGlzLCBvciBzaG93IHNvbWUga25vd24gdGVjaG5pcXVlcyBmb3IgdmlydHVhbGl6aW5nIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6XyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcxNwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEtlcm5lbCBFeHBsb3JhdGlvbioqCgpPa2F5LCBzbyBJIGhpdCBhIHdhbGwgd2l0aCB0aGUgYHN5el9gIHNlYXJjaCDigJMgdGhhdCYjMzk7cyBhIGRlYWQgZW5kLiBJIG5lZWQgYSBkaWZmZXJlbnQgYW5nbGUuIEhtbSwgbGV0IG1lIHRoaW5rIGFib3V0IHZpcnR1YWwgTURJTyBidXNlcy4gSXMgdGhlcmUgYW55dGhpbmcgaW4gdGhlIGtlcm5lbCB0aGF0IHdvdWxkIHNpbXVsYXRlIG9yIGVtdWxhdGUgYW4gTURJTyBidXM/IEkgbmVlZCBhIHdheSB0byBpbmplY3QgYSBQSFkgaW50byB0aGUgc3lzdGVtLCBhbmQgdGhhdCBzZWVtcyBsaWtlIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4KCkkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYGRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY2AuIFRoYXTigJlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgYWxsb3dzIGZvciBQSFlzIHdpdGggZml4ZWQgbGlua3MsIGJ1dCBpdCB1c2VzIGEgc3BlY2lmaWMsIGJ1aWx0LWluIGRyaXZlciwgYGZpeGVkX3BoeWAuIE5vdCBxdWl0ZSB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IsIGFuZCBpdCYjMzk7cyBwcm9iYWJseSB0b28gcmlnaWQgZm9yIHdoYXQgSSBuZWVkLgoKSeKAmXZlIHJ1bGVkIG91dCBhIGZldyBvdGhlciBvcHRpb25zLiBgbmV0ZGV2c2ltYCDigJMgbm8uIGB0dW5gL2B0YXBgIOKAkyBubyBNRElPLiBgbWFjODAyMTFfaHdzaW1gPyBOb3BlLiBgdmttc2A/IE5lZ2F0aXZlLiBJJiMzOTttIGVzc2VudGlhbGx5IGxvb2tpbmcgZm9yIGEgd2F5IHRvIHRyaWNrIHRoZSBrZXJuZWwgaW50byBiZWxpZXZpbmcgYSBzcGVjaWZpYyBQSFksIGluIHRoaXMgY2FzZSwgYGFpcl9lbjg4MTFoYCwgaXMgcHJlc2VudCBpbiBteSBRRU1VIGVudmlyb25tZW50LgoKU28sIGhvdyBkbyBJIGdvIGFib3V0IHByb2JpbmcgYGFpcl9lbjg4MTFoYCBlZmZlY3RpdmVseSBpbiBhIFFFTVUgc2V0dXA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUEhZIGRyaXZlciByZWdpc3RyYXRpb24gYW5kIGRpc2NvdmVyeSB3b3JrLiBJJiMzOTt2ZSBnb3QgaXQsIGEgUEhZIGRyaXZlciByZWdpc3RlcnMgaXRzZWxmIHVzaW5nIGBwaHlfZHJpdmVyX3JlZ2lzdGVyYC4gVGhlbiwgd2hlbiBhbiBNRElPIGJ1cyBpcyByZWdpc3RlcmVkLCBpdCBzY2FucyBmb3IgUEhZcy4gV2hlbiBpdCBmaW5kcyBhIG1hdGNoaW5nIFBIWSBJRCwgaXQgYmluZHMgdGhlIGRyaXZlci4KClRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHRoZW4gYmVjb21lcyBob3cgZG8gSSBjcmVhdGUgYSAqZmFrZSogTURJTyBidXMgdGhhdCByZXBvcnRzIHRoZSBQSFkgSUQgdGhhdCBJIHdhbnQ/IEkgbmVlZCBhIGZha2UgTURJTyBidXMgdGhhdCByZXR1cm5zIGEgc3Bvb2ZlZCBQSFkgSUQgZHVyaW5nIHJlYWRzLiBEb2VzIHRoZSBrZXJuZWwgaGF2ZSBhbnkgcHJlLWV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBjb3VsZCBoZWxwIG1lIGFjY29tcGxpc2ggdGhpcz8gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBkcml2ZXJzL25ldC9tZGlvL2AgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuIFRoYXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2FjcGlfbWRpby5jJiMzNDssCiAgICAmIzM0O2Z3bm9kZV9tZGlvLmMmIzM0OywKICAgICYjMzQ7bWRpby1haXJvaGEuYyYjMzQ7LAogICAgJiMzNDttZGlvLWFzcGVlZC5jJiMzNDssCiAgICAmIzM0O21kaW8tYmNtLWlwcm9jLmMmIzM0OywKICAgICYjMzQ7bWRpby1iY20tdW5pbWFjLmMmIzM0OywKICAgICYjMzQ7bWRpby1iaXRiYW5nLmMmIzM0OywKICAgICYjMzQ7bWRpby1jYXZpdW0uYyYjMzQ7LAogICAgJiMzNDttZGlvLWNhdml1bS5oJiMzNDssCiAgICAmIzM0O21kaW8tZ3Bpby5jJiMzNDssCiAgICAmIzM0O21kaW8taGlzaS1mZW1hYy5jJiMzNDssCiAgICAmIzM0O21kaW8taTJjLmMmIzM0OywKICAgICYjMzQ7bWRpby1pcHE0MDE5LmMmIzM0OywKICAgICYjMzQ7bWRpby1pcHE4MDY0LmMmIzM0OywKICAgICYjMzQ7bWRpby1tb3hhcnQuYyYjMzQ7LAogICAgJiMzNDttZGlvLW1zY2MtbWlpbS5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LWJjbS1pcHJvYy5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LWJjbTYzNjguYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1ncGlvLmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtbWVzb24tZzEyYS5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LW1lc29uLWd4bC5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LW1taW9yZWcuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1tdWx0aXBsZXhlci5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LmMmIzM0OywKICAgICYjMzQ7bWRpby1tdnVzYi5jJiMzNDssCiAgICAmIzM0O21kaW8tb2N0ZW9uLmMmIzM0OywKICAgICYjMzQ7bWRpby1waWM2NGhwc2MuYyYjMzQ7LAogICAgJiMzNDttZGlvLXJlYWx0ZWstcnRsOTMwMC5jJiMzNDssCiAgICAmIzM0O21kaW8tcmVnbWFwLmMmIzM0OywKICAgICYjMzQ7bWRpby1zdW40aS5jJiMzNDssCiAgICAmIzM0O21kaW8tdGh1bmRlci5jJiMzNDssCiAgICAmIzM0O21kaW8teGdlbmUuYyYjMzQ7LAogICAgJiMzNDtvZl9tZGlvLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgxNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gaW50byB0aGUgTWlzc2luZyBNRElPIE1vY2t1cCoqCgpPa2F5LCBzbyB0aGVyZSYjMzk7cyBubyBgbWRpby1tb2NrdXAuY2AgZmlsZS4gVGhhdCYjMzk7cyB1bmV4cGVjdGVkLiBXYWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgdGhhdCB0aGUgYGRzYV9sb29wYCBzZXR1cCBhY3R1YWxseSAqY3JlYXRlcyogYSBmYWtlIE1ESU8gYnVzLiBSaWdodCEgTGV0JiMzOTtzIGdldCBiYWNrIHRvIGBkc2FfbG9vcC5jYCBhbmQgcmVmcmVzaCBteSBtZW1vcnkuCgpBaCwgeWVzLiBJIHNlZSBpdCBub3cuIEl0IHVzZXMgYG1kaW9fZmluZF9idXMoJiMzNDtmaXhlZC0wJiMzNDspYC4gVGhhdCByaW5ncyBhIGJlbGwuIFRoYXQgc3RyaW5nLi4uIHRoYXQmIzM5O3MgdGhlIG5hbWUgb2YgdGhlIGBmaXhlZF9tZGlvX2J1c2AgdGhhdCYjMzk7cyBjcmVhdGVkIGJ5IGBmaXhlZF9waHkuY2AuIEkgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhhdCBwYXJ0IG9mIHRoZSBzZXR1cCwgc28gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgZml4ZWRfcGh5LmNgIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpeGVkX21kaW9fYnVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz0xOTM9RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3VucmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5NC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxOTU6c3RhdGljIGludCBfX2luaXQgZml4ZWRfbWRpb19idXNfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5Ni17XG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTIxOC19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MjE5Om1vZHVsZV9pbml0KGZpeGVkX21kaW9fYnVzX2luaXQpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTIyMC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoyMjE6c3RhdGljIHZvaWQgX19leGl0IGZpeGVkX21kaW9fYnVzX2V4aXQodm9pZClcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0yMjIte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0yMjUtfVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjIyNjptb2R1bGVfZXhpdChmaXhlZF9tZGlvX2J1c19leGl0KTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0yMjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDA5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFZlcnNhdGlsaXR5IG9mIGBmaXhlZF9tZGlvX2J1c2AqKgoKSG1tLCBpbnRlcmVzdGluZyBxdWVzdGlvbi4gQ2FuIEkgbGV2ZXJhZ2UgYGZpeGVkX21kaW9fYnVzYCB0byBwcm9iZSBqdXN0ICphbnkqIFBIWSBkcml2ZXI/IE15IGd1dCBzYXlzICYjMzQ7cHJvYmFibHksIGJ1dCB3aXRoIGNhdmVhdHMuJiMzNDsgTGV0IG1lIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgYnVzIGlzIHN0cnVjdHVyZWQuLi4gcmlnaHQsIGl0JiMzOTtzIGRlc2lnbmVkIHRvIHJlcHJlc2VudCBhIHN0YXRpY2FsbHkgZGVmaW5lZCBNRElPIGJ1cywgcGVyZmVjdCBmb3IgdGhvc2Ugc2NlbmFyaW9zIHdoZXJlIHRoZSBQSFkgY29uZmlndXJhdGlvbiBpcyBrbm93biBhdCBjb21waWxlIHRpbWUgb3Igc3lzdGVtIGluaXRpYWxpemF0aW9uLCBsaWtlIGluIFNvQ3Mgd2l0aCBpbnRlZ3JhdGVkIFBIWXMuIFRoZSBiZWF1dHkgaXMgaXQgYXZvaWRzIHRoZSB1c3VhbCBNRElPIHByb2JpbmcgZGFuY2UuCgpTbywgdGhlIGtleSBoZXJlIGlzIHdoZXRoZXIgdGhlIFBIWSBkcml2ZXIgKmV4cGVjdHMqIHRoaXMgc3RhdGljIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBleHBlY3RlZCBidXMuIExldCYjMzk7cyBkaWcgaW50byB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgZnVuY3Rpb25zIGxpa2UgYGZpeGVkX3BoeV9hZGRgIG9yIHNpbWlsYXIgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHNlZSB3aGF0IGFzc3VtcHRpb25zIHRoZXNlIGZpeGVkIFBIWSBkcml2ZXJzIG1ha2UgYWJvdXQgdGhlIHVuZGVybHlpbmcgTURJTyBidXMgaW5mcmFzdHJ1Y3R1cmUuIERvIHRoZXkgc2ltcGx5IGV4cGVjdCBhIHN0cnVjdHVyZSB3aXRoIGEgcGFydGljdWxhciBzZXQgb2Ygb3BlcmF0aW9ucywgb3IgYXJlIHRoZXJlIGRlZXBlciBkZXBlbmRlbmNpZXM/IElzIHRoZXJlIGEgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gdGhhdCB0aGlzIGJ1cyBhYnN0cmFjdGlvbiBpcyBwcmVzZW50aW5nIHRoYXQgaXMgdW5pdmVyc2FsIGVub3VnaCB0byBkbyBzbz8KCklmIHRoZSBkcml2ZXJzIGFyZSBmYWlybHkgZ2VuZXJpYyBpbiB0aGVpciBidXMgaW50ZXJhY3Rpb24sIGFuZCB0aGV5IHJlbHkgb24gdGhlIE1ESU8gYnVzJiMzOTtzIHN0YW5kYXJkIGFjY2VzcyBmdW5jdGlvbnMsIHRoZW4geWVzLCBpbiB0aGVvcnksIEkgbWlnaHQgYmUgYWJsZSB0byBnZXQgYXdheSB3aXRoIHVzaW5nIGBmaXhlZF9tZGlvX2J1c2AgdG8gYXR0YWNoIHRvIG1vcmUgYXJiaXRyYXJ5IFBIWSBkcml2ZXJzLiBJdCYjMzk7cyByZWFsbHkgYWJvdXQgdGhlIGRyaXZlciYjMzk7cyBleHBlY3RhdGlvbnMgYW5kIGhvdyBjbG9zZWx5IGl0IGJpbmRzIHRvIHRoZSBidXMmIzM5O3MgaW1wbGVtZW50YXRpb24uIEl0IGRlcGVuZHMgb24gd2hldGhlciB0aGUgYGZpeGVkX21kaW9fYnVzYCBhYnN0cmFjdGlvbiBpcyB0cnVseSAmIzM0O2J1cy1hZ25vc3RpYyYjMzQ7IGVub3VnaCB0byBzdWl0IHRoZSB3aWRlciB2YXJpZXR5IG9mIFBIWSBkcml2ZXJzIG91dCB0aGVyZS4KClRpbWUgdG8gY29uc3VsdCB0aGUgc291cmNlIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zml4ZWRfcGh5X2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODYyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgdGhlIGBmaXhlZF9waHlfcmVnaXN0ZXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBgZml4ZWRfcGh5X3JlZ2lzdGVyYC4gVGhpcyBpbXBsaWVzIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgUEhZIChQaHlzaWNhbCBMYXllcikgZGV2aWNlIGFuZCBhcmUgcHJvYmFibHkgdHJvdWJsZXNob290aW5nIG9yIGNvbmZpZ3VyaW5nIHNvbWUgYXNwZWN0IG9mIGl0cyBiZWhhdmlvci4gJiMzNDtGaXhlZCYjMzQ7IGlzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIHRoaXMgcmVnaXN0ZXIgaXMgZWl0aGVyIGhhcmQtY29kZWQgb3Igbm90IGR5bmFtaWNhbGx5IG5lZ290aWF0ZWQuIFRoaXMgY291bGQgaW5kaWNhdGUgYSBzdGF0aWMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgb3IgYSByZWdpc3RlciB0aGF0IG5lZWRzIHNwZWNpZmljIGF0dGVudGlvbiBmb3IgYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIHJldmlzaW9uIG9yIHNldHVwLiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIGltbWVkaWF0ZWx5IHNjYW5uaW5nIHRoZSBsYW5kc2NhcGUgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuOiBBcmUgd2UgbG9va2luZyBhdCBhIGtub3duIGlzc3VlIHdpdGggdGhpcyBQSFkgbW9kZWw/IElzIHRoaXMgcmVnaXN0ZXIgcmVsYXRlZCB0byBzcGVlZC9kdXBsZXggc2V0dGluZ3MsIHBvd2VyIG1hbmFnZW1lbnQsIG9yIHBlcmhhcHMgY2xvY2tpbmc/IERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgdGhpcyBjb3VsZCBiZSBhIHZpdGFsIHN0ZXAgaW4gaXNvbGF0aW5nIHRoZSBjYXVzZSBvZiBhIHByb2JsZW0gb3IgdmFsaWRhdGluZyBhIHBhcnRpY3VsYXIgc2V0dXAuIFVuZGVyc3RhbmRpbmcgdGhlIHB1cnBvc2UgYW5kIGNvbnN0cmFpbnRzIG9mIHRoaXMgcGFydGljdWxhciByZWdpc3RlciBpcyBub3cgcGFyYW1vdW50IGZvciBwcm9jZWVkaW5nIGVmZmVjdGl2ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaXhlZF9waHlfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTExOD1zdGF0aWMgaW50IGZpeGVkX3BoeV9nZXRfZnJlZV9hZGRyKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMzE6c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMi1cdFx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Mi19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTczOkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc0LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKHZvaWQpXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc2LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgxLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4MjpcdHJldHVybiBmaXhlZF9waHlfcmVnaXN0ZXIoXHUwMDI2c3RhdHVzLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODMtfVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4NDpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NzgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIHRoZSBQSFkgRGV2aWNlIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBgZml4ZWRfcGh5X3JlZ2lzdGVyYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgYnJpbmdpbmcgYSBQSFkgZGV2aWNlIG9ubGluZSwgc3BlY2lmaWNhbGx5IG9uIHRoZSBgZml4ZWRfbWRpb19idXNgLiAgVGhhdCBtYWtlcyBzZW5zZTsgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGZpeGVkIGNvbmZpZ3VyYXRpb24gaGVyZS4gQnV0IHdoYXQmIzM5O3MgdGhpcyBhYm91dCByZWdpc3RlcmluZyBpdCB3aXRoIGEgYHBoeV9pZGAgb2YgMD8gVGhhdCYjMzk7cyBhIGxpdHRsZSBzdHJhbmdlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHdvcmtpbmdzIG9mIGBmaXhlZF9waHlfcmVnaXN0ZXJgLiBUaW1lIHRvIGRpdmUgYmFjayBpbiBhbmQgZG91YmxlLWNoZWNrIGV4YWN0bHkgaG93IHRoYXQgcmVnaXN0cmF0aW9uIHByb2Nlc3MgdW5mb2xkcyBhbmQgd2hhdCBhc3N1bXB0aW9ucyBpdCBtYWtlcyBhYm91dCB0aGUgYHBoeV9pZGAuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpc24mIzM5O3QgZ29pbmcgdG8gY2F1c2UgY29uZmxpY3RzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZG93biB0aGUgbGluZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCYjMzk7cyBoYW5kbGVkIGludGVybmFsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzE6XHRzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXG4gMTMyOlx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuIDEzMzpcdHtcbiAxMzQ6XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHk7XG4gMTM1Olx0XHRpbnQgcGh5X2FkZHI7XG4gMTM2Olx0XHRpbnQgcmV0O1xuIDEzNzpcdFxuIDEzODpcdFx0cmV0ID0gc3dwaHlfdmFsaWRhdGVfc3RhdGUoc3RhdHVzKTtcbiAxMzk6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMTQwOlx0XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gMTQxOlx0XG4gMTQyOlx0XHRpZiAoIWZtYl9taWlfYnVzIHx8IGZtYl9taWlfYnVzLVx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRClcbiAxNDM6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7XG4gMTQ0Olx0XG4gMTQ1Olx0XHQvKiBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIFBIWSBhZGRyZXNzLCB1cCB0byBOVU1fRlAgKi9cbiAxNDY6XHRcdHBoeV9hZGRyID0gZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIoKTtcbiAxNDc6XHRcdGlmIChwaHlfYWRkciBcdTAwM2MgMClcbiAxNDg6XHRcdFx0cmV0dXJuIEVSUl9QVFIocGh5X2FkZHIpO1xuIDE0OTpcdFxuIDE1MDpcdFx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cyA9ICpzdGF0dXM7XG4gMTUxOlx0XHRmbWJfZml4ZWRfcGh5c1twaHlfYWRkcl0uc3RhdHVzLmxpbmsgPSB0cnVlO1xuIDE1MjpcdFxuIDE1MzpcdFx0cGh5ID0gZ2V0X3BoeV9kZXZpY2UoZm1iX21paV9idXMsIHBoeV9hZGRyLCBmYWxzZSk7XG4gMTU0Olx0XHRpZiAoSVNfRVJSKHBoeSkpIHtcbiAxNTU6XHRcdFx0Zml4ZWRfcGh5X2RlbChwaHlfYWRkcik7XG4gMTU2Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIDE1NzpcdFx0fVxuIDE1ODpcdFxuIDE1OTpcdFx0b2Zfbm9kZV9nZXQobnApO1xuIDE2MDpcdFx0cGh5LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGUgPSBucDtcbiAxNjE6XHRcdHBoeS1cdTAwM2Vpc19wc2V1ZG9fZml4ZWRfbGluayA9IHRydWU7XG4gMTYyOlx0XG4gMTYzOlx0XHRyZXQgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG4gMTY0Olx0XHRpZiAocmV0KSB7XG4gMTY1Olx0XHRcdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xuIDE2NjpcdFx0XHRvZl9ub2RlX3B1dChucCk7XG4gMTY3Olx0XHRcdGZpeGVkX3BoeV9kZWwocGh5X2FkZHIpO1xuIDE2ODpcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIDE2OTpcdFx0fVxuIDE3MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM0MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgUEhZIElEIFJldHJpZXZhbCoqCgpBbHJpZ2h0LCBzbyBgZ2V0X3BoeV9kZXZpY2VgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIHN1cHBvc2VkIHRvIHB1bGwgdGhlIFBIWSBJRCBvZmYgdGhlIE1ESU8gYnVzLiBUaGF0IG1ha2VzIHNlbnNlLCBzdGFuZGFyZCBwcmFjdGljZS4gQnV0IHRoZSBxdWVzdGlvbiBpczogaG93IGlzIHRoZSBNRElPIGJ1cyAqYWN0dWFsbHkqIGJlaW5nIGFjY2Vzc2VkIGhlcmU/IEkgbmVlZCB0byB0cmFjZSB0aGUgcmVhZCBvcGVyYXRpb24gdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMga29zaGVyLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBgZm1iX21paV9idXNgIGlzIGRvaW5nOyB0aGF0IGxpa2VseSBob2xkcyB0aGUgbG93ZXItbGV2ZWwgYnVzIGFjY2VzcyBjb2RlLiBBbmQgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBkYXRhIGFjY2VzcywgSSBzaG91bGQgbG9vayBkaXJlY3RseSBpbnRvIGBmaXhlZF9tZGlvX3JlYWRgLiBUaGF0JiMzOTtzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIHNlZSB0aGUgbG93LWxldmVsIHJlZ2lzdGVyIGludGVyYWN0aW9ucy4gSSBzdXNwZWN0IEkgbWlnaHQgZmluZCB0aGUgc3BlY2lmaWMgTURJTyByZWFkIHNlcXVlbmNlIGFuZCBhZGRyZXNzIHNldHVwIHRoZXJlLCBtYXliZSB3aXRoIHNvbWUgYml0LWJhbmdpbmcgZGV0YWlscyBkZXBlbmRpbmcgb24gdGhlIGhhcmR3YXJlLiBVbmRlcnN0YW5kaW5nIHRoYXQgd2lsbCB2YWxpZGF0ZSB0aGUgZW50aXJlIFBIWSBJRCByZXRyaWV2YWwgc2VxdWVuY2UgYW5kIGhlbHAgc3BvdCBhbnkgcG90ZW50aWFsIGlzc3VlcywgbGlrZSBpbmNvcnJlY3QgYWRkcmVzc2luZyBvciB0aW1pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpeGVkX21kaW9fcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9NTk9RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02MC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo2MTpzdGF0aWMgaW50IGZpeGVkX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdfbnVtKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTYyLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9MTk1PXN0YXRpYyBpbnQgX19pbml0IGZpeGVkX21kaW9fYnVzX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjA0LVx0Zm1iX21paV9idXMtXHUwMDNlbmFtZSA9IFwmIzM0O0ZpeGVkIE1ESU8gQnVzXCYjMzQ7O1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjIwNTpcdGZtYl9taWlfYnVzLVx1MDAzZXJlYWQgPSBcdTAwMjZmaXhlZF9tZGlvX3JlYWQ7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjA2LVx0Zm1iX21paV9idXMtXHUwMDNld3JpdGUgPSBcdTAwMjZmaXhlZF9tZGlvX3dyaXRlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkwMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uOiBgZml4ZWRfbWRpb19yZWFkYCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgb24gbXkgbWluZCBpcyBgZml4ZWRfbWRpb19yZWFkYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gJiMzNDtGaXhlZCYjMzQ7IGltcGxpZXMgYSBzcGVjaWZpYyBvciBwcmVkZXRlcm1pbmVkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBNRElPIHJlYWQgb3BlcmF0aW9uLiBUaGlzIGltbWVkaWF0ZWx5IHJhaXNlcyBzb21lIHF1ZXN0aW9uczoKCiogICBXaGF0JiMzOTtzIGZpeGVkPyBJcyBpdCB0aGUgTURJTyBhZGRyZXNzLCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyB3aXRoaW4gdGhhdCBNRElPIGRldmljZSwgdGhlIGRhdGEgZm9ybWF0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSAmIzM0O2ZpeGVkJiMzNDsgYXBwcm9hY2ggdXN1YWxseSBzYWNyaWZpY2VzIHNvbWUgZGVncmVlIG9mIGZsZXhpYmlsaXR5IGZvciBwcmVkaWN0YWJsZSBiZWhhdmlvciBvciBwb3RlbnRpYWxseSwgb3B0aW1pemF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdHJhZGUtb2ZmcyBhdCBwbGF5LgoqICAgV2h5ICYjMzQ7Zml4ZWQmIzM0Oz8gSXMgdGhpcyBmb3IgYSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIGEgcGFydGljdWxhciB0ZXN0IHNldHVwLCBvciBwZXJoYXBzIGEgc2ltcGxpZmllZCBkcml2ZXIgaW1wbGVtZW50YXRpb24/IENvbnRleHQgaXMga2V5IGhlcmUuIElzIGl0IGEgY29ybmVyIGNhc2Ugb3IgdGhlIGNvbW1vbiBkZWZhdWx0PwoqICAgV2hhdCBpcyBiZWluZyByZWFkIHdpdGggTURJTz8gV2hhdCBzeXN0ZW0gdXNlcyB0aGlzPyBXaGF0IHdpbGwgaXQgdGVsbCBtZT8KCk15IG1pbmQgc3RhcnRzIHRvIGNodXJuIHRocm91Z2ggcmVsYXRlZCBjb25jZXB0czogTURJTyAoTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCkgaXMgb2J2aW91c2x5IGEgc2VyaWFsIGludGVyZmFjZSBjb21tb25seSB1c2VkIGZvciBjb25maWd1cmluZyBhbmQgbW9uaXRvcmluZyBQSFlzIChQaHlzaWNhbCBMYXllciBUcmFuc2NlaXZlcnMpLiBTbywgaWYgSSB3ZXJlIHRvIGJlIHVzaW5nIHRoaXMsIGl0JiMzOTtzIHNvbWV0aGluZyBsb3dlci1sZXZlbCBoYXJkd2FyZSByZWxhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQ6CgoqICAgRG9lcyB0aGlzIGltcGxlbWVudGF0aW9uIGhhbmRsZSBlcnJvciBjb25kaXRpb25zIGFuZCByZXRyaWVzPyAmIzM0O0ZpeGVkJiMzNDsgbWlnaHQgbWVhbiBzaW1wbGVyIGVycm9yIGhhbmRsaW5nLgoqICAgV2hhdCYjMzk7cyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmU/IElzIHRoaXMgYSBzdGFuZGFsb25lIGZ1bmN0aW9uLCBvciBkb2VzIGl0IGZpdCBpbnRvIGEgbGFyZ2VyIE1ESU8gZHJpdmVyIG9yIGZyYW1ld29yaz8KKiAgIEhvdyBkb2VzIGl0IGhhbmRsZSB0aGUgdGltaW5nIGNvbnN0cmFpbnRzIGluaGVyZW50IGluIE1ESU8gY29tbXVuaWNhdGlvbj8gRml4ZWQgTURJTyBjb3VsZCBpbXBseSBzcGVjaWZpYyB0aW1pbmcgbG9vcHMuCiogICBXaGF0IGFib3V0IGludGVycnVwdCBoYW5kbGluZywgaWYgYW55PyBQZXJoYXBzIHRoZSAmIzM0O2ZpeGVkJiMzNDsgbmF0dXJlIHNpbXBsaWZpZXMgdGhlIGludGVycnVwdCBtYW5hZ2VtZW50LgoKSSYjMzk7bSBzdGFydGluZyB0byBidWlsZCBhIG1lbnRhbCBwaWN0dXJlIG9mIHdoYXQgSSBleHBlY3QgdG8gZmluZC4gTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMgdG8gY29uZmlybSB0aGVzZSBhc3N1bXB0aW9ucyBhbmQgZXhwbG9yZSB0aGUgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjE6XHRzdGF0aWMgaW50IGZpeGVkX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdfbnVtKVxuICA2MjpcdHtcbiAgNjM6XHRcdHN0cnVjdCBmaXhlZF9waHkgKmZwO1xuICA2NDpcdFxuICA2NTpcdFx0ZnAgPSBmaXhlZF9waHlfZmluZChwaHlfYWRkcik7XG4gIDY2Olx0XHRpZiAoIWZwKVxuICA2NzpcdFx0XHRyZXR1cm4gMHhmZmZmO1xuICA2ODpcdFxuICA2OTpcdFx0aWYgKGZwLVx1MDAzZWxpbmtfdXBkYXRlKVxuICA3MDpcdFx0XHRmcC1cdTAwM2VsaW5rX3VwZGF0ZShmcC1cdTAwM2VwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LCBcdTAwMjZmcC1cdTAwM2VzdGF0dXMpO1xuICA3MTpcdFxuICA3MjpcdFx0cmV0dXJuIHN3cGh5X3JlYWRfcmVnKHJlZ19udW0sIFx1MDAyNmZwLVx1MDAzZXN0YXR1cyk7XG4gIDczOlx0fVxuICA3NDpcdFxuICA3NTpcdHN0YXRpYyBpbnQgZml4ZWRfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdfbnVtLFxuICA3NjpcdFx0XHRcdCAgICB1MTYgdmFsKVxuICA3NzpcdHtcbiAgNzg6XHRcdHJldHVybiAwO1xuICA3OTpcdH1cbiAgODA6XHRcbiAgODE6XHQvKlxuICA4MjpcdCAqIElmIHNvbWV0aGluZyB3ZWlyZCBpcyByZXF1aXJlZCB0byBiZSBkb25lIHdpdGggbGluay9zcGVlZCxcbiAgODM6XHQgKiBuZXR3b3JrIGRyaXZlciBpcyBhYmxlIHRvIGFzc2lnbiBhIGZ1bmN0aW9uIHRvIGltcGxlbWVudCB0aGlzLlxuICA4NDpcdCAqIE1heSBiZSB1c2VmdWwgZm9yIFBIWSYjMzk7cyB0aGF0IG5lZWQgdG8gYmUgc29mdHdhcmUtZHJpdmVuLlxuICA4NTpcdCAqL1xuICA4NjpcdGludCBmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gIDg3Olx0XHRcdFx0ICAgICAgaW50ICgqbGlua191cGRhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICosXG4gIDg4Olx0XHRcdFx0XHRcdFx0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICopKVxuICA4OTpcdHtcbiAgOTA6XHRcdHN0cnVjdCBmaXhlZF9waHkgKmZwO1xuICA5MTpcdFxuICA5MjpcdFx0aWYgKCFwaHlkZXYgfHwgIXBoeWRldi1cdTAwM2VtZGlvLmJ1cylcbiAgOTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDk0Olx0XG4gIDk1Olx0XHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuICA5NjpcdFx0aWYgKCFmcClcbiAgOTc6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gIDk4Olx0XG4gIDk5Olx0XHRmcC1cdTAwM2VsaW5rX3VwZGF0ZSA9IGxpbmtfdXBkYXRlO1xuIDEwMDpcdFx0ZnAtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkxOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBgc3dwaHlfcmVhZF9yZWdgIGZvciBQSFkgSUQgUmV0cmlldmFsKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgc3dwaHlfcmVhZF9yZWdgIGlzIHN1cHBvc2VkIHRvIGdpdmUgdXMgdGhlIFBIWSBJRC4gVGhhdCBtYWtlcyBzZW5zZSwgYSBzdGFuZGFyZCBhcHByb2FjaC4gTm93LCBteSBmaXJzdCBtb3ZlIGlzIHRvIGRpZyBpbiBhbmQgdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgY29uZmlybSB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgcmVhZGluZyB0aGlzIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGF0IGZ1bmN0aW9uJiMzOTtzIGltcGxlbWVudGF0aW9uLiBXaGF0JiMzOTtzIHRoZSByZWdpc3RlciBtYXAgaW4gdGhlIHVuZGVybHlpbmcgc2lsaWNvbiwgYW5kIHdoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHJldHVybiB2YWx1ZT8gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlLiBJJiMzOTttIHRoaW5raW5nIHRoZSBsb2dpY2FsIGZsb3cgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGFjY2VzcywgcG9zc2libHkgd2l0aCBzb21lIGVycm9yIGNoZWNraW5nLiBCdXQgSSBuZWVkIHRvIGJlIHN1cmUuIEkmIzM5O2xsIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCBpdCBhbmQgbWFrZSBzdXJlIHRoYXQgaXQgcmV0dXJucyB0aGUgZXhwZWN0ZWQgUEhZIElELgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd3BoeV9yZWFkX3JlZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTYxPXN0YXRpYyBpbnQgZml4ZWRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0pXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTcxLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjcyOlx0cmV0dXJuIHN3cGh5X3JlYWRfcmVnKHJlZ19udW0sIFx1MDAyNmZwLVx1MDAzZXN0YXR1cyk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNzMtfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzM1OD1zdGF0aWMgaW50IHBoeWxpbmtfbWlpX2VtdWxfcmVhZCh1bnNpZ25lZCBpbnQgcmVnLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM3MC1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzM3MTpcdHZhbCA9IHN3cGh5X3JlYWRfcmVnKHJlZywgXHUwMDI2ZnMpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzcyLVx0aWYgKHJlZyA9PSBNSUlfQk1TUikge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jPTEwNj1FWFBPUlRfU1lNQk9MX0dQTChzd3BoeV92YWxpZGF0ZV9zdGF0ZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtMTA4LS8qKlxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6MTA5OiAqIHN3cGh5X3JlYWRfcmVnIC0gcmV0dXJuIGEgTUlJIHJlZ2lzdGVyIGZyb20gdGhlIGZpeGVkIHBoeSBzdGF0ZVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtMTEwLSAqIEByZWc6IE1JSSByZWdpc3RlclxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExNC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jOjExNTppbnQgc3dwaHlfcmVhZF9yZWcoaW50IHJlZywgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtMTE2LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy0xNzQtfVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6MTc1OkVYUE9SVF9TWU1CT0xfR1BMKHN3cGh5X3JlYWRfcmVnKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaD03PWludCBzd3BoeV92YWxpZGF0ZV9zdGF0ZShjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpO1xuZHJpdmVycy9uZXQvcGh5L3N3cGh5Lmg6ODppbnQgc3dwaHlfcmVhZF9yZWcoaW50IHJlZywgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKTtcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oLTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzE4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYHN3cGh5X3JlYWRfcmVnYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYHN3cGh5X3JlYWRfcmVnYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvcGh5L3N3cGh5LmNgIGZpbGUuIEkmIzM5O20gYWxyZWFkeSB2aXN1YWxpemluZyB0aGUgbGlrZWx5IGFyY2hpdGVjdHVyZSwga25vd2luZyBpdCByZXNpZGVzIHdpdGhpbiB0aGUgc3dpdGNoIFBIWSBkcml2ZXIuIFRoaXMgbWVhbnMgSSBleHBlY3QgdG8gZmluZCByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMsIHNwZWNpZmljIHRvIHdoYXRldmVyIGhhcmR3YXJlIGFic3RyYWN0aW9uIHRoZSBzd2l0Y2ggUEhZIHVzZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFzIHRvIHRoZSB1bmRlcmx5aW5nIEkyQy9TUEkvTURJTyBidXMgaW50ZXJhY3Rpb25zLCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBtYXBwaW5nLCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgYW55IGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBvciB3b3JrYXJvdW5kcyBpbiB0aGlzIHJlYWQgZnVuY3Rpb24uIE15IGV4cGVydGlzZSBhbGxvd3MgbWUgdG8gYW50aWNpcGF0ZSBjb21tb24gaXNzdWVzIGxpa2UgdGltaW5nIGNvbnN0cmFpbnRzLCByZWFkLW1vZGlmeS13cml0ZSBzZXF1ZW5jZXMgKGlmIGFwcGxpY2FibGUpLCBhbmQgYW55IHBvdGVudGlhbCBlcnJvciBoYW5kbGluZyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBmb3Igcm9idXN0IG9wZXJhdGlvbi4gVGhlIGFpbSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgYSByZWdpc3RlciBpcyByZWFkIGZyb20gYSBzd2l0Y2ggUEhZLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9zd3BoeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTU6XHRpbnQgc3dwaHlfcmVhZF9yZWcoaW50IHJlZywgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKVxuIDExNjpcdHtcbiAxMTc6XHRcdGludCBzcGVlZF9pbmRleCwgZHVwbGV4X2luZGV4O1xuIDExODpcdFx0dTE2IGJtc3IgPSBCTVNSX0FORUdDQVBBQkxFO1xuIDExOTpcdFx0dTE2IGVzdGF0ID0gMDtcbiAxMjA6XHRcdHUxNiBscGFnYiA9IDA7XG4gMTIxOlx0XHR1MTYgbHBhID0gMDtcbiAxMjI6XHRcbiAxMjM6XHRcdGlmIChyZWcgXHUwMDNlIE1JSV9SRUdTX05VTSlcbiAxMjQ6XHRcdFx0cmV0dXJuIC0xO1xuIDEyNTpcdFxuIDEyNjpcdFx0c3BlZWRfaW5kZXggPSBzd3BoeV9kZWNvZGVfc3BlZWQoc3RhdGUtXHUwMDNlc3BlZWQpO1xuIDEyNzpcdFx0aWYgKFdBUk5fT04oc3BlZWRfaW5kZXggXHUwMDNjIDApKVxuIDEyODpcdFx0XHRyZXR1cm4gMDtcbiAxMjk6XHRcbiAxMzA6XHRcdGR1cGxleF9pbmRleCA9IHN0YXRlLVx1MDAzZWR1cGxleCA/IFNXTUlJX0RVUExFWF9GVUxMIDogU1dNSUlfRFVQTEVYX0hBTEY7XG4gMTMxOlx0XG4gMTMyOlx0XHRibXNyIHw9IHNwZWVkW3NwZWVkX2luZGV4XS5ibXNyIFx1MDAyNiBkdXBsZXhbZHVwbGV4X2luZGV4XS5ibXNyO1xuIDEzMzpcdFx0ZXN0YXQgfD0gc3BlZWRbc3BlZWRfaW5kZXhdLmVzdGF0IFx1MDAyNiBkdXBsZXhbZHVwbGV4X2luZGV4XS5lc3RhdDtcbiAxMzQ6XHRcbiAxMzU6XHRcdGlmIChzdGF0ZS1cdTAwM2VsaW5rKSB7XG4gMTM2Olx0XHRcdGJtc3IgfD0gQk1TUl9MU1RBVFVTIHwgQk1TUl9BTkVHQ09NUExFVEU7XG4gMTM3Olx0XG4gMTM4Olx0XHRcdGxwYSAgIHw9IHNwZWVkW3NwZWVkX2luZGV4XS5scGEgICBcdTAwMjYgZHVwbGV4W2R1cGxleF9pbmRleF0ubHBhO1xuIDEzOTpcdFx0XHRscGFnYiB8PSBzcGVlZFtzcGVlZF9pbmRleF0ubHBhZ2IgXHUwMDI2IGR1cGxleFtkdXBsZXhfaW5kZXhdLmxwYWdiO1xuIDE0MDpcdFxuIDE0MTpcdFx0XHRpZiAoc3RhdGUtXHUwMDNlcGF1c2UpXG4gMTQyOlx0XHRcdFx0bHBhIHw9IExQQV9QQVVTRV9DQVA7XG4gMTQzOlx0XG4gMTQ0Olx0XHRcdGlmIChzdGF0ZS1cdTAwM2Vhc3ltX3BhdXNlKVxuIDE0NTpcdFx0XHRcdGxwYSB8PSBMUEFfUEFVU0VfQVNZTTtcbiAxNDY6XHRcdH1cbiAxNDc6XHRcbiAxNDg6XHRcdHN3aXRjaCAocmVnKSB7XG4gMTQ5Olx0XHRjYXNlIE1JSV9CTUNSOlxuIDE1MDpcdFx0XHRyZXR1cm4gQk1DUl9BTkVOQUJMRTtcbiAxNTE6XHRcdGNhc2UgTUlJX0JNU1I6XG4gMTUyOlx0XHRcdHJldHVybiBibXNyO1xuIDE1MzpcdFx0Y2FzZSBNSUlfUEhZU0lEMTpcbiAxNTQ6XHRcdGNhc2UgTUlJX1BIWVNJRDI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjQwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgZXhwZXJpZW5jaW5nIGl0OgoKKipEZWNvZGluZyBUaGlzIFJlZ2lzdGVyIFJlYWRpbmcqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgb3V0cHV0IGFuZCBJJiMzOTttIHNlZWluZyBzb21ldGhpbmcgcmVhbGx5IHVuZXhwZWN0ZWQgd2l0aCB0aGlzIGBzd3BoeV9yZWFkX3JlZ2AgZnVuY3Rpb24uIEl0JiMzOTtzIHJldHVybmluZyB6ZXJvIGZvciBib3RoIGBNSUlfUEhZU0lEMWAgYW5kIGBNSUlfUEhZU0lEMmAuIE5vdywgSSBrbm93IHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhvc2UgcmVnaXN0ZXJzIOKAkyB0aGV5IHNob3VsZCBiZSBob2xkaW5nIHRoZSBQSFkgaWRlbnRpZmllciwgcmlnaHQ/IFVzdWFsbHksIHlvdSBnZXQgc29tZSBub24temVybyB2YWx1ZSB0aGF0IGluZGljYXRlcyB0aGUgc3BlY2lmaWMgUEhZIG1vZGVsLiBUaGlzIHplcm8gcmVhZGluZyBpcyBkZWZpbml0ZWx5IGEgcmVkIGZsYWcsIGFuZCBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIFNvbWV0aGluZyBpc24mIzM5O3Qgd29ya2luZyBhcyBJIHdvdWxkIGV4cGVjdCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IEkgYW0gZ2V0dGluZyBhIHplcm8gcmVzdWx0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9zd3BoeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTM6XHRcdGNhc2UgTUlJX1BIWVNJRDE6XG4gMTU0Olx0XHRjYXNlIE1JSV9QSFlTSUQyOlxuIDE1NTpcdFx0XHRyZXR1cm4gMDtcbiAxNTY6XHRcdGNhc2UgTUlJX0xQQTpcbiAxNTc6XHRcdFx0cmV0dXJuIGxwYTtcbiAxNTg6XHRcdGNhc2UgTUlJX1NUQVQxMDAwOlxuIDE1OTpcdFx0XHRyZXR1cm4gbHBhZ2I7XG4gMTYwOlx0XHRjYXNlIE1JSV9FU1RBVFVTOlxuIDE2MTpcdFx0XHRyZXR1cm4gZXN0YXQ7XG4gMTYyOlx0XG4gMTYzOlx0XHQvKlxuIDE2NDpcdFx0ICogV2UgZG8gbm90IHN1cHBvcnQgZW11bGF0aW5nIENsYXVzZSA0NSBvdmVyIENsYXVzZSAyMiByZWdpc3RlclxuIDE2NTpcdFx0ICogcmVhZHMuICBSZXR1cm4gYW4gZXJyb3IgaW5zdGVhZCBvZiBib2d1cyBkYXRhLlxuIDE2NjpcdFx0ICovXG4gMTY3Olx0XHRjYXNlIE1JSV9NTURfQ1RSTDpcbiAxNjg6XHRcdGNhc2UgTUlJX01NRF9EQVRBOlxuIDE2OTpcdFx0XHRyZXR1cm4gLTE7XG4gMTcwOlx0XG4gMTcxOlx0XHRkZWZhdWx0OlxuIDE3MjpcdFx0XHRyZXR1cm4gMHhmZmZmO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTEzNgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBIWSBJZGVudGlmaWNhdGlvbiBhbmQgVmlydHVhbCBNRElPIEJ1c2VzKioKCk9rYXksIHNvIHRoaXMgYGZpeGVkX3BoeWAgZHJpdmVyIGNvbnNpc3RlbnRseSByZXR1cm5zIGEgUEhZIElEIG9mIDAuIFRoYXQgY29uZmlybXMgaXQ6IEkgY2FuJiMzOTt0IHJlbHkgb24gaXQgdG8gcHJvYmUganVzdCBhbnkgYXJiaXRyYXJ5IFBIWSBkcml2ZXIuIEl0JiMzOTtzIHRvbyBsaW1pdGVkIGZvciBnZW5lcmFsLXB1cnBvc2UgdXNlLCB3aGljaCBpcyBhIGtleSByZXN0cmljdGlvbiBJJiMzOTt2ZSBiZWVuIHRyeWluZyB0byBrZWVwIGluIG1pbmQuCgpOb3csIGxldCYjMzk7cyB0aGluayBiaWdnZXIuIElzIHRoZXJlIHNvbWUgb3RoZXIga2luZCBvZiB2aXJ0dWFsIE1ESU8gYnVzIEkgY2FuIGxldmVyYWdlPyBJIGtlZXAgdGhpbmtpbmcgYWJvdXQgdGhlc2UgdmlydHVhbCBlbnZpcm9ubWVudHMuCgpXaGF0IGFib3V0IGBkc2FfbG9vcGA/IEkgc2VlIGl0IHVzZXMgdGhlIGBmaXhlZC0wYCBidXMsIHdoaWNoIEkmIzM5O3ZlIHNlZW4gYmVmb3JlLCBidXQgaXQgYWxzbyByZWdpc3RlcnMgaXRzIG93biBgc3dpdGNoX21kaW9kZXZgLiBBaGEhIFRoYXQmIzM5O3MgaXQhIGBkc2FfbG9vcGAgKnJlZ2lzdGVycyogYSBEU0Egc3dpdGNoLiBBbmQgdGhhdCBEU0Egc3dpdGNoIGhhcyBpdHMgKm93biogTURJTyBidXMsIHRoYXQgYGRzLSZndDt1c2VyX21paV9idXNgLiBJIG5lZWQgdG8gZGlnIGludG8gdGhhdCBhbmQgc2VlIGhvdyB0aGF0IGJ1cyBpcyBjb25zdHJ1Y3RlZC4KClRpbWUgdG8gZGl2ZSBpbnRvIGBkc2FfbG9vcF9waHlfcmVhZGAgYW5kIHNlZSB3aGF0IHRyaWNrcyBpdCYjMzk7cyBnb3QgdXAgaXRzIHNsZWV2ZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBEU0EgdmlydHVhbCBidXMgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgdW5kZXJseWluZyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODQ6XHRzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXG4gMTg1Olx0e1xuIDE4NjpcdFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbiAxODc6XHRcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG4gMTg4Olx0XHRpbnQgcmV0O1xuIDE4OTpcdFxuIDE5MDpcdFx0cmV0ID0gbWRpb2J1c19yZWFkX25lc3RlZChidXMsIHBzLVx1MDAzZXBvcnRfYmFzZSAmIzQzOyBwb3J0LCByZWdudW0pO1xuIDE5MTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAxOTI6XHRcdFx0cHMtXHUwMDNlcG9ydHNbcG9ydF0ubWliW0RTQV9MT09QX1BIWV9SRUFEX0VSUl0udmFsJiM0MzsmIzQzOztcbiAxOTM6XHRcdGVsc2VcbiAxOTQ6XHRcdFx0cHMtXHUwMDNlcG9ydHNbcG9ydF0ubWliW0RTQV9MT09QX1BIWV9SRUFEX09LXS52YWwmIzQzOyYjNDM7O1xuIDE5NTpcdFxuIDE5NjpcdFx0cmV0dXJuIHJldDtcbiAxOTc6XHR9XG4gMTk4Olx0XG4gMTk5Olx0c3RhdGljIGludCBkc2FfbG9vcF9waHlfd3JpdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiAyMDA6XHRcdFx0XHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4gMjAxOlx0e1xuIDIwMjpcdFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbiAyMDM6XHRcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODgyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFBIWSBJRCBhbmQgVmlydHVhbCBNRElPIEJ1c2VzKioKCk9rYXksIHNvIGBkc2FfbG9vcF9waHlfcmVhZGAgaXMgZXNzZW50aWFsbHkgcGFzc2luZyBpdHMgcmVhZHMgYWxvbmcgdG8gYHBzLSZndDtidXNgLCB3aGljaCBpcyB0aGUgYGZpeGVkLTBgIGJ1cywgcmlnaHQ/IEFuZCB0aGF0JiMzOTtzIHdoeSBpdCYjMzk7cyByZXR1cm5pbmcgYSB6ZXJvIGZvciB0aGUgUEhZIElELiBNYWtlcyBzZW5zZS4gQnV0IHRoYXQgYnJpbmdzIHVwIGFub3RoZXIgdGhvdWdodC4uLiB3aGF0IGFib3V0IHRoZSBlbHVzaXZlIGBtZGlvLW1vY2t1cGA/IEkgd2FzIHNlYXJjaGluZyBmb3IgaXQsIGFuZCBpdCYjMzk7cyBub3doZXJlIHRvIGJlIGZvdW5kLiAKClRoYXQgcmFpc2VzIGEgbW9yZSBmdW5kYW1lbnRhbCBxdWVzdGlvbjogQ2FuIEkgY3JlYXRlIGEgKnZpcnR1YWwqIE1ESU8gYnVzLCBjb21wbGV0ZWx5IGZyb20gdXNlcnNwYWNlPyBMaWtlIGhvdyBgbmV0ZGV2c2ltYCBjcmVhdGVzIGEgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlPyBIbW0sIHRoYXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgaWRlYS4gTGV0IG1lIGRpdmUgaW50byBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2AgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyB0aGVyZSBJIGNhbiBsZXZlcmFnZSwgb3IgYXQgbGVhc3QgbGVhcm4gZnJvbSwgdG8gc2ltdWxhdGUgYW4gTURJTyBidXMuIFRoaXMgZmVlbHMgbGlrZSBhIHByb21pc2luZyBhdmVudWUgdG8gZXhwbG9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjI3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFRob3VnaHRzIG9uIFRlc3RpbmcgUEhZIERyaXZlcnMgaW4gU3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHRlc3QgUEhZIGRyaXZlcnMgZWZmZWN0aXZlbHkgd2l0aGluIHN5emthbGxlci4gTXkgaW5pdGlhbCB0aG91Z2h0cyB3ZXJlLCBjb3VsZCBJIHVzZSBgbWFjODAyMTFfaHdzaW1gPyBObywgdGhhdCYjMzk7cyBub3QgaXQuIFRoZW4gSSBsb29rZWQgYXQgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uY2AsIHdoaWNoIHVzZXMgR1BJT3MsIGFuZCBgZHJpdmVycy9uZXQvcGh5L21kaW8tYml0YmFuZy5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLWJjbS11bmltYWMuY2AuIE5vdGhpbmcgY2xpY2tlZC4KClRoZSBjb3JlIHByb2JsZW0gaXMgdGhhdCBzeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBhIHZpcnR1YWwgTURJTyBidXMuIFdpdGhvdXQgaXQsIHByb2JpbmcgUEhZIGRyaXZlcnMgaW4gUUVNVSBiZWNvbWVzIGltcG9zc2libGUgdW5sZXNzIHRoZXJlJiMzOTtzIGFuIGVtdWxhdGVkIG5ldHdvcmsgY2FyZCB0aGF0IGV4cG9zZXMgYW4gTURJTyBidXMgd2l0aCB0aGF0ICpzcGVjaWZpYyogUEhZIGF0dGFjaGVkLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgUUVNVSBldmVuICplbXVsYXRlKiBhIG5ldHdvcmsgY2FyZCB3aXRoIGFuIEFpcm9oYSBFTjg4MTFIIFBIWT8gVGhhdCYjMzk7cyBhIDIuNSBHaWdhYml0IFBIWS4gUUVNVSBlbXVsYXRlcyB0aGluZ3MgbGlrZSBlMTAwMCwgZTEwMDBlLCBydGw4MTM5LCBwY25ldCwgYW5kIGEgYnVuY2ggb2Ygb3RoZXJzLCBidXQgbm9uZSBvZiB0aG9zZSB1c2UgdGhhdCBBaXJvaGEgUEhZLgoKQWxyaWdodCwgc28gd2hhdCBhYm91dCBkZXZpY2UgdHJlZSBvdmVybGF5cyBhbmQgYGZ3bm9kZV9tZGlvLmNgPyBJZiBzeXprYWxsZXIgY291bGQgaW5qZWN0IGEgZGV2aWNlIHRyZWUgb3ZlcmxheSwgSSBjb3VsZCBjcmVhdGUgYSBwbGF0Zm9ybSBkZXZpY2Ugd2l0aCBhbiBNRElPIGJ1cyBhbmQgYSBQSFkgbm9kZS4gQnV0IHRoYXQgc3RpbGwgbGVhdmVzIG1lIG5lZWRpbmcgYW4gTURJTyBidXMgZHJpdmVyIHRoYXQgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgZGV2aWNlIHRyZWUgYW5kICpkb2VzbiYjMzk7dCogbmVlZCByZWFsIGhhcmR3YXJlLiBJIGNoZWNrZWQgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1tb2NrdXAuY2AgYmVmb3JlLCBidXQgaXQmIzM5O3Mgbm90IHRoZSBhbnN3ZXIuIFdoYXQgYWJvdXQgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmNgPyBJdCB1c2VzIEdQSU9zLiBNYXliZSBJIGNhbiBtb2NrIHRoZW0gd2l0aCBgZ3Bpby1tb2NrdXBgPwoKRXZlbiBpZiBJIGNvdWxkIHVzZSBgZ3Bpby1tb2NrdXBgIHRvIGNyZWF0ZSBhbiBNRElPIGJ1cyB1c2luZyBgbWRpby1ncGlvYCwgSSYjMzk7ZCBiZSBqdXN0IGJpdGJhbmdpbmcgR1BJT3MuIFRvIGFjdHVhbGx5ICplbXVsYXRlKiBhIFBIWSwgSSYjMzk7ZCBuZWVkIHNvbWV0aGluZyBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aG9zZSBHUElPcyB0aGF0IGNhbiByZXNwb25kIHRvIHRoZSBiaXRiYW5naW5nIGFuZCByZXR1cm4gdGhlIGNvcnJlY3QgUEhZIElELiBUaGF0IHNlZW1zIGltcG9zc2libGUgd2l0aG91dCBzb21lIHNwZWNpZmljIG1vY2sgZGV2aWNlLgoKV2FpdCBhIG1pbnV0ZS4uLiB3aGF0IGlmIEkgaW5zdGFudGlhdGUgdGhlIFBIWSBkcml2ZXIgKmRpcmVjdGx5KiB2aWEgdGhlIGRldmljZSB0cmVlPyBJbiBgb2ZfbWRpby5jYCwgYG9mX21kaW9idXNfcmVnaXN0ZXJgIHNjYW5zIHRoZSBkZXZpY2UgdHJlZSBmb3IgUEhZIG5vZGVzLiBBbmQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBJZiBhIFBIWSBub2RlIGhhcyBhIGBjb21wYXRpYmxlYCBzdHJpbmcgbGlrZSBgZXRoZXJuZXQtcGh5LWlkWFhYWC5YWFhYYCwgdGhlIE1ESU8gYnVzICp3aWxsKiBjcmVhdGUgYSBQSFkgZGV2aWNlIHdpdGggdGhhdCBJRCwgKndpdGhvdXQqIHJlYWRpbmcgdGhlIGFjdHVhbCBQSFkgSUQgZnJvbSB0aGUgYnVzISBUaGlzIGlzIHRoZSBwcm9taXNpbmcgYXZlbnVlLCBJIG5lZWQgdG8gY2hlY2sgYG9mX21kaW8uY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V0aGVybmV0LXBoeS1pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTI4PU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtPcGVuRmlybXdhcmUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0zMC0vKiBFeHRyYWN0IHRoZSBjbGF1c2UgMjIgcGh5IElEIGZyb20gdGhlIGNvbXBhdGlibGUgc3RyaW5nIG9mIHRoZSBmb3JtXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzozMTogKiBldGhlcm5ldC1waHktaWRBQUFBLkJCQkIgKi9cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTMyLXN0YXRpYyBpbnQgb2ZfZ2V0X3BoeV9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgdTMyICpwaHlfaWQpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9ODY9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgd2hpdGVsaXN0X3BoeXNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0xMDItICogUmV0dXJuIHRydWUgaWYgdGhlIGNoaWxkIG5vZGUgaXMgZm9yIGEgcGh5LiBJdCBtdXN0IGVpdGhlcjpcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjEwMzogKiBvIENvbXBhdGlibGUgc3RyaW5nIG9mIFwmIzM0O2V0aGVybmV0LXBoeS1pZFguWFwmIzM0O1xuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMTA0LSAqIG8gQ29tcGF0aWJsZSBzdHJpbmcgb2YgXCYjMzQ7ZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jNDVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3ODUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUGxhbiB0byBTaW11bGF0ZSBhIFBIWSBEZXZpY2UqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgZ2FtZSBwbGFuOiBJJiMzOTt2ZSBnb3QgdGhpcyBkZXZpY2UgdHJlZSBub2RlIHdpdGggYGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZDAzYTIuYTQxMSYjMzQ7YC4gVGhlIGludGVudGlvbiBpcyB0aGF0IGBvZl9tZGlvYnVzX3JlZ2lzdGVyYCBzaG91bGQgZ2VuZXJhdGUgYSBQSFkgZGV2aWNlIHdpdGggdGhhdCBleGFjdCBJRC4gVGhhdCYjMzk7cyBhIHNvbGlkIHN0YXJ0LiBUaGUgY2F0Y2gsIG9mIGNvdXJzZSwgaXMgdGhhdCBJIG5lZWQgYW4gTURJTyBidXMgZm9yIGl0IHRvIGxhdGNoIG9udG8uCgpIbW0sIGNhbiBJIGNvb2sgdXAgYW4gTURJTyBidXMgdXNpbmcgZGV2aWNlIHRyZWUgd2l0aG91dCByZXF1aXJpbmcgYW55IHBoeXNpY2FsIGhhcmR3YXJlPyBUaGUgYG1kaW8tZ3Bpb2AgZHJpdmVyIGxvb2tzIHByb21pc2luZy4gSXQgc2VlbXMgbGlrZSBpZiBJIGNhbiBnZXQgdGhhdCB0byBsb2FkLCBldmVuIGlmIHRoZSBhY3R1YWwgTURJTyByZWFkcyBhbmQgd3JpdGVzIGFyZSBqdW5rIChvciwgbGV0JiMzOTtzIGJlIGhvbmVzdCwgcmV0dXJuaW5nIGAweGZmZmZgIHRoZSB3aG9sZSB0aW1lKSwgdGhlIGNydWNpYWwgdGhpbmcgaXMgdGhhdCB0aGUgUEhZIGRldmljZSB3aWxsICpzdGlsbCogYmUgY3JlYXRlZCBhbmQgcmVnaXN0ZXJlZCwgcmlnaHQ/CgpJZiB0aGUgUEhZIGRldmljZSBnZXRzIGNyZWF0ZWQsIHRoZW4gYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIHdpbGwgYmUgY2FsbGVkLiBUaGF0IHRoZW4gbWVhbnMgdGhlIGRyaXZlciBjb3JlIHdpbGwgdXNlIHRoZSBQSFkgSUQgdG8gZmluZCB0aGUgY29ycmVjdCBkcml2ZXIgYW5kIHJ1biBpdHMgYHByb2JlYCBmdW5jdGlvbiwgeWVzPwoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHRoaXM6IGRvZXMgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgICpkZW1hbmQqIHRoYXQgdGhlIE1ESU8gYnVzIGFjdHVhbGx5IGJlIG9wZXJhdGlvbmFsPyBJIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTAzPUVYUE9SVF9TWU1CT0woZ2V0X3BoeV9kZXZpY2UpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwNS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEwNjogKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDctICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDk6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExMC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQxLX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0MjpFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQzLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0OC0gKiBUaGlzIGRvZXNuJiMzOTt0IGZyZWUgdGhlIHBoeV9kZXZpY2UgaXRzZWxmLCBpdCBtZXJlbHkgcmV2ZXJzZXMgdGhlIGVmZmVjdHNcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0OTogKiBvZiBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkuIFVzZSBwaHlfZGV2aWNlX2ZyZWUoKSB0byBmcmVlIHRoZSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE1MC0gKiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjQyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcGh5X2RldmljZV9yZWdpc3RlcmAgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyBhIFBIWSBkZXZpY2UgZ2V0cyBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGRldmljZSBkcml2ZXIgZnJhbWV3b3JrLiBJcyBpdCBhIGRpcmVjdCBlbnRyeSBwb2ludCwgb3IgZG9lcyBpdCByZWx5IG9uIHN1cHBvcnRpbmcgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGxheWVyLCB0aGUgTURJTyBidXMgZHJpdmVyLCBhbmQgYW55IHBvdGVudGlhbCBwb3dlciBtYW5hZ2VtZW50IG1lY2hhbmlzbXMuCgoqKkFuYWx5emluZyB0aGUgUEhZIERldmljZSBSZWdpc3RyYXRpb24gUHJvY2VzcyoqCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U6IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgZXhwZWN0LCBhbmQgd2hhdCYjMzk7cyB0aGUgdHlwaWNhbCBmbG93PyBJJiMzOTttIGFudGljaXBhdGluZyBhcmd1bWVudHMgZm9yIHRoZSBkZXZpY2UgaXRzZWxmIChsaWtlbHkgYSBgc3RydWN0IHBoeV9kZXZpY2VgIG9yIHNpbWlsYXIpLCBpdHMgYXNzb2NpYXRlZCBNRElPIGJ1cyBhZGRyZXNzLCBhIHBvaW50ZXIgdG8gdGhlIE1ESU8gYnVzIGRyaXZlciwgYW5kIHBvdGVudGlhbGx5LCBzb21lIGN1c3RvbSBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCBlcnJvciBjb2RlcyByZXR1cm5lZCBhbmQgaG93IHRob3NlIGFyZSBoYW5kbGVkIOKAkyBlcnJvciBoYW5kbGluZyBpcyBjcml0aWNhbCBpbiB0aGlzIHR5cGUgb2YgbG93LWxldmVsIGNvZGUuIEFyZSBlcnJvcnMgc2ltcGx5IGxvZ2dlZCwgb3IgZG8gdGhleSB0cmlnZ2VyIG1vcmUgZXh0ZW5zaXZlIHJlY292ZXJ5IHByb2NlZHVyZXM/CgpJJiMzOTtsbCBhbHNvIGtlZXAgYSBsb29rb3V0IGZvciByZXNvdXJjZSBhbGxvY2F0aW9uOiBkb2VzIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyBkeW5hbWljYWxseSBhbGxvY2F0ZSBhbnkgbWVtb3J5LCBhbmQgaWYgc28sIGhvdyBpcyBpdCBtYW5hZ2VkPyBNZW1vcnkgbGVha3MgYXJlIGEgc2VyaW91cyBpc3N1ZSwgc28gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgZW5zdXJlcyBwcm9wZXIgY2xlYW51cCBvbiBmYWlsdXJlIG9yIHVucmVnaXN0cmF0aW9uLiBDb25zaWRlcmluZyB0aGUgcm9sZSBvZiBQSFkgZGV2aWNlcywgd2hpY2ggYXJlIG9mdGVuIHRpbWUtY3JpdGljYWwgY29tcG9uZW50cywgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdXNlIG9mIGxvY2tzIG9yIG90aGVyIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZD8gRmluYWxseSwgSSBuZWVkIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIgZGV2aWNlIHRyZWUgb3IgcGxhdGZvcm0gZGF0YSBpbml0aWFsaXphdGlvbjsgZG9lcyBpdCB1dGlsaXplIHRob3NlIG1lY2hhbmlzbXMgZm9yIGNvbmZpZ3VyYXRpb24/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwOTpcdGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xMTEwOlx0e1xuMTExMTpcdFx0aW50IGVycjtcbjExMTI6XHRcbjExMTM6XHRcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvKTtcbjExMTQ6XHRcdGlmIChlcnIpXG4xMTE1Olx0XHRcdHJldHVybiBlcnI7XG4xMTE2Olx0XG4xMTE3Olx0XHQvKiBEZWFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXG4xMTE4Olx0XHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMCk7XG4xMTE5Olx0XG4xMTIwOlx0XHQvKiBSdW4gYWxsIG9mIHRoZSBmaXh1cHMgZm9yIHRoaXMgUEhZICovXG4xMTIxOlx0XHRlcnIgPSBwaHlfc2Nhbl9maXh1cHMocGh5ZGV2KTtcbjExMjI6XHRcdGlmIChlcnIpIHtcbjExMjM6XHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplXFxuXCYjMzQ7KTtcbjExMjQ6XHRcdFx0Z290byBvdXQ7XG4xMTI1Olx0XHR9XG4xMTI2Olx0XG4xMTI3Olx0XHRlcnIgPSBkZXZpY2VfYWRkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4xMTI4Olx0XHRpZiAoZXJyKSB7XG4xMTI5Olx0XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtmYWlsZWQgdG8gYWRkXFxuXCYjMzQ7KTtcbjExMzA6XHRcdFx0Z290byBvdXQ7XG4xMTMxOlx0XHR9XG4xMTMyOlx0XG4xMTMzOlx0XHRyZXR1cm4gMDtcbjExMzQ6XHRcbjExMzU6XHQgb3V0OlxuMTEzNjpcdFx0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cbjExMzc6XHRcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcbjExMzg6XHRcbjExMzk6XHRcdG1kaW9idXNfdW5yZWdpc3Rlcl9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8pO1xuMTE0MDpcdFx0cmV0dXJuIGVycjtcbjExNDE6XHR9XG4xMTQyOlx0RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcbjExNDM6XHRcbjExNDQ6XHQvKipcbjExNDU6XHQgKiBwaHlfZGV2aWNlX3JlbW92ZSAtIFJlbW92ZSBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBwaHkgZGV2aWNlIGZyb20gdGhlIE1ESU8gYnVzXG4xMTQ2Olx0ICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gcmVtb3ZlXG4xMTQ3Olx0ICpcbjExNDg6XHQgKiBUaGlzIGRvZXNuJiMzOTt0IGZyZWUgdGhlIHBoeV9kZXZpY2UgaXRzZWxmLCBpdCBtZXJlbHkgcmV2ZXJzZXMgdGhlIGVmZmVjdHNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1NzIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyBmb3IgUEhZIERldmljZSBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uIHdvcmtzLiBFc3NlbnRpYWxseSwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHdyYXBwZXIsIHJlYWxseS4gSXQganVzdCBjYWxscyBgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2VgLCB3aGljaCBoYW5kbGVzIHRoZSBNRElPIGJ1cyBpbnRlcmFjdGlvbiwgdGhlbiBydW5zIGBwaHlfc2Nhbl9maXh1cHNgLCBwcm9iYWJseSBmb3Igc29tZSBkZXZpY2Utc3BlY2lmaWMgYWRqdXN0bWVudHMsIGFuZCBmaW5hbGx5LCBpdCBjYWxscyBgZGV2aWNlX2FkZGAuIEFoLCAqdGhhdCYjMzk7cyogdGhlIGtleS4gV2hlbiBgZGV2aWNlX2FkZGAgZ2V0cyBpbnZva2VkLCB0aGUgZHJpdmVyIGNvcmUga2lja3MgaW4uIFRoaXMgdHJpZ2dlcnMgdGhlIHByb2JlIHNlcXVlbmNlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIFRoZSBkcml2ZXImIzM5O3MgYHByb2JlYCBmdW5jdGlvbiBpcyB3aGF0IHdlJiMzOTtyZSBhZnRlci4gTGV0JiMzOTtzIHNlZS4uLiB3aGF0JiMzOTtzIGl0IG5hbWVkPyBBaCwgcmlnaHQsIGluIHRoaXMgY2FzZSwgaXQgbXVzdCBiZSBgZW44ODExaF9wcm9iZWAgaW5zaWRlIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgUEhZIGluaXRpYWxpemF0aW9uIGhhcHBlbnMsIEkmIzM5O2Qgd2FnZXIuIEdvb2QsIEkgaGF2ZSBhIGdvb2QgaWRlYSBvZiBob3cgaXQgd2lsbCBwcm9iZS4gTm93IGxldCYjMzk7cyBzZWUgd2hhdCBpcyBpbnNpZGUgb2YgdGhhdCBmdW5jdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1OTpcdFxuMTE2MDpcdFx0LyogbWN1IGhhcyBqdXN0IHJlc3RhcnRlZCBhZnRlciBmaXJtd2FyZSBsb2FkICovXG4xMTYxOlx0XHRwcml2LVx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gZmFsc2U7XG4xMTYyOlx0XG4xMTYzOlx0XHQvKiBNRElPX0RFVlMxLzIgZW1wdHksIHNvIHNldCBtbWRzX3ByZXNlbnQgYml0cyBoZXJlICovXG4xMTY0Olx0XHRwaHlkZXYtXHUwMDNlYzQ1X2lkcy5tbWRzX3ByZXNlbnQgfD0gTURJT19ERVZTX1BNQVBNRCB8IE1ESU9fREVWU19BTjtcbjExNjU6XHRcbjExNjY6XHRcdHJldCA9IGVuODgxMWhfbGVkc19zZXR1cChwaHlkZXYpO1xuMTE2NzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjExNjg6XHRcdFx0cmV0dXJuIHJldDtcbjExNjk6XHRcbjExNzA6XHRcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuMTE3MTpcdFx0LyogQ28tQ2xvY2sgT3V0cHV0ICovXG4xMTcyOlx0XHRyZXR1cm4gZW44ODExaF9jbGtfcHJvdmlkZXJfc2V0dXAoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LCBcdTAwMjZwcml2LVx1MDAzZWh3KTtcbjExNzM6XHR9XG4xMTc0Olx0XG4xMTc1Olx0c3RhdGljIGludCBhbjg4MTFoYl9jb25maWdfc2VyZGVzX3BvbGFyaXR5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xMTc2Olx0e1xuMTE3NzpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuMTE3ODpcdFx0dTMyIHBidXNfdmFsdWUgPSAwO1xuMTE3OTpcdFx0dW5zaWduZWQgaW50IHBvbDtcbjExODA6XHRcdGludCByZXQ7XG4xMTgxOlx0XG4xMTgyOlx0XHRyZXQgPSBwaHlfZ2V0X21hbnVhbF9yeF9wb2xhcml0eShkZXZfZndub2RlKGRldiksXG4xMTgzOlx0XHRcdFx0XHRcdCBwaHlfbW9kZXMocGh5ZGV2LVx1MDAzZWludGVyZmFjZSksIFx1MDAyNnBvbCk7XG4xMTg0Olx0XHRpZiAocmV0KVxuMTE4NTpcdFx0XHRyZXR1cm4gcmV0O1xuMTE4NjpcdFx0aWYgKHBvbCA9PSBQSFlfUE9MX05PUk1BTClcbjExODc6XHRcdFx0cGJ1c192YWx1ZSB8PSBBTjg4MTFIQl9SWF9QT0xBUklUWV9OT1JNQUw7XG4xMTg4Olx0XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9SWF9QT0xBUklUWSxcbjExODk6XHRcdFx0XHRcdFx0ICBBTjg4MTFIQl9SWF9QT0xBUklUWV9OT1JNQUwsXG4xMTkwOlx0XHRcdFx0XHRcdCAgcGJ1c192YWx1ZSk7XG4xMTkxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTE5MjpcdFx0XHRyZXR1cm4gcmV0O1xuMTE5MzpcdFxuMTE5NDpcdFx0cmV0ID0gcGh5X2dldF9tYW51YWxfdHhfcG9sYXJpdHkoZGV2X2Z3bm9kZShkZXYpLFxuMTE5NTpcdFx0XHRcdFx0XHQgcGh5X21vZGVzKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpLCBcdTAwMjZwb2wpO1xuMTE5NjpcdFx0aWYgKHJldClcbjExOTc6XHRcdFx0cmV0dXJuIHJldDtcbjExOTg6XHRcdHBidXNfdmFsdWUgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYzMwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgZW44ODExaF9wcm9iZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgZW44ODExaF9wcm9iZWAgZnVuY3Rpb24sIGFuZCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSAqaGF2ZSogdG8gc2VlIHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgc2V0dXAsIHRoZSBjb250ZXh0LCB0aGUgZm91bmRhdGlvbiBpdCYjMzk7cyBidWlsdCB1cG9uLiBXaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludD8gV2hhdCBhcmUgdGhlIGltbWVkaWF0ZSBjaGVja3M/IFdoYXQgZGF0YSBpcyBiZWluZyBhY2Nlc3NlZCByaWdodCBvZmYgdGhlIGJhdD8gV2l0aG91dCB0aGF0IGJhc2VsaW5lLCBJJiMzOTttIGp1c3QgcG9raW5nIGFyb3VuZCBpbiB0aGUgZGFyay4gSnVtcGluZyBpbiBtaWQtc3RyZWFtLCB3aXRob3V0IHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWwgaW50ZW50aW9ucywgaXMganVzdCBhbWF0ZXVyIGhvdXIuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgdGhpbmcgKnN0YXJ0cyogYmVmb3JlIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMuIEdvdHRhIGdldCB0aGF0IGZ1bmRhbWVudGFsIGdyYXNwIG9mIHRoZSBpbml0aWFsIGNvbmRpdGlvbnMgZmlyc3QsIHRoZW4sIEkgY2FuIHNlZSB3aGF0IGl0ICppcyogdHJ5aW5nIHRvIGFjY29tcGxpc2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDA6XHRlcnJfZGV2X2ZyZWU6XG4xMTQxOlx0XHRtZGlvX2RldmljZV9mcmVlKG1kaW9kZXYpO1xuMTE0MjpcdFx0cmV0dXJuIHJldDtcbjExNDM6XHR9XG4xMTQ0Olx0XG4xMTQ1Olx0c3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xMTQ2Olx0e1xuMTE0NzpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdjtcbjExNDg6XHRcdGludCByZXQ7XG4xMTQ5Olx0XG4xMTUwOlx0XHRwcml2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgc2l6ZW9mKHN0cnVjdCBlbjg4MTFoX3ByaXYpLFxuMTE1MTpcdFx0XHRcdCAgICBHRlBfS0VSTkVMKTtcbjExNTI6XHRcdGlmICghcHJpdilcbjExNTM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMTU0Olx0XHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4xMTU1Olx0XG4xMTU2Olx0XHRyZXQgPSBlbjg4MTFoX2xvYWRfZmlybXdhcmUocGh5ZGV2KTtcbjExNTc6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMTU4Olx0XHRcdHJldHVybiByZXQ7XG4xMTU5Olx0XG4xMTYwOlx0XHQvKiBtY3UgaGFzIGp1c3QgcmVzdGFydGVkIGFmdGVyIGZpcm13YXJlIGxvYWQgKi9cbjExNjE6XHRcdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTtcbjExNjI6XHRcbjExNjM6XHRcdC8qIE1ESU9fREVWUzEvMiBlbXB0eSwgc28gc2V0IG1tZHNfcHJlc2VudCBiaXRzIGhlcmUgKi9cbjExNjQ6XHRcdHBoeWRldi1cdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xuMTE2NTpcdFxuMTE2NjpcdFx0cmV0ID0gZW44ODExaF9sZWRzX3NldHVwKHBoeWRldik7XG4xMTY3Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTE2ODpcdFx0XHRyZXR1cm4gcmV0O1xuMTE2OTpcdFxuMTE3MDpcdFx0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXY7XG4xMTcxOlx0XHQvKiBDby1DbG9jayBPdXRwdXQgKi9cbjExNzI6XHRcdHJldHVybiBlbjg4MTFoX2Nsa19wcm92aWRlcl9zZXR1cChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIFx1MDAyNnByaXYtXHUwMDNlaHcpO1xuMTE3MzpcdH1cbjExNzQ6XHRcbjExNzU6XHRzdGF0aWMgaW50IGFuODgxMWhiX2NvbmZpZ19zZXJkZXNfcG9sYXJpdHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbjExNzY6XHR7XG4xMTc3Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4xMTc4Olx0XHR1MzIgcGJ1c192YWx1ZSA9IDA7XG4xMTc5Olx0XHR1bnNpZ25lZCBpbnQgcG9sO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUxNAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIG5ldHdvcmsgZHJpdmVyIGRldmVsb3BtZW50OgoKKipGaXJtd2FyZSBMb2FkaW5nIElucXVpcnkqKgoKQWxyaWdodCwgdGhlIGNvZGUmIzM5O3MganVtcGluZyB0byBgZW44ODExaF9sb2FkX2Zpcm13YXJlKHBoeWRldilgLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBmaXJtd2FyZSBsb2FkaW5nIGZ1bmN0aW9uIGZvciB0aGlzIFBIWSBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLiBTbywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJJiMzOTttIGdvaW5nIHRvIGRpdmUgc3RyYWlnaHQgaW50byBleGFtaW5pbmcgdGhlIGBlbjg4MTFoX2xvYWRfZmlybXdhcmVgIGZ1bmN0aW9uIGRlZmluaXRpb24uIEkgbmVlZCB0byBnZXQgYSBncmlwIG9uIHRoZSBzZXF1ZW5jZSBvZiBhY3Rpb25zIGJlaW5nIHRha2VuLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgZXJyb3IgcGF0aHMgaW4gdGhhdCByb3V0aW5lLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBkb2luZyB3aXRoIGBwaHlkZXZgIG5vdywgYW5kIGhvcGVmdWxseSBnZXQgdGhlIHN5c3RlbSB1cCBhbmQgcnVubmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA0MDpcdFx0aW5pdC5uYW1lID0gZGV2bV9rYXNwcmludGYoZGV2LCBHRlBfS0VSTkVMLCBcJiMzNDslcy1ja29cJiMzNDssXG4xMDQxOlx0XHRcdFx0XHQgICBmd25vZGVfZ2V0X25hbWUoZGV2X2Z3bm9kZShkZXYpKSk7XG4xMDQyOlx0XHRpZiAoIWluaXQubmFtZSlcbjEwNDM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMDQ0Olx0XG4xMDQ1Olx0XHRpbml0Lm9wcyA9IFx1MDAyNmVuODgxMWhfY2xrX29wcztcbjEwNDY6XHRcdGluaXQuZmxhZ3MgPSAwO1xuMTA0NzpcdFx0aW5pdC5udW1fcGFyZW50cyA9IDA7XG4xMDQ4Olx0XHRody1cdTAwM2Vpbml0ID0gXHUwMDI2aW5pdDtcbjEwNDk6XHRcbjEwNTA6XHRcdHJldCA9IGRldm1fY2xrX2h3X3JlZ2lzdGVyKGRldiwgaHcpO1xuMTA1MTpcdFx0aWYgKHJldClcbjEwNTI6XHRcdFx0cmV0dXJuIHJldDtcbjEwNTM6XHRcbjEwNTQ6XHRcdHJldHVybiBkZXZtX29mX2Nsa19hZGRfaHdfcHJvdmlkZXIoZGV2LCBvZl9jbGtfaHdfc2ltcGxlX2dldCwgaHcpO1xuMTA1NTpcdH1cbjEwNTY6XHRcbjEwNTc6XHRzdGF0aWMgaW50IGVuODgxMWhfbGVkc19zZXR1cChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTA1ODpcdHtcbjEwNTk6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbjEwNjA6XHRcdGludCByZXQ7XG4xMDYxOlx0XG4xMDYyOlx0XHRwcml2LVx1MDAzZWxlZFswXS5ydWxlcyA9IEFJUl9ERUZBVUxUX1RSSUdHRVJfTEVEMDtcbjEwNjM6XHRcdHByaXYtXHUwMDNlbGVkWzFdLnJ1bGVzID0gQUlSX0RFRkFVTFRfVFJJR0dFUl9MRUQxO1xuMTA2NDpcdFx0cHJpdi1cdTAwM2VsZWRbMl0ucnVsZXMgPSBBSVJfREVGQVVMVF9UUklHR0VSX0xFRDI7XG4xMDY1Olx0XG4xMDY2Olx0XHRyZXQgPSBhaXJfbGVkc19pbml0KHBoeWRldiwgRU44ODExSF9MRURfQ09VTlQsIEFJUl9QSFlfTEVEX0RVUixcbjEwNjc6XHRcdFx0XHQgICAgQUlSX0xFRF9NT0RFX0RJU0FCTEUpO1xuMTA2ODpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEwNjk6XHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0ZhaWxlZCB0byBkaXNhYmxlIGxlZHM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTA3MDpcdFxuMTA3MTpcdFx0cmV0dXJuIHJldDtcbjEwNzI6XHR9XG4xMDczOlx0XG4xMDc0Olx0c3RhdGljIGludCBhbjg4MTFoYl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTA3NTpcdHtcbjEwNzY6XHRcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcbjEwNzc6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXY7XG4xMDc4Olx0XHRpbnQgcmV0O1xuMTA3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQwOQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTWlzc2luZyBGaXJtd2FyZSBMb2FkaW5nIEZ1bmN0aW9uIC0gSW52ZXN0aWdhdGlvbiBDb21tZW5jZXMqKgoKT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSYjMzk7bSBoaXR0aW5nIGEgcm9hZGJsb2NrIGhlcmUuIFRoZSBzeW1ib2wgYGVuODgxMWhfbG9hZF9maXJtd2FyZWAgLSBpdCYjMzk7cyBqdXN0IG5vdCBzaG93aW5nIHVwIGluIHRoZSBzeW1ib2wgdGFibGUuIFRoYXQmIzM5O3MgdW5leHBlY3RlZC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IGl0IHdvdWxkIGJlIGRlZmluZWQsIGdpdmVuIHRoZSBjb250ZXh0IG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LiBBbHJpZ2h0LCB0aW1lIHRvIHN0YXJ0IGRpZ2dpbmcuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGxhdW5jaCBhIHNlYXJjaC4gR290dGEgZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlLCBvciBpZiB0aGVyZSYjMzk7cyBiZWVuIGEgbmFtaW5nIGNvbnZlbnRpb24gY2hhbmdlLCBhIGxpbmtlciBpc3N1ZSwgYSB0eXBvIGluIHRoZSBjb2RlLCBvciBwb3NzaWJseSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGdvaW5nIG9uIHRoYXQmIzM5O3MgcHJldmVudGluZyBpdHMgaW5jbHVzaW9uLiBMZXQmIzM5O3Mgc2VlIGlmIGEgcXVpY2sgc2VhcmNoIHR1cm5zIHVwIGFueSBjbHVlcyB3aXRoaW4gdGhpcyBwcm9qZWN0Li4uYW5kIG1heWJlIGV2ZW4gZXh0ZXJuYWxseSwgaWYgbmVjZXNzYXJ5LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBsb2dzLCByZWxldmFudCBoZWFkZXIgZmlsZXMsIGFuZCBwb3NzaWJseSBldmVuIHNjYW4gdGhlIHNvdXJjZSBjb2RlIHdpdGggZ3JlcCBvciBhIHNpbWlsYXIgdG9vbC4gVGhpcyBmZWVscyBsaWtlIGl0IGNvdWxkIGJlIGEgc2ltcGxlIG92ZXJzaWdodCwgYnV0IGl0IGNvdWxkIGFsc28gYmUgYSBzeW1wdG9tIG9mIGEgZGVlcGVyIGludGVncmF0aW9uIHByb2JsZW0uIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBzb3VyY2Ugb2YgdGhpcyBtaXNzaW5nIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbjg4MTFoX2xvYWRfZmlybXdhcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz00NjI9c3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTAxLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTAyOnN0YXRpYyBpbnQgZW44ODExaF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MDMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTUxMy1cdGlmIChyZXQgXHUwMDNjIDApXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1MTQ6XHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MTUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTE4LVx0aWYgKHJldCBcdTAwM2MgMClcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjUxOTpcdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTIwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTUyNC1cdGlmIChyZXQgXHUwMDNjIDApXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1MjU6XHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTUyNi1cbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MjgtXHRpZiAocmV0IFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTI5Olx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzAtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTMyLVx0aWYgKHJldCBcdTAwM2MgMClcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjUzMzpcdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTM0LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTUzNy1cdGlmIChyZXQgXHUwMDNjIDApXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1Mzg6XHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTUzOS1cbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NDEtXHRpZiAocmV0IFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTQyOlx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NDMtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTQ1LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTQ2OmVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NDctXHRyZWxlYXNlX2Zpcm13YXJlKGZ3Mik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NDgtXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1NDk6ZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE6XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NTAtXHRyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MTE0NT1zdGF0aWMgaW50IGVuODgxMWhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTU1LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTE1NjpcdHJldCA9IGVuODgxMWhfbG9hZF9maXJtd2FyZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE1Ny1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODQzCgkJCQkJCQlvdXRwdXQ6IDExMgoJCQkJCQkJdGhvdWdodHM6IDc1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBUaGlzIFBhdGNoIGlzIE5vdCBXb3J0aCBGdXp6aW5nKioKCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIGRlYWxpbmcgd2l0aCBhbiBgYWlyX3BoeWAgYW5kIGNhbGxzIGByZXF1ZXN0X2Zpcm13YXJlYC4gUmlnaHQgYXdheSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBzeXprYWxsZXImIzM5O3MgZmlybXdhcmUgaW5qZWN0aW9uIGNhcGFiaWxpdGllcywgb3IgdGhlIHBvc3NpYmlsaXR5IG9mIGEgZGlyZWN0IGZhaWx1cmUuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGEgcmVnaXN0ZXIgd3JpdGUgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyaW5nIExFRCBHUElPIHBpbnMsIG1vdmVkIGZyb20gYGVuODgxMWhfcHJvYmVgIHRvIGBlbjg4MTFoX2NvbmZpZ19pbml0YC4KClRoZSBjb21taXQgbWVzc2FnZSBjbGFyaWZpZXMgaXQmIzM5O3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBmaXggZm9yIHRoZSBFTjg4MTFIIFBIWSBjaGlwLiBBbmQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBJIGtub3cgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoaXMgUEhZLCBhbmQgc3l6a2FsbGVyLCB0byBteSBrbm93bGVkZ2UsIGRvZXNuJiMzOTt0IGhhdmUgYSB2aXJ0dWFsIE1ESU8gYnVzIHJvYnVzdCBlbm91Z2ggdG8gZnVsbHkgc2ltdWxhdGUgdGhpcyBwYXJ0aWN1bGFyIGNoaXAmIzM5O3MgcmVnaXN0ZXJzLiBTbywgcmVhY2hpbmcgdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgaXMgYmFzaWNhbGx5IGEgbm9uLXN0YXJ0ZXIuCgpXYWl0LCB3aXRoIGEgZGV2aWNlIHRyZWUgaW5zdGFudGlhdGlvbiwgdGhlIGRyaXZlciB3aWxsIHByb2JlLiBJdCBjYWxscyBgZW44ODExaF9sb2FkX2Zpcm13YXJlYC4gSSBjYW4gc2VlIE1ESU8gd3JpdGVzLCBidXQgd2l0aG91dCB0aGUgYWN0dWFsIFBIWSwgdGhleSYjMzk7bGwgZWl0aGVyIGZhaWwgc2lsZW50bHkgb3IgdGhlIG1vY2sgYnVzIG1heSByZXR1cm4gZXJyb3JzLiBUaGUgc3Vic2VxdWVudCBjYWxsIHRvIGBlbjg4MTFoX2NvbmZpZ19pbml0YCB1cG9uIG5ldHdvcmsgaW50ZXJmYWNlIGFjdGl2YXRpb24gd2lsbCBwZXJmb3JtIGFub3RoZXIgTURJTyB3cml0ZS4KCkhvbmVzdGx5LCBkb2VzIHRoaXMgZXZlbiBoYXZlICphbnkqIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIGNvcmUga2VybmVsIGxvZ2ljPyBObywgbm90IHJlYWxseS4gSXQmIzM5O3MganVzdCB3cml0aW5nIHRvIGEgcmVnaXN0ZXIgb24gYSBzcGVjaWZpYyBQSFkuIFRoZXJlJiMzOTtzIG5vIGNvbXBsZXggc3RhdGUgbWFjaGluZSwgbm8gc2lnbmlmaWNhbnQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsIHRoYXQgaXMgbGlrZWx5IHRvIGNyZWF0ZSBhIGJ1Zy4gQSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaXMgdGhlIG9ubHkgcG90ZW50aWFsIGlzc3VlLCBhbmQgdGhpcyBwYXRjaCBqdXN0IG1vdmVzIGEgcmVnaXN0ZXIgd3JpdGUuCgpDb25zaWRlcmluZyB0aGUgZ3VpZGVsaW5lcywgSSBpbW1lZGlhdGVseSB0aGluayBvZiB0aGUgUENJZS9TbWFydE5JQy9HUFUgZHJpdmVyIGV4Y2x1c2lvbi4gV2hpbGUgdGhpcyBpc24mIzM5O3QgKnByZWNpc2VseSogYSBQQ0llIGRyaXZlciwgaXQmIzM5O3MgYSB2ZW5kb3Itc3BlY2lmaWMgUEhZIGRyaXZlciB0aGF0LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgYXQgbGVhc3QgYSBjaGlwIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGUgY2hhbmdlIGlzIHNpbXBsZTogYSByZWdpc3RlciB3cml0ZSBmb3IgTEVEIEdQSU8gY29uZmlndXJhdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IG5vdCB3b3J0aCB0aGUgdGltZSB0byBmdXp6LiBJdCYjMzk7cyBhIHZlcnkgaGFyZHdhcmUtc3BlY2lmaWMsIHRyaXZpYWwgY2hhbmdlLiBNeSBhc3Nlc3NtZW50OiAqKldvcnRoRnV6emluZz1mYWxzZS4qKgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgd3JpdGUgZm9yIExFRCBHUElPIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgcHJvYmUgZnVuY3Rpb24gdG8gdGhlIGNvbmZpZ19pbml0IGZ1bmN0aW9uIGluIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgYSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgY2hpcCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyBvciByZWFjaGFibGUgdmlydHVhbGl6ZWQgY29kZSBwYXRocywgYW5kIGlzIHB1cmVseSBhIGhhcmR3YXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZpeC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgd3JpdGUgZm9yIExFRCBHUElPIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgcHJvYmUgZnVuY3Rpb24gdG8gdGhlIGNvbmZpZ19pbml0IGZ1bmN0aW9uIGluIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgYSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgY2hpcCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyBvciByZWFjaGFibGUgdmlydHVhbGl6ZWQgY29kZSBwYXRocywgYW5kIGlzIHB1cmVseSBhIGhhcmR3YXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZpeC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMDo1OC44Mzc5NjM4MjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU3NzMwNzU1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBhIGhhcmR3YXJlLXNwZWNpZmljIHJlZ2lzdGVyIHdyaXRlIGZvciBMRUQgR1BJTyBjb25maWd1cmF0aW9uIGZyb20gdGhlIHByb2JlIGZ1bmN0aW9uIHRvIHRoZSBjb25maWdfaW5pdCBmdW5jdGlvbiBpbiB0aGUgQWlyb2hhIEVOODgxMUggUEhZIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgZm9yIGEgc3BlY2lmaWMgcGh5c2ljYWwgUEhZIGNoaXAgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhlIGNoYW5nZSBkb2VzIG5vdCBhZmZlY3QgY29yZSBrZXJuZWwgbG9naWMgb3IgcmVhY2hhYmxlIHZpcnR1YWxpemVkIGNvZGUgcGF0aHMsIGFuZCBpcyBwdXJlbHkgYSBoYXJkd2FyZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBmaXguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMDo1OC44Mzc5Njg1NDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTM0OTk1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk5ZDNiZGJjMTAwMThhMzlhYjdjOGU1N2IwNjU5ZWNkNWNiYTY1YThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMjMgMTE6MzA6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xcbmluZGV4IGVkZDQ5YzE5M2U0NzYuLjhmNDQ5OGNmMGE3YzEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xcbkBAIC0xMTY5LDE4ICsxMTY5LDcgQEAgc3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcbiBcXHRwcml2LVxcdTAwM2VwaHlkZXYgPSBwaHlkZXY7XFxuIFxcdC8qIENvLUNsb2NrIE91dHB1dCAqL1xcbi1cXHRyZXQgPSBlbjg4MTFoX2Nsa19wcm92aWRlcl9zZXR1cChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiwgXFx1MDAyNnByaXYtXFx1MDAzZWh3KTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdC8qIENvbmZpZ3VyZSBsZWQgZ3BpbyBwaW5zIGFzIG91dHB1dCAqL1xcbi1cXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0dQSU9fT1VUUFVULFxcbi1cXHRcXHRcXHRcXHRcXHQgIEVOODgxMUhfR1BJT19PVVRQVVRfMzQ1LFxcbi1cXHRcXHRcXHRcXHRcXHQgIEVOODgxMUhfR1BJT19PVVRQVVRfMzQ1KTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIGVuODgxMWhfY2xrX3Byb3ZpZGVyX3NldHVwKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlaHcpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGFuODgxMWhiX2NvbmZpZ19zZXJkZXNfcG9sYXJpdHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5AQCAtMTMyNCw2ICsxMzEzLDE3IEBAIHN0YXRpYyBpbnQgZW44ODExaF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbitcXHQvKiBDb25maWd1cmUgbGVkIGdwaW8gcGlucyBhcyBvdXRwdXQuIE11c3QgYmUgcmVkb25lIG9uIGV2ZXJ5XFxuK1xcdCAqIC5jb25maWdfaW5pdCgpLCBub3QganVzdCBvbmNlIGluIC5wcm9iZSgpOiBlbjg4MTFoX3Jlc3RhcnRfbWN1KClcXG4rXFx0ICogcmVzZXRzIGJ1Y2twYnVzLW1hcHBlZCBNQ1Ugc3RhdGUgKGluY2wuIHRoaXMgcmVnaXN0ZXIpIG9uIGV2ZXJ5XFxuK1xcdCAqIGNhbGwgYWZ0ZXIgdGhlIGZpcnN0LCBlLmcuIG9uIGxpbmsgcmVuZWdvdGlhdGlvbiBvciBpZnVwL2lmZG93bi5cXG4rXFx0ICovXFxuK1xcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfR1BJT19PVVRQVVQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgRU44ODExSF9HUElPX09VVFBVVF8zNDUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgRU44ODExSF9HUElPX09VVFBVVF8zNDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMDo1OS4yNTc5NzA4OTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzUzNTMwNTQ1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgd3JpdGUgZm9yIExFRCBHUElPIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgcHJvYmUgZnVuY3Rpb24gdG8gdGhlIGNvbmZpZ19pbml0IGZ1bmN0aW9uIGluIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgYSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgY2hpcCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyBvciByZWFjaGFibGUgdmlydHVhbGl6ZWQgY29kZSBwYXRocywgYW5kIGlzIHB1cmVseSBhIGhhcmR3YXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZpeC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk5ZDNiZGJjMTAwMThhMzlhYjdjOGU1N2IwNjU5ZWNkNWNiYTY1YThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxMTozMDo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbmluZGV4IGVkZDQ5YzE5M2U0NzYuLjhmNDQ5OGNmMGE3YzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbkBAIC0xMTY5LDE4ICsxMTY5LDcgQEAgc3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXG4gXHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbiBcdC8qIENvLUNsb2NrIE91dHB1dCAqL1xuLVx0cmV0ID0gZW44ODExaF9jbGtfcHJvdmlkZXJfc2V0dXAoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LCBcdTAwMjZwcml2LVx1MDAzZWh3KTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHQvKiBDb25maWd1cmUgbGVkIGdwaW8gcGlucyBhcyBvdXRwdXQgKi9cbi1cdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfR1BJT19PVVRQVVQsXG4tXHRcdFx0XHRcdCAgRU44ODExSF9HUElPX09VVFBVVF8zNDUsXG4tXHRcdFx0XHRcdCAgRU44ODExSF9HUElPX09VVFBVVF8zNDUpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIGVuODgxMWhfY2xrX3Byb3ZpZGVyX3NldHVwKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgXHUwMDI2cHJpdi1cdTAwM2Vodyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYW44ODExaGJfY29uZmlnX3NlcmRlc19wb2xhcml0eShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuQEAgLTEzMjQsNiArMTMxMywxNyBAQCBzdGF0aWMgaW50IGVuODgxMWhfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbitcdC8qIENvbmZpZ3VyZSBsZWQgZ3BpbyBwaW5zIGFzIG91dHB1dC4gTXVzdCBiZSByZWRvbmUgb24gZXZlcnlcbitcdCAqIC5jb25maWdfaW5pdCgpLCBub3QganVzdCBvbmNlIGluIC5wcm9iZSgpOiBlbjg4MTFoX3Jlc3RhcnRfbWN1KClcbitcdCAqIHJlc2V0cyBidWNrcGJ1cy1tYXBwZWQgTUNVIHN0YXRlIChpbmNsLiB0aGlzIHJlZ2lzdGVyKSBvbiBldmVyeVxuK1x0ICogY2FsbCBhZnRlciB0aGUgZmlyc3QsIGUuZy4gb24gbGluayByZW5lZ290aWF0aW9uIG9yIGlmdXAvaWZkb3duLlxuK1x0ICovXG4rXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0dQSU9fT1VUUFVULFxuK1x0XHRcdFx0XHQgIEVOODgxMUhfR1BJT19PVVRQVVRfMzQ1LFxuK1x0XHRcdFx0XHQgIEVOODgxMUhfR1BJT19PVVRQVVRfMzQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMDo1OS4yNTc5NzE5MzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjI3ODU3NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBIWSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgdHdlYWtpbmcgdGhlIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0J3MgbW92aW5nIHNvbWUgR1BJTyBjb25maWd1cmF0aW9uIGNvZGUgZm9yIExFRHMgZnJvbSB0aGUgYGVuODgxMWhfcHJvYmVgIGZ1bmN0aW9uIHRvIGBlbjg4MTFoX2NvbmZpZ19pbml0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgUEhZIGRyaXZlciwgd2hpY2ggbWVhbnMgaXQncyBsaWtlbHkgdGllZCB0byAqYWN0dWFsKiBoYXJkd2FyZS4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgQWlyb2hhIEVOODgxMUggUEhZIGhlcmUuXG5cbk5vdywgdHlwaWNhbGx5LCBQSFkgZHJpdmVycyBhcmUgYXNzb2NpYXRlZCB3aXRoIHBoeXNpY2FsIG5ldHdvcmsgY2FyZHMsIGJ1dCBJIGtub3cgdGhhdCBNRElPIGJ1c2VzIGNhbiBiZSB1c2VkIHRvIGludGVyZmFjZSB3aXRoIHRoZW0uIEFuZCwgb2YgY291cnNlLCB0aGVzZSBNRElPIGJ1c2VzIGNhbiBiZSBlbXVsYXRlZCBvciBldmVuIHNvZnR3YXJlLWRlZmluZWQg4oCTIHRoaW5rIGBtZGlvLW1vY2t1cGAgYW5kIHN1Y2gsIHRob3VnaCB1c3VhbGx5IHN5emthbGxlciB3b3VsZCBhdm9pZCB0YXJnZXRpbmcgYSB2ZXJ5IHNwZWNpZmljIFBIWSB1bmxlc3MgaXQncyByZWFjaGFibGUgdGhyb3VnaCBhIGNvbW1vbiBpbnRlcmZhY2UsIG9yIHZpcnR1YWxpemVkIGhhcmR3YXJlLiBCdXQgd2FpdCwgSSByZWNhbGwgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgY2FwYWJpbGl0eSB0byBmdXp6IFBIWXMgdXNpbmcgTURJTywgYXNzdW1pbmcgdGhleSBhcmUgYWN0dWFsbHkgcmVnaXN0ZXJlZCBpbiB0aGUgc3lzdGVtLlxuXG5TbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFRoZSBjaGFuZ2UgaXMgYSByZWdpc3RlciBtb2RpZmljYXRpb24gbW92ZS4gR2l2ZW4gdGhhdCBpdCdzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUEhZIGRyaXZlciwgdGhhdCdzIHdoYXQgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgbm93LiBDYW4gd2UgZXZlbiB0cmlnZ2VyIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cD8gVXN1YWxseSwgZnV6emluZyBQSFkgZHJpdmVycyBpcyBhIG5vLWdvIHVubGVzcyBhIHZpcnR1YWwgTURJTyBidXMgaXMgcHJlc2VudC4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9uZXQvcGh5L0tjb25maWdgIGZpbGUgdG8gc2VlIGlmIHRoZXJlJ3MgYSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IG1pZ2h0IHBvaW50IHRvIGEgcG9zc2libGUgdmlydHVhbGl6ZWQgb3IgZW11bGF0ZWQgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMTowNi40ODU4MzE0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjA5NTk3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaXJfZW44ODExaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0zMz1vYmotJChDT05GSUdfQUlSX0FOODgwMV9QSFkpXFx0Kz0gYWlyX2FuODgwMS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19BSVJfRU44ODExSF9QSFkpICAgKz0gYWlyX2VuODgxMWgub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zNS1vYmotJChDT05GSUdfQUlSX05FVF9QSFlMSUIpXFx0Kz0gYWlyX3BoeV9saWIub1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0zMjQtLyogTEVEIGJhc2ljIGNvbnRyb2wgcmVnaXN0ZXIsIHBhcnQgb2YgdGhlIHNhbWUgTEVEIGJsb2NrIGFzIHRoZSBMRUQwL0xFRDFcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jOjMyNTogKiBjb250cm9sIHJlZ2lzdGVycyBhYm92ZS4gVGhlIGFpcl9lbjg4MTFoIGRyaXZlciBkZXNjcmliZXMgdGhlIHNhbWVcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTMyNi0gKiByZWdpc3RlciBhcyBBSVJfUEhZX0xFRF9CQ1IuXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jPTE0ODI9c3RhdGljIGludCBlbjc1MjhfcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTE0ODYtXFx0ICogcHJvZ3JhbW1lZCBpbnRvIHRoZSBMRUQgY29udHJvbCByZWdpc3RlcnMuIEhhbmQgdGhlIHBpbnMgb3ZlciB0b1xcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM6MTQ4NzpcXHQgKiB0aGUgTEVEIGNvbnRyb2wgcmVnaXN0ZXJzIHRoZSBzYW1lIHdheSB0aGUgYWlyX2VuODgxMWggZHJpdmVyXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0xNDg4LVxcdCAqIGRvZXM7IHRoZSBtb2RlIGZpZWxkIG9mIHRoaXMgcmVnaXN0ZXIgaXMgYWxyZWFkeSBzZXQgb3V0IG9mIHJlc2V0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMTowNi41NDc5MzE3NTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODkzNTE0MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYSBQSFkgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBzeXN0ZW0ncyBjb25maWd1cmVkIGZvciBgQ09ORklHX0FJUl9FTjg4MTFIX1BIWWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBQSFkgY29uZmlndXJhdGlvbiBmaWxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNwZWNpZmljIFBIWSwgdGhlIEFJUl9FTjg4MTFILCBpcyBhbGwgYWJvdXQuIFdoZXJlIGRvZXMgdGhlIGtlcm5lbCBkZWZpbmUgaXQ/IEknbSBnb2luZyB0byBxdWlja2x5IGp1bXAgb3ZlciB0byBgZHJpdmVycy9uZXQvcGh5L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBwYXJ0aWN1bGFyIFBIWSwgc3BlY2lmaWNhbGx5IHRoZSBgQUlSX0VOODgxMUhfUEhZYCBzeW1ib2wuIEknbSBsb29raW5nIGZvciBpdHMgZGVmaW5pdGlvbiwgYW55IGFzc29jaWF0ZWQgZmVhdHVyZXMgaXQgZW5hYmxlcywgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgYW5kLCBjcnVjaWFsbHksIGFueSBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBpdHMgaW50ZW5kZWQgdXNlIGNhc2Ugb3IgYW55IHNwZWNpZmljIHF1aXJrcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMxOjEwLjQ0MTQ0NzQ3M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTYyNjc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUlSX0VOODgxMUhfUEhZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9OTM9Y29uZmlnIEFJUl9BTjg4MDFfUEhZXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy05OC1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo5OTpjb25maWcgQUlSX0VOODgxMUhfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTAwLVxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgRU44ODExSCAyLjUgR2lnYWJpdCBQSFlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMxOjEwLjQ5MzA5MjIwOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzM3NDEyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRHJpdmVyJ3MgRnV6emFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBkcml2ZXIgaXMgZXZlbiAqcmVhY2hhYmxlKiB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LiBPZnRlbiwgdGhlc2UgUEhZIGRyaXZlcnMgYXJlIGVzc2VudGlhbGx5IE1ESU8gZGV2aWNlcywgYW5kIE1ESU8gZGV2aWNlcyBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZywgZXNwZWNpYWxseSBpZiB0aGVyZSdzIGEgdmlydHVhbCBNRElPIGJ1cyBhdmFpbGFibGUuIEkndmUgZ290IHRvIGNoZWNrIHRoZSBpbnN0cnVjdGlvbnMgYWdhaW4sIHRob3VnaC4gQWgsIHJpZ2h0LCB0aGUgY2F2ZWF0OiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi4gY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBEb2VzIGEgUEhZIGRyaXZlciBmYWxsIGludG8gdGhhdCBcInZlbmRvci1zcGVjaWZpY1wiIGNhdGVnb3J5IHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmU/IEl0J3MgYSBiaXQgb2YgYSBncmF5IGFyZWEuIFVzdWFsbHksIHRoZXNlIFBIWSBkcml2ZXJzIGFyZSBwcm9iZWQgd2hlbiB0aGUgTURJTyBidXMgc2NhbnMgZm9yIGF2YWlsYWJsZSBQSFlzIGFuZCBmaW5kcyBhIG1hdGNoaW5nIFBIWSBJRC4gVGhlIGNhdGNoIHdpdGggUUVNVSBpcyB0aGF0LCAqdW5sZXNzKiB0aGVyZSdzIGEgc3BlY2lmaWMgZW11bGF0ZWQgbmV0d29yayBjYXJkIHRoYXQgc3BlY2lmaWNhbGx5IGV4cG9zZXMgYW5kIG1vZGVscyB0aGlzIFBIWSwgdGhlIGRyaXZlciB3b24ndCBldmVuIGJlIHByb2JlZCwgaGVuY2UgdW4tZnV6emFibGUuXG5cbkJ1dCwgaGFuZyBvbiBhIHNlY29uZC4gRGlkbid0IEkgcmVjYWxsIHNvbWV0aGluZyBhYm91dCBzeXprYWxsZXIgaGF2aW5nIGEgdmlydHVhbCBNRElPIGJ1cz8gSSB0aGluayB0aGVyZSdzIGEgXCJtZGlvLW1vY2t1cFwiIG9yIHNvbWV0aGluZyBzaW1pbGFyLi4uIE5vLCB3YWl0LCBtYXliZSBub3QuIEkgc2hvdWxkIHZlcmlmeS4gQWgsIHllcyEgSSdtIHByZXR0eSBzdXJlIHRoZXJlJ3MgYSBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9ja3VwLmNgIG9yIHNvbWV0aGluZyB2ZXJ5IHNpbWlsYXIuIFRoYXQgY291bGQgY2hhbmdlIGV2ZXJ5dGhpbmchIEkgbmVlZCB0byBjb25maXJtIHRoaXMgcXVpY2tseSBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgYXMgdGhhdCBjb3VsZCBtZWFuIGl0ICppcyogZnV6emFibGUgaW4gUUVNVS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMToxNS44NjY4MzUxMDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMDIzMTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8tbW9ja3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMxOjE1LjkxNDg0NDU1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc3MjYxNTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTURJTyBCdXMgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgZGVlcGVyLCBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHByZXNlbmNlIG9mIGEgdmlydHVhbCBNRElPIGJ1cy4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSBzeXN0ZW0gdXRpbGl6ZXMgYSB2aXJ0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNRElPIChNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0KSBpbnRlcmZhY2UsIHBlcmhhcHMgZW11bGF0ZWQgb3Igc29mdHdhcmUtZGVmaW5lZC4gVGhpcyBwcmVsaW1pbmFyeSBzdGVwIGlzIGNydWNpYWwuIFRoaXMgd2lsbCBoZWxwIGluZm9ybSB3aGV0aGVyIEknbSB3b3JraW5nIHdpdGggYSBzdGFuZGFyZCBoYXJkd2FyZSBpbnRlcmZhY2Ugb3IgYSBtb3JlIGFic3RyYWN0ZWQgZW52aXJvbm1lbnQsIHdoaWNoIHdpbGwgZHJhc3RpY2FsbHkgYWZmZWN0IGhvdyBJIHByb2NlZWQgd2l0aCBhbnkgc3Vic2VxdWVudCBhbmFseXNpcyBvciBjb25maWd1cmF0aW9uIHRhc2tzIHJlbGF0ZWQgdG8gUEhZIGludGVyYWN0aW9uLCBwYXJ0aWN1bGFybHkgd2hlbiBpdCBjb21lcyB0byBhbnkgTURJTyBpbnRlcmFjdGlvbi4gSSB3YW50IHRvIGtub3cgdGhpcyAqYmVmb3JlKiBnb2luZyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTY4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6MjEuNjg3NDYyNTI1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU5MjI1NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9ja3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMxOjIxLjczNTA2MzgxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzcxOTAwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIE1ESU8gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhcnRpY3VsYXIgbmV0d29yayBpc3N1ZS4gTXkgaW5pdGlhbCBndXQgdGVsbHMgbWUgdG8gY2hlY2sgdGhlIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSAoTURJTykgZHJpdmVycy4gVGhleSdyZSBvZnRlbiB0aGUgZ2F0ZXdheSB0byBQSFkgaW50ZXJhY3Rpb25zLCBhbmQgcHJvYmxlbXMgdGhlcmUgY2FuIG1hbmlmZXN0IGluIGEgdmFyaWV0eSBvZiB3YXlzLiBTbywgZmlyc3QgdGhpbmcncyBmaXJzdCwgSSdtIGhlYWRpbmcgb3ZlciB0byB0aGUgYGRyaXZlcnMvbmV0L21kaW8vYCBkaXJlY3RvcnkuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBpbnRlcmFjdHMgd2l0aCB0aGUgcGh5c2ljYWwgbGF5ZXIgZGV2aWNlcy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290IGluIHRoZXJlLiBJJ20gaG9waW5nIGl0J3Mgd2VsbC1vcmdhbml6ZWQgYW5kIGNsZWFybHkgc3RydWN0dXJlZC4uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1vbiBpbXBsZW1lbnRhdGlvbnMsIGdlbmVyaWMgTURJTyBhY2Nlc3Mgcm91dGluZXMsIGFuZCBhbnl0aGluZyBzcGVjaWZpYyB0byB0aGUgdGFyZ2V0IGhhcmR3YXJlLCByaWdodCBhd2F5LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3Mgd2hhdCBtaWdodCBiZSBnb2luZyB3cm9uZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMxOjI1LjcxMjI1NjM5MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MjgxNjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vY2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6MjUuNzU3NzkxMzc2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzk1MzQ4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhwbG9yaW5nIFVzZXIgU3BhY2UgQWNjZXNzIHRvIFBIWSBEcml2ZXJzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IGNsZXZlciB3YXkgdG8gcG9rZSBhdCBQSFkgZHJpdmVycyBkaXJlY3RseSBmcm9tIHVzZXIgc3BhY2UsIHdpdGhvdXQgYWN0dWFsbHkgaGF2aW5nIHRoZSBoYXJkd2FyZSBpbiBmcm9udCBvZiBtZS4gSSd2ZSBiZWVuIHBvbmRlcmluZyB0aGlzLiBJdCBmZWVscyBsaWtlIHRoZXJlIGhhcyB0byBiZSBhIHZpcnR1YWwgcGF0aC4gQ291bGQgSSB1c2Ugc29tZXRoaW5nIGxpa2UgYGRzYV9sb29wYCBvciBtYXliZSBldmVuIGBmaXhlZC1waHlgPyBIb2xkIG9uLCB0aG91Z2guLi4gYGZpeGVkLXBoeWAgaXMgcmVhbGx5IGRlc2lnbmVkIGZvciB0aG9zZSBmaXhlZCBsaW5rcywgbm90IGZvciBzb21lIGdlbmVyYWwgZXhwbG9yYXRpb24gb2YgZGlmZmVyZW50IFBIWSBkcml2ZXJzLiBUaGF0J3Mgbm90IGdvaW5nIHRvIGRvIHdoYXQgSSB3YW50LiBIbW0sIHdoYXQgYWJvdXQgYG5ldGRldnNpbWA/IE5vdyB0aGF0J3MgaW50ZXJlc3RpbmcuIERvZXMgdGhhdCBoYXZlIGEgc2ltdWxhdGVkIE1ESU8gYnVzPyBJZiBpdCBkb2VzLCBtYXliZSBJIGNhbiB1c2UgdGhhdCB0byB0ZXN0IGFuZCBwcm90b3R5cGUgc29tZSB0aGluZ3MuLi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXRhaWxzIGFuZCBkb2N1bWVudGF0aW9uIG9uIHRoYXQuIFRoaXMgaXMgd2hlcmUgaXQgc3RhcnRzIHRvIGdldCBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAyMSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMxOjI5LjgzNzMzMDY2NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2MzQ2MDUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6MjkuODgyOTcxMzExWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTk1OTAwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgd2FpdCBhIG1pbnV0ZS4gU29tZXRoaW5nIGZlZWxzIG9mZi4gR2VuZXJhbGx5LCBzeXprYWxsZXIgaXNuJ3QgdXNlZCB0byBmdXp6IFBIWSBkcml2ZXJzIGRpcmVjdGx5LCByaWdodD8gVGhleSdyZSB1c3VhbGx5IGhhcmR3YXJlLXNwZWNpZmljLCBtZWFuaW5nIHRoZXkgbmVlZCB0aGUgZXhhY3QgaGFyZHdhcmUgdG8gZXZlbiBiZSBhY2Nlc3NpYmxlIGFuZCBmdXp6YWJsZS4gU28sIHRoZSB1c3VhbCBhcHByb2FjaCBkb2Vzbid0IHJlYWxseSB3b3JrLlxuXG5MZXQncyBwYXVzZSBhbmQgZG91YmxlLWNoZWNrLiBJIHNob3VsZCByZWFsbHkgbG9vayBhdCB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBNRElPIG9yIFBIWS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byBzZWUgaWYgdGhlcmUncyBhbiBleGlzdGluZyBmcmFtZXdvcmsgdGhhdCBJIGNhbiB1c2UuIFRoaXMgd2lsbCBjbGFyaWZ5IGhvdyB0aGlzIHBhcnRpY3VsYXIgc2l0dWF0aW9uIHNob3VsZCBiZSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzE4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6MzMuMDgyNTYzOTkyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODg4MjU3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RzYS9kc2EuYz02MjI9c3RhdGljIGludCBkc2Ffc3dpdGNoX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbm5ldC9kc2EvZHNhLmMtNjU0LVxcdGlmICghZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyBcXHUwMDI2XFx1MDAyNiBkcy1cXHUwMDNlb3BzLVxcdTAwM2VwaHlfcmVhZCkge1xcbm5ldC9kc2EvZHNhLmM6NjU1OlxcdFxcdGRzLVxcdTAwM2V1c2VyX21paV9idXMgPSBtZGlvYnVzX2FsbG9jKCk7XFxubmV0L2RzYS9kc2EuYy02NTYtXFx0XFx0aWYgKCFkcy1cXHUwMDNldXNlcl9taWlfYnVzKSB7XFxuLS1cXG5uZXQvZHNhL2RzYS5jLTY2Mi1cXG5uZXQvZHNhL2RzYS5jOjY2MzpcXHRcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGRzLVxcdTAwM2V1c2VyX21paV9idXMpO1xcbm5ldC9kc2EvZHNhLmMtNjY0LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2RzYS9kc2EuYy02NzQtXFx0aWYgKGRzLVxcdTAwM2V1c2VyX21paV9idXMgXFx1MDAyNlxcdTAwMjYgZHMtXFx1MDAzZW9wcy1cXHUwMDNlcGh5X3JlYWQpXFxubmV0L2RzYS9kc2EuYzo2NzU6XFx0XFx0bWRpb2J1c19mcmVlKGRzLVxcdTAwM2V1c2VyX21paV9idXMpO1xcbm5ldC9kc2EvZHNhLmMtNjc2LXRlYXJkb3duOlxcbi0tXFxubmV0L2RzYS9kc2EuYz02ODY9c3RhdGljIHZvaWQgZHNhX3N3aXRjaF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTY5My1cXHRpZiAoZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyBcXHUwMDI2XFx1MDAyNiBkcy1cXHUwMDNlb3BzLVxcdTAwM2VwaHlfcmVhZCkge1xcbm5ldC9kc2EvZHNhLmM6Njk0OlxcdFxcdG1kaW9idXNfdW5yZWdpc3Rlcihkcy1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG5uZXQvZHNhL2RzYS5jOjY5NTpcXHRcXHRtZGlvYnVzX2ZyZWUoZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyk7XFxubmV0L2RzYS9kc2EuYy02OTYtXFx0XFx0ZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyA9IE5VTEw7XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0xMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbm90aWZpZXIuaFxcdTAwM2VcXG5uZXQvZHNhL3BvcnQuYzoxMjojaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbWRpby5oXFx1MDAzZVxcbm5ldC9kc2EvcG9ydC5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9uZXQuaFxcdTAwM2VcXG4tLVxcbm5ldC9kc2EvcG9ydC5jPTE3MjY9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkc2Ffc3dpdGNoZXNfYXBwbHlfd29ya2Fyb3VuZHNbXSA9IHtcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTE3OTYtI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pXFxubmV0L2RzYS9wb3J0LmM6MTc5NzpcXHRcXFwic21zYyxsYW45MzAzLW1kaW9cXFwiLFxcbm5ldC9kc2EvcG9ydC5jLTE3OTgtI2VuZGlmXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbmV0LmhcXHUwMDNlXFxubmV0L2RzYS91c2VyLmM6MTQ6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX21kaW8uaFxcdTAwM2VcXG5uZXQvZHNhL3VzZXIuYzoxNTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby5oXFx1MDAzZVxcbm5ldC9kc2EvdXNlci5jLTE2LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFxcdTAwM2VcXG4tLVxcbm5ldC9kc2EvdXNlci5jPTI2Mzc9c3RhdGljIGludCBkc2FfdXNlcl9waHlfY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqdXNlcl9kZXYsIGludCBhZGRyLFxcbi0tXFxubmV0L2RzYS91c2VyLmMtMjY0Mi1cXG5uZXQvZHNhL3VzZXIuYzoyNjQzOlxcdHVzZXJfZGV2LVxcdTAwM2VwaHlkZXYgPSBtZGlvYnVzX2dldF9waHkoZHMtXFx1MDAzZXVzZXJfbWlpX2J1cywgYWRkcik7XFxubmV0L2RzYS91c2VyLmMtMjY0NC1cXHRpZiAoIXVzZXJfZGV2LVxcdTAwM2VwaHlkZXYpIHtcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jPTU4Nz1jb252ZXJ0X2xlZ2FjeV9zZXR0aW5nc190b19saW5rX2tzZXR0aW5ncyhcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTYyMS1cXHRcXHQ9IGxlZ2FjeV9zZXR0aW5ncy1cXHUwMDNlYXV0b25lZztcXG5uZXQvZXRodG9vbC9jb21tb24uYzo2MjI6XFx0bGlua19rc2V0dGluZ3MtXFx1MDAzZWJhc2UubWRpb19zdXBwb3J0XFxubmV0L2V0aHRvb2wvY29tbW9uLmM6NjIzOlxcdFxcdD0gbGVnYWN5X3NldHRpbmdzLVxcdTAwM2VtZGlvX3N1cHBvcnQ7XFxubmV0L2V0aHRvb2wvY29tbW9uLmMtNjI0LVxcdGxpbmtfa3NldHRpbmdzLVxcdTAwM2ViYXNlLmV0aF90cF9tZGl4XFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTM4Mj1jb252ZXJ0X2xpbmtfa3NldHRpbmdzX3RvX2xlZ2FjeV9zZXR0aW5ncyhcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDEyLVxcdFxcdD0gbGlua19rc2V0dGluZ3MtXFx1MDAzZWJhc2UuYXV0b25lZztcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjQxMzpcXHRsZWdhY3lfc2V0dGluZ3MtXFx1MDAzZW1kaW9fc3VwcG9ydFxcbm5ldC9ldGh0b29sL2lvY3RsLmM6NDE0OlxcdFxcdD0gbGlua19rc2V0dGluZ3MtXFx1MDAzZWJhc2UubWRpb19zdXBwb3J0O1xcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDE1LVxcdGxlZ2FjeV9zZXR0aW5ncy1cXHUwMDNlZXRoX3RwX21kaXhcXG4tLVxcbm5ldC9ldGh0b29sL3BoeS5jPTcwPXN0YXRpYyBpbnQgcGh5X3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxcbi0tXFxubmV0L2V0aHRvb2wvcGh5LmMtOTEtXFxubmV0L2V0aHRvb2wvcGh5LmM6OTI6XFx0cmVwX2RhdGEtXFx1MDAzZW5hbWUgPSBrc3RyZHVwKGRldl9uYW1lKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2KSwgR0ZQX0tFUk5FTCk7XFxubmV0L2V0aHRvb2wvcGh5LmMtOTMtXFx0aWYgKCFyZXBfZGF0YS1cXHUwMDNlbmFtZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6MzMuMTUxNDUyMDA1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0NzczNDEyOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBVc2VyLVNwYWNlIFBIWSBEZXZpY2UgQ3JlYXRpb24qKlxuXG5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBDYW4gYSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uIHNvbWVob3cgY29uanVyZSB1cCBhIFBIWSBkZXZpY2UgYXQgd2lsbCwgdXNpbmcgbmV0bGluayBvciBieSBtYW5pcHVsYXRpbmcgc3lzZnM/IE15IGluaXRpYWwgaHVuY2ggaXMgbm8sIG5vdCByZWFsbHkuIFBIWSBkZXZpY2VzLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGFyZSBmdW5kYW1lbnRhbGx5IGxpbmtlZCB0byB0aGUgcGh5c2ljYWwgTURJTyBidXMgYW5kIGFyZSBpbnN0YW50aWF0ZWQgZHVyaW5nIHRoYXQgYnVzJ3Mgc2NhbiBwcm9jZXNzLCByZWFkaW5nIHRob3NlIGNydWNpYWwgUEhZIElEIHJlZ2lzdGVycy4gSWYgdGhlcmUncyBubyBhY3R1YWwgcGh5c2ljYWwgTURJTyBidXMsIHRoZW4gdHlwaWNhbGx5LCB0aGVyZSBhcmUgbm8gUEhZIGRldmljZXMsIHNpbXBsZSBhcyB0aGF0LlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgSSB0aGluayBJ4oCZbSBmb3JnZXR0aW5nIHNvbWV0aGluZ+KApiBpc27igJl0IGBkc2FfbG9vcGAgYSBtb2NrIERTQSBzd2l0Y2gsIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBzaW11bGF0ZSBhbiBNRElPIGJ1cz8gSWYgSSByZW1lbWJlciBjb3JyZWN0bHksIHRoYXQgc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCB0aGUgYW5zd2VyIEkgbmVlZC4gVGhhdCdzIGl0ISBJIG5lZWQgdG8gY29uc3VsdCB0aGUgc291cmNlLiBMZXQncyBkaWcgaW50byBgZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNgIGFuZCBjb25maXJtIG15IGh5cG90aGVzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NjYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMTo0MS42Mjg3OTU4OTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Mjg5NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NzQ9c3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZzW1BIWV9NQVhfQUREUl07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NzU6c3RhdGljIHN0cnVjdCBtZGlvX2RldmljZSAqc3dpdGNoX21kaW9kZXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNzYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz0xODQ9c3RhdGljIGludCBkc2FfbG9vcF9waHlfcmVhZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgcmVnbnVtKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg5LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE5MDpcXHRyZXQgPSBtZGlvYnVzX3JlYWRfbmVzdGVkKGJ1cywgcHMtXFx1MDAzZXBvcnRfYmFzZSArIHBvcnQsIHJlZ251bSk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTkxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9MTk5PXN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3dyaXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjA2OlxcdHJldCA9IG1kaW9idXNfd3JpdGVfbmVzdGVkKGJ1cywgcHMtXFx1MDAzZXBvcnRfYmFzZSArIHBvcnQsIHJlZ251bSwgdmFsdWUpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwNy1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTI1MD1zdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI2My1cXHQvKiBKdXN0IGRvIGEgc2xlZXBpbmcgb3BlcmF0aW9uIHRvIG1ha2UgbG9ja2RlcCBjaGVja3MgZWZmZWN0aXZlICovXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjY0OlxcdG1kaW9idXNfcmVhZChidXMsIHBzLVxcdTAwM2Vwb3J0X2Jhc2UgKyBwb3J0LCBNSUlfQk1TUik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjY1LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9MjgzPXN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkyLVxcdC8qIEp1c3QgZG8gYSBzbGVlcGluZyBvcGVyYXRpb24gdG8gbWFrZSBsb2NrZGVwIGNoZWNrcyBlZmZlY3RpdmUgKi9cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyOTM6XFx0bWRpb2J1c19yZWFkKGJ1cywgcHMtXFx1MDAzZXBvcnRfYmFzZSArIHBvcnQsIE1JSV9CTVNSKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yOTQtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz0zMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBkc2FfbG9vcF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTQtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU1OnN0YXRpYyBpbnQgZHNhX2xvb3BfZHJ2X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTYte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NzpcXHRzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEgKnBkYXRhID0gbWRpb2Rldi1cXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU4LVxcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2NC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNjU6XFx0ZHMgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpkcyksIEdGUF9LRVJORUwpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2Ni1cXHRpZiAoIWRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzY4LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM2OTpcXHRkcy1cXHUwMDNlZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNzAtXFx0ZHMtXFx1MDAzZW51bV9wb3J0cyA9IERTQV9MT09QX05VTV9QT1JUUztcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNzEtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzcyOlxcdHBzID0gZGV2bV9remFsbG9jKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqcHMpLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNzMtXFx0aWYgKCFwcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODI6XFx0ZHMtXFx1MDAzZWRldiA9IFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzgzLVxcdGRzLVxcdTAwM2VvcHMgPSBcXHUwMDI2ZHNhX2xvb3BfZHJpdmVyO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4NC1cXHRkcy1cXHUwMDNlcHJpdiA9IHBzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM4NTpcXHRwcy1cXHUwMDNlYnVzID0gbWRpb2Rldi1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Ni1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODc6XFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODgtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTAtXFx0aWYgKCFyZXQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzkxOlxcdFxcdGRldl9pbmZvKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogMHglMHhcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzkyLVxcdFxcdFxcdCBwZGF0YS1cXHUwMDNlbmFtZSwgcGRhdGEtXFx1MDAzZWVuYWJsZWRfcG9ydHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM5NzpzdGF0aWMgdm9pZCBkc2FfbG9vcF9kcnZfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTgte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM5OTpcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDAwLVxcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQxMzpcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDE0LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDE5LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMDpcXHRkZXZfc2V0X2RydmRhdGEoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldiwgTlVMTCk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIxLX1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDIzOnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgZHNhX2xvb3BfZHJ2ID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyNDpcXHQubWRpb2Rydi5kcml2ZXJcXHQ9IHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjUtXFx0XFx0Lm5hbWVcXHQ9IFxcXCJkc2EtbG9vcFxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00MzI9c3RhdGljIGludCBkc2FfbG9vcF9idXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM0LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzU6XFx0cmV0dXJuIGRydiA9PSBcXHUwMDI2ZHNhX2xvb3BfZHJ2Lm1kaW9kcnYuZHJpdmVyO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzNi19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00Mzg9c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ2OnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2Rldih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDYzOlxcdGJ1cyA9IG1kaW9fZmluZF9idXMoXFxcImZpeGVkLTBcXFwiKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjQtXFx0aWYgKFdBUk5fT04oIWJ1cykpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDY3OlxcdHN3aXRjaF9tZGlvZGV2ID0gbWRpb19kZXZpY2VfY3JlYXRlKGJ1cywgMzEpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ2ODpcXHRpZiAoSVNfRVJSKHN3aXRjaF9tZGlvZGV2KSlcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjktXFx0XFx0Z290byBvdXQ7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDcwLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MTpcXHRzd2l0Y2hfbWRpb2Rldi1cXHUwMDNlYnVzX21hdGNoID0gZHNhX2xvb3BfYnVzX21hdGNoO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MjpcXHRzd2l0Y2hfbWRpb2Rldi1cXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGEgPSBcXHUwMDI2ZHNhX2xvb3BfcGRhdGE7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDczLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3NDpcXHRyZXQgPSBtZGlvX2RldmljZV9yZWdpc3Rlcihzd2l0Y2hfbWRpb2Rldik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDc1LVxcdGlmIChyZXQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDc2OlxcdFxcdG1kaW9fZGV2aWNlX2ZyZWUoc3dpdGNoX21kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3Ny1vdXQ6XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00ODI9c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDg2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ4NzpcXHRyZXQgPSBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODgtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5My1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTQ6XFx0cmV0ID0gbWRpb19kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNmRzYV9sb29wX2Rydik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDk1LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTYtXFx0XFx0ZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKCk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk3OlxcdFxcdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk4OlxcdFxcdG1kaW9fZGV2aWNlX2ZyZWUoc3dpdGNoX21kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5OS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz01MDU9c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDYte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcXHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZkc2FfbG9vcF9kcnYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwOC1cXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDk6XFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MTA6XFx0bWRpb19kZXZpY2VfZnJlZShzd2l0Y2hfbWRpb2Rldik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTExLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6NDEuNjc2MDkxNDM3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzQ2OTU5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGRzYV9sb29wYCBhbmQgYG1kaW8tbW9ja3VwYCBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBkc2FfbG9vcGAgaXMgbGV2ZXJhZ2luZyB0aGUgYGZpeGVkLTBgIGJ1cy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIHRvIGBtZGlvLW1vY2t1cGAuIEhtbSwgZG9lcyB0aGlzIGV2ZW4gZXhpc3Q/IExldCBtZSBxdWlja2x5IHZlcmlmeSBieSBjaGVja2luZyBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9ja3VwLmNgLiBOb3BlLCB0aGF0IHdhc24ndCB0aGUgcmlnaHQgcGF0aC4gT2theSwgcGVyaGFwcyBpdCdzIHVuZGVyIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tbW9ja3VwLmNgIGluc3RlYWQ/IFN0aWxsIG5vIGx1Y2suIFRpbWUgdG8gdGFrZSBhIGJyb2FkZXIgYXBwcm9hY2g7IEknbGwgYnJvd3NlIHRoZSBgZHJpdmVycy9uZXQvcGh5L2AgZGlyZWN0b3J5IHRvIHNlZSBpZiB0aGVyZSdzIGFueSByZWxldmFudCBjb2RlIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGlzIGBkc2FfbG9vcGAgLyBgZml4ZWQtMGAgLyBgbWRpby1tb2NrdXBgIGludGVyYWN0aW9uLiBIb3BlZnVsbHksIEkgY2FuIGZpbmQgc29tZXRoaW5nIHVzZWZ1bCBpbiB0aG9zZSBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMTo0NS44MTA3OTAwODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImFkaW4uY1wiLFxuICAgIFwiYWRpbjExMDAuY1wiLFxuICAgIFwiYWRpbjExNDAtcGh5LmNcIixcbiAgICBcImFpcl9hbjg4MDEuY1wiLFxuICAgIFwiYWlyX2VuODgxMWguY1wiLFxuICAgIFwiYWlyX3BoeV9saWIuY1wiLFxuICAgIFwiYWlyX3BoeV9saWIuaFwiLFxuICAgIFwiYW1kLmNcIixcbiAgICBcImFzMjF4eHguY1wiLFxuICAgIFwiYXg4ODc5NmIuY1wiLFxuICAgIFwiYXg4ODc5NmJfcnVzdC5yc1wiLFxuICAgIFwiYmNtLWN5Z251cy5jXCIsXG4gICAgXCJiY20tcGh5LWxpYi5jXCIsXG4gICAgXCJiY20tcGh5LWxpYi5oXCIsXG4gICAgXCJiY20tcGh5LXB0cC5jXCIsXG4gICAgXCJiY201NDE0MC5jXCIsXG4gICAgXCJiY202M3h4LmNcIixcbiAgICBcImJjbTd4eHguY1wiLFxuICAgIFwiYmNtODQ4ODEuY1wiLFxuICAgIFwiYmNtODd4eC5jXCIsXG4gICAgXCJicm9hZGNvbS5jXCIsXG4gICAgXCJjaWNhZGEuY1wiLFxuICAgIFwiY29ydGluYS5jXCIsXG4gICAgXCJkYXA4MjExci5jXCIsXG4gICAgXCJkYXZpY29tLmNcIixcbiAgICBcImRwODM2NDAuY1wiLFxuICAgIFwiZHA4MzY0MF9yZWcuaFwiLFxuICAgIFwiZHA4MzgyMi5jXCIsXG4gICAgXCJkcDgzODQ4LmNcIixcbiAgICBcImRwODM4NjcuY1wiLFxuICAgIFwiZHA4Mzg2OS5jXCIsXG4gICAgXCJkcDgzdGM4MTEuY1wiLFxuICAgIFwiZHA4M3RkNTEwLmNcIixcbiAgICBcImRwODN0ZzcyMC5jXCIsXG4gICAgXCJldDEwMTFjLmNcIixcbiAgICBcImZpeGVkX3BoeS5jXCIsXG4gICAgXCJpY3BsdXMuY1wiLFxuICAgIFwiaW50ZWwteHdheS5jXCIsXG4gICAgXCJsaW5rbW9kZS5jXCIsXG4gICAgXCJseHQuY1wiLFxuICAgIFwibWFydmVsbC04OHEyeHh4LmNcIixcbiAgICBcIm1hcnZlbGwtODh4MjIyMi5jXCIsXG4gICAgXCJtYXJ2ZWxsLmNcIixcbiAgICBcIm1hcnZlbGwxMGcuY1wiLFxuICAgIFwibWRpby1vcGVuLWFsbGlhbmNlLmhcIixcbiAgICBcIm1kaW9fYnVzLmNcIixcbiAgICBcIm1kaW9fYnVzX3Byb3ZpZGVyLmNcIixcbiAgICBcIm1kaW9fZGV2aWNlLmNcIixcbiAgICBcIm1kaW9fZGV2cmVzLmNcIixcbiAgICBcIm1lc29uLWd4bC5jXCIsXG4gICAgXCJtaWNyZWwuY1wiLFxuICAgIFwibWljcm9jaGlwLmNcIixcbiAgICBcIm1pY3JvY2hpcF9yZHNfcHRwLmNcIixcbiAgICBcIm1pY3JvY2hpcF9yZHNfcHRwLmhcIixcbiAgICBcIm1pY3JvY2hpcF90MS5jXCIsXG4gICAgXCJtaWNyb2NoaXBfdDFzLmNcIixcbiAgICBcIm1paV90aW1lc3RhbXBlci5jXCIsXG4gICAgXCJtb3RvcmNvbW0uY1wiLFxuICAgIFwibXhsLTg2MTEwLmNcIixcbiAgICBcIm14bC1ncHkuY1wiLFxuICAgIFwibmF0aW9uYWwuY1wiLFxuICAgIFwibmNuMjYwMDAuY1wiLFxuICAgIFwibnhwLWM0NS10amExMXh4LW1hY3NlYy5jXCIsXG4gICAgXCJueHAtYzQ1LXRqYTExeHguY1wiLFxuICAgIFwibnhwLWM0NS10amExMXh4LmhcIixcbiAgICBcIm54cC1jYnR4LmNcIixcbiAgICBcIm54cC10amExMXh4LmNcIixcbiAgICBcIm9wZW5fYWxsaWFuY2VfaGVscGVycy5jXCIsXG4gICAgXCJvcGVuX2FsbGlhbmNlX2hlbHBlcnMuaFwiLFxuICAgIFwicGh5LWM0NS5jXCIsXG4gICAgXCJwaHktY2Fwcy5oXCIsXG4gICAgXCJwaHktY29yZS5jXCIsXG4gICAgXCJwaHkuY1wiLFxuICAgIFwicGh5X2NhcHMuY1wiLFxuICAgIFwicGh5X2RldmljZS5jXCIsXG4gICAgXCJwaHlfbGVkX3RyaWdnZXJzLmNcIixcbiAgICBcInBoeV9saW5rX3RvcG9sb2d5LmNcIixcbiAgICBcInBoeV9wYWNrYWdlLmNcIixcbiAgICBcInBoeV9wb3J0LmNcIixcbiAgICBcInBoeWxpYi1pbnRlcm5hbC5oXCIsXG4gICAgXCJwaHlsaWIuaFwiLFxuICAgIFwicGh5bGluay5jXCIsXG4gICAgXCJxc2VtaS5jXCIsXG4gICAgXCJxdDIwMjUucnNcIixcbiAgICBcInJvY2tjaGlwLmNcIixcbiAgICBcInNmcC1idXMuY1wiLFxuICAgIFwic2ZwLmNcIixcbiAgICBcInNmcC5oXCIsXG4gICAgXCJzbXNjLmNcIixcbiAgICBcInN0ZTEwWHAuY1wiLFxuICAgIFwic3R1YnMuY1wiLFxuICAgIFwic3dwaHkuY1wiLFxuICAgIFwic3dwaHkuaFwiLFxuICAgIFwidGVyYW5ldGljcy5jXCIsXG4gICAgXCJ1UEQ2MDYyMC5jXCIsXG4gICAgXCJ2aXRlc3NlLmNcIixcbiAgICBcInhpbGlueF9nbWlpMnJnbWlpLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogW1xuICAgIFwiYXF1YW50aWFcIixcbiAgICBcIm1lZGlhdGVrXCIsXG4gICAgXCJtc2NjXCIsXG4gICAgXCJxY29tXCIsXG4gICAgXCJyZWFsdGVrXCJcbiAgXVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6NDUuODEwOTIwMzExWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDU2NDQ3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBQSFkgRHJpdmVyIEluc3RhbnRpYXRpb24gV2l0aG91dCBIYXJkd2FyZSoqXG5cbk9rYXksIHNvIEkgc2VlIGBtZGlvX2J1cy5jYCBpcyBwcmVzZW50LCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IHByaW1hcnkgcXVlc3Rpb24gbm93IGlzOiBjYW4gSSBpbnN0YW50aWF0ZSBhIFBIWSBkcml2ZXIgd2l0aG91dCBhY3R1YWxseSBoYXZpbmcgdGhlIHBoeXNpY2FsIGhhcmR3YXJlPyBJJ20gdHJ5aW5nIHRvIGV4cGxvcmUgdGhpcyB0aGVvcmV0aWNhbGx5LCBtYXliZSBmb3Igc29tZSBmdXp6aW5nIG9yIHRlc3RpbmcgcHVycG9zZXMuIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIGFib3V0IFN5emthbGxlciBoYXZpbmcgc29tZSBleGlzdGluZyBzdXBwb3J0IGZvciBmdXp6aW5nIHRoZXNlIGRyaXZlcnMuIExldCBtZSBkaWcgaW50byB0aGF0IGFuZCBzZWUgaWYgSSBjYW4gZmluZCBhbnkgU3l6a2FsbGVyIGRlc2NyaXB0aW9ucyByZWxhdGVkIHRvIFBIWXMuIFRoYXQgbWlnaHQgZ2l2ZSBtZSBzb21lIGNsdWVzIGFib3V0IGhvdyB0byBhcHByb2FjaCB0aGlzLCBvciBzaG93IHNvbWUga25vd24gdGVjaG5pcXVlcyBmb3IgdmlydHVhbGl6aW5nIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDkwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMxOjQ5Ljc1NjU2NzU0NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAwODAxMzMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5el9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6NDkuODI2NjU0MTI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NDkzMDY5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBLZXJuZWwgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJIGhpdCBhIHdhbGwgd2l0aCB0aGUgYHN5el9gIHNlYXJjaCDigJMgdGhhdCdzIGEgZGVhZCBlbmQuIEkgbmVlZCBhIGRpZmZlcmVudCBhbmdsZS4gSG1tLCBsZXQgbWUgdGhpbmsgYWJvdXQgdmlydHVhbCBNRElPIGJ1c2VzLiBJcyB0aGVyZSBhbnl0aGluZyBpbiB0aGUga2VybmVsIHRoYXQgd291bGQgc2ltdWxhdGUgb3IgZW11bGF0ZSBhbiBNRElPIGJ1cz8gSSBuZWVkIGEgd2F5IHRvIGluamVjdCBhIFBIWSBpbnRvIHRoZSBzeXN0ZW0sIGFuZCB0aGF0IHNlZW1zIGxpa2UgdGhlIG5leHQgbG9naWNhbCBzdGVwLlxuXG5JIGluaXRpYWxseSBjb25zaWRlcmVkIGBkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmNgLiBUaGF04oCZcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGFsbG93cyBmb3IgUEhZcyB3aXRoIGZpeGVkIGxpbmtzLCBidXQgaXQgdXNlcyBhIHNwZWNpZmljLCBidWlsdC1pbiBkcml2ZXIsIGBmaXhlZF9waHlgLiBOb3QgcXVpdGUgd2hhdCBJJ20gbG9va2luZyBmb3IsIGFuZCBpdCdzIHByb2JhYmx5IHRvbyByaWdpZCBmb3Igd2hhdCBJIG5lZWQuXG5cbknigJl2ZSBydWxlZCBvdXQgYSBmZXcgb3RoZXIgb3B0aW9ucy4gYG5ldGRldnNpbWAg4oCTIG5vLiBgdHVuYC9gdGFwYCDigJMgbm8gTURJTy4gYG1hYzgwMjExX2h3c2ltYD8gTm9wZS4gYHZrbXNgPyBOZWdhdGl2ZS4gSSdtIGVzc2VudGlhbGx5IGxvb2tpbmcgZm9yIGEgd2F5IHRvIHRyaWNrIHRoZSBrZXJuZWwgaW50byBiZWxpZXZpbmcgYSBzcGVjaWZpYyBQSFksIGluIHRoaXMgY2FzZSwgYGFpcl9lbjg4MTFoYCwgaXMgcHJlc2VudCBpbiBteSBRRU1VIGVudmlyb25tZW50LlxuXG5TbywgaG93IGRvIEkgZ28gYWJvdXQgcHJvYmluZyBgYWlyX2VuODgxMWhgIGVmZmVjdGl2ZWx5IGluIGEgUUVNVSBzZXR1cD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBQSFkgZHJpdmVyIHJlZ2lzdHJhdGlvbiBhbmQgZGlzY292ZXJ5IHdvcmsuIEkndmUgZ290IGl0LCBhIFBIWSBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiB1c2luZyBgcGh5X2RyaXZlcl9yZWdpc3RlcmAuIFRoZW4sIHdoZW4gYW4gTURJTyBidXMgaXMgcmVnaXN0ZXJlZCwgaXQgc2NhbnMgZm9yIFBIWXMuIFdoZW4gaXQgZmluZHMgYSBtYXRjaGluZyBQSFkgSUQsIGl0IGJpbmRzIHRoZSBkcml2ZXIuXG5cblRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHRoZW4gYmVjb21lcyBob3cgZG8gSSBjcmVhdGUgYSAqZmFrZSogTURJTyBidXMgdGhhdCByZXBvcnRzIHRoZSBQSFkgSUQgdGhhdCBJIHdhbnQ/IEkgbmVlZCBhIGZha2UgTURJTyBidXMgdGhhdCByZXR1cm5zIGEgc3Bvb2ZlZCBQSFkgSUQgZHVyaW5nIHJlYWRzLiBEb2VzIHRoZSBrZXJuZWwgaGF2ZSBhbnkgcHJlLWV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBjb3VsZCBoZWxwIG1lIGFjY29tcGxpc2ggdGhpcz8gSSdsbCBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvbmV0L21kaW8vYCBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC4gVGhhdCdzIHRoZSBtb3N0IGxpa2VseSBwbGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MTcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6NTguMzc1OTYyODg3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC9tZGlvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJhY3BpX21kaW8uY1wiLFxuICAgIFwiZndub2RlX21kaW8uY1wiLFxuICAgIFwibWRpby1haXJvaGEuY1wiLFxuICAgIFwibWRpby1hc3BlZWQuY1wiLFxuICAgIFwibWRpby1iY20taXByb2MuY1wiLFxuICAgIFwibWRpby1iY20tdW5pbWFjLmNcIixcbiAgICBcIm1kaW8tYml0YmFuZy5jXCIsXG4gICAgXCJtZGlvLWNhdml1bS5jXCIsXG4gICAgXCJtZGlvLWNhdml1bS5oXCIsXG4gICAgXCJtZGlvLWdwaW8uY1wiLFxuICAgIFwibWRpby1oaXNpLWZlbWFjLmNcIixcbiAgICBcIm1kaW8taTJjLmNcIixcbiAgICBcIm1kaW8taXBxNDAxOS5jXCIsXG4gICAgXCJtZGlvLWlwcTgwNjQuY1wiLFxuICAgIFwibWRpby1tb3hhcnQuY1wiLFxuICAgIFwibWRpby1tc2NjLW1paW0uY1wiLFxuICAgIFwibWRpby1tdXgtYmNtLWlwcm9jLmNcIixcbiAgICBcIm1kaW8tbXV4LWJjbTYzNjguY1wiLFxuICAgIFwibWRpby1tdXgtZ3Bpby5jXCIsXG4gICAgXCJtZGlvLW11eC1tZXNvbi1nMTJhLmNcIixcbiAgICBcIm1kaW8tbXV4LW1lc29uLWd4bC5jXCIsXG4gICAgXCJtZGlvLW11eC1tbWlvcmVnLmNcIixcbiAgICBcIm1kaW8tbXV4LW11bHRpcGxleGVyLmNcIixcbiAgICBcIm1kaW8tbXV4LmNcIixcbiAgICBcIm1kaW8tbXZ1c2IuY1wiLFxuICAgIFwibWRpby1vY3Rlb24uY1wiLFxuICAgIFwibWRpby1waWM2NGhwc2MuY1wiLFxuICAgIFwibWRpby1yZWFsdGVrLXJ0bDkzMDAuY1wiLFxuICAgIFwibWRpby1yZWdtYXAuY1wiLFxuICAgIFwibWRpby1zdW40aS5jXCIsXG4gICAgXCJtZGlvLXRodW5kZXIuY1wiLFxuICAgIFwibWRpby14Z2VuZS5jXCIsXG4gICAgXCJvZl9tZGlvLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6NTguMzc2MDM4NDQ3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzEyNTU5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBNaXNzaW5nIE1ESU8gTW9ja3VwKipcblxuT2theSwgc28gdGhlcmUncyBubyBgbWRpby1tb2NrdXAuY2AgZmlsZS4gVGhhdCdzIHVuZXhwZWN0ZWQuIFdhaXQgYSBtaW51dGUuLi4gSSByZW1lbWJlciB0aGF0IHRoZSBgZHNhX2xvb3BgIHNldHVwIGFjdHVhbGx5ICpjcmVhdGVzKiBhIGZha2UgTURJTyBidXMuIFJpZ2h0ISBMZXQncyBnZXQgYmFjayB0byBgZHNhX2xvb3AuY2AgYW5kIHJlZnJlc2ggbXkgbWVtb3J5LlxuXG5BaCwgeWVzLiBJIHNlZSBpdCBub3cuIEl0IHVzZXMgYG1kaW9fZmluZF9idXMoXCJmaXhlZC0wXCIpYC4gVGhhdCByaW5ncyBhIGJlbGwuIFRoYXQgc3RyaW5nLi4uIHRoYXQncyB0aGUgbmFtZSBvZiB0aGUgYGZpeGVkX21kaW9fYnVzYCB0aGF0J3MgY3JlYXRlZCBieSBgZml4ZWRfcGh5LmNgLiBJIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoYXQgcGFydCBvZiB0aGUgc2V0dXAsIHNvIEknbGwgcXVpY2tseSBjaGVjayBgZml4ZWRfcGh5LmNgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODE0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMyOjAzLjQwNzI5NzA2OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM0NzgzMDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpeGVkX21kaW9fYnVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9MTkzPUVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV91bnJlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTk0LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxOTU6c3RhdGljIGludCBfX2luaXQgZml4ZWRfbWRpb19idXNfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xOTYte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTIxOC19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjIxOTptb2R1bGVfaW5pdChmaXhlZF9tZGlvX2J1c19pbml0KTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjIwLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoyMjE6c3RhdGljIHZvaWQgX19leGl0IGZpeGVkX21kaW9fYnVzX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjIyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0yMjUtfVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoyMjY6bW9kdWxlX2V4aXQoZml4ZWRfbWRpb19idXNfZXhpdCk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTIyNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzI6MDMuNzQyMDg1Nzk1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0ODgzNzE5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFZlcnNhdGlsaXR5IG9mIGBmaXhlZF9tZGlvX2J1c2AqKlxuXG5IbW0sIGludGVyZXN0aW5nIHF1ZXN0aW9uLiBDYW4gSSBsZXZlcmFnZSBgZml4ZWRfbWRpb19idXNgIHRvIHByb2JlIGp1c3QgKmFueSogUEhZIGRyaXZlcj8gTXkgZ3V0IHNheXMgXCJwcm9iYWJseSwgYnV0IHdpdGggY2F2ZWF0cy5cIiBMZXQgbWUgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBidXMgaXMgc3RydWN0dXJlZC4uLiByaWdodCwgaXQncyBkZXNpZ25lZCB0byByZXByZXNlbnQgYSBzdGF0aWNhbGx5IGRlZmluZWQgTURJTyBidXMsIHBlcmZlY3QgZm9yIHRob3NlIHNjZW5hcmlvcyB3aGVyZSB0aGUgUEhZIGNvbmZpZ3VyYXRpb24gaXMga25vd24gYXQgY29tcGlsZSB0aW1lIG9yIHN5c3RlbSBpbml0aWFsaXphdGlvbiwgbGlrZSBpbiBTb0NzIHdpdGggaW50ZWdyYXRlZCBQSFlzLiBUaGUgYmVhdXR5IGlzIGl0IGF2b2lkcyB0aGUgdXN1YWwgTURJTyBwcm9iaW5nIGRhbmNlLlxuXG5TbywgdGhlIGtleSBoZXJlIGlzIHdoZXRoZXIgdGhlIFBIWSBkcml2ZXIgKmV4cGVjdHMqIHRoaXMgc3RhdGljIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBleHBlY3RlZCBidXMuIExldCdzIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBmdW5jdGlvbnMgbGlrZSBgZml4ZWRfcGh5X2FkZGAgb3Igc2ltaWxhciBtZWNoYW5pc21zLiBJIG5lZWQgdG8gc2VlIHdoYXQgYXNzdW1wdGlvbnMgdGhlc2UgZml4ZWQgUEhZIGRyaXZlcnMgbWFrZSBhYm91dCB0aGUgdW5kZXJseWluZyBNRElPIGJ1cyBpbmZyYXN0cnVjdHVyZS4gRG8gdGhleSBzaW1wbHkgZXhwZWN0IGEgc3RydWN0dXJlIHdpdGggYSBwYXJ0aWN1bGFyIHNldCBvZiBvcGVyYXRpb25zLCBvciBhcmUgdGhlcmUgZGVlcGVyIGRlcGVuZGVuY2llcz8gSXMgdGhlcmUgYSBsZXZlbCBvZiBhYnN0cmFjdGlvbiB0aGF0IHRoaXMgYnVzIGFic3RyYWN0aW9uIGlzIHByZXNlbnRpbmcgdGhhdCBpcyB1bml2ZXJzYWwgZW5vdWdoIHRvIGRvIHNvP1xuXG5JZiB0aGUgZHJpdmVycyBhcmUgZmFpcmx5IGdlbmVyaWMgaW4gdGhlaXIgYnVzIGludGVyYWN0aW9uLCBhbmQgdGhleSByZWx5IG9uIHRoZSBNRElPIGJ1cydzIHN0YW5kYXJkIGFjY2VzcyBmdW5jdGlvbnMsIHRoZW4geWVzLCBpbiB0aGVvcnksIEkgbWlnaHQgYmUgYWJsZSB0byBnZXQgYXdheSB3aXRoIHVzaW5nIGBmaXhlZF9tZGlvX2J1c2AgdG8gYXR0YWNoIHRvIG1vcmUgYXJiaXRyYXJ5IFBIWSBkcml2ZXJzLiBJdCdzIHJlYWxseSBhYm91dCB0aGUgZHJpdmVyJ3MgZXhwZWN0YXRpb25zIGFuZCBob3cgY2xvc2VseSBpdCBiaW5kcyB0byB0aGUgYnVzJ3MgaW1wbGVtZW50YXRpb24uIEl0IGRlcGVuZHMgb24gd2hldGhlciB0aGUgYGZpeGVkX21kaW9fYnVzYCBhYnN0cmFjdGlvbiBpcyB0cnVseSBcImJ1cy1hZ25vc3RpY1wiIGVub3VnaCB0byBzdWl0IHRoZSB3aWRlciB2YXJpZXR5IG9mIFBIWSBkcml2ZXJzIG91dCB0aGVyZS5cblxuVGltZSB0byBjb25zdWx0IHRoZSBzb3VyY2UgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjowOS4yMzA0NjA2M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk3NDAzODQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpeGVkX3BoeV9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjowOS4yOTAyMTI0MDRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMzE0NjM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgdGhlIGBmaXhlZF9waHlfcmVnaXN0ZXJgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgYGZpeGVkX3BoeV9yZWdpc3RlcmAuIFRoaXMgaW1wbGllcyB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgUEhZIChQaHlzaWNhbCBMYXllcikgZGV2aWNlIGFuZCBhcmUgcHJvYmFibHkgdHJvdWJsZXNob290aW5nIG9yIGNvbmZpZ3VyaW5nIHNvbWUgYXNwZWN0IG9mIGl0cyBiZWhhdmlvci4gXCJGaXhlZFwiIGlzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIHRoaXMgcmVnaXN0ZXIgaXMgZWl0aGVyIGhhcmQtY29kZWQgb3Igbm90IGR5bmFtaWNhbGx5IG5lZ290aWF0ZWQuIFRoaXMgY291bGQgaW5kaWNhdGUgYSBzdGF0aWMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgb3IgYSByZWdpc3RlciB0aGF0IG5lZWRzIHNwZWNpZmljIGF0dGVudGlvbiBmb3IgYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIHJldmlzaW9uIG9yIHNldHVwLiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIGltbWVkaWF0ZWx5IHNjYW5uaW5nIHRoZSBsYW5kc2NhcGUgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuOiBBcmUgd2UgbG9va2luZyBhdCBhIGtub3duIGlzc3VlIHdpdGggdGhpcyBQSFkgbW9kZWw/IElzIHRoaXMgcmVnaXN0ZXIgcmVsYXRlZCB0byBzcGVlZC9kdXBsZXggc2V0dGluZ3MsIHBvd2VyIG1hbmFnZW1lbnQsIG9yIHBlcmhhcHMgY2xvY2tpbmc/IERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgdGhpcyBjb3VsZCBiZSBhIHZpdGFsIHN0ZXAgaW4gaXNvbGF0aW5nIHRoZSBjYXVzZSBvZiBhIHByb2JsZW0gb3IgdmFsaWRhdGluZyBhIHBhcnRpY3VsYXIgc2V0dXAuIFVuZGVyc3RhbmRpbmcgdGhlIHB1cnBvc2UgYW5kIGNvbnN0cmFpbnRzIG9mIHRoaXMgcGFydGljdWxhciByZWdpc3RlciBpcyBub3cgcGFyYW1vdW50IGZvciBwcm9jZWVkaW5nIGVmZmVjdGl2ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg2MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMyOjEzLjQyMzM2MDk2OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2NjI5NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZml4ZWRfcGh5X3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9MTE4PXN0YXRpYyBpbnQgZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzAtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEzMTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Mi19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3MzpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzQtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKHZvaWQpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgxLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxODI6XFx0cmV0dXJuIGZpeGVkX3BoeV9yZWdpc3RlcihcXHUwMDI2c3RhdHVzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgzLX1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTg0OkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzI6MTMuNDcyMDI5ODgzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTEzNTA0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgdGhlIFBIWSBEZXZpY2UgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gYGZpeGVkX3BoeV9yZWdpc3RlcmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyByZXNwb25zaWJsZSBmb3IgYnJpbmdpbmcgYSBQSFkgZGV2aWNlIG9ubGluZSwgc3BlY2lmaWNhbGx5IG9uIHRoZSBgZml4ZWRfbWRpb19idXNgLiAgVGhhdCBtYWtlcyBzZW5zZTsgd2UncmUgZGVhbGluZyB3aXRoIGEgZml4ZWQgY29uZmlndXJhdGlvbiBoZXJlLiBCdXQgd2hhdCdzIHRoaXMgYWJvdXQgcmVnaXN0ZXJpbmcgaXQgd2l0aCBhIGBwaHlfaWRgIG9mIDA/IFRoYXQncyBhIGxpdHRsZSBzdHJhbmdlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHdvcmtpbmdzIG9mIGBmaXhlZF9waHlfcmVnaXN0ZXJgLiBUaW1lIHRvIGRpdmUgYmFjayBpbiBhbmQgZG91YmxlLWNoZWNrIGV4YWN0bHkgaG93IHRoYXQgcmVnaXN0cmF0aW9uIHByb2Nlc3MgdW5mb2xkcyBhbmQgd2hhdCBhc3N1bXB0aW9ucyBpdCBtYWtlcyBhYm91dCB0aGUgYHBoeV9pZGAuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpc24ndCBnb2luZyB0byBjYXVzZSBjb25mbGljdHMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBkb3duIHRoZSBsaW5lLiBMZXQncyBzZWUgaG93IHRoYXQncyBoYW5kbGVkIGludGVybmFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDc4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzI6MTcuNDIzMzgzOTI2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzE6XFx0c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxcbiAxMzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4gMTMzOlxcdHtcXG4gMTM0OlxcdFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHk7XFxuIDEzNTpcXHRcXHRpbnQgcGh5X2FkZHI7XFxuIDEzNjpcXHRcXHRpbnQgcmV0O1xcbiAxMzc6XFx0XFxuIDEzODpcXHRcXHRyZXQgPSBzd3BoeV92YWxpZGF0ZV9zdGF0ZShzdGF0dXMpO1xcbiAxMzk6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDE0MDpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiAxNDE6XFx0XFxuIDE0MjpcXHRcXHRpZiAoIWZtYl9taWlfYnVzIHx8IGZtYl9taWlfYnVzLVxcdTAwM2VzdGF0ZSAhPSBNRElPQlVTX1JFR0lTVEVSRUQpXFxuIDE0MzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTtcXG4gMTQ0OlxcdFxcbiAxNDU6XFx0XFx0LyogR2V0IHRoZSBuZXh0IGF2YWlsYWJsZSBQSFkgYWRkcmVzcywgdXAgdG8gTlVNX0ZQICovXFxuIDE0NjpcXHRcXHRwaHlfYWRkciA9IGZpeGVkX3BoeV9nZXRfZnJlZV9hZGRyKCk7XFxuIDE0NzpcXHRcXHRpZiAocGh5X2FkZHIgXFx1MDAzYyAwKVxcbiAxNDg6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIocGh5X2FkZHIpO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRmbWJfZml4ZWRfcGh5c1twaHlfYWRkcl0uc3RhdHVzID0gKnN0YXR1cztcXG4gMTUxOlxcdFxcdGZtYl9maXhlZF9waHlzW3BoeV9hZGRyXS5zdGF0dXMubGluayA9IHRydWU7XFxuIDE1MjpcXHRcXG4gMTUzOlxcdFxcdHBoeSA9IGdldF9waHlfZGV2aWNlKGZtYl9taWlfYnVzLCBwaHlfYWRkciwgZmFsc2UpO1xcbiAxNTQ6XFx0XFx0aWYgKElTX0VSUihwaHkpKSB7XFxuIDE1NTpcXHRcXHRcXHRmaXhlZF9waHlfZGVsKHBoeV9hZGRyKTtcXG4gMTU2OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiAxNTc6XFx0XFx0fVxcbiAxNTg6XFx0XFxuIDE1OTpcXHRcXHRvZl9ub2RlX2dldChucCk7XFxuIDE2MDpcXHRcXHRwaHktXFx1MDAzZW1kaW8uZGV2Lm9mX25vZGUgPSBucDtcXG4gMTYxOlxcdFxcdHBoeS1cXHUwMDNlaXNfcHNldWRvX2ZpeGVkX2xpbmsgPSB0cnVlO1xcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHRyZXQgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XFxuIDE2NDpcXHRcXHRpZiAocmV0KSB7XFxuIDE2NTpcXHRcXHRcXHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcXG4gMTY2OlxcdFxcdFxcdG9mX25vZGVfcHV0KG5wKTtcXG4gMTY3OlxcdFxcdFxcdGZpeGVkX3BoeV9kZWwocGh5X2FkZHIpO1xcbiAxNjg6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gMTY5OlxcdFxcdH1cXG4gMTcwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjoxNy40MjM0NDk2MjZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM3Nzc5NTA0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBQSFkgSUQgUmV0cmlldmFsKipcblxuQWxyaWdodCwgc28gYGdldF9waHlfZGV2aWNlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIHN1cHBvc2VkIHRvIHB1bGwgdGhlIFBIWSBJRCBvZmYgdGhlIE1ESU8gYnVzLiBUaGF0IG1ha2VzIHNlbnNlLCBzdGFuZGFyZCBwcmFjdGljZS4gQnV0IHRoZSBxdWVzdGlvbiBpczogaG93IGlzIHRoZSBNRElPIGJ1cyAqYWN0dWFsbHkqIGJlaW5nIGFjY2Vzc2VkIGhlcmU/IEkgbmVlZCB0byB0cmFjZSB0aGUgcmVhZCBvcGVyYXRpb24gdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMga29zaGVyLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGF0IGBmbWJfbWlpX2J1c2AgaXMgZG9pbmc7IHRoYXQgbGlrZWx5IGhvbGRzIHRoZSBsb3dlci1sZXZlbCBidXMgYWNjZXNzIGNvZGUuIEFuZCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRhdGEgYWNjZXNzLCBJIHNob3VsZCBsb29rIGRpcmVjdGx5IGludG8gYGZpeGVkX21kaW9fcmVhZGAuIFRoYXQncyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBzZWUgdGhlIGxvdy1sZXZlbCByZWdpc3RlciBpbnRlcmFjdGlvbnMuIEkgc3VzcGVjdCBJIG1pZ2h0IGZpbmQgdGhlIHNwZWNpZmljIE1ESU8gcmVhZCBzZXF1ZW5jZSBhbmQgYWRkcmVzcyBzZXR1cCB0aGVyZSwgbWF5YmUgd2l0aCBzb21lIGJpdC1iYW5naW5nIGRldGFpbHMgZGVwZW5kaW5nIG9uIHRoZSBoYXJkd2FyZS4gVW5kZXJzdGFuZGluZyB0aGF0IHdpbGwgdmFsaWRhdGUgdGhlIGVudGlyZSBQSFkgSUQgcmV0cmlldmFsIHNlcXVlbmNlIGFuZCBoZWxwIHNwb3QgYW55IHBvdGVudGlhbCBpc3N1ZXMsIGxpa2UgaW5jb3JyZWN0IGFkZHJlc3Npbmcgb3IgdGltaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM0MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzI6MjYuODAxMjQ4MjIxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY3MDMzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaXhlZF9tZGlvX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz01OT1FWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02MC1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NjE6c3RhdGljIGludCBmaXhlZF9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSlcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTE5NT1zdGF0aWMgaW50IF9faW5pdCBmaXhlZF9tZGlvX2J1c19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjA0LVxcdGZtYl9taWlfYnVzLVxcdTAwM2VuYW1lID0gXFxcIkZpeGVkIE1ESU8gQnVzXFxcIjtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MjA1OlxcdGZtYl9taWlfYnVzLVxcdTAwM2VyZWFkID0gXFx1MDAyNmZpeGVkX21kaW9fcmVhZDtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjA2LVxcdGZtYl9taWlfYnVzLVxcdTAwM2V3cml0ZSA9IFxcdTAwMjZmaXhlZF9tZGlvX3dyaXRlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjoyNi44NTE5MjQ0MDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkwNTM4NjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uOiBgZml4ZWRfbWRpb19yZWFkYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBvbiBteSBtaW5kIGlzIGBmaXhlZF9tZGlvX3JlYWRgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBcIkZpeGVkXCIgaW1wbGllcyBhIHNwZWNpZmljIG9yIHByZWRldGVybWluZWQgY29uZmlndXJhdGlvbiBmb3IgdGhlIE1ESU8gcmVhZCBvcGVyYXRpb24uIFRoaXMgaW1tZWRpYXRlbHkgcmFpc2VzIHNvbWUgcXVlc3Rpb25zOlxuXG4qICAgV2hhdCdzIGZpeGVkPyBJcyBpdCB0aGUgTURJTyBhZGRyZXNzLCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyB3aXRoaW4gdGhhdCBNRElPIGRldmljZSwgdGhlIGRhdGEgZm9ybWF0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBcImZpeGVkXCIgYXBwcm9hY2ggdXN1YWxseSBzYWNyaWZpY2VzIHNvbWUgZGVncmVlIG9mIGZsZXhpYmlsaXR5IGZvciBwcmVkaWN0YWJsZSBiZWhhdmlvciBvciBwb3RlbnRpYWxseSwgb3B0aW1pemF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdHJhZGUtb2ZmcyBhdCBwbGF5LlxuKiAgIFdoeSBcImZpeGVkXCI/IElzIHRoaXMgZm9yIGEgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBhIHBhcnRpY3VsYXIgdGVzdCBzZXR1cCwgb3IgcGVyaGFwcyBhIHNpbXBsaWZpZWQgZHJpdmVyIGltcGxlbWVudGF0aW9uPyBDb250ZXh0IGlzIGtleSBoZXJlLiBJcyBpdCBhIGNvcm5lciBjYXNlIG9yIHRoZSBjb21tb24gZGVmYXVsdD9cbiogICBXaGF0IGlzIGJlaW5nIHJlYWQgd2l0aCBNRElPPyBXaGF0IHN5c3RlbSB1c2VzIHRoaXM/IFdoYXQgd2lsbCBpdCB0ZWxsIG1lP1xuXG5NeSBtaW5kIHN0YXJ0cyB0byBjaHVybiB0aHJvdWdoIHJlbGF0ZWQgY29uY2VwdHM6IE1ESU8gKE1hbmFnZW1lbnQgRGF0YSBJbnB1dC9PdXRwdXQpIGlzIG9idmlvdXNseSBhIHNlcmlhbCBpbnRlcmZhY2UgY29tbW9ubHkgdXNlZCBmb3IgY29uZmlndXJpbmcgYW5kIG1vbml0b3JpbmcgUEhZcyAoUGh5c2ljYWwgTGF5ZXIgVHJhbnNjZWl2ZXJzKS4gU28sIGlmIEkgd2VyZSB0byBiZSB1c2luZyB0aGlzLCBpdCdzIHNvbWV0aGluZyBsb3dlci1sZXZlbCBoYXJkd2FyZSByZWxhdGVkLiBJJ2xsIG5lZWQgdG8gbG9vayBhdDpcblxuKiAgIERvZXMgdGhpcyBpbXBsZW1lbnRhdGlvbiBoYW5kbGUgZXJyb3IgY29uZGl0aW9ucyBhbmQgcmV0cmllcz8gXCJGaXhlZFwiIG1pZ2h0IG1lYW4gc2ltcGxlciBlcnJvciBoYW5kbGluZy5cbiogICBXaGF0J3MgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlPyBJcyB0aGlzIGEgc3RhbmRhbG9uZSBmdW5jdGlvbiwgb3IgZG9lcyBpdCBmaXQgaW50byBhIGxhcmdlciBNRElPIGRyaXZlciBvciBmcmFtZXdvcms/XG4qICAgSG93IGRvZXMgaXQgaGFuZGxlIHRoZSB0aW1pbmcgY29uc3RyYWludHMgaW5oZXJlbnQgaW4gTURJTyBjb21tdW5pY2F0aW9uPyBGaXhlZCBNRElPIGNvdWxkIGltcGx5IHNwZWNpZmljIHRpbWluZyBsb29wcy5cbiogICBXaGF0IGFib3V0IGludGVycnVwdCBoYW5kbGluZywgaWYgYW55PyBQZXJoYXBzIHRoZSBcImZpeGVkXCIgbmF0dXJlIHNpbXBsaWZpZXMgdGhlIGludGVycnVwdCBtYW5hZ2VtZW50LlxuXG5JJ20gc3RhcnRpbmcgdG8gYnVpbGQgYSBtZW50YWwgcGljdHVyZSBvZiB3aGF0IEkgZXhwZWN0IHRvIGZpbmQuIE5vdywgbGV0J3MgZGlnIGludG8gdGhlIGRldGFpbHMgdG8gY29uZmlybSB0aGVzZSBhc3N1bXB0aW9ucyBhbmQgZXhwbG9yZSB0aGUgc3BlY2lmaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkwMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMyOjMzLjc1NzMxMzI2NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjE6XFx0c3RhdGljIGludCBmaXhlZF9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSlcXG4gIDYyOlxcdHtcXG4gIDYzOlxcdFxcdHN0cnVjdCBmaXhlZF9waHkgKmZwO1xcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeV9hZGRyKTtcXG4gIDY2OlxcdFxcdGlmICghZnApXFxuICA2NzpcXHRcXHRcXHRyZXR1cm4gMHhmZmZmO1xcbiAgNjg6XFx0XFxuICA2OTpcXHRcXHRpZiAoZnAtXFx1MDAzZWxpbmtfdXBkYXRlKVxcbiAgNzA6XFx0XFx0XFx0ZnAtXFx1MDAzZWxpbmtfdXBkYXRlKGZwLVxcdTAwM2VwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2RldiwgXFx1MDAyNmZwLVxcdTAwM2VzdGF0dXMpO1xcbiAgNzE6XFx0XFxuICA3MjpcXHRcXHRyZXR1cm4gc3dwaHlfcmVhZF9yZWcocmVnX251bSwgXFx1MDAyNmZwLVxcdTAwM2VzdGF0dXMpO1xcbiAgNzM6XFx0fVxcbiAgNzQ6XFx0XFxuICA3NTpcXHRzdGF0aWMgaW50IGZpeGVkX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSxcXG4gIDc2OlxcdFxcdFxcdFxcdCAgICB1MTYgdmFsKVxcbiAgNzc6XFx0e1xcbiAgNzg6XFx0XFx0cmV0dXJuIDA7XFxuICA3OTpcXHR9XFxuICA4MDpcXHRcXG4gIDgxOlxcdC8qXFxuICA4MjpcXHQgKiBJZiBzb21ldGhpbmcgd2VpcmQgaXMgcmVxdWlyZWQgdG8gYmUgZG9uZSB3aXRoIGxpbmsvc3BlZWQsXFxuICA4MzpcXHQgKiBuZXR3b3JrIGRyaXZlciBpcyBhYmxlIHRvIGFzc2lnbiBhIGZ1bmN0aW9uIHRvIGltcGxlbWVudCB0aGlzLlxcbiAgODQ6XFx0ICogTWF5IGJlIHVzZWZ1bCBmb3IgUEhZJ3MgdGhhdCBuZWVkIHRvIGJlIHNvZnR3YXJlLWRyaXZlbi5cXG4gIDg1OlxcdCAqL1xcbiAgODY6XFx0aW50IGZpeGVkX3BoeV9zZXRfbGlua191cGRhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gIDg3OlxcdFxcdFxcdFxcdCAgICAgIGludCAoKmxpbmtfdXBkYXRlKShzdHJ1Y3QgbmV0X2RldmljZSAqLFxcbiAgODg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICopKVxcbiAgODk6XFx0e1xcbiAgOTA6XFx0XFx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdGlmICghcGh5ZGV2IHx8ICFwaHlkZXYtXFx1MDAzZW1kaW8uYnVzKVxcbiAgOTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA5NDpcXHRcXG4gIDk1OlxcdFxcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbiAgOTY6XFx0XFx0aWYgKCFmcClcXG4gIDk3OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRmcC1cXHUwMDNlbGlua191cGRhdGUgPSBsaW5rX3VwZGF0ZTtcXG4gMTAwOlxcdFxcdGZwLVxcdTAwM2VwaHlkZXYgPSBwaHlkZXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMyOjMzLjc1NzM4MDAzNVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTUzOTA2OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBgc3dwaHlfcmVhZF9yZWdgIGZvciBQSFkgSUQgUmV0cmlldmFsKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBzd3BoeV9yZWFkX3JlZ2AgaXMgc3VwcG9zZWQgdG8gZ2l2ZSB1cyB0aGUgUEhZIElELiBUaGF0IG1ha2VzIHNlbnNlLCBhIHN0YW5kYXJkIGFwcHJvYWNoLiBOb3csIG15IGZpcnN0IG1vdmUgaXMgdG8gZGlnIGluIGFuZCB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBJIHdhbnQgdG8gcXVpY2tseSBjb25maXJtIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZWFkaW5nIHRoaXMgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoYXQgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbi4gV2hhdCdzIHRoZSByZWdpc3RlciBtYXAgaW4gdGhlIHVuZGVybHlpbmcgc2lsaWNvbiwgYW5kIHdoYXQncyB0aGUgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlPyBMZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZS4gSSdtIHRoaW5raW5nIHRoZSBsb2dpY2FsIGZsb3cgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGFjY2VzcywgcG9zc2libHkgd2l0aCBzb21lIGVycm9yIGNoZWNraW5nLiBCdXQgSSBuZWVkIHRvIGJlIHN1cmUuIEknbGwgbWVudGFsbHkgd2FsayB0aHJvdWdoIGl0IGFuZCBtYWtlIHN1cmUgdGhhdCBpdCByZXR1cm5zIHRoZSBleHBlY3RlZCBQSFkgSUQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTE5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjozNy4zMTEyOTAyNjlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODQxMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3cGh5X3JlYWRfcmVnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTYxPXN0YXRpYyBpbnQgZml4ZWRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0pXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNzEtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjcyOlxcdHJldHVybiBzd3BoeV9yZWFkX3JlZyhyZWdfbnVtLCBcXHUwMDI2ZnAtXFx1MDAzZXN0YXR1cyk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTczLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzM1OD1zdGF0aWMgaW50IHBoeWxpbmtfbWlpX2VtdWxfcmVhZCh1bnNpZ25lZCBpbnQgcmVnLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzcwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzM3MTpcXHR2YWwgPSBzd3BoeV9yZWFkX3JlZyhyZWcsIFxcdTAwMjZmcyk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzcyLVxcdGlmIChyZWcgPT0gTUlJX0JNU1IpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jPTEwNj1FWFBPUlRfU1lNQk9MX0dQTChzd3BoeV92YWxpZGF0ZV9zdGF0ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy0xMDgtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6MTA5OiAqIHN3cGh5X3JlYWRfcmVnIC0gcmV0dXJuIGEgTUlJIHJlZ2lzdGVyIGZyb20gdGhlIGZpeGVkIHBoeSBzdGF0ZVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExMC0gKiBAcmVnOiBNSUkgcmVnaXN0ZXJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExNC0gKi9cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzoxMTU6aW50IHN3cGh5X3JlYWRfcmVnKGludCByZWcsIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSlcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy0xMTYte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtMTc0LX1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzoxNzU6RVhQT1JUX1NZTUJPTF9HUEwoc3dwaHlfcmVhZF9yZWcpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5Lmg9Nz1pbnQgc3dwaHlfdmFsaWRhdGVfc3RhdGUoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKTtcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaDo4OmludCBzd3BoeV9yZWFkX3JlZyhpbnQgcmVnLCBjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpO1xcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oLTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMyOjM3LjM2MjEzNTkxM1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM4MjQ5MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgc3dwaHlfcmVhZF9yZWdgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYHN3cGh5X3JlYWRfcmVnYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvcGh5L3N3cGh5LmNgIGZpbGUuIEknbSBhbHJlYWR5IHZpc3VhbGl6aW5nIHRoZSBsaWtlbHkgYXJjaGl0ZWN0dXJlLCBrbm93aW5nIGl0IHJlc2lkZXMgd2l0aGluIHRoZSBzd2l0Y2ggUEhZIGRyaXZlci4gVGhpcyBtZWFucyBJIGV4cGVjdCB0byBmaW5kIHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcywgc3BlY2lmaWMgdG8gd2hhdGV2ZXIgaGFyZHdhcmUgYWJzdHJhY3Rpb24gdGhlIHN3aXRjaCBQSFkgdXNlcy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhcyB0byB0aGUgdW5kZXJseWluZyBJMkMvU1BJL01ESU8gYnVzIGludGVyYWN0aW9ucywgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgbWFwcGluZywgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGFueSBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3Mgb3Igd29ya2Fyb3VuZHMgaW4gdGhpcyByZWFkIGZ1bmN0aW9uLiBNeSBleHBlcnRpc2UgYWxsb3dzIG1lIHRvIGFudGljaXBhdGUgY29tbW9uIGlzc3VlcyBsaWtlIHRpbWluZyBjb25zdHJhaW50cywgcmVhZC1tb2RpZnktd3JpdGUgc2VxdWVuY2VzIChpZiBhcHBsaWNhYmxlKSwgYW5kIGFueSBwb3RlbnRpYWwgZXJyb3IgaGFuZGxpbmcgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgZm9yIHJvYnVzdCBvcGVyYXRpb24uIFRoZSBhaW0gaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IGEgcmVnaXN0ZXIgaXMgcmVhZCBmcm9tIGEgc3dpdGNoIFBIWS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjo0MS41MDAzODc4OTdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3N3cGh5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE1OlxcdGludCBzd3BoeV9yZWFkX3JlZyhpbnQgcmVnLCBjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpXFxuIDExNjpcXHR7XFxuIDExNzpcXHRcXHRpbnQgc3BlZWRfaW5kZXgsIGR1cGxleF9pbmRleDtcXG4gMTE4OlxcdFxcdHUxNiBibXNyID0gQk1TUl9BTkVHQ0FQQUJMRTtcXG4gMTE5OlxcdFxcdHUxNiBlc3RhdCA9IDA7XFxuIDEyMDpcXHRcXHR1MTYgbHBhZ2IgPSAwO1xcbiAxMjE6XFx0XFx0dTE2IGxwYSA9IDA7XFxuIDEyMjpcXHRcXG4gMTIzOlxcdFxcdGlmIChyZWcgXFx1MDAzZSBNSUlfUkVHU19OVU0pXFxuIDEyNDpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDEyNTpcXHRcXG4gMTI2OlxcdFxcdHNwZWVkX2luZGV4ID0gc3dwaHlfZGVjb2RlX3NwZWVkKHN0YXRlLVxcdTAwM2VzcGVlZCk7XFxuIDEyNzpcXHRcXHRpZiAoV0FSTl9PTihzcGVlZF9pbmRleCBcXHUwMDNjIDApKVxcbiAxMjg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDEyOTpcXHRcXG4gMTMwOlxcdFxcdGR1cGxleF9pbmRleCA9IHN0YXRlLVxcdTAwM2VkdXBsZXggPyBTV01JSV9EVVBMRVhfRlVMTCA6IFNXTUlJX0RVUExFWF9IQUxGO1xcbiAxMzE6XFx0XFxuIDEzMjpcXHRcXHRibXNyIHw9IHNwZWVkW3NwZWVkX2luZGV4XS5ibXNyIFxcdTAwMjYgZHVwbGV4W2R1cGxleF9pbmRleF0uYm1zcjtcXG4gMTMzOlxcdFxcdGVzdGF0IHw9IHNwZWVkW3NwZWVkX2luZGV4XS5lc3RhdCBcXHUwMDI2IGR1cGxleFtkdXBsZXhfaW5kZXhdLmVzdGF0O1xcbiAxMzQ6XFx0XFxuIDEzNTpcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWxpbmspIHtcXG4gMTM2OlxcdFxcdFxcdGJtc3IgfD0gQk1TUl9MU1RBVFVTIHwgQk1TUl9BTkVHQ09NUExFVEU7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdFxcdGxwYSAgIHw9IHNwZWVkW3NwZWVkX2luZGV4XS5scGEgICBcXHUwMDI2IGR1cGxleFtkdXBsZXhfaW5kZXhdLmxwYTtcXG4gMTM5OlxcdFxcdFxcdGxwYWdiIHw9IHNwZWVkW3NwZWVkX2luZGV4XS5scGFnYiBcXHUwMDI2IGR1cGxleFtkdXBsZXhfaW5kZXhdLmxwYWdiO1xcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZXBhdXNlKVxcbiAxNDI6XFx0XFx0XFx0XFx0bHBhIHw9IExQQV9QQVVTRV9DQVA7XFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlYXN5bV9wYXVzZSlcXG4gMTQ1OlxcdFxcdFxcdFxcdGxwYSB8PSBMUEFfUEFVU0VfQVNZTTtcXG4gMTQ2OlxcdFxcdH1cXG4gMTQ3OlxcdFxcbiAxNDg6XFx0XFx0c3dpdGNoIChyZWcpIHtcXG4gMTQ5OlxcdFxcdGNhc2UgTUlJX0JNQ1I6XFxuIDE1MDpcXHRcXHRcXHRyZXR1cm4gQk1DUl9BTkVOQUJMRTtcXG4gMTUxOlxcdFxcdGNhc2UgTUlJX0JNU1I6XFxuIDE1MjpcXHRcXHRcXHRyZXR1cm4gYm1zcjtcXG4gMTUzOlxcdFxcdGNhc2UgTUlJX1BIWVNJRDE6XFxuIDE1NDpcXHRcXHRjYXNlIE1JSV9QSFlTSUQyOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjo0MS41MDA0NTMzOTdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxNzY3Mjk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGV4cGVyaWVuY2luZyBpdDpcblxuKipEZWNvZGluZyBUaGlzIFJlZ2lzdGVyIFJlYWRpbmcqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gbG9va2luZyBhdCB0aGlzIG91dHB1dCBhbmQgSSdtIHNlZWluZyBzb21ldGhpbmcgcmVhbGx5IHVuZXhwZWN0ZWQgd2l0aCB0aGlzIGBzd3BoeV9yZWFkX3JlZ2AgZnVuY3Rpb24uIEl0J3MgcmV0dXJuaW5nIHplcm8gZm9yIGJvdGggYE1JSV9QSFlTSUQxYCBhbmQgYE1JSV9QSFlTSUQyYC4gTm93LCBJIGtub3cgdGhlIHNpZ25pZmljYW5jZSBvZiB0aG9zZSByZWdpc3RlcnMg4oCTIHRoZXkgc2hvdWxkIGJlIGhvbGRpbmcgdGhlIFBIWSBpZGVudGlmaWVyLCByaWdodD8gVXN1YWxseSwgeW91IGdldCBzb21lIG5vbi16ZXJvIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHRoZSBzcGVjaWZpYyBQSFkgbW9kZWwuIFRoaXMgemVybyByZWFkaW5nIGlzIGRlZmluaXRlbHkgYSByZWQgZmxhZywgYW5kIG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gU29tZXRoaW5nIGlzbid0IHdvcmtpbmcgYXMgSSB3b3VsZCBleHBlY3QsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBJIGFtIGdldHRpbmcgYSB6ZXJvIHJlc3VsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NDAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMyOjQ2LjExODEyODQ5MloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvc3dwaHkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTM6XFx0XFx0Y2FzZSBNSUlfUEhZU0lEMTpcXG4gMTU0OlxcdFxcdGNhc2UgTUlJX1BIWVNJRDI6XFxuIDE1NTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTU2OlxcdFxcdGNhc2UgTUlJX0xQQTpcXG4gMTU3OlxcdFxcdFxcdHJldHVybiBscGE7XFxuIDE1ODpcXHRcXHRjYXNlIE1JSV9TVEFUMTAwMDpcXG4gMTU5OlxcdFxcdFxcdHJldHVybiBscGFnYjtcXG4gMTYwOlxcdFxcdGNhc2UgTUlJX0VTVEFUVVM6XFxuIDE2MTpcXHRcXHRcXHRyZXR1cm4gZXN0YXQ7XFxuIDE2MjpcXHRcXG4gMTYzOlxcdFxcdC8qXFxuIDE2NDpcXHRcXHQgKiBXZSBkbyBub3Qgc3VwcG9ydCBlbXVsYXRpbmcgQ2xhdXNlIDQ1IG92ZXIgQ2xhdXNlIDIyIHJlZ2lzdGVyXFxuIDE2NTpcXHRcXHQgKiByZWFkcy4gIFJldHVybiBhbiBlcnJvciBpbnN0ZWFkIG9mIGJvZ3VzIGRhdGEuXFxuIDE2NjpcXHRcXHQgKi9cXG4gMTY3OlxcdFxcdGNhc2UgTUlJX01NRF9DVFJMOlxcbiAxNjg6XFx0XFx0Y2FzZSBNSUlfTU1EX0RBVEE6XFxuIDE2OTpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdGRlZmF1bHQ6XFxuIDE3MjpcXHRcXHRcXHRyZXR1cm4gMHhmZmZmO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjo0Ni4xMTgxODY4MjJaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU3MDM5Njk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFBIWSBJZGVudGlmaWNhdGlvbiBhbmQgVmlydHVhbCBNRElPIEJ1c2VzKipcblxuT2theSwgc28gdGhpcyBgZml4ZWRfcGh5YCBkcml2ZXIgY29uc2lzdGVudGx5IHJldHVybnMgYSBQSFkgSUQgb2YgMC4gVGhhdCBjb25maXJtcyBpdDogSSBjYW4ndCByZWx5IG9uIGl0IHRvIHByb2JlIGp1c3QgYW55IGFyYml0cmFyeSBQSFkgZHJpdmVyLiBJdCdzIHRvbyBsaW1pdGVkIGZvciBnZW5lcmFsLXB1cnBvc2UgdXNlLCB3aGljaCBpcyBhIGtleSByZXN0cmljdGlvbiBJJ3ZlIGJlZW4gdHJ5aW5nIHRvIGtlZXAgaW4gbWluZC5cblxuTm93LCBsZXQncyB0aGluayBiaWdnZXIuIElzIHRoZXJlIHNvbWUgb3RoZXIga2luZCBvZiB2aXJ0dWFsIE1ESU8gYnVzIEkgY2FuIGxldmVyYWdlPyBJIGtlZXAgdGhpbmtpbmcgYWJvdXQgdGhlc2UgdmlydHVhbCBlbnZpcm9ubWVudHMuXG5cbldoYXQgYWJvdXQgYGRzYV9sb29wYD8gSSBzZWUgaXQgdXNlcyB0aGUgYGZpeGVkLTBgIGJ1cywgd2hpY2ggSSd2ZSBzZWVuIGJlZm9yZSwgYnV0IGl0IGFsc28gcmVnaXN0ZXJzIGl0cyBvd24gYHN3aXRjaF9tZGlvZGV2YC4gQWhhISBUaGF0J3MgaXQhIGBkc2FfbG9vcGAgKnJlZ2lzdGVycyogYSBEU0Egc3dpdGNoLiBBbmQgdGhhdCBEU0Egc3dpdGNoIGhhcyBpdHMgKm93biogTURJTyBidXMsIHRoYXQgYGRzLVx1MDAzZXVzZXJfbWlpX2J1c2AuIEkgbmVlZCB0byBkaWcgaW50byB0aGF0IGFuZCBzZWUgaG93IHRoYXQgYnVzIGlzIGNvbnN0cnVjdGVkLlxuXG5UaW1lIHRvIGRpdmUgaW50byBgZHNhX2xvb3BfcGh5X3JlYWRgIGFuZCBzZWUgd2hhdCB0cmlja3MgaXQncyBnb3QgdXAgaXRzIHNsZWV2ZS4gTGV0J3Mgc2VlIGhvdyB0aGF0IERTQSB2aXJ0dWFsIGJ1cyBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTM2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzI6NTIuNjg4NTg2MDQ1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4NDpcXHRzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXFxuIDE4NTpcXHR7XFxuIDE4NjpcXHRcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG4gMTg3OlxcdFxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbiAxODg6XFx0XFx0aW50IHJldDtcXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0cmV0ID0gbWRpb2J1c19yZWFkX25lc3RlZChidXMsIHBzLVxcdTAwM2Vwb3J0X2Jhc2UgKyBwb3J0LCByZWdudW0pO1xcbiAxOTE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDE5MjpcXHRcXHRcXHRwcy1cXHUwMDNlcG9ydHNbcG9ydF0ubWliW0RTQV9MT09QX1BIWV9SRUFEX0VSUl0udmFsKys7XFxuIDE5MzpcXHRcXHRlbHNlXFxuIDE5NDpcXHRcXHRcXHRwcy1cXHUwMDNlcG9ydHNbcG9ydF0ubWliW0RTQV9MT09QX1BIWV9SRUFEX09LXS52YWwrKztcXG4gMTk1OlxcdFxcbiAxOTY6XFx0XFx0cmV0dXJuIHJldDtcXG4gMTk3OlxcdH1cXG4gMTk4OlxcdFxcbiAxOTk6XFx0c3RhdGljIGludCBkc2FfbG9vcF9waHlfd3JpdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gMjAwOlxcdFxcdFxcdFxcdCAgICAgIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4gMjAxOlxcdHtcXG4gMjAyOlxcdFxcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVxcdTAwM2Vwcml2O1xcbiAyMDM6XFx0XFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBzLVxcdTAwM2VidXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMyOjUyLjY4ODY2MDA4NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU3NTA0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFBIWSBJRCBhbmQgVmlydHVhbCBNRElPIEJ1c2VzKipcblxuT2theSwgc28gYGRzYV9sb29wX3BoeV9yZWFkYCBpcyBlc3NlbnRpYWxseSBwYXNzaW5nIGl0cyByZWFkcyBhbG9uZyB0byBgcHMtXHUwMDNlYnVzYCwgd2hpY2ggaXMgdGhlIGBmaXhlZC0wYCBidXMsIHJpZ2h0PyBBbmQgdGhhdCdzIHdoeSBpdCdzIHJldHVybmluZyBhIHplcm8gZm9yIHRoZSBQSFkgSUQuIE1ha2VzIHNlbnNlLiBCdXQgdGhhdCBicmluZ3MgdXAgYW5vdGhlciB0aG91Z2h0Li4uIHdoYXQgYWJvdXQgdGhlIGVsdXNpdmUgYG1kaW8tbW9ja3VwYD8gSSB3YXMgc2VhcmNoaW5nIGZvciBpdCwgYW5kIGl0J3Mgbm93aGVyZSB0byBiZSBmb3VuZC4gXG5cblRoYXQgcmFpc2VzIGEgbW9yZSBmdW5kYW1lbnRhbCBxdWVzdGlvbjogQ2FuIEkgY3JlYXRlIGEgKnZpcnR1YWwqIE1ESU8gYnVzLCBjb21wbGV0ZWx5IGZyb20gdXNlcnNwYWNlPyBMaWtlIGhvdyBgbmV0ZGV2c2ltYCBjcmVhdGVzIGEgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlPyBIbW0sIHRoYXQncyBhbiBpbnRlcmVzdGluZyBpZGVhLiBMZXQgbWUgZGl2ZSBpbnRvIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vYCBhbmQgc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgdGhlcmUgSSBjYW4gbGV2ZXJhZ2UsIG9yIGF0IGxlYXN0IGxlYXJuIGZyb20sIHRvIHNpbXVsYXRlIGFuIE1ESU8gYnVzLiBUaGlzIGZlZWxzIGxpa2UgYSBwcm9taXNpbmcgYXZlbnVlIHRvIGV4cGxvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODgyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzI6NTcuNTQ2MTY3Mjk1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk2MTU1NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjo1Ny41OTkxMzU0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODczMTMzMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHRzIG9uIFRlc3RpbmcgUEhZIERyaXZlcnMgaW4gU3l6a2FsbGVyKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0byB0ZXN0IFBIWSBkcml2ZXJzIGVmZmVjdGl2ZWx5IHdpdGhpbiBzeXprYWxsZXIuIE15IGluaXRpYWwgdGhvdWdodHMgd2VyZSwgY291bGQgSSB1c2UgYG1hYzgwMjExX2h3c2ltYD8gTm8sIHRoYXQncyBub3QgaXQuIFRoZW4gSSBsb29rZWQgYXQgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uY2AsIHdoaWNoIHVzZXMgR1BJT3MsIGFuZCBgZHJpdmVycy9uZXQvcGh5L21kaW8tYml0YmFuZy5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLWJjbS11bmltYWMuY2AuIE5vdGhpbmcgY2xpY2tlZC5cblxuVGhlIGNvcmUgcHJvYmxlbSBpcyB0aGF0IHN5emthbGxlciBkb2Vzbid0IGhhdmUgYSB2aXJ0dWFsIE1ESU8gYnVzLiBXaXRob3V0IGl0LCBwcm9iaW5nIFBIWSBkcml2ZXJzIGluIFFFTVUgYmVjb21lcyBpbXBvc3NpYmxlIHVubGVzcyB0aGVyZSdzIGFuIGVtdWxhdGVkIG5ldHdvcmsgY2FyZCB0aGF0IGV4cG9zZXMgYW4gTURJTyBidXMgd2l0aCB0aGF0ICpzcGVjaWZpYyogUEhZIGF0dGFjaGVkLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgUUVNVSBldmVuICplbXVsYXRlKiBhIG5ldHdvcmsgY2FyZCB3aXRoIGFuIEFpcm9oYSBFTjg4MTFIIFBIWT8gVGhhdCdzIGEgMi41IEdpZ2FiaXQgUEhZLiBRRU1VIGVtdWxhdGVzIHRoaW5ncyBsaWtlIGUxMDAwLCBlMTAwMGUsIHJ0bDgxMzksIHBjbmV0LCBhbmQgYSBidW5jaCBvZiBvdGhlcnMsIGJ1dCBub25lIG9mIHRob3NlIHVzZSB0aGF0IEFpcm9oYSBQSFkuXG5cbkFscmlnaHQsIHNvIHdoYXQgYWJvdXQgZGV2aWNlIHRyZWUgb3ZlcmxheXMgYW5kIGBmd25vZGVfbWRpby5jYD8gSWYgc3l6a2FsbGVyIGNvdWxkIGluamVjdCBhIGRldmljZSB0cmVlIG92ZXJsYXksIEkgY291bGQgY3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIHdpdGggYW4gTURJTyBidXMgYW5kIGEgUEhZIG5vZGUuIEJ1dCB0aGF0IHN0aWxsIGxlYXZlcyBtZSBuZWVkaW5nIGFuIE1ESU8gYnVzIGRyaXZlciB0aGF0IGNhbiBiZSBpbnN0YW50aWF0ZWQgdmlhIGRldmljZSB0cmVlIGFuZCAqZG9lc24ndCogbmVlZCByZWFsIGhhcmR3YXJlLiBJIGNoZWNrZWQgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1tb2NrdXAuY2AgYmVmb3JlLCBidXQgaXQncyBub3QgdGhlIGFuc3dlci4gV2hhdCBhYm91dCBgZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uY2A/IEl0IHVzZXMgR1BJT3MuIE1heWJlIEkgY2FuIG1vY2sgdGhlbSB3aXRoIGBncGlvLW1vY2t1cGA/XG5cbkV2ZW4gaWYgSSBjb3VsZCB1c2UgYGdwaW8tbW9ja3VwYCB0byBjcmVhdGUgYW4gTURJTyBidXMgdXNpbmcgYG1kaW8tZ3Bpb2AsIEknZCBiZSBqdXN0IGJpdGJhbmdpbmcgR1BJT3MuIFRvIGFjdHVhbGx5ICplbXVsYXRlKiBhIFBIWSwgSSdkIG5lZWQgc29tZXRoaW5nIG9uIHRoZSBvdGhlciBzaWRlIG9mIHRob3NlIEdQSU9zIHRoYXQgY2FuIHJlc3BvbmQgdG8gdGhlIGJpdGJhbmdpbmcgYW5kIHJldHVybiB0aGUgY29ycmVjdCBQSFkgSUQuIFRoYXQgc2VlbXMgaW1wb3NzaWJsZSB3aXRob3V0IHNvbWUgc3BlY2lmaWMgbW9jayBkZXZpY2UuXG5cbldhaXQgYSBtaW51dGUuLi4gd2hhdCBpZiBJIGluc3RhbnRpYXRlIHRoZSBQSFkgZHJpdmVyICpkaXJlY3RseSogdmlhIHRoZSBkZXZpY2UgdHJlZT8gSW4gYG9mX21kaW8uY2AsIGBvZl9tZGlvYnVzX3JlZ2lzdGVyYCBzY2FucyB0aGUgZGV2aWNlIHRyZWUgZm9yIFBIWSBub2Rlcy4gQW5kIGhlcmUncyB0aGUga2lja2VyOiBJZiBhIFBIWSBub2RlIGhhcyBhIGBjb21wYXRpYmxlYCBzdHJpbmcgbGlrZSBgZXRoZXJuZXQtcGh5LWlkWFhYWC5YWFhYYCwgdGhlIE1ESU8gYnVzICp3aWxsKiBjcmVhdGUgYSBQSFkgZGV2aWNlIHdpdGggdGhhdCBJRCwgKndpdGhvdXQqIHJlYWRpbmcgdGhlIGFjdHVhbCBQSFkgSUQgZnJvbSB0aGUgYnVzISBUaGlzIGlzIHRoZSBwcm9taXNpbmcgYXZlbnVlLCBJIG5lZWQgdG8gY2hlY2sgYG9mX21kaW8uY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjI3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMzOjA4LjQ3MjI3Mjc5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTc5NTg1MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXRoZXJuZXQtcGh5LWlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTI4PU1PRFVMRV9ERVNDUklQVElPTihcXFwiT3BlbkZpcm13YXJlIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1xcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMzAtLyogRXh0cmFjdCB0aGUgY2xhdXNlIDIyIHBoeSBJRCBmcm9tIHRoZSBjb21wYXRpYmxlIHN0cmluZyBvZiB0aGUgZm9ybVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjMxOiAqIGV0aGVybmV0LXBoeS1pZEFBQUEuQkJCQiAqL1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTMyLXN0YXRpYyBpbnQgb2ZfZ2V0X3BoeV9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgdTMyICpwaHlfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz04Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB3aGl0ZWxpc3RfcGh5c1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMTAyLSAqIFJldHVybiB0cnVlIGlmIHRoZSBjaGlsZCBub2RlIGlzIGZvciBhIHBoeS4gSXQgbXVzdCBlaXRoZXI6XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6MTAzOiAqIG8gQ29tcGF0aWJsZSBzdHJpbmcgb2YgXFxcImV0aGVybmV0LXBoeS1pZFguWFxcXCJcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0xMDQtICogbyBDb21wYXRpYmxlIHN0cmluZyBvZiBcXFwiZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jNDVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMzOjA4Ljg3MDIzNTcwOVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODcwMzg2NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFBsYW4gdG8gU2ltdWxhdGUgYSBQSFkgRGV2aWNlKipcblxuT2theSwgaGVyZSdzIHRoZSBnYW1lIHBsYW46IEkndmUgZ290IHRoaXMgZGV2aWNlIHRyZWUgbm9kZSB3aXRoIGBjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWQwM2EyLmE0MTFcImAuIFRoZSBpbnRlbnRpb24gaXMgdGhhdCBgb2ZfbWRpb2J1c19yZWdpc3RlcmAgc2hvdWxkIGdlbmVyYXRlIGEgUEhZIGRldmljZSB3aXRoIHRoYXQgZXhhY3QgSUQuIFRoYXQncyBhIHNvbGlkIHN0YXJ0LiBUaGUgY2F0Y2gsIG9mIGNvdXJzZSwgaXMgdGhhdCBJIG5lZWQgYW4gTURJTyBidXMgZm9yIGl0IHRvIGxhdGNoIG9udG8uXG5cbkhtbSwgY2FuIEkgY29vayB1cCBhbiBNRElPIGJ1cyB1c2luZyBkZXZpY2UgdHJlZSB3aXRob3V0IHJlcXVpcmluZyBhbnkgcGh5c2ljYWwgaGFyZHdhcmU/IFRoZSBgbWRpby1ncGlvYCBkcml2ZXIgbG9va3MgcHJvbWlzaW5nLiBJdCBzZWVtcyBsaWtlIGlmIEkgY2FuIGdldCB0aGF0IHRvIGxvYWQsIGV2ZW4gaWYgdGhlIGFjdHVhbCBNRElPIHJlYWRzIGFuZCB3cml0ZXMgYXJlIGp1bmsgKG9yLCBsZXQncyBiZSBob25lc3QsIHJldHVybmluZyBgMHhmZmZmYCB0aGUgd2hvbGUgdGltZSksIHRoZSBjcnVjaWFsIHRoaW5nIGlzIHRoYXQgdGhlIFBIWSBkZXZpY2Ugd2lsbCAqc3RpbGwqIGJlIGNyZWF0ZWQgYW5kIHJlZ2lzdGVyZWQsIHJpZ2h0P1xuXG5JZiB0aGUgUEhZIGRldmljZSBnZXRzIGNyZWF0ZWQsIHRoZW4gYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIHdpbGwgYmUgY2FsbGVkLiBUaGF0IHRoZW4gbWVhbnMgdGhlIGRyaXZlciBjb3JlIHdpbGwgdXNlIHRoZSBQSFkgSUQgdG8gZmluZCB0aGUgY29ycmVjdCBkcml2ZXIgYW5kIHJ1biBpdHMgYHByb2JlYCBmdW5jdGlvbiwgeWVzP1xuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgdGhpczogZG9lcyBgcGh5X2RldmljZV9yZWdpc3RlcmAgKmRlbWFuZCogdGhhdCB0aGUgTURJTyBidXMgYWN0dWFsbHkgYmUgb3BlcmF0aW9uYWw/IEkgbmVlZCB0byBkaWcgaW50byB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc4NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzoxNC43NDA2MjU5MzVaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NzA4NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9kZXZpY2VfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTExMDM9RVhQT1JUX1NZTUJPTChnZXRfcGh5X2RldmljZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDUtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTA2OiAqIHBoeV9kZXZpY2VfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXNcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDctICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTA4LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEwOTppbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExMC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDEtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0MjpFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0My1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0OC0gKiBUaGlzIGRvZXNuJ3QgZnJlZSB0aGUgcGh5X2RldmljZSBpdHNlbGYsIGl0IG1lcmVseSByZXZlcnNlcyB0aGUgZWZmZWN0c1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0OTogKiBvZiBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkuIFVzZSBwaHlfZGV2aWNlX2ZyZWUoKSB0byBmcmVlIHRoZSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNTAtICogYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzoxNC44MDUzNDA3MThaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5Mzg4MjIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIHRoZSBjb3JlIG9mIGhvdyBhIFBIWSBkZXZpY2UgZ2V0cyBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGRldmljZSBkcml2ZXIgZnJhbWV3b3JrLiBJcyBpdCBhIGRpcmVjdCBlbnRyeSBwb2ludCwgb3IgZG9lcyBpdCByZWx5IG9uIHN1cHBvcnRpbmcgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGxheWVyLCB0aGUgTURJTyBidXMgZHJpdmVyLCBhbmQgYW55IHBvdGVudGlhbCBwb3dlciBtYW5hZ2VtZW50IG1lY2hhbmlzbXMuXG5cbioqQW5hbHl6aW5nIHRoZSBQSFkgRGV2aWNlIFJlZ2lzdHJhdGlvbiBQcm9jZXNzKipcblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlOiB3aGF0IGRhdGEgc3RydWN0dXJlcyBkb2VzIGl0IGV4cGVjdCwgYW5kIHdoYXQncyB0aGUgdHlwaWNhbCBmbG93PyBJJ20gYW50aWNpcGF0aW5nIGFyZ3VtZW50cyBmb3IgdGhlIGRldmljZSBpdHNlbGYgKGxpa2VseSBhIGBzdHJ1Y3QgcGh5X2RldmljZWAgb3Igc2ltaWxhciksIGl0cyBhc3NvY2lhdGVkIE1ESU8gYnVzIGFkZHJlc3MsIGEgcG9pbnRlciB0byB0aGUgTURJTyBidXMgZHJpdmVyLCBhbmQgcG90ZW50aWFsbHksIHNvbWUgY3VzdG9tIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIGVycm9yIGNvZGVzIHJldHVybmVkIGFuZCBob3cgdGhvc2UgYXJlIGhhbmRsZWQg4oCTIGVycm9yIGhhbmRsaW5nIGlzIGNyaXRpY2FsIGluIHRoaXMgdHlwZSBvZiBsb3ctbGV2ZWwgY29kZS4gQXJlIGVycm9ycyBzaW1wbHkgbG9nZ2VkLCBvciBkbyB0aGV5IHRyaWdnZXIgbW9yZSBleHRlbnNpdmUgcmVjb3ZlcnkgcHJvY2VkdXJlcz9cblxuSSdsbCBhbHNvIGtlZXAgYSBsb29rb3V0IGZvciByZXNvdXJjZSBhbGxvY2F0aW9uOiBkb2VzIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyBkeW5hbWljYWxseSBhbGxvY2F0ZSBhbnkgbWVtb3J5LCBhbmQgaWYgc28sIGhvdyBpcyBpdCBtYW5hZ2VkPyBNZW1vcnkgbGVha3MgYXJlIGEgc2VyaW91cyBpc3N1ZSwgc28gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgZW5zdXJlcyBwcm9wZXIgY2xlYW51cCBvbiBmYWlsdXJlIG9yIHVucmVnaXN0cmF0aW9uLiBDb25zaWRlcmluZyB0aGUgcm9sZSBvZiBQSFkgZGV2aWNlcywgd2hpY2ggYXJlIG9mdGVuIHRpbWUtY3JpdGljYWwgY29tcG9uZW50cywgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgbG9ja3Mgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkPyBGaW5hbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZXMgd2l0aCB0aGUgYnJvYWRlciBkZXZpY2UgdHJlZSBvciBwbGF0Zm9ybSBkYXRhIGluaXRpYWxpemF0aW9uOyBkb2VzIGl0IHV0aWxpemUgdGhvc2UgbWVjaGFuaXNtcyBmb3IgY29uZmlndXJhdGlvbj9cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NDIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzoyMC42OTkyMjU5NDFaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwOSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEwOTpcXHRpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjExMTA6XFx0e1xcbjExMTE6XFx0XFx0aW50IGVycjtcXG4xMTEyOlxcdFxcbjExMTM6XFx0XFx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2UoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbyk7XFxuMTExNDpcXHRcXHRpZiAoZXJyKVxcbjExMTU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMTE2OlxcdFxcbjExMTc6XFx0XFx0LyogRGVhc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xcbjExMTg6XFx0XFx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDApO1xcbjExMTk6XFx0XFxuMTEyMDpcXHRcXHQvKiBSdW4gYWxsIG9mIHRoZSBmaXh1cHMgZm9yIHRoaXMgUEhZICovXFxuMTEyMTpcXHRcXHRlcnIgPSBwaHlfc2Nhbl9maXh1cHMocGh5ZGV2KTtcXG4xMTIyOlxcdFxcdGlmIChlcnIpIHtcXG4xMTIzOlxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiZmFpbGVkIHRvIGluaXRpYWxpemVcXFxcblxcXCIpO1xcbjExMjQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTEyNTpcXHRcXHR9XFxuMTEyNjpcXHRcXG4xMTI3OlxcdFxcdGVyciA9IGRldmljZV9hZGQoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYpO1xcbjExMjg6XFx0XFx0aWYgKGVycikge1xcbjExMjk6XFx0XFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJmYWlsZWQgdG8gYWRkXFxcXG5cXFwiKTtcXG4xMTMwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjExMzE6XFx0XFx0fVxcbjExMzI6XFx0XFxuMTEzMzpcXHRcXHRyZXR1cm4gMDtcXG4xMTM0OlxcdFxcbjExMzU6XFx0IG91dDpcXG4xMTM2OlxcdFxcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXFxuMTEzNzpcXHRcXHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7XFxuMTEzODpcXHRcXG4xMTM5OlxcdFxcdG1kaW9idXNfdW5yZWdpc3Rlcl9kZXZpY2UoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbyk7XFxuMTE0MDpcXHRcXHRyZXR1cm4gZXJyO1xcbjExNDE6XFx0fVxcbjExNDI6XFx0RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG4xMTQzOlxcdFxcbjExNDQ6XFx0LyoqXFxuMTE0NTpcXHQgKiBwaHlfZGV2aWNlX3JlbW92ZSAtIFJlbW92ZSBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBwaHkgZGV2aWNlIGZyb20gdGhlIE1ESU8gYnVzXFxuMTE0NjpcXHQgKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byByZW1vdmVcXG4xMTQ3OlxcdCAqXFxuMTE0ODpcXHQgKiBUaGlzIGRvZXNuJ3QgZnJlZSB0aGUgcGh5X2RldmljZSBpdHNlbGYsIGl0IG1lcmVseSByZXZlcnNlcyB0aGUgZWZmZWN0c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzoyMC42OTkzOTE3NTFaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQwMTIxNTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIFJlYXNvbmluZyBmb3IgUEhZIERldmljZSBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbiB3b3Jrcy4gRXNzZW50aWFsbHksIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHdyYXBwZXIsIHJlYWxseS4gSXQganVzdCBjYWxscyBgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2VgLCB3aGljaCBoYW5kbGVzIHRoZSBNRElPIGJ1cyBpbnRlcmFjdGlvbiwgdGhlbiBydW5zIGBwaHlfc2Nhbl9maXh1cHNgLCBwcm9iYWJseSBmb3Igc29tZSBkZXZpY2Utc3BlY2lmaWMgYWRqdXN0bWVudHMsIGFuZCBmaW5hbGx5LCBpdCBjYWxscyBgZGV2aWNlX2FkZGAuIEFoLCAqdGhhdCdzKiB0aGUga2V5LiBXaGVuIGBkZXZpY2VfYWRkYCBnZXRzIGludm9rZWQsIHRoZSBkcml2ZXIgY29yZSBraWNrcyBpbi4gVGhpcyB0cmlnZ2VycyB0aGUgcHJvYmUgc2VxdWVuY2UuIFRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBUaGUgZHJpdmVyJ3MgYHByb2JlYCBmdW5jdGlvbiBpcyB3aGF0IHdlJ3JlIGFmdGVyLiBMZXQncyBzZWUuLi4gd2hhdCdzIGl0IG5hbWVkPyBBaCwgcmlnaHQsIGluIHRoaXMgY2FzZSwgaXQgbXVzdCBiZSBgZW44ODExaF9wcm9iZWAgaW5zaWRlIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBQSFkgaW5pdGlhbGl6YXRpb24gaGFwcGVucywgSSdkIHdhZ2VyLiBHb29kLCBJIGhhdmUgYSBnb29kIGlkZWEgb2YgaG93IGl0IHdpbGwgcHJvYmUuIE5vdyBsZXQncyBzZWUgd2hhdCBpcyBpbnNpZGUgb2YgdGhhdCBmdW5jdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MjM1NzIsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMzOjI5LjEwMDYwOTM2NloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1OSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE1OTpcXHRcXG4xMTYwOlxcdFxcdC8qIG1jdSBoYXMganVzdCByZXN0YXJ0ZWQgYWZ0ZXIgZmlybXdhcmUgbG9hZCAqL1xcbjExNjE6XFx0XFx0cHJpdi1cXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTtcXG4xMTYyOlxcdFxcbjExNjM6XFx0XFx0LyogTURJT19ERVZTMS8yIGVtcHR5LCBzbyBzZXQgbW1kc19wcmVzZW50IGJpdHMgaGVyZSAqL1xcbjExNjQ6XFx0XFx0cGh5ZGV2LVxcdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xcbjExNjU6XFx0XFxuMTE2NjpcXHRcXHRyZXQgPSBlbjg4MTFoX2xlZHNfc2V0dXAocGh5ZGV2KTtcXG4xMTY3OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjExNjg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTY5OlxcdFxcbjExNzA6XFx0XFx0cHJpdi1cXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xcbjExNzE6XFx0XFx0LyogQ28tQ2xvY2sgT3V0cHV0ICovXFxuMTE3MjpcXHRcXHRyZXR1cm4gZW44ODExaF9jbGtfcHJvdmlkZXJfc2V0dXAoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIFxcdTAwMjZwcml2LVxcdTAwM2Vodyk7XFxuMTE3MzpcXHR9XFxuMTE3NDpcXHRcXG4xMTc1OlxcdHN0YXRpYyBpbnQgYW44ODExaGJfY29uZmlnX3NlcmRlc19wb2xhcml0eShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjExNzY6XFx0e1xcbjExNzc6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuMTE3ODpcXHRcXHR1MzIgcGJ1c192YWx1ZSA9IDA7XFxuMTE3OTpcXHRcXHR1bnNpZ25lZCBpbnQgcG9sO1xcbjExODA6XFx0XFx0aW50IHJldDtcXG4xMTgxOlxcdFxcbjExODI6XFx0XFx0cmV0ID0gcGh5X2dldF9tYW51YWxfcnhfcG9sYXJpdHkoZGV2X2Z3bm9kZShkZXYpLFxcbjExODM6XFx0XFx0XFx0XFx0XFx0XFx0IHBoeV9tb2RlcyhwaHlkZXYtXFx1MDAzZWludGVyZmFjZSksIFxcdTAwMjZwb2wpO1xcbjExODQ6XFx0XFx0aWYgKHJldClcXG4xMTg1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE4NjpcXHRcXHRpZiAocG9sID09IFBIWV9QT0xfTk9STUFMKVxcbjExODc6XFx0XFx0XFx0cGJ1c192YWx1ZSB8PSBBTjg4MTFIQl9SWF9QT0xBUklUWV9OT1JNQUw7XFxuMTE4ODpcXHRcXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9SWF9QT0xBUklUWSxcXG4xMTg5OlxcdFxcdFxcdFxcdFxcdFxcdCAgQU44ODExSEJfUlhfUE9MQVJJVFlfTk9STUFMLFxcbjExOTA6XFx0XFx0XFx0XFx0XFx0XFx0ICBwYnVzX3ZhbHVlKTtcXG4xMTkxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjExOTI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTkzOlxcdFxcbjExOTQ6XFx0XFx0cmV0ID0gcGh5X2dldF9tYW51YWxfdHhfcG9sYXJpdHkoZGV2X2Z3bm9kZShkZXYpLFxcbjExOTU6XFx0XFx0XFx0XFx0XFx0XFx0IHBoeV9tb2RlcyhwaHlkZXYtXFx1MDAzZWludGVyZmFjZSksIFxcdTAwMjZwb2wpO1xcbjExOTY6XFx0XFx0aWYgKHJldClcXG4xMTk3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE5ODpcXHRcXHRwYnVzX3ZhbHVlID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzM6MjkuMTAwNzEwOTk2WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTI4MzMxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBgZW44ODExaF9wcm9iZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgZW44ODExaF9wcm9iZWAgZnVuY3Rpb24sIGFuZCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSAqaGF2ZSogdG8gc2VlIHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgc2V0dXAsIHRoZSBjb250ZXh0LCB0aGUgZm91bmRhdGlvbiBpdCdzIGJ1aWx0IHVwb24uIFdoYXQncyB0aGUgZW50cnkgcG9pbnQ/IFdoYXQgYXJlIHRoZSBpbW1lZGlhdGUgY2hlY2tzPyBXaGF0IGRhdGEgaXMgYmVpbmcgYWNjZXNzZWQgcmlnaHQgb2ZmIHRoZSBiYXQ/IFdpdGhvdXQgdGhhdCBiYXNlbGluZSwgSSdtIGp1c3QgcG9raW5nIGFyb3VuZCBpbiB0aGUgZGFyay4gSnVtcGluZyBpbiBtaWQtc3RyZWFtLCB3aXRob3V0IHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWwgaW50ZW50aW9ucywgaXMganVzdCBhbWF0ZXVyIGhvdXIuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgdGhpbmcgKnN0YXJ0cyogYmVmb3JlIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMuIEdvdHRhIGdldCB0aGF0IGZ1bmRhbWVudGFsIGdyYXNwIG9mIHRoZSBpbml0aWFsIGNvbmRpdGlvbnMgZmlyc3QsIHRoZW4sIEkgY2FuIHNlZSB3aGF0IGl0ICppcyogdHJ5aW5nIHRvIGFjY29tcGxpc2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjMzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzozMy4xOTM1NDYyOTVaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0ZXJyX2Rldl9mcmVlOlxcbjExNDE6XFx0XFx0bWRpb19kZXZpY2VfZnJlZShtZGlvZGV2KTtcXG4xMTQyOlxcdFxcdHJldHVybiByZXQ7XFxuMTE0MzpcXHR9XFxuMTE0NDpcXHRcXG4xMTQ1OlxcdHN0YXRpYyBpbnQgZW44ODExaF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjExNDY6XFx0e1xcbjExNDc6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdjtcXG4xMTQ4OlxcdFxcdGludCByZXQ7XFxuMTE0OTpcXHRcXG4xMTUwOlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIHNpemVvZihzdHJ1Y3QgZW44ODExaF9wcml2KSxcXG4xMTUxOlxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMKTtcXG4xMTUyOlxcdFxcdGlmICghcHJpdilcXG4xMTUzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjExNTQ6XFx0XFx0cGh5ZGV2LVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4xMTU1OlxcdFxcbjExNTY6XFx0XFx0cmV0ID0gZW44ODExaF9sb2FkX2Zpcm13YXJlKHBoeWRldik7XFxuMTE1NzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMTU4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE1OTpcXHRcXG4xMTYwOlxcdFxcdC8qIG1jdSBoYXMganVzdCByZXN0YXJ0ZWQgYWZ0ZXIgZmlybXdhcmUgbG9hZCAqL1xcbjExNjE6XFx0XFx0cHJpdi1cXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTtcXG4xMTYyOlxcdFxcbjExNjM6XFx0XFx0LyogTURJT19ERVZTMS8yIGVtcHR5LCBzbyBzZXQgbW1kc19wcmVzZW50IGJpdHMgaGVyZSAqL1xcbjExNjQ6XFx0XFx0cGh5ZGV2LVxcdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xcbjExNjU6XFx0XFxuMTE2NjpcXHRcXHRyZXQgPSBlbjg4MTFoX2xlZHNfc2V0dXAocGh5ZGV2KTtcXG4xMTY3OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjExNjg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTY5OlxcdFxcbjExNzA6XFx0XFx0cHJpdi1cXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xcbjExNzE6XFx0XFx0LyogQ28tQ2xvY2sgT3V0cHV0ICovXFxuMTE3MjpcXHRcXHRyZXR1cm4gZW44ODExaF9jbGtfcHJvdmlkZXJfc2V0dXAoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIFxcdTAwMjZwcml2LVxcdTAwM2Vodyk7XFxuMTE3MzpcXHR9XFxuMTE3NDpcXHRcXG4xMTc1OlxcdHN0YXRpYyBpbnQgYW44ODExaGJfY29uZmlnX3NlcmRlc19wb2xhcml0eShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjExNzY6XFx0e1xcbjExNzc6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuMTE3ODpcXHRcXHR1MzIgcGJ1c192YWx1ZSA9IDA7XFxuMTE3OTpcXHRcXHR1bnNpZ25lZCBpbnQgcG9sO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzozMy4xOTM2NDgwNzVaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1Mjg5NDM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgbmV0d29yayBkcml2ZXIgZGV2ZWxvcG1lbnQ6XG5cbioqRmlybXdhcmUgTG9hZGluZyBJbnF1aXJ5KipcblxuQWxyaWdodCwgdGhlIGNvZGUncyBqdW1waW5nIHRvIGBlbjg4MTFoX2xvYWRfZmlybXdhcmUocGh5ZGV2KWAuIFRoYXQncyB0aGUgY3JpdGljYWwgZmlybXdhcmUgbG9hZGluZyBmdW5jdGlvbiBmb3IgdGhpcyBQSFkgZGV2aWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLiBTbywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGV4YW1pbmluZyB0aGUgYGVuODgxMWhfbG9hZF9maXJtd2FyZWAgZnVuY3Rpb24gZGVmaW5pdGlvbi4gSSBuZWVkIHRvIGdldCBhIGdyaXAgb24gdGhlIHNlcXVlbmNlIG9mIGFjdGlvbnMgYmVpbmcgdGFrZW4sIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBlcnJvciBwYXRocyBpbiB0aGF0IHJvdXRpbmUuIExldCdzIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZG9pbmcgd2l0aCBgcGh5ZGV2YCBub3csIGFuZCBob3BlZnVsbHkgZ2V0IHRoZSBzeXN0ZW0gdXAgYW5kIHJ1bm5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTE0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzozNy4yNDY1NDQ0MzhaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA0MDpcXHRcXHRpbml0Lm5hbWUgPSBkZXZtX2thc3ByaW50ZihkZXYsIEdGUF9LRVJORUwsIFxcXCIlcy1ja29cXFwiLFxcbjEwNDE6XFx0XFx0XFx0XFx0XFx0ICAgZndub2RlX2dldF9uYW1lKGRldl9md25vZGUoZGV2KSkpO1xcbjEwNDI6XFx0XFx0aWYgKCFpbml0Lm5hbWUpXFxuMTA0MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMDQ0OlxcdFxcbjEwNDU6XFx0XFx0aW5pdC5vcHMgPSBcXHUwMDI2ZW44ODExaF9jbGtfb3BzO1xcbjEwNDY6XFx0XFx0aW5pdC5mbGFncyA9IDA7XFxuMTA0NzpcXHRcXHRpbml0Lm51bV9wYXJlbnRzID0gMDtcXG4xMDQ4OlxcdFxcdGh3LVxcdTAwM2Vpbml0ID0gXFx1MDAyNmluaXQ7XFxuMTA0OTpcXHRcXG4xMDUwOlxcdFxcdHJldCA9IGRldm1fY2xrX2h3X3JlZ2lzdGVyKGRldiwgaHcpO1xcbjEwNTE6XFx0XFx0aWYgKHJldClcXG4xMDUyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTA1MzpcXHRcXG4xMDU0OlxcdFxcdHJldHVybiBkZXZtX29mX2Nsa19hZGRfaHdfcHJvdmlkZXIoZGV2LCBvZl9jbGtfaHdfc2ltcGxlX2dldCwgaHcpO1xcbjEwNTU6XFx0fVxcbjEwNTY6XFx0XFxuMTA1NzpcXHRzdGF0aWMgaW50IGVuODgxMWhfbGVkc19zZXR1cChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjEwNTg6XFx0e1xcbjEwNTk6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4xMDYwOlxcdFxcdGludCByZXQ7XFxuMTA2MTpcXHRcXG4xMDYyOlxcdFxcdHByaXYtXFx1MDAzZWxlZFswXS5ydWxlcyA9IEFJUl9ERUZBVUxUX1RSSUdHRVJfTEVEMDtcXG4xMDYzOlxcdFxcdHByaXYtXFx1MDAzZWxlZFsxXS5ydWxlcyA9IEFJUl9ERUZBVUxUX1RSSUdHRVJfTEVEMTtcXG4xMDY0OlxcdFxcdHByaXYtXFx1MDAzZWxlZFsyXS5ydWxlcyA9IEFJUl9ERUZBVUxUX1RSSUdHRVJfTEVEMjtcXG4xMDY1OlxcdFxcbjEwNjY6XFx0XFx0cmV0ID0gYWlyX2xlZHNfaW5pdChwaHlkZXYsIEVOODgxMUhfTEVEX0NPVU5ULCBBSVJfUEhZX0xFRF9EVVIsXFxuMTA2NzpcXHRcXHRcXHRcXHQgICAgQUlSX0xFRF9NT0RFX0RJU0FCTEUpO1xcbjEwNjg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTA2OTpcXHRcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkZhaWxlZCB0byBkaXNhYmxlIGxlZHM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEwNzA6XFx0XFxuMTA3MTpcXHRcXHRyZXR1cm4gcmV0O1xcbjEwNzI6XFx0fVxcbjEwNzM6XFx0XFxuMTA3NDpcXHRzdGF0aWMgaW50IGFuODgxMWhiX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTA3NTpcXHR7XFxuMTA3NjpcXHRcXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XFxuMTA3NzpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2O1xcbjEwNzg6XFx0XFx0aW50IHJldDtcXG4xMDc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzozNy4yNDY2NDIxODdaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQyMzkzMDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNaXNzaW5nIEZpcm13YXJlIExvYWRpbmcgRnVuY3Rpb24gLSBJbnZlc3RpZ2F0aW9uIENvbW1lbmNlcyoqXG5cbk9rYXksIGhvbGQgb24gYSBtaW51dGUuIEknbSBoaXR0aW5nIGEgcm9hZGJsb2NrIGhlcmUuIFRoZSBzeW1ib2wgYGVuODgxMWhfbG9hZF9maXJtd2FyZWAgLSBpdCdzIGp1c3Qgbm90IHNob3dpbmcgdXAgaW4gdGhlIHN5bWJvbCB0YWJsZS4gVGhhdCdzIHVuZXhwZWN0ZWQuIE15IGluaXRpYWwgYXNzdW1wdGlvbiB3YXMgdGhhdCBpdCB3b3VsZCBiZSBkZWZpbmVkLCBnaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSBsb29raW5nIGF0LiBBbHJpZ2h0LCB0aW1lIHRvIHN0YXJ0IGRpZ2dpbmcuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGxhdW5jaCBhIHNlYXJjaC4gR290dGEgZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlLCBvciBpZiB0aGVyZSdzIGJlZW4gYSBuYW1pbmcgY29udmVudGlvbiBjaGFuZ2UsIGEgbGlua2VyIGlzc3VlLCBhIHR5cG8gaW4gdGhlIGNvZGUsIG9yIHBvc3NpYmx5IHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZ29pbmcgb24gdGhhdCdzIHByZXZlbnRpbmcgaXRzIGluY2x1c2lvbi4gTGV0J3Mgc2VlIGlmIGEgcXVpY2sgc2VhcmNoIHR1cm5zIHVwIGFueSBjbHVlcyB3aXRoaW4gdGhpcyBwcm9qZWN0Li4uYW5kIG1heWJlIGV2ZW4gZXh0ZXJuYWxseSwgaWYgbmVjZXNzYXJ5LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGxvZ3MsIHJlbGV2YW50IGhlYWRlciBmaWxlcywgYW5kIHBvc3NpYmx5IGV2ZW4gc2NhbiB0aGUgc291cmNlIGNvZGUgd2l0aCBncmVwIG9yIGEgc2ltaWxhciB0b29sLiBUaGlzIGZlZWxzIGxpa2UgaXQgY291bGQgYmUgYSBzaW1wbGUgb3ZlcnNpZ2h0LCBidXQgaXQgY291bGQgYWxzbyBiZSBhIHN5bXB0b20gb2YgYSBkZWVwZXIgaW50ZWdyYXRpb24gcHJvYmxlbS4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIHNvdXJjZSBvZiB0aGlzIG1pc3NpbmcgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDA5LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzo0My42NzA1NzQ3NDZaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyOTg5MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuODgxMWhfbG9hZF9maXJtd2FyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz00NjI9c3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MDEtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTAyOnN0YXRpYyBpbnQgZW44ODExaF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTAzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTUxMy1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1MTQ6XFx0XFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MTUtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MTgtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTE5OlxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MjAtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MjQtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTI1OlxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MjYtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MjgtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTI5OlxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzAtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzItXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTMzOlxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzQtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzctXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTM4OlxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzktXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NDEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTQyOlxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NDMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NDUtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTQ2OmVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTQ3LVxcdHJlbGVhc2VfZmlybXdhcmUoZncyKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NDgtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTQ5OmVuODgxMWhfbG9hZF9maXJtd2FyZV9yZWwxOlxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTU1MC1cXHRyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xMTQ1PXN0YXRpYyBpbnQgZW44ODExaF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE1NS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMTU2OlxcdHJldCA9IGVuODgxMWhfbG9hZF9maXJtd2FyZShwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExNTctXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMzOjQzLjcyMzU3MDQxMVoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg4NzQyODg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBUaGlzIFBhdGNoIGlzIE5vdCBXb3J0aCBGdXp6aW5nKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgZGVhbGluZyB3aXRoIGFuIGBhaXJfcGh5YCBhbmQgY2FsbHMgYHJlcXVlc3RfZmlybXdhcmVgLiBSaWdodCBhd2F5LCBJJ20gdGhpbmtpbmcgYWJvdXQgc3l6a2FsbGVyJ3MgZmlybXdhcmUgaW5qZWN0aW9uIGNhcGFiaWxpdGllcywgb3IgdGhlIHBvc3NpYmlsaXR5IG9mIGEgZGlyZWN0IGZhaWx1cmUuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGEgcmVnaXN0ZXIgd3JpdGUgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyaW5nIExFRCBHUElPIHBpbnMsIG1vdmVkIGZyb20gYGVuODgxMWhfcHJvYmVgIHRvIGBlbjg4MTFoX2NvbmZpZ19pbml0YC5cblxuVGhlIGNvbW1pdCBtZXNzYWdlIGNsYXJpZmllcyBpdCdzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZml4IGZvciB0aGUgRU44ODExSCBQSFkgY2hpcC4gQW5kIGhlcmUncyB0aGUga2lja2VyOiBJIGtub3cgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhpcyBQSFksIGFuZCBzeXprYWxsZXIsIHRvIG15IGtub3dsZWRnZSwgZG9lc24ndCBoYXZlIGEgdmlydHVhbCBNRElPIGJ1cyByb2J1c3QgZW5vdWdoIHRvIGZ1bGx5IHNpbXVsYXRlIHRoaXMgcGFydGljdWxhciBjaGlwJ3MgcmVnaXN0ZXJzLiBTbywgcmVhY2hpbmcgdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgaXMgYmFzaWNhbGx5IGEgbm9uLXN0YXJ0ZXIuXG5cbldhaXQsIHdpdGggYSBkZXZpY2UgdHJlZSBpbnN0YW50aWF0aW9uLCB0aGUgZHJpdmVyIHdpbGwgcHJvYmUuIEl0IGNhbGxzIGBlbjg4MTFoX2xvYWRfZmlybXdhcmVgLiBJIGNhbiBzZWUgTURJTyB3cml0ZXMsIGJ1dCB3aXRob3V0IHRoZSBhY3R1YWwgUEhZLCB0aGV5J2xsIGVpdGhlciBmYWlsIHNpbGVudGx5IG9yIHRoZSBtb2NrIGJ1cyBtYXkgcmV0dXJuIGVycm9ycy4gVGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgZW44ODExaF9jb25maWdfaW5pdGAgdXBvbiBuZXR3b3JrIGludGVyZmFjZSBhY3RpdmF0aW9uIHdpbGwgcGVyZm9ybSBhbm90aGVyIE1ESU8gd3JpdGUuXG5cbkhvbmVzdGx5LCBkb2VzIHRoaXMgZXZlbiBoYXZlICphbnkqIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIGNvcmUga2VybmVsIGxvZ2ljPyBObywgbm90IHJlYWxseS4gSXQncyBqdXN0IHdyaXRpbmcgdG8gYSByZWdpc3RlciBvbiBhIHNwZWNpZmljIFBIWS4gVGhlcmUncyBubyBjb21wbGV4IHN0YXRlIG1hY2hpbmUsIG5vIHNpZ25pZmljYW50IGludGVyYWN0aW9uIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCB0aGF0IGlzIGxpa2VseSB0byBjcmVhdGUgYSBidWcuIEEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGlzIHRoZSBvbmx5IHBvdGVudGlhbCBpc3N1ZSwgYW5kIHRoaXMgcGF0Y2gganVzdCBtb3ZlcyBhIHJlZ2lzdGVyIHdyaXRlLlxuXG5Db25zaWRlcmluZyB0aGUgZ3VpZGVsaW5lcywgSSBpbW1lZGlhdGVseSB0aGluayBvZiB0aGUgUENJZS9TbWFydE5JQy9HUFUgZHJpdmVyIGV4Y2x1c2lvbi4gV2hpbGUgdGhpcyBpc24ndCAqcHJlY2lzZWx5KiBhIFBDSWUgZHJpdmVyLCBpdCdzIGEgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXIgdGhhdCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUsIG9yIGF0IGxlYXN0IGEgY2hpcCBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlIGNoYW5nZSBpcyBzaW1wbGU6IGEgcmVnaXN0ZXIgd3JpdGUgZm9yIExFRCBHUElPIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgZGVmaW5pdGVseSBub3Qgd29ydGggdGhlIHRpbWUgdG8gZnV6ei4gSXQncyBhIHZlcnkgaGFyZHdhcmUtc3BlY2lmaWMsIHRyaXZpYWwgY2hhbmdlLiBNeSBhc3Nlc3NtZW50OiAqKldvcnRoRnV6emluZz1mYWxzZS4qKlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg0MywiT3V0cHV0VG9rZW5zIjoxMTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzM6NTQuNjExMDAxOFoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgd3JpdGUgZm9yIExFRCBHUElPIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgcHJvYmUgZnVuY3Rpb24gdG8gdGhlIGNvbmZpZ19pbml0IGZ1bmN0aW9uIGluIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgYSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgY2hpcCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyBvciByZWFjaGFibGUgdmlydHVhbGl6ZWQgY29kZSBwYXRocywgYW5kIGlzIHB1cmVseSBhIGhhcmR3YXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZpeC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgd3JpdGUgZm9yIExFRCBHUElPIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgcHJvYmUgZnVuY3Rpb24gdG8gdGhlIGNvbmZpZ19pbml0IGZ1bmN0aW9uIGluIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgYSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgY2hpcCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyBvciByZWFjaGFibGUgdmlydHVhbGl6ZWQgY29kZSBwYXRocywgYW5kIGlzIHB1cmVseSBhIGhhcmR3YXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZpeC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMzOjU0LjYxMTAyNzNaIiwiU2VxIjo2MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowsmsxp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-23 11:10:34 +0000 UTC FinishedAt: 2026-08-23 11:33:55 +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+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgYSBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciB3cml0ZSBmb3IgTEVEIEdQSU8gY29uZmlndXJhdGlvbiBmcm9tIHRoZSBwcm9iZSBmdW5jdGlvbiB0byB0aGUgY29uZmlnX2luaXQgZnVuY3Rpb24gaW4gdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIGZvciBhIHNwZWNpZmljIHBoeXNpY2FsIFBIWSBjaGlwIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoZSBjaGFuZ2UgZG9lcyBub3QgYWZmZWN0IGNvcmUga2VybmVsIGxvZ2ljIG9yIHJlYWNoYWJsZSB2aXJ0dWFsaXplZCBjb2RlIHBhdGhzLCBhbmQgaXMgcHVyZWx5IGEgaGFyZHdhcmUtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gZml4LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk5ZDNiZGJjMTAwMThhMzlhYjdjOGU1N2IwNjU5ZWNkNWNiYTY1YThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxMTozMDo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXG5pbmRleCBlZGQ0OWMxOTNlNDc2Li44ZjQ0OThjZjBhN2MxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXG5AQCAtMTE2OSwxOCAmIzQzOzExNjksNyBAQCBzdGF0aWMgaW50IGVuODgxMWhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcbiBcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuIFx0LyogQ28tQ2xvY2sgT3V0cHV0ICovXG4tXHRyZXQgPSBlbjg4MTFoX2Nsa19wcm92aWRlcl9zZXR1cChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIFx1MDAyNnByaXYtXHUwMDNlaHcpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIENvbmZpZ3VyZSBsZWQgZ3BpbyBwaW5zIGFzIG91dHB1dCAqL1xuLVx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9HUElPX09VVFBVVCxcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0dQSU9fT1VUUFVUXzM0NSxcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0dQSU9fT1VUUFVUXzM0NSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGVuODgxMWhfY2xrX3Byb3ZpZGVyX3NldHVwKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgXHUwMDI2cHJpdi1cdTAwM2Vodyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYW44ODExaGJfY29uZmlnX3NlcmRlc19wb2xhcml0eShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuQEAgLTEzMjQsNiAmIzQzOzEzMTMsMTcgQEAgc3RhdGljIGludCBlbjg4MTFoX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4mIzQzO1x0LyogQ29uZmlndXJlIGxlZCBncGlvIHBpbnMgYXMgb3V0cHV0LiBNdXN0IGJlIHJlZG9uZSBvbiBldmVyeVxuJiM0MztcdCAqIC5jb25maWdfaW5pdCgpLCBub3QganVzdCBvbmNlIGluIC5wcm9iZSgpOiBlbjg4MTFoX3Jlc3RhcnRfbWN1KClcbiYjNDM7XHQgKiByZXNldHMgYnVja3BidXMtbWFwcGVkIE1DVSBzdGF0ZSAoaW5jbC4gdGhpcyByZWdpc3Rlcikgb24gZXZlcnlcbiYjNDM7XHQgKiBjYWxsIGFmdGVyIHRoZSBmaXJzdCwgZS5nLiBvbiBsaW5rIHJlbmVnb3RpYXRpb24gb3IgaWZ1cC9pZmRvd24uXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9HUElPX09VVFBVVCxcbiYjNDM7XHRcdFx0XHRcdCAgRU44ODExSF9HUElPX09VVFBVVF8zNDUsXG4mIzQzO1x0XHRcdFx0XHQgIEVOODgxMUhfR1BJT19PVVRQVVRfMzQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgd3JpdGUgZm9yIExFRCBHUElPIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgcHJvYmUgZnVuY3Rpb24gdG8gdGhlIGNvbmZpZ19pbml0IGZ1bmN0aW9uIGluIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgYSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgY2hpcCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyBvciByZWFjaGFibGUgdmlydHVhbGl6ZWQgY29kZSBwYXRocywgYW5kIGlzIHB1cmVseSBhIGhhcmR3YXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZpeC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5OWQzYmRiYzEwMDE4YTM5YWI3YzhlNTdiMDY1OWVjZDVjYmE2NWE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMTE6MzA6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jCmluZGV4IGVkZDQ5YzE5M2U0NzYuLjhmNDQ5OGNmMGE3YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jCkBAIC0xMTY5LDE4ICYjNDM7MTE2OSw3IEBAIHN0YXRpYyBpbnQgZW44ODExaF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCiAJcHJpdi0mZ3Q7cGh5ZGV2ID0gcGh5ZGV2OwogCS8qIENvLUNsb2NrIE91dHB1dCAqLwotCXJldCA9IGVuODgxMWhfY2xrX3Byb3ZpZGVyX3NldHVwKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldiwgJmFtcDtwcml2LSZndDtodyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIENvbmZpZ3VyZSBsZWQgZ3BpbyBwaW5zIGFzIG91dHB1dCAqLwotCXJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfR1BJT19PVVRQVVQsCi0JCQkJCSAgRU44ODExSF9HUElPX09VVFBVVF8zNDUsCi0JCQkJCSAgRU44ODExSF9HUElPX09VVFBVVF8zNDUpOwotCWlmIChyZXQgJmx0OyAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBlbjg4MTFoX2Nsa19wcm92aWRlcl9zZXR1cCgmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYsICZhbXA7cHJpdi0mZ3Q7aHcpOwogfQogCiBzdGF0aWMgaW50IGFuODgxMWhiX2NvbmZpZ19zZXJkZXNfcG9sYXJpdHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKQEAgLTEzMjQsNiAmIzQzOzEzMTMsMTcgQEAgc3RhdGljIGludCBlbjg4MTFoX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJCXJldHVybiByZXQ7CiAJfQogCiYjNDM7CS8qIENvbmZpZ3VyZSBsZWQgZ3BpbyBwaW5zIGFzIG91dHB1dC4gTXVzdCBiZSByZWRvbmUgb24gZXZlcnkKJiM0MzsJICogLmNvbmZpZ19pbml0KCksIG5vdCBqdXN0IG9uY2UgaW4gLnByb2JlKCk6IGVuODgxMWhfcmVzdGFydF9tY3UoKQomIzQzOwkgKiByZXNldHMgYnVja3BidXMtbWFwcGVkIE1DVSBzdGF0ZSAoaW5jbC4gdGhpcyByZWdpc3Rlcikgb24gZXZlcnkKJiM0MzsJICogY2FsbCBhZnRlciB0aGUgZmlyc3QsIGUuZy4gb24gbGluayByZW5lZ290aWF0aW9uIG9yIGlmdXAvaWZkb3duLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9HUElPX09VVFBVVCwKJiM0MzsJCQkJCSAgRU44ODExSF9HUElPX09VVFBVVF8zNDUsCiYjNDM7CQkJCQkgIEVOODgxMUhfR1BJT19PVVRQVVRfMzQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUEhZIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHR3ZWFraW5nIHRoZSBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtb3Zpbmcgc29tZSBHUElPIGNvbmZpZ3VyYXRpb24gY29kZSBmb3IgTEVEcyBmcm9tIHRoZSBgZW44ODExaF9wcm9iZWAgZnVuY3Rpb24gdG8gYGVuODgxMWhfY29uZmlnX2luaXRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBQSFkgZHJpdmVyLCB3aGljaCBtZWFucyBpdCYjMzk7cyBsaWtlbHkgdGllZCB0byAqYWN0dWFsKiBoYXJkd2FyZS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBoZXJlLgoKTm93LCB0eXBpY2FsbHksIFBIWSBkcml2ZXJzIGFyZSBhc3NvY2lhdGVkIHdpdGggcGh5c2ljYWwgbmV0d29yayBjYXJkcywgYnV0IEkga25vdyB0aGF0IE1ESU8gYnVzZXMgY2FuIGJlIHVzZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlbS4gQW5kLCBvZiBjb3Vyc2UsIHRoZXNlIE1ESU8gYnVzZXMgY2FuIGJlIGVtdWxhdGVkIG9yIGV2ZW4gc29mdHdhcmUtZGVmaW5lZCDigJMgdGhpbmsgYG1kaW8tbW9ja3VwYCBhbmQgc3VjaCwgdGhvdWdoIHVzdWFsbHkgc3l6a2FsbGVyIHdvdWxkIGF2b2lkIHRhcmdldGluZyBhIHZlcnkgc3BlY2lmaWMgUEhZIHVubGVzcyBpdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCBhIGNvbW1vbiBpbnRlcmZhY2UsIG9yIHZpcnR1YWxpemVkIGhhcmR3YXJlLiBCdXQgd2FpdCwgSSByZWNhbGwgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgY2FwYWJpbGl0eSB0byBmdXp6IFBIWXMgdXNpbmcgTURJTywgYXNzdW1pbmcgdGhleSBhcmUgYWN0dWFsbHkgcmVnaXN0ZXJlZCBpbiB0aGUgc3lzdGVtLgoKU28sIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGUgY2hhbmdlIGlzIGEgcmVnaXN0ZXIgbW9kaWZpY2F0aW9uIG1vdmUuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBQSFkgZHJpdmVyLCB0aGF0JiMzOTtzIHdoYXQgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgbm93LiBDYW4gd2UgZXZlbiB0cmlnZ2VyIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cD8gVXN1YWxseSwgZnV6emluZyBQSFkgZHJpdmVycyBpcyBhIG5vLWdvIHVubGVzcyBhIHZpcnR1YWwgTURJTyBidXMgaXMgcHJlc2VudC4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCBmaWxlIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgbWlnaHQgcG9pbnQgdG8gYSBwb3NzaWJsZSB2aXJ0dWFsaXplZCBvciBlbXVsYXRlZCBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaXJfZW44ODExaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTMzPW9iai0kKENPTkZJR19BSVJfQU44ODAxX1BIWSlcdCYjNDM7PSBhaXJfYW44ODAxLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQUlSX0VOODgxMUhfUEhZKSAgICYjNDM7PSBhaXJfZW44ODExaC5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMzUtb2JqLSQoQ09ORklHX0FJUl9ORVRfUEhZTElCKVx0JiM0Mzs9IGFpcl9waHlfbGliLm9cbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTMyNC0vKiBMRUQgYmFzaWMgY29udHJvbCByZWdpc3RlciwgcGFydCBvZiB0aGUgc2FtZSBMRUQgYmxvY2sgYXMgdGhlIExFRDAvTEVEMVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYzozMjU6ICogY29udHJvbCByZWdpc3RlcnMgYWJvdmUuIFRoZSBhaXJfZW44ODExaCBkcml2ZXIgZGVzY3JpYmVzIHRoZSBzYW1lXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTMyNi0gKiByZWdpc3RlciBhcyBBSVJfUEhZX0xFRF9CQ1IuXG4tLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYz0xNDgyPXN0YXRpYyBpbnQgZW43NTI4X3BoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTQ4Ni1cdCAqIHByb2dyYW1tZWQgaW50byB0aGUgTEVEIGNvbnRyb2wgcmVnaXN0ZXJzLiBIYW5kIHRoZSBwaW5zIG92ZXIgdG9cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM6MTQ4NzpcdCAqIHRoZSBMRUQgY29udHJvbCByZWdpc3RlcnMgdGhlIHNhbWUgd2F5IHRoZSBhaXJfZW44ODExaCBkcml2ZXJcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTQ4OC1cdCAqIGRvZXM7IHRoZSBtb2RlIGZpZWxkIG9mIHRoaXMgcmVnaXN0ZXIgaXMgYWxyZWFkeSBzZXQgb3V0IG9mIHJlc2V0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYSBQSFkgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgc3lzdGVtJiMzOTtzIGNvbmZpZ3VyZWQgZm9yIGBDT05GSUdfQUlSX0VOODgxMUhfUEhZYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBQSFkgY29uZmlndXJhdGlvbiBmaWxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNwZWNpZmljIFBIWSwgdGhlIEFJUl9FTjg4MTFILCBpcyBhbGwgYWJvdXQuIFdoZXJlIGRvZXMgdGhlIGtlcm5lbCBkZWZpbmUgaXQ/IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBqdW1wIG92ZXIgdG8gYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBwYXJ0aWN1bGFyIFBIWSwgc3BlY2lmaWNhbGx5IHRoZSBgQUlSX0VOODgxMUhfUEhZYCBzeW1ib2wuIEkmIzM5O20gbG9va2luZyBmb3IgaXRzIGRlZmluaXRpb24sIGFueSBhc3NvY2lhdGVkIGZlYXR1cmVzIGl0IGVuYWJsZXMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMsIGFuZCwgY3J1Y2lhbGx5LCBhbnkgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gaXRzIGludGVuZGVkIHVzZSBjYXNlIG9yIGFueSBzcGVjaWZpYyBxdWlya3MgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBSVJfRU44ODExSF9QSFkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTkzPWNvbmZpZyBBSVJfQU44ODAxX1BIWVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk4LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6OTk6Y29uZmlnIEFJUl9FTjg4MTFIX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTAwLVx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIEVOODgxMUggMi41IEdpZ2FiaXQgUEhZXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkyMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEcml2ZXImIzM5O3MgRnV6emFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGRyaXZlciBpcyBldmVuICpyZWFjaGFibGUqIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQuIE9mdGVuLCB0aGVzZSBQSFkgZHJpdmVycyBhcmUgZXNzZW50aWFsbHkgTURJTyBkZXZpY2VzLCBhbmQgTURJTyBkZXZpY2VzIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLCBlc3BlY2lhbGx5IGlmIHRoZXJlJiMzOTtzIGEgdmlydHVhbCBNRElPIGJ1cyBhdmFpbGFibGUuIEkmIzM5O3ZlIGdvdCB0byBjaGVjayB0aGUgaW5zdHJ1Y3Rpb25zIGFnYWluLCB0aG91Z2guIEFoLCByaWdodCwgdGhlIGNhdmVhdDogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsKCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IERvZXMgYSBQSFkgZHJpdmVyIGZhbGwgaW50byB0aGF0ICYjMzQ7dmVuZG9yLXNwZWNpZmljJiMzNDsgY2F0ZWdvcnkgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZT8gSXQmIzM5O3MgYSBiaXQgb2YgYSBncmF5IGFyZWEuIFVzdWFsbHksIHRoZXNlIFBIWSBkcml2ZXJzIGFyZSBwcm9iZWQgd2hlbiB0aGUgTURJTyBidXMgc2NhbnMgZm9yIGF2YWlsYWJsZSBQSFlzIGFuZCBmaW5kcyBhIG1hdGNoaW5nIFBIWSBJRC4gVGhlIGNhdGNoIHdpdGggUUVNVSBpcyB0aGF0LCAqdW5sZXNzKiB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGVtdWxhdGVkIG5ldHdvcmsgY2FyZCB0aGF0IHNwZWNpZmljYWxseSBleHBvc2VzIGFuZCBtb2RlbHMgdGhpcyBQSFksIHRoZSBkcml2ZXIgd29uJiMzOTt0IGV2ZW4gYmUgcHJvYmVkLCBoZW5jZSB1bi1mdXp6YWJsZS4KCkJ1dCwgaGFuZyBvbiBhIHNlY29uZC4gRGlkbiYjMzk7dCBJIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgc3l6a2FsbGVyIGhhdmluZyBhIHZpcnR1YWwgTURJTyBidXM/IEkgdGhpbmsgdGhlcmUmIzM5O3MgYSAmIzM0O21kaW8tbW9ja3VwJiMzNDsgb3Igc29tZXRoaW5nIHNpbWlsYXIuLi4gTm8sIHdhaXQsIG1heWJlIG5vdC4gSSBzaG91bGQgdmVyaWZ5LiBBaCwgeWVzISBJJiMzOTttIHByZXR0eSBzdXJlIHRoZXJlJiMzOTtzIGEgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYCBvciBzb21ldGhpbmcgdmVyeSBzaW1pbGFyLiBUaGF0IGNvdWxkIGNoYW5nZSBldmVyeXRoaW5nISBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHkgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIGFzIHRoYXQgY291bGQgbWVhbiBpdCAqaXMqIGZ1enphYmxlIGluIFFFTVUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvLW1vY2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNRElPIEJ1cyBBc3Nlc3NtZW50KioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgZGVlcGVyLCBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHByZXNlbmNlIG9mIGEgdmlydHVhbCBNRElPIGJ1cy4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSBzeXN0ZW0gdXRpbGl6ZXMgYSB2aXJ0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNRElPIChNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0KSBpbnRlcmZhY2UsIHBlcmhhcHMgZW11bGF0ZWQgb3Igc29mdHdhcmUtZGVmaW5lZC4gVGhpcyBwcmVsaW1pbmFyeSBzdGVwIGlzIGNydWNpYWwuIFRoaXMgd2lsbCBoZWxwIGluZm9ybSB3aGV0aGVyIEkmIzM5O20gd29ya2luZyB3aXRoIGEgc3RhbmRhcmQgaGFyZHdhcmUgaW50ZXJmYWNlIG9yIGEgbW9yZSBhYnN0cmFjdGVkIGVudmlyb25tZW50LCB3aGljaCB3aWxsIGRyYXN0aWNhbGx5IGFmZmVjdCBob3cgSSBwcm9jZWVkIHdpdGggYW55IHN1YnNlcXVlbnQgYW5hbHlzaXMgb3IgY29uZmlndXJhdGlvbiB0YXNrcyByZWxhdGVkIHRvIFBIWSBpbnRlcmFjdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gaXQgY29tZXMgdG8gYW55IE1ESU8gaW50ZXJhY3Rpb24uIEkgd2FudCB0byBrbm93IHRoaXMgKmJlZm9yZSogZ29pbmcgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2NrdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc3MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIE1ESU8gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmsgaXNzdWUuIE15IGluaXRpYWwgZ3V0IHRlbGxzIG1lIHRvIGNoZWNrIHRoZSBNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UgKE1ESU8pIGRyaXZlcnMuIFRoZXkmIzM5O3JlIG9mdGVuIHRoZSBnYXRld2F5IHRvIFBIWSBpbnRlcmFjdGlvbnMsIGFuZCBwcm9ibGVtcyB0aGVyZSBjYW4gbWFuaWZlc3QgaW4gYSB2YXJpZXR5IG9mIHdheXMuIFNvLCBmaXJzdCB0aGluZyYjMzk7cyBmaXJzdCwgSSYjMzk7bSBoZWFkaW5nIG92ZXIgdG8gdGhlIGBkcml2ZXJzL25ldC9tZGlvL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIGludGVyYWN0cyB3aXRoIHRoZSBwaHlzaWNhbCBsYXllciBkZXZpY2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBpbiB0aGVyZS4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1vcmdhbml6ZWQgYW5kIGNsZWFybHkgc3RydWN0dXJlZC4uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb21tb24gaW1wbGVtZW50YXRpb25zLCBnZW5lcmljIE1ESU8gYWNjZXNzIHJvdXRpbmVzLCBhbmQgYW55dGhpbmcgc3BlY2lmaWMgdG8gdGhlIHRhcmdldCBoYXJkd2FyZSwgcmlnaHQgYXdheS4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIHdoYXQgbWlnaHQgYmUgZ29pbmcgd3JvbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9ja3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDIxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhwbG9yaW5nIFVzZXIgU3BhY2UgQWNjZXNzIHRvIFBIWSBEcml2ZXJzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55IGNsZXZlciB3YXkgdG8gcG9rZSBhdCBQSFkgZHJpdmVycyBkaXJlY3RseSBmcm9tIHVzZXIgc3BhY2UsIHdpdGhvdXQgYWN0dWFsbHkgaGF2aW5nIHRoZSBoYXJkd2FyZSBpbiBmcm9udCBvZiBtZS4gSSYjMzk7dmUgYmVlbiBwb25kZXJpbmcgdGhpcy4gSXQgZmVlbHMgbGlrZSB0aGVyZSBoYXMgdG8gYmUgYSB2aXJ0dWFsIHBhdGguIENvdWxkIEkgdXNlIHNvbWV0aGluZyBsaWtlIGBkc2FfbG9vcGAgb3IgbWF5YmUgZXZlbiBgZml4ZWQtcGh5YD8gSG9sZCBvbiwgdGhvdWdoLi4uIGBmaXhlZC1waHlgIGlzIHJlYWxseSBkZXNpZ25lZCBmb3IgdGhvc2UgZml4ZWQgbGlua3MsIG5vdCBmb3Igc29tZSBnZW5lcmFsIGV4cGxvcmF0aW9uIG9mIGRpZmZlcmVudCBQSFkgZHJpdmVycy4gVGhhdCYjMzk7cyBub3QgZ29pbmcgdG8gZG8gd2hhdCBJIHdhbnQuIEhtbSwgd2hhdCBhYm91dCBgbmV0ZGV2c2ltYD8gTm93IHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIERvZXMgdGhhdCBoYXZlIGEgc2ltdWxhdGVkIE1ESU8gYnVzPyBJZiBpdCBkb2VzLCBtYXliZSBJIGNhbiB1c2UgdGhhdCB0byB0ZXN0IGFuZCBwcm90b3R5cGUgc29tZSB0aGluZ3MuLi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXRhaWxzIGFuZCBkb2N1bWVudGF0aW9uIG9uIHRoYXQuIFRoaXMgaXMgd2hlcmUgaXQgc3RhcnRzIHRvIGdldCBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMTgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgd2FpdCBhIG1pbnV0ZS4gU29tZXRoaW5nIGZlZWxzIG9mZi4gR2VuZXJhbGx5LCBzeXprYWxsZXIgaXNuJiMzOTt0IHVzZWQgdG8gZnV6eiBQSFkgZHJpdmVycyBkaXJlY3RseSwgcmlnaHQ/IFRoZXkmIzM5O3JlIHVzdWFsbHkgaGFyZHdhcmUtc3BlY2lmaWMsIG1lYW5pbmcgdGhleSBuZWVkIHRoZSBleGFjdCBoYXJkd2FyZSB0byBldmVuIGJlIGFjY2Vzc2libGUgYW5kIGZ1enphYmxlLiBTbywgdGhlIHVzdWFsIGFwcHJvYWNoIGRvZXNuJiMzOTt0IHJlYWxseSB3b3JrLgoKTGV0JiMzOTtzIHBhdXNlIGFuZCBkb3VibGUtY2hlY2suIEkgc2hvdWxkIHJlYWxseSBsb29rIGF0IHRoZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIE1ESU8gb3IgUEhZLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbiBleGlzdGluZyBmcmFtZXdvcmsgdGhhdCBJIGNhbiB1c2UuIFRoaXMgd2lsbCBjbGFyaWZ5IGhvdyB0aGlzIHBhcnRpY3VsYXIgc2l0dWF0aW9uIHNob3VsZCBiZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL2RzYS5jPTYyMj1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbm5ldC9kc2EvZHNhLmMtNjU0LVx0aWYgKCFkcy1cdTAwM2V1c2VyX21paV9idXMgXHUwMDI2XHUwMDI2IGRzLVx1MDAzZW9wcy1cdTAwM2VwaHlfcmVhZCkge1xubmV0L2RzYS9kc2EuYzo2NTU6XHRcdGRzLVx1MDAzZXVzZXJfbWlpX2J1cyA9IG1kaW9idXNfYWxsb2MoKTtcbm5ldC9kc2EvZHNhLmMtNjU2LVx0XHRpZiAoIWRzLVx1MDAzZXVzZXJfbWlpX2J1cykge1xuLS1cbm5ldC9kc2EvZHNhLmMtNjYyLVxubmV0L2RzYS9kc2EuYzo2NjM6XHRcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoZHMtXHUwMDNldXNlcl9taWlfYnVzKTtcbm5ldC9kc2EvZHNhLmMtNjY0LVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9kc2EvZHNhLmMtNjc0LVx0aWYgKGRzLVx1MDAzZXVzZXJfbWlpX2J1cyBcdTAwMjZcdTAwMjYgZHMtXHUwMDNlb3BzLVx1MDAzZXBoeV9yZWFkKVxubmV0L2RzYS9kc2EuYzo2NzU6XHRcdG1kaW9idXNfZnJlZShkcy1cdTAwM2V1c2VyX21paV9idXMpO1xubmV0L2RzYS9kc2EuYy02NzYtdGVhcmRvd246XG4tLVxubmV0L2RzYS9kc2EuYz02ODY9c3RhdGljIHZvaWQgZHNhX3N3aXRjaF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxubmV0L2RzYS9kc2EuYy02OTMtXHRpZiAoZHMtXHUwMDNldXNlcl9taWlfYnVzIFx1MDAyNlx1MDAyNiBkcy1cdTAwM2VvcHMtXHUwMDNlcGh5X3JlYWQpIHtcbm5ldC9kc2EvZHNhLmM6Njk0Olx0XHRtZGlvYnVzX3VucmVnaXN0ZXIoZHMtXHUwMDNldXNlcl9taWlfYnVzKTtcbm5ldC9kc2EvZHNhLmM6Njk1Olx0XHRtZGlvYnVzX2ZyZWUoZHMtXHUwMDNldXNlcl9taWlfYnVzKTtcbm5ldC9kc2EvZHNhLmMtNjk2LVx0XHRkcy1cdTAwM2V1c2VyX21paV9idXMgPSBOVUxMO1xuLS1cbm5ldC9kc2EvcG9ydC5jLTExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2Vcbm5ldC9kc2EvcG9ydC5jOjEyOiNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxubmV0L2RzYS9wb3J0LmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbmV0LmhcdTAwM2Vcbi0tXG5uZXQvZHNhL3BvcnQuYz0xNzI2PXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZHNhX3N3aXRjaGVzX2FwcGx5X3dvcmthcm91bmRzW10gPSB7XG4tLVxubmV0L2RzYS9wb3J0LmMtMTc5Ni0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTylcbm5ldC9kc2EvcG9ydC5jOjE3OTc6XHRcJiMzNDtzbXNjLGxhbjkzMDMtbWRpb1wmIzM0Oyxcbm5ldC9kc2EvcG9ydC5jLTE3OTgtI2VuZGlmXG4tLVxubmV0L2RzYS91c2VyLmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbmV0LmhcdTAwM2Vcbm5ldC9kc2EvdXNlci5jOjE0OiNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxubmV0L2RzYS91c2VyLmM6MTU6I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG5uZXQvZHNhL3VzZXIuYy0xNi0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFx1MDAzZVxuLS1cbm5ldC9kc2EvdXNlci5jPTI2Mzc9c3RhdGljIGludCBkc2FfdXNlcl9waHlfY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqdXNlcl9kZXYsIGludCBhZGRyLFxuLS1cbm5ldC9kc2EvdXNlci5jLTI2NDItXG5uZXQvZHNhL3VzZXIuYzoyNjQzOlx0dXNlcl9kZXYtXHUwMDNlcGh5ZGV2ID0gbWRpb2J1c19nZXRfcGh5KGRzLVx1MDAzZXVzZXJfbWlpX2J1cywgYWRkcik7XG5uZXQvZHNhL3VzZXIuYy0yNjQ0LVx0aWYgKCF1c2VyX2Rldi1cdTAwM2VwaHlkZXYpIHtcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uYz01ODc9Y29udmVydF9sZWdhY3lfc2V0dGluZ3NfdG9fbGlua19rc2V0dGluZ3MoXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmMtNjIxLVx0XHQ9IGxlZ2FjeV9zZXR0aW5ncy1cdTAwM2VhdXRvbmVnO1xubmV0L2V0aHRvb2wvY29tbW9uLmM6NjIyOlx0bGlua19rc2V0dGluZ3MtXHUwMDNlYmFzZS5tZGlvX3N1cHBvcnRcbm5ldC9ldGh0b29sL2NvbW1vbi5jOjYyMzpcdFx0PSBsZWdhY3lfc2V0dGluZ3MtXHUwMDNlbWRpb19zdXBwb3J0O1xubmV0L2V0aHRvb2wvY29tbW9uLmMtNjI0LVx0bGlua19rc2V0dGluZ3MtXHUwMDNlYmFzZS5ldGhfdHBfbWRpeFxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9MzgyPWNvbnZlcnRfbGlua19rc2V0dGluZ3NfdG9fbGVnYWN5X3NldHRpbmdzKFxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtNDEyLVx0XHQ9IGxpbmtfa3NldHRpbmdzLVx1MDAzZWJhc2UuYXV0b25lZztcbm5ldC9ldGh0b29sL2lvY3RsLmM6NDEzOlx0bGVnYWN5X3NldHRpbmdzLVx1MDAzZW1kaW9fc3VwcG9ydFxubmV0L2V0aHRvb2wvaW9jdGwuYzo0MTQ6XHRcdD0gbGlua19rc2V0dGluZ3MtXHUwMDNlYmFzZS5tZGlvX3N1cHBvcnQ7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTQxNS1cdGxlZ2FjeV9zZXR0aW5ncy1cdTAwM2VldGhfdHBfbWRpeFxuLS1cbm5ldC9ldGh0b29sL3BoeS5jPTcwPXN0YXRpYyBpbnQgcGh5X3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuLS1cbm5ldC9ldGh0b29sL3BoeS5jLTkxLVxubmV0L2V0aHRvb2wvcGh5LmM6OTI6XHRyZXBfZGF0YS1cdTAwM2VuYW1lID0ga3N0cmR1cChkZXZfbmFtZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpLCBHRlBfS0VSTkVMKTtcbm5ldC9ldGh0b29sL3BoeS5jLTkzLVx0aWYgKCFyZXBfZGF0YS1cdTAwM2VuYW1lKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBVc2VyLVNwYWNlIFBIWSBEZXZpY2UgQ3JlYXRpb24qKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gQ2FuIGEgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBzb21laG93IGNvbmp1cmUgdXAgYSBQSFkgZGV2aWNlIGF0IHdpbGwsIHVzaW5nIG5ldGxpbmsgb3IgYnkgbWFuaXB1bGF0aW5nIHN5c2ZzPyBNeSBpbml0aWFsIGh1bmNoIGlzIG5vLCBub3QgcmVhbGx5LiBQSFkgZGV2aWNlcywgYXMgSSB1bmRlcnN0YW5kIGl0LCBhcmUgZnVuZGFtZW50YWxseSBsaW5rZWQgdG8gdGhlIHBoeXNpY2FsIE1ESU8gYnVzIGFuZCBhcmUgaW5zdGFudGlhdGVkIGR1cmluZyB0aGF0IGJ1cyYjMzk7cyBzY2FuIHByb2Nlc3MsIHJlYWRpbmcgdGhvc2UgY3J1Y2lhbCBQSFkgSUQgcmVnaXN0ZXJzLiBJZiB0aGVyZSYjMzk7cyBubyBhY3R1YWwgcGh5c2ljYWwgTURJTyBidXMsIHRoZW4gdHlwaWNhbGx5LCB0aGVyZSBhcmUgbm8gUEhZIGRldmljZXMsIHNpbXBsZSBhcyB0aGF0LgoKQnV0IHdhaXQgYSBtaW51dGUsIEkgdGhpbmsgSeKAmW0gZm9yZ2V0dGluZyBzb21ldGhpbmfigKYgaXNu4oCZdCBgZHNhX2xvb3BgIGEgbW9jayBEU0Egc3dpdGNoLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gc2ltdWxhdGUgYW4gTURJTyBidXM/IElmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCB0aGF0IHNob3VsZCBwcm92aWRlIG1lIHdpdGggdGhlIGFuc3dlciBJIG5lZWQuIFRoYXQmIzM5O3MgaXQhIEkgbmVlZCB0byBjb25zdWx0IHRoZSBzb3VyY2UuIExldCYjMzk7cyBkaWcgaW50byBgZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNgIGFuZCBjb25maXJtIG15IGh5cG90aGVzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz03ND1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldnNbUEhZX01BWF9BRERSXTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjc1OnN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2UgKnN3aXRjaF9tZGlvZGV2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNzYtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9MTg0PXN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3JlYWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xODktXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxOTA6XHRyZXQgPSBtZGlvYnVzX3JlYWRfbmVzdGVkKGJ1cywgcHMtXHUwMDNlcG9ydF9iYXNlICYjNDM7IHBvcnQsIHJlZ251bSk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xOTEtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTE5OT1zdGF0aWMgaW50IGRzYV9sb29wX3BoeV93cml0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwNS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIwNjpcdHJldCA9IG1kaW9idXNfd3JpdGVfbmVzdGVkKGJ1cywgcHMtXHUwMDNlcG9ydF9iYXNlICYjNDM7IHBvcnQsIHJlZ251bSwgdmFsdWUpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjA3LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz0yNTA9c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjYzLVx0LyogSnVzdCBkbyBhIHNsZWVwaW5nIG9wZXJhdGlvbiB0byBtYWtlIGxvY2tkZXAgY2hlY2tzIGVmZmVjdGl2ZSAqL1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjY0Olx0bWRpb2J1c19yZWFkKGJ1cywgcHMtXHUwMDNlcG9ydF9iYXNlICYjNDM7IHBvcnQsIE1JSV9CTVNSKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI2NS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz0yODM9c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkyLVx0LyogSnVzdCBkbyBhIHNsZWVwaW5nIG9wZXJhdGlvbiB0byBtYWtlIGxvY2tkZXAgY2hlY2tzIGVmZmVjdGl2ZSAqL1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjkzOlx0bWRpb2J1c19yZWFkKGJ1cywgcHMtXHUwMDNlcG9ydF9iYXNlICYjNDM7IHBvcnQsIE1JSV9CTVNSKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI5NC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz0zMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBkc2FfbG9vcF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU1OnN0YXRpYyBpbnQgZHNhX2xvb3BfZHJ2X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM1Ni17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTc6XHRzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEgKnBkYXRhID0gbWRpb2Rldi1cdTAwM2VkZXYucGxhdGZvcm1fZGF0YTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM1OC1cdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcztcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNjQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNjU6XHRkcyA9IGRldm1fa3phbGxvYyhcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpkcyksIEdGUF9LRVJORUwpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzY2LVx0aWYgKCFkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNjgtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNjk6XHRkcy1cdTAwM2VkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM3MC1cdGRzLVx1MDAzZW51bV9wb3J0cyA9IERTQV9MT09QX05VTV9QT1JUUztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM3MS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM3MjpcdHBzID0gZGV2bV9remFsbG9jKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LCBzaXplb2YoKnBzKSwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNzMtXHRpZiAoIXBzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4MS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM4MjpcdGRzLVx1MDAzZWRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzgzLVx0ZHMtXHUwMDNlb3BzID0gXHUwMDI2ZHNhX2xvb3BfZHJpdmVyO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg0LVx0ZHMtXHUwMDNlcHJpdiA9IHBzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzg1Olx0cHMtXHUwMDNlYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODc6XHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4OC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTAtXHRpZiAoIXJldClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM5MTpcdFx0ZGV2X2luZm8oXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiAweCUweFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5Mi1cdFx0XHQgcGRhdGEtXHUwMDNlbmFtZSwgcGRhdGEtXHUwMDNlZW5hYmxlZF9wb3J0cyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk4LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM5OTpcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MDAtXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDEwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDExOnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDEzOlx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxNC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTktXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MjA6XHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIE5VTEwpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIxLX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyMi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyNDpcdC5tZGlvZHJ2LmRyaXZlclx0PSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjUtXHRcdC5uYW1lXHQ9IFwmIzM0O2RzYS1sb29wXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTQzMj1zdGF0aWMgaW50IGRzYV9sb29wX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM0LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzNTpcdHJldHVybiBkcnYgPT0gXHUwMDI2ZHNhX2xvb3BfZHJ2Lm1kaW9kcnYuZHJpdmVyO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM2LX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00Mzg9c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ1LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ2OnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2Rldih2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ3LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NjM6XHRidXMgPSBtZGlvX2ZpbmRfYnVzKFwmIzM0O2ZpeGVkLTBcJiMzNDspO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDY0LVx0aWYgKFdBUk5fT04oIWJ1cykpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDY2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDY3Olx0c3dpdGNoX21kaW9kZXYgPSBtZGlvX2RldmljZV9jcmVhdGUoYnVzLCAzMSk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Njg6XHRpZiAoSVNfRVJSKHN3aXRjaF9tZGlvZGV2KSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ2OS1cdFx0Z290byBvdXQ7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NzAtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzE6XHRzd2l0Y2hfbWRpb2Rldi1cdTAwM2VidXNfbWF0Y2ggPSBkc2FfbG9vcF9idXNfbWF0Y2g7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzI6XHRzd2l0Y2hfbWRpb2Rldi1cdTAwM2VkZXYucGxhdGZvcm1fZGF0YSA9IFx1MDAyNmRzYV9sb29wX3BkYXRhO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDczLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDc0Olx0cmV0ID0gbWRpb19kZXZpY2VfcmVnaXN0ZXIoc3dpdGNoX21kaW9kZXYpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDc1LVx0aWYgKHJldClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3NjpcdFx0bWRpb19kZXZpY2VfZnJlZShzd2l0Y2hfbWRpb2Rldik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00Nzctb3V0OlxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTQ4Mj1zdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDg2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDg3Olx0cmV0ID0gZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2KCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5My1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NDpcdHJldCA9IG1kaW9fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmRzYV9sb29wX2Rydik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTUtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTYtXHRcdGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3RlcigpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk3Olx0XHRtZGlvX2RldmljZV9yZW1vdmUoc3dpdGNoX21kaW9kZXYpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk4Olx0XHRtZGlvX2RldmljZV9mcmVlKHN3aXRjaF9tZGlvZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5OS1cdH1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz01MDU9c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNi17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDc6XHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmRzYV9sb29wX2Rydik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDgtXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwOTpcdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MTA6XHRtZGlvX2RldmljZV9mcmVlKHN3aXRjaF9tZGlvZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTY5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGRzYV9sb29wYCBhbmQgYG1kaW8tbW9ja3VwYCBDb251bmRydW0qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgZHNhX2xvb3BgIGlzIGxldmVyYWdpbmcgdGhlIGBmaXhlZC0wYCBidXMuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gdG8gYG1kaW8tbW9ja3VwYC4gSG1tLCBkb2VzIHRoaXMgZXZlbiBleGlzdD8gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGJ5IGNoZWNraW5nIGBkcml2ZXJzL25ldC9waHkvbWRpby1tb2NrdXAuY2AuIE5vcGUsIHRoYXQgd2FzbiYjMzk7dCB0aGUgcmlnaHQgcGF0aC4gT2theSwgcGVyaGFwcyBpdCYjMzk7cyB1bmRlciBgZHJpdmVycy9uZXQvbWRpby9tZGlvLW1vY2t1cC5jYCBpbnN0ZWFkPyBTdGlsbCBubyBsdWNrLiBUaW1lIHRvIHRha2UgYSBicm9hZGVyIGFwcHJvYWNoOyBJJiMzOTtsbCBicm93c2UgdGhlIGBkcml2ZXJzL25ldC9waHkvYCBkaXJlY3RvcnkgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSByZWxldmFudCBjb2RlIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGlzIGBkc2FfbG9vcGAgLyBgZml4ZWQtMGAgLyBgbWRpby1tb2NrdXBgIGludGVyYWN0aW9uLiBIb3BlZnVsbHksIEkgY2FuIGZpbmQgc29tZXRoaW5nIHVzZWZ1bCBpbiB0aG9zZSBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2FkaW4uYyYjMzQ7LAogICAgJiMzNDthZGluMTEwMC5jJiMzNDssCiAgICAmIzM0O2FkaW4xMTQwLXBoeS5jJiMzNDssCiAgICAmIzM0O2Fpcl9hbjg4MDEuYyYjMzQ7LAogICAgJiMzNDthaXJfZW44ODExaC5jJiMzNDssCiAgICAmIzM0O2Fpcl9waHlfbGliLmMmIzM0OywKICAgICYjMzQ7YWlyX3BoeV9saWIuaCYjMzQ7LAogICAgJiMzNDthbWQuYyYjMzQ7LAogICAgJiMzNDthczIxeHh4LmMmIzM0OywKICAgICYjMzQ7YXg4ODc5NmIuYyYjMzQ7LAogICAgJiMzNDtheDg4Nzk2Yl9ydXN0LnJzJiMzNDssCiAgICAmIzM0O2JjbS1jeWdudXMuYyYjMzQ7LAogICAgJiMzNDtiY20tcGh5LWxpYi5jJiMzNDssCiAgICAmIzM0O2JjbS1waHktbGliLmgmIzM0OywKICAgICYjMzQ7YmNtLXBoeS1wdHAuYyYjMzQ7LAogICAgJiMzNDtiY201NDE0MC5jJiMzNDssCiAgICAmIzM0O2JjbTYzeHguYyYjMzQ7LAogICAgJiMzNDtiY203eHh4LmMmIzM0OywKICAgICYjMzQ7YmNtODQ4ODEuYyYjMzQ7LAogICAgJiMzNDtiY204N3h4LmMmIzM0OywKICAgICYjMzQ7YnJvYWRjb20uYyYjMzQ7LAogICAgJiMzNDtjaWNhZGEuYyYjMzQ7LAogICAgJiMzNDtjb3J0aW5hLmMmIzM0OywKICAgICYjMzQ7ZGFwODIxMXIuYyYjMzQ7LAogICAgJiMzNDtkYXZpY29tLmMmIzM0OywKICAgICYjMzQ7ZHA4MzY0MC5jJiMzNDssCiAgICAmIzM0O2RwODM2NDBfcmVnLmgmIzM0OywKICAgICYjMzQ7ZHA4MzgyMi5jJiMzNDssCiAgICAmIzM0O2RwODM4NDguYyYjMzQ7LAogICAgJiMzNDtkcDgzODY3LmMmIzM0OywKICAgICYjMzQ7ZHA4Mzg2OS5jJiMzNDssCiAgICAmIzM0O2RwODN0YzgxMS5jJiMzNDssCiAgICAmIzM0O2RwODN0ZDUxMC5jJiMzNDssCiAgICAmIzM0O2RwODN0ZzcyMC5jJiMzNDssCiAgICAmIzM0O2V0MTAxMWMuYyYjMzQ7LAogICAgJiMzNDtmaXhlZF9waHkuYyYjMzQ7LAogICAgJiMzNDtpY3BsdXMuYyYjMzQ7LAogICAgJiMzNDtpbnRlbC14d2F5LmMmIzM0OywKICAgICYjMzQ7bGlua21vZGUuYyYjMzQ7LAogICAgJiMzNDtseHQuYyYjMzQ7LAogICAgJiMzNDttYXJ2ZWxsLTg4cTJ4eHguYyYjMzQ7LAogICAgJiMzNDttYXJ2ZWxsLTg4eDIyMjIuYyYjMzQ7LAogICAgJiMzNDttYXJ2ZWxsLmMmIzM0OywKICAgICYjMzQ7bWFydmVsbDEwZy5jJiMzNDssCiAgICAmIzM0O21kaW8tb3Blbi1hbGxpYW5jZS5oJiMzNDssCiAgICAmIzM0O21kaW9fYnVzLmMmIzM0OywKICAgICYjMzQ7bWRpb19idXNfcHJvdmlkZXIuYyYjMzQ7LAogICAgJiMzNDttZGlvX2RldmljZS5jJiMzNDssCiAgICAmIzM0O21kaW9fZGV2cmVzLmMmIzM0OywKICAgICYjMzQ7bWVzb24tZ3hsLmMmIzM0OywKICAgICYjMzQ7bWljcmVsLmMmIzM0OywKICAgICYjMzQ7bWljcm9jaGlwLmMmIzM0OywKICAgICYjMzQ7bWljcm9jaGlwX3Jkc19wdHAuYyYjMzQ7LAogICAgJiMzNDttaWNyb2NoaXBfcmRzX3B0cC5oJiMzNDssCiAgICAmIzM0O21pY3JvY2hpcF90MS5jJiMzNDssCiAgICAmIzM0O21pY3JvY2hpcF90MXMuYyYjMzQ7LAogICAgJiMzNDttaWlfdGltZXN0YW1wZXIuYyYjMzQ7LAogICAgJiMzNDttb3RvcmNvbW0uYyYjMzQ7LAogICAgJiMzNDtteGwtODYxMTAuYyYjMzQ7LAogICAgJiMzNDtteGwtZ3B5LmMmIzM0OywKICAgICYjMzQ7bmF0aW9uYWwuYyYjMzQ7LAogICAgJiMzNDtuY24yNjAwMC5jJiMzNDssCiAgICAmIzM0O254cC1jNDUtdGphMTF4eC1tYWNzZWMuYyYjMzQ7LAogICAgJiMzNDtueHAtYzQ1LXRqYTExeHguYyYjMzQ7LAogICAgJiMzNDtueHAtYzQ1LXRqYTExeHguaCYjMzQ7LAogICAgJiMzNDtueHAtY2J0eC5jJiMzNDssCiAgICAmIzM0O254cC10amExMXh4LmMmIzM0OywKICAgICYjMzQ7b3Blbl9hbGxpYW5jZV9oZWxwZXJzLmMmIzM0OywKICAgICYjMzQ7b3Blbl9hbGxpYW5jZV9oZWxwZXJzLmgmIzM0OywKICAgICYjMzQ7cGh5LWM0NS5jJiMzNDssCiAgICAmIzM0O3BoeS1jYXBzLmgmIzM0OywKICAgICYjMzQ7cGh5LWNvcmUuYyYjMzQ7LAogICAgJiMzNDtwaHkuYyYjMzQ7LAogICAgJiMzNDtwaHlfY2Fwcy5jJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2UuYyYjMzQ7LAogICAgJiMzNDtwaHlfbGVkX3RyaWdnZXJzLmMmIzM0OywKICAgICYjMzQ7cGh5X2xpbmtfdG9wb2xvZ3kuYyYjMzQ7LAogICAgJiMzNDtwaHlfcGFja2FnZS5jJiMzNDssCiAgICAmIzM0O3BoeV9wb3J0LmMmIzM0OywKICAgICYjMzQ7cGh5bGliLWludGVybmFsLmgmIzM0OywKICAgICYjMzQ7cGh5bGliLmgmIzM0OywKICAgICYjMzQ7cGh5bGluay5jJiMzNDssCiAgICAmIzM0O3FzZW1pLmMmIzM0OywKICAgICYjMzQ7cXQyMDI1LnJzJiMzNDssCiAgICAmIzM0O3JvY2tjaGlwLmMmIzM0OywKICAgICYjMzQ7c2ZwLWJ1cy5jJiMzNDssCiAgICAmIzM0O3NmcC5jJiMzNDssCiAgICAmIzM0O3NmcC5oJiMzNDssCiAgICAmIzM0O3Ntc2MuYyYjMzQ7LAogICAgJiMzNDtzdGUxMFhwLmMmIzM0OywKICAgICYjMzQ7c3R1YnMuYyYjMzQ7LAogICAgJiMzNDtzd3BoeS5jJiMzNDssCiAgICAmIzM0O3N3cGh5LmgmIzM0OywKICAgICYjMzQ7dGVyYW5ldGljcy5jJiMzNDssCiAgICAmIzM0O3VQRDYwNjIwLmMmIzM0OywKICAgICYjMzQ7dml0ZXNzZS5jJiMzNDssCiAgICAmIzM0O3hpbGlueF9nbWlpMnJnbWlpLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IFsKICAgICYjMzQ7YXF1YW50aWEmIzM0OywKICAgICYjMzQ7bWVkaWF0ZWsmIzM0OywKICAgICYjMzQ7bXNjYyYjMzQ7LAogICAgJiMzNDtxY29tJiMzNDssCiAgICAmIzM0O3JlYWx0ZWsmIzM0OwogIF0KfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ5MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUEhZIERyaXZlciBJbnN0YW50aWF0aW9uIFdpdGhvdXQgSGFyZHdhcmUqKgoKT2theSwgc28gSSBzZWUgYG1kaW9fYnVzLmNgIGlzIHByZXNlbnQsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgcHJpbWFyeSBxdWVzdGlvbiBub3cgaXM6IGNhbiBJIGluc3RhbnRpYXRlIGEgUEhZIGRyaXZlciB3aXRob3V0IGFjdHVhbGx5IGhhdmluZyB0aGUgcGh5c2ljYWwgaGFyZHdhcmU/IEkmIzM5O20gdHJ5aW5nIHRvIGV4cGxvcmUgdGhpcyB0aGVvcmV0aWNhbGx5LCBtYXliZSBmb3Igc29tZSBmdXp6aW5nIG9yIHRlc3RpbmcgcHVycG9zZXMuIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIGFib3V0IFN5emthbGxlciBoYXZpbmcgc29tZSBleGlzdGluZyBzdXBwb3J0IGZvciBmdXp6aW5nIHRoZXNlIGRyaXZlcnMuIExldCBtZSBkaWcgaW50byB0aGF0IGFuZCBzZWUgaWYgSSBjYW4gZmluZCBhbnkgU3l6a2FsbGVyIGRlc2NyaXB0aW9ucyByZWxhdGVkIHRvIFBIWXMuIFRoYXQgbWlnaHQgZ2l2ZSBtZSBzb21lIGNsdWVzIGFib3V0IGhvdyB0byBhcHByb2FjaCB0aGlzLCBvciBzaG93IHNvbWUga25vd24gdGVjaG5pcXVlcyBmb3IgdmlydHVhbGl6aW5nIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6XyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcxNwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEtlcm5lbCBFeHBsb3JhdGlvbioqCgpPa2F5LCBzbyBJIGhpdCBhIHdhbGwgd2l0aCB0aGUgYHN5el9gIHNlYXJjaCDigJMgdGhhdCYjMzk7cyBhIGRlYWQgZW5kLiBJIG5lZWQgYSBkaWZmZXJlbnQgYW5nbGUuIEhtbSwgbGV0IG1lIHRoaW5rIGFib3V0IHZpcnR1YWwgTURJTyBidXNlcy4gSXMgdGhlcmUgYW55dGhpbmcgaW4gdGhlIGtlcm5lbCB0aGF0IHdvdWxkIHNpbXVsYXRlIG9yIGVtdWxhdGUgYW4gTURJTyBidXM/IEkgbmVlZCBhIHdheSB0byBpbmplY3QgYSBQSFkgaW50byB0aGUgc3lzdGVtLCBhbmQgdGhhdCBzZWVtcyBsaWtlIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4KCkkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYGRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY2AuIFRoYXTigJlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgYWxsb3dzIGZvciBQSFlzIHdpdGggZml4ZWQgbGlua3MsIGJ1dCBpdCB1c2VzIGEgc3BlY2lmaWMsIGJ1aWx0LWluIGRyaXZlciwgYGZpeGVkX3BoeWAuIE5vdCBxdWl0ZSB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IsIGFuZCBpdCYjMzk7cyBwcm9iYWJseSB0b28gcmlnaWQgZm9yIHdoYXQgSSBuZWVkLgoKSeKAmXZlIHJ1bGVkIG91dCBhIGZldyBvdGhlciBvcHRpb25zLiBgbmV0ZGV2c2ltYCDigJMgbm8uIGB0dW5gL2B0YXBgIOKAkyBubyBNRElPLiBgbWFjODAyMTFfaHdzaW1gPyBOb3BlLiBgdmttc2A/IE5lZ2F0aXZlLiBJJiMzOTttIGVzc2VudGlhbGx5IGxvb2tpbmcgZm9yIGEgd2F5IHRvIHRyaWNrIHRoZSBrZXJuZWwgaW50byBiZWxpZXZpbmcgYSBzcGVjaWZpYyBQSFksIGluIHRoaXMgY2FzZSwgYGFpcl9lbjg4MTFoYCwgaXMgcHJlc2VudCBpbiBteSBRRU1VIGVudmlyb25tZW50LgoKU28sIGhvdyBkbyBJIGdvIGFib3V0IHByb2JpbmcgYGFpcl9lbjg4MTFoYCBlZmZlY3RpdmVseSBpbiBhIFFFTVUgc2V0dXA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUEhZIGRyaXZlciByZWdpc3RyYXRpb24gYW5kIGRpc2NvdmVyeSB3b3JrLiBJJiMzOTt2ZSBnb3QgaXQsIGEgUEhZIGRyaXZlciByZWdpc3RlcnMgaXRzZWxmIHVzaW5nIGBwaHlfZHJpdmVyX3JlZ2lzdGVyYC4gVGhlbiwgd2hlbiBhbiBNRElPIGJ1cyBpcyByZWdpc3RlcmVkLCBpdCBzY2FucyBmb3IgUEhZcy4gV2hlbiBpdCBmaW5kcyBhIG1hdGNoaW5nIFBIWSBJRCwgaXQgYmluZHMgdGhlIGRyaXZlci4KClRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHRoZW4gYmVjb21lcyBob3cgZG8gSSBjcmVhdGUgYSAqZmFrZSogTURJTyBidXMgdGhhdCByZXBvcnRzIHRoZSBQSFkgSUQgdGhhdCBJIHdhbnQ/IEkgbmVlZCBhIGZha2UgTURJTyBidXMgdGhhdCByZXR1cm5zIGEgc3Bvb2ZlZCBQSFkgSUQgZHVyaW5nIHJlYWRzLiBEb2VzIHRoZSBrZXJuZWwgaGF2ZSBhbnkgcHJlLWV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBjb3VsZCBoZWxwIG1lIGFjY29tcGxpc2ggdGhpcz8gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBkcml2ZXJzL25ldC9tZGlvL2AgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuIFRoYXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2FjcGlfbWRpby5jJiMzNDssCiAgICAmIzM0O2Z3bm9kZV9tZGlvLmMmIzM0OywKICAgICYjMzQ7bWRpby1haXJvaGEuYyYjMzQ7LAogICAgJiMzNDttZGlvLWFzcGVlZC5jJiMzNDssCiAgICAmIzM0O21kaW8tYmNtLWlwcm9jLmMmIzM0OywKICAgICYjMzQ7bWRpby1iY20tdW5pbWFjLmMmIzM0OywKICAgICYjMzQ7bWRpby1iaXRiYW5nLmMmIzM0OywKICAgICYjMzQ7bWRpby1jYXZpdW0uYyYjMzQ7LAogICAgJiMzNDttZGlvLWNhdml1bS5oJiMzNDssCiAgICAmIzM0O21kaW8tZ3Bpby5jJiMzNDssCiAgICAmIzM0O21kaW8taGlzaS1mZW1hYy5jJiMzNDssCiAgICAmIzM0O21kaW8taTJjLmMmIzM0OywKICAgICYjMzQ7bWRpby1pcHE0MDE5LmMmIzM0OywKICAgICYjMzQ7bWRpby1pcHE4MDY0LmMmIzM0OywKICAgICYjMzQ7bWRpby1tb3hhcnQuYyYjMzQ7LAogICAgJiMzNDttZGlvLW1zY2MtbWlpbS5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LWJjbS1pcHJvYy5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LWJjbTYzNjguYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1ncGlvLmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtbWVzb24tZzEyYS5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LW1lc29uLWd4bC5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LW1taW9yZWcuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1tdWx0aXBsZXhlci5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LmMmIzM0OywKICAgICYjMzQ7bWRpby1tdnVzYi5jJiMzNDssCiAgICAmIzM0O21kaW8tb2N0ZW9uLmMmIzM0OywKICAgICYjMzQ7bWRpby1waWM2NGhwc2MuYyYjMzQ7LAogICAgJiMzNDttZGlvLXJlYWx0ZWstcnRsOTMwMC5jJiMzNDssCiAgICAmIzM0O21kaW8tcmVnbWFwLmMmIzM0OywKICAgICYjMzQ7bWRpby1zdW40aS5jJiMzNDssCiAgICAmIzM0O21kaW8tdGh1bmRlci5jJiMzNDssCiAgICAmIzM0O21kaW8teGdlbmUuYyYjMzQ7LAogICAgJiMzNDtvZl9tZGlvLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgxNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gaW50byB0aGUgTWlzc2luZyBNRElPIE1vY2t1cCoqCgpPa2F5LCBzbyB0aGVyZSYjMzk7cyBubyBgbWRpby1tb2NrdXAuY2AgZmlsZS4gVGhhdCYjMzk7cyB1bmV4cGVjdGVkLiBXYWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgdGhhdCB0aGUgYGRzYV9sb29wYCBzZXR1cCBhY3R1YWxseSAqY3JlYXRlcyogYSBmYWtlIE1ESU8gYnVzLiBSaWdodCEgTGV0JiMzOTtzIGdldCBiYWNrIHRvIGBkc2FfbG9vcC5jYCBhbmQgcmVmcmVzaCBteSBtZW1vcnkuCgpBaCwgeWVzLiBJIHNlZSBpdCBub3cuIEl0IHVzZXMgYG1kaW9fZmluZF9idXMoJiMzNDtmaXhlZC0wJiMzNDspYC4gVGhhdCByaW5ncyBhIGJlbGwuIFRoYXQgc3RyaW5nLi4uIHRoYXQmIzM5O3MgdGhlIG5hbWUgb2YgdGhlIGBmaXhlZF9tZGlvX2J1c2AgdGhhdCYjMzk7cyBjcmVhdGVkIGJ5IGBmaXhlZF9waHkuY2AuIEkgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhhdCBwYXJ0IG9mIHRoZSBzZXR1cCwgc28gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgZml4ZWRfcGh5LmNgIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpeGVkX21kaW9fYnVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz0xOTM9RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X3VucmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5NC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxOTU6c3RhdGljIGludCBfX2luaXQgZml4ZWRfbWRpb19idXNfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE5Ni17XG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTIxOC19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MjE5Om1vZHVsZV9pbml0KGZpeGVkX21kaW9fYnVzX2luaXQpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTIyMC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoyMjE6c3RhdGljIHZvaWQgX19leGl0IGZpeGVkX21kaW9fYnVzX2V4aXQodm9pZClcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0yMjIte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0yMjUtfVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjIyNjptb2R1bGVfZXhpdChmaXhlZF9tZGlvX2J1c19leGl0KTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0yMjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDA5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFZlcnNhdGlsaXR5IG9mIGBmaXhlZF9tZGlvX2J1c2AqKgoKSG1tLCBpbnRlcmVzdGluZyBxdWVzdGlvbi4gQ2FuIEkgbGV2ZXJhZ2UgYGZpeGVkX21kaW9fYnVzYCB0byBwcm9iZSBqdXN0ICphbnkqIFBIWSBkcml2ZXI/IE15IGd1dCBzYXlzICYjMzQ7cHJvYmFibHksIGJ1dCB3aXRoIGNhdmVhdHMuJiMzNDsgTGV0IG1lIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgYnVzIGlzIHN0cnVjdHVyZWQuLi4gcmlnaHQsIGl0JiMzOTtzIGRlc2lnbmVkIHRvIHJlcHJlc2VudCBhIHN0YXRpY2FsbHkgZGVmaW5lZCBNRElPIGJ1cywgcGVyZmVjdCBmb3IgdGhvc2Ugc2NlbmFyaW9zIHdoZXJlIHRoZSBQSFkgY29uZmlndXJhdGlvbiBpcyBrbm93biBhdCBjb21waWxlIHRpbWUgb3Igc3lzdGVtIGluaXRpYWxpemF0aW9uLCBsaWtlIGluIFNvQ3Mgd2l0aCBpbnRlZ3JhdGVkIFBIWXMuIFRoZSBiZWF1dHkgaXMgaXQgYXZvaWRzIHRoZSB1c3VhbCBNRElPIHByb2JpbmcgZGFuY2UuCgpTbywgdGhlIGtleSBoZXJlIGlzIHdoZXRoZXIgdGhlIFBIWSBkcml2ZXIgKmV4cGVjdHMqIHRoaXMgc3RhdGljIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBleHBlY3RlZCBidXMuIExldCYjMzk7cyBkaWcgaW50byB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgZnVuY3Rpb25zIGxpa2UgYGZpeGVkX3BoeV9hZGRgIG9yIHNpbWlsYXIgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHNlZSB3aGF0IGFzc3VtcHRpb25zIHRoZXNlIGZpeGVkIFBIWSBkcml2ZXJzIG1ha2UgYWJvdXQgdGhlIHVuZGVybHlpbmcgTURJTyBidXMgaW5mcmFzdHJ1Y3R1cmUuIERvIHRoZXkgc2ltcGx5IGV4cGVjdCBhIHN0cnVjdHVyZSB3aXRoIGEgcGFydGljdWxhciBzZXQgb2Ygb3BlcmF0aW9ucywgb3IgYXJlIHRoZXJlIGRlZXBlciBkZXBlbmRlbmNpZXM/IElzIHRoZXJlIGEgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gdGhhdCB0aGlzIGJ1cyBhYnN0cmFjdGlvbiBpcyBwcmVzZW50aW5nIHRoYXQgaXMgdW5pdmVyc2FsIGVub3VnaCB0byBkbyBzbz8KCklmIHRoZSBkcml2ZXJzIGFyZSBmYWlybHkgZ2VuZXJpYyBpbiB0aGVpciBidXMgaW50ZXJhY3Rpb24sIGFuZCB0aGV5IHJlbHkgb24gdGhlIE1ESU8gYnVzJiMzOTtzIHN0YW5kYXJkIGFjY2VzcyBmdW5jdGlvbnMsIHRoZW4geWVzLCBpbiB0aGVvcnksIEkgbWlnaHQgYmUgYWJsZSB0byBnZXQgYXdheSB3aXRoIHVzaW5nIGBmaXhlZF9tZGlvX2J1c2AgdG8gYXR0YWNoIHRvIG1vcmUgYXJiaXRyYXJ5IFBIWSBkcml2ZXJzLiBJdCYjMzk7cyByZWFsbHkgYWJvdXQgdGhlIGRyaXZlciYjMzk7cyBleHBlY3RhdGlvbnMgYW5kIGhvdyBjbG9zZWx5IGl0IGJpbmRzIHRvIHRoZSBidXMmIzM5O3MgaW1wbGVtZW50YXRpb24uIEl0IGRlcGVuZHMgb24gd2hldGhlciB0aGUgYGZpeGVkX21kaW9fYnVzYCBhYnN0cmFjdGlvbiBpcyB0cnVseSAmIzM0O2J1cy1hZ25vc3RpYyYjMzQ7IGVub3VnaCB0byBzdWl0IHRoZSB3aWRlciB2YXJpZXR5IG9mIFBIWSBkcml2ZXJzIG91dCB0aGVyZS4KClRpbWUgdG8gY29uc3VsdCB0aGUgc291cmNlIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zml4ZWRfcGh5X2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODYyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgdGhlIGBmaXhlZF9waHlfcmVnaXN0ZXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBgZml4ZWRfcGh5X3JlZ2lzdGVyYC4gVGhpcyBpbXBsaWVzIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgUEhZIChQaHlzaWNhbCBMYXllcikgZGV2aWNlIGFuZCBhcmUgcHJvYmFibHkgdHJvdWJsZXNob290aW5nIG9yIGNvbmZpZ3VyaW5nIHNvbWUgYXNwZWN0IG9mIGl0cyBiZWhhdmlvci4gJiMzNDtGaXhlZCYjMzQ7IGlzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIHRoaXMgcmVnaXN0ZXIgaXMgZWl0aGVyIGhhcmQtY29kZWQgb3Igbm90IGR5bmFtaWNhbGx5IG5lZ290aWF0ZWQuIFRoaXMgY291bGQgaW5kaWNhdGUgYSBzdGF0aWMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgb3IgYSByZWdpc3RlciB0aGF0IG5lZWRzIHNwZWNpZmljIGF0dGVudGlvbiBmb3IgYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIHJldmlzaW9uIG9yIHNldHVwLiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIGltbWVkaWF0ZWx5IHNjYW5uaW5nIHRoZSBsYW5kc2NhcGUgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuOiBBcmUgd2UgbG9va2luZyBhdCBhIGtub3duIGlzc3VlIHdpdGggdGhpcyBQSFkgbW9kZWw/IElzIHRoaXMgcmVnaXN0ZXIgcmVsYXRlZCB0byBzcGVlZC9kdXBsZXggc2V0dGluZ3MsIHBvd2VyIG1hbmFnZW1lbnQsIG9yIHBlcmhhcHMgY2xvY2tpbmc/IERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgdGhpcyBjb3VsZCBiZSBhIHZpdGFsIHN0ZXAgaW4gaXNvbGF0aW5nIHRoZSBjYXVzZSBvZiBhIHByb2JsZW0gb3IgdmFsaWRhdGluZyBhIHBhcnRpY3VsYXIgc2V0dXAuIFVuZGVyc3RhbmRpbmcgdGhlIHB1cnBvc2UgYW5kIGNvbnN0cmFpbnRzIG9mIHRoaXMgcGFydGljdWxhciByZWdpc3RlciBpcyBub3cgcGFyYW1vdW50IGZvciBwcm9jZWVkaW5nIGVmZmVjdGl2ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaXhlZF9waHlfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTExOD1zdGF0aWMgaW50IGZpeGVkX3BoeV9nZXRfZnJlZV9hZGRyKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxMzE6c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMi1cdFx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Mi19XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTczOkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc0LVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKHZvaWQpXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTc2LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgxLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4MjpcdHJldHVybiBmaXhlZF9waHlfcmVnaXN0ZXIoXHUwMDI2c3RhdHVzLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xODMtfVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE4NDpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfcmVnaXN0ZXJfMTAwZmQpO1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NzgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIHRoZSBQSFkgRGV2aWNlIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBgZml4ZWRfcGh5X3JlZ2lzdGVyYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgYnJpbmdpbmcgYSBQSFkgZGV2aWNlIG9ubGluZSwgc3BlY2lmaWNhbGx5IG9uIHRoZSBgZml4ZWRfbWRpb19idXNgLiAgVGhhdCBtYWtlcyBzZW5zZTsgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGZpeGVkIGNvbmZpZ3VyYXRpb24gaGVyZS4gQnV0IHdoYXQmIzM5O3MgdGhpcyBhYm91dCByZWdpc3RlcmluZyBpdCB3aXRoIGEgYHBoeV9pZGAgb2YgMD8gVGhhdCYjMzk7cyBhIGxpdHRsZSBzdHJhbmdlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHdvcmtpbmdzIG9mIGBmaXhlZF9waHlfcmVnaXN0ZXJgLiBUaW1lIHRvIGRpdmUgYmFjayBpbiBhbmQgZG91YmxlLWNoZWNrIGV4YWN0bHkgaG93IHRoYXQgcmVnaXN0cmF0aW9uIHByb2Nlc3MgdW5mb2xkcyBhbmQgd2hhdCBhc3N1bXB0aW9ucyBpdCBtYWtlcyBhYm91dCB0aGUgYHBoeV9pZGAuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpc24mIzM5O3QgZ29pbmcgdG8gY2F1c2UgY29uZmxpY3RzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZG93biB0aGUgbGluZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCYjMzk7cyBoYW5kbGVkIGludGVybmFsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzE6XHRzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXG4gMTMyOlx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuIDEzMzpcdHtcbiAxMzQ6XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHk7XG4gMTM1Olx0XHRpbnQgcGh5X2FkZHI7XG4gMTM2Olx0XHRpbnQgcmV0O1xuIDEzNzpcdFxuIDEzODpcdFx0cmV0ID0gc3dwaHlfdmFsaWRhdGVfc3RhdGUoc3RhdHVzKTtcbiAxMzk6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMTQwOlx0XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gMTQxOlx0XG4gMTQyOlx0XHRpZiAoIWZtYl9taWlfYnVzIHx8IGZtYl9taWlfYnVzLVx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRClcbiAxNDM6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7XG4gMTQ0Olx0XG4gMTQ1Olx0XHQvKiBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIFBIWSBhZGRyZXNzLCB1cCB0byBOVU1fRlAgKi9cbiAxNDY6XHRcdHBoeV9hZGRyID0gZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIoKTtcbiAxNDc6XHRcdGlmIChwaHlfYWRkciBcdTAwM2MgMClcbiAxNDg6XHRcdFx0cmV0dXJuIEVSUl9QVFIocGh5X2FkZHIpO1xuIDE0OTpcdFxuIDE1MDpcdFx0Zm1iX2ZpeGVkX3BoeXNbcGh5X2FkZHJdLnN0YXR1cyA9ICpzdGF0dXM7XG4gMTUxOlx0XHRmbWJfZml4ZWRfcGh5c1twaHlfYWRkcl0uc3RhdHVzLmxpbmsgPSB0cnVlO1xuIDE1MjpcdFxuIDE1MzpcdFx0cGh5ID0gZ2V0X3BoeV9kZXZpY2UoZm1iX21paV9idXMsIHBoeV9hZGRyLCBmYWxzZSk7XG4gMTU0Olx0XHRpZiAoSVNfRVJSKHBoeSkpIHtcbiAxNTU6XHRcdFx0Zml4ZWRfcGh5X2RlbChwaHlfYWRkcik7XG4gMTU2Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIDE1NzpcdFx0fVxuIDE1ODpcdFxuIDE1OTpcdFx0b2Zfbm9kZV9nZXQobnApO1xuIDE2MDpcdFx0cGh5LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGUgPSBucDtcbiAxNjE6XHRcdHBoeS1cdTAwM2Vpc19wc2V1ZG9fZml4ZWRfbGluayA9IHRydWU7XG4gMTYyOlx0XG4gMTYzOlx0XHRyZXQgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG4gMTY0Olx0XHRpZiAocmV0KSB7XG4gMTY1Olx0XHRcdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xuIDE2NjpcdFx0XHRvZl9ub2RlX3B1dChucCk7XG4gMTY3Olx0XHRcdGZpeGVkX3BoeV9kZWwocGh5X2FkZHIpO1xuIDE2ODpcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIDE2OTpcdFx0fVxuIDE3MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM0MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgUEhZIElEIFJldHJpZXZhbCoqCgpBbHJpZ2h0LCBzbyBgZ2V0X3BoeV9kZXZpY2VgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIHN1cHBvc2VkIHRvIHB1bGwgdGhlIFBIWSBJRCBvZmYgdGhlIE1ESU8gYnVzLiBUaGF0IG1ha2VzIHNlbnNlLCBzdGFuZGFyZCBwcmFjdGljZS4gQnV0IHRoZSBxdWVzdGlvbiBpczogaG93IGlzIHRoZSBNRElPIGJ1cyAqYWN0dWFsbHkqIGJlaW5nIGFjY2Vzc2VkIGhlcmU/IEkgbmVlZCB0byB0cmFjZSB0aGUgcmVhZCBvcGVyYXRpb24gdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMga29zaGVyLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBgZm1iX21paV9idXNgIGlzIGRvaW5nOyB0aGF0IGxpa2VseSBob2xkcyB0aGUgbG93ZXItbGV2ZWwgYnVzIGFjY2VzcyBjb2RlLiBBbmQgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBkYXRhIGFjY2VzcywgSSBzaG91bGQgbG9vayBkaXJlY3RseSBpbnRvIGBmaXhlZF9tZGlvX3JlYWRgLiBUaGF0JiMzOTtzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIHNlZSB0aGUgbG93LWxldmVsIHJlZ2lzdGVyIGludGVyYWN0aW9ucy4gSSBzdXNwZWN0IEkgbWlnaHQgZmluZCB0aGUgc3BlY2lmaWMgTURJTyByZWFkIHNlcXVlbmNlIGFuZCBhZGRyZXNzIHNldHVwIHRoZXJlLCBtYXliZSB3aXRoIHNvbWUgYml0LWJhbmdpbmcgZGV0YWlscyBkZXBlbmRpbmcgb24gdGhlIGhhcmR3YXJlLiBVbmRlcnN0YW5kaW5nIHRoYXQgd2lsbCB2YWxpZGF0ZSB0aGUgZW50aXJlIFBIWSBJRCByZXRyaWV2YWwgc2VxdWVuY2UgYW5kIGhlbHAgc3BvdCBhbnkgcG90ZW50aWFsIGlzc3VlcywgbGlrZSBpbmNvcnJlY3QgYWRkcmVzc2luZyBvciB0aW1pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpeGVkX21kaW9fcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9NTk9RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02MC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo2MTpzdGF0aWMgaW50IGZpeGVkX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdfbnVtKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTYyLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9MTk1PXN0YXRpYyBpbnQgX19pbml0IGZpeGVkX21kaW9fYnVzX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjA0LVx0Zm1iX21paV9idXMtXHUwMDNlbmFtZSA9IFwmIzM0O0ZpeGVkIE1ESU8gQnVzXCYjMzQ7O1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjIwNTpcdGZtYl9taWlfYnVzLVx1MDAzZXJlYWQgPSBcdTAwMjZmaXhlZF9tZGlvX3JlYWQ7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjA2LVx0Zm1iX21paV9idXMtXHUwMDNld3JpdGUgPSBcdTAwMjZmaXhlZF9tZGlvX3dyaXRlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkwMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uOiBgZml4ZWRfbWRpb19yZWFkYCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgb24gbXkgbWluZCBpcyBgZml4ZWRfbWRpb19yZWFkYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gJiMzNDtGaXhlZCYjMzQ7IGltcGxpZXMgYSBzcGVjaWZpYyBvciBwcmVkZXRlcm1pbmVkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBNRElPIHJlYWQgb3BlcmF0aW9uLiBUaGlzIGltbWVkaWF0ZWx5IHJhaXNlcyBzb21lIHF1ZXN0aW9uczoKCiogICBXaGF0JiMzOTtzIGZpeGVkPyBJcyBpdCB0aGUgTURJTyBhZGRyZXNzLCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyB3aXRoaW4gdGhhdCBNRElPIGRldmljZSwgdGhlIGRhdGEgZm9ybWF0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSAmIzM0O2ZpeGVkJiMzNDsgYXBwcm9hY2ggdXN1YWxseSBzYWNyaWZpY2VzIHNvbWUgZGVncmVlIG9mIGZsZXhpYmlsaXR5IGZvciBwcmVkaWN0YWJsZSBiZWhhdmlvciBvciBwb3RlbnRpYWxseSwgb3B0aW1pemF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdHJhZGUtb2ZmcyBhdCBwbGF5LgoqICAgV2h5ICYjMzQ7Zml4ZWQmIzM0Oz8gSXMgdGhpcyBmb3IgYSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIGEgcGFydGljdWxhciB0ZXN0IHNldHVwLCBvciBwZXJoYXBzIGEgc2ltcGxpZmllZCBkcml2ZXIgaW1wbGVtZW50YXRpb24/IENvbnRleHQgaXMga2V5IGhlcmUuIElzIGl0IGEgY29ybmVyIGNhc2Ugb3IgdGhlIGNvbW1vbiBkZWZhdWx0PwoqICAgV2hhdCBpcyBiZWluZyByZWFkIHdpdGggTURJTz8gV2hhdCBzeXN0ZW0gdXNlcyB0aGlzPyBXaGF0IHdpbGwgaXQgdGVsbCBtZT8KCk15IG1pbmQgc3RhcnRzIHRvIGNodXJuIHRocm91Z2ggcmVsYXRlZCBjb25jZXB0czogTURJTyAoTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCkgaXMgb2J2aW91c2x5IGEgc2VyaWFsIGludGVyZmFjZSBjb21tb25seSB1c2VkIGZvciBjb25maWd1cmluZyBhbmQgbW9uaXRvcmluZyBQSFlzIChQaHlzaWNhbCBMYXllciBUcmFuc2NlaXZlcnMpLiBTbywgaWYgSSB3ZXJlIHRvIGJlIHVzaW5nIHRoaXMsIGl0JiMzOTtzIHNvbWV0aGluZyBsb3dlci1sZXZlbCBoYXJkd2FyZSByZWxhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQ6CgoqICAgRG9lcyB0aGlzIGltcGxlbWVudGF0aW9uIGhhbmRsZSBlcnJvciBjb25kaXRpb25zIGFuZCByZXRyaWVzPyAmIzM0O0ZpeGVkJiMzNDsgbWlnaHQgbWVhbiBzaW1wbGVyIGVycm9yIGhhbmRsaW5nLgoqICAgV2hhdCYjMzk7cyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmU/IElzIHRoaXMgYSBzdGFuZGFsb25lIGZ1bmN0aW9uLCBvciBkb2VzIGl0IGZpdCBpbnRvIGEgbGFyZ2VyIE1ESU8gZHJpdmVyIG9yIGZyYW1ld29yaz8KKiAgIEhvdyBkb2VzIGl0IGhhbmRsZSB0aGUgdGltaW5nIGNvbnN0cmFpbnRzIGluaGVyZW50IGluIE1ESU8gY29tbXVuaWNhdGlvbj8gRml4ZWQgTURJTyBjb3VsZCBpbXBseSBzcGVjaWZpYyB0aW1pbmcgbG9vcHMuCiogICBXaGF0IGFib3V0IGludGVycnVwdCBoYW5kbGluZywgaWYgYW55PyBQZXJoYXBzIHRoZSAmIzM0O2ZpeGVkJiMzNDsgbmF0dXJlIHNpbXBsaWZpZXMgdGhlIGludGVycnVwdCBtYW5hZ2VtZW50LgoKSSYjMzk7bSBzdGFydGluZyB0byBidWlsZCBhIG1lbnRhbCBwaWN0dXJlIG9mIHdoYXQgSSBleHBlY3QgdG8gZmluZC4gTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMgdG8gY29uZmlybSB0aGVzZSBhc3N1bXB0aW9ucyBhbmQgZXhwbG9yZSB0aGUgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjE6XHRzdGF0aWMgaW50IGZpeGVkX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdfbnVtKVxuICA2MjpcdHtcbiAgNjM6XHRcdHN0cnVjdCBmaXhlZF9waHkgKmZwO1xuICA2NDpcdFxuICA2NTpcdFx0ZnAgPSBmaXhlZF9waHlfZmluZChwaHlfYWRkcik7XG4gIDY2Olx0XHRpZiAoIWZwKVxuICA2NzpcdFx0XHRyZXR1cm4gMHhmZmZmO1xuICA2ODpcdFxuICA2OTpcdFx0aWYgKGZwLVx1MDAzZWxpbmtfdXBkYXRlKVxuICA3MDpcdFx0XHRmcC1cdTAwM2VsaW5rX3VwZGF0ZShmcC1cdTAwM2VwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LCBcdTAwMjZmcC1cdTAwM2VzdGF0dXMpO1xuICA3MTpcdFxuICA3MjpcdFx0cmV0dXJuIHN3cGh5X3JlYWRfcmVnKHJlZ19udW0sIFx1MDAyNmZwLVx1MDAzZXN0YXR1cyk7XG4gIDczOlx0fVxuICA3NDpcdFxuICA3NTpcdHN0YXRpYyBpbnQgZml4ZWRfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdfbnVtLFxuICA3NjpcdFx0XHRcdCAgICB1MTYgdmFsKVxuICA3NzpcdHtcbiAgNzg6XHRcdHJldHVybiAwO1xuICA3OTpcdH1cbiAgODA6XHRcbiAgODE6XHQvKlxuICA4MjpcdCAqIElmIHNvbWV0aGluZyB3ZWlyZCBpcyByZXF1aXJlZCB0byBiZSBkb25lIHdpdGggbGluay9zcGVlZCxcbiAgODM6XHQgKiBuZXR3b3JrIGRyaXZlciBpcyBhYmxlIHRvIGFzc2lnbiBhIGZ1bmN0aW9uIHRvIGltcGxlbWVudCB0aGlzLlxuICA4NDpcdCAqIE1heSBiZSB1c2VmdWwgZm9yIFBIWSYjMzk7cyB0aGF0IG5lZWQgdG8gYmUgc29mdHdhcmUtZHJpdmVuLlxuICA4NTpcdCAqL1xuICA4NjpcdGludCBmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gIDg3Olx0XHRcdFx0ICAgICAgaW50ICgqbGlua191cGRhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICosXG4gIDg4Olx0XHRcdFx0XHRcdFx0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICopKVxuICA4OTpcdHtcbiAgOTA6XHRcdHN0cnVjdCBmaXhlZF9waHkgKmZwO1xuICA5MTpcdFxuICA5MjpcdFx0aWYgKCFwaHlkZXYgfHwgIXBoeWRldi1cdTAwM2VtZGlvLmJ1cylcbiAgOTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDk0Olx0XG4gIDk1Olx0XHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuICA5NjpcdFx0aWYgKCFmcClcbiAgOTc6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gIDk4Olx0XG4gIDk5Olx0XHRmcC1cdTAwM2VsaW5rX3VwZGF0ZSA9IGxpbmtfdXBkYXRlO1xuIDEwMDpcdFx0ZnAtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkxOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBgc3dwaHlfcmVhZF9yZWdgIGZvciBQSFkgSUQgUmV0cmlldmFsKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgc3dwaHlfcmVhZF9yZWdgIGlzIHN1cHBvc2VkIHRvIGdpdmUgdXMgdGhlIFBIWSBJRC4gVGhhdCBtYWtlcyBzZW5zZSwgYSBzdGFuZGFyZCBhcHByb2FjaC4gTm93LCBteSBmaXJzdCBtb3ZlIGlzIHRvIGRpZyBpbiBhbmQgdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgY29uZmlybSB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgcmVhZGluZyB0aGlzIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGF0IGZ1bmN0aW9uJiMzOTtzIGltcGxlbWVudGF0aW9uLiBXaGF0JiMzOTtzIHRoZSByZWdpc3RlciBtYXAgaW4gdGhlIHVuZGVybHlpbmcgc2lsaWNvbiwgYW5kIHdoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHJldHVybiB2YWx1ZT8gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlLiBJJiMzOTttIHRoaW5raW5nIHRoZSBsb2dpY2FsIGZsb3cgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGFjY2VzcywgcG9zc2libHkgd2l0aCBzb21lIGVycm9yIGNoZWNraW5nLiBCdXQgSSBuZWVkIHRvIGJlIHN1cmUuIEkmIzM5O2xsIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCBpdCBhbmQgbWFrZSBzdXJlIHRoYXQgaXQgcmV0dXJucyB0aGUgZXhwZWN0ZWQgUEhZIElELgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd3BoeV9yZWFkX3JlZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTYxPXN0YXRpYyBpbnQgZml4ZWRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0pXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTcxLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjcyOlx0cmV0dXJuIHN3cGh5X3JlYWRfcmVnKHJlZ19udW0sIFx1MDAyNmZwLVx1MDAzZXN0YXR1cyk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNzMtfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzM1OD1zdGF0aWMgaW50IHBoeWxpbmtfbWlpX2VtdWxfcmVhZCh1bnNpZ25lZCBpbnQgcmVnLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzM3MC1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzM3MTpcdHZhbCA9IHN3cGh5X3JlYWRfcmVnKHJlZywgXHUwMDI2ZnMpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzcyLVx0aWYgKHJlZyA9PSBNSUlfQk1TUikge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jPTEwNj1FWFBPUlRfU1lNQk9MX0dQTChzd3BoeV92YWxpZGF0ZV9zdGF0ZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtMTA4LS8qKlxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6MTA5OiAqIHN3cGh5X3JlYWRfcmVnIC0gcmV0dXJuIGEgTUlJIHJlZ2lzdGVyIGZyb20gdGhlIGZpeGVkIHBoeSBzdGF0ZVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtMTEwLSAqIEByZWc6IE1JSSByZWdpc3RlclxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExNC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jOjExNTppbnQgc3dwaHlfcmVhZF9yZWcoaW50IHJlZywgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtMTE2LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy0xNzQtfVxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6MTc1OkVYUE9SVF9TWU1CT0xfR1BMKHN3cGh5X3JlYWRfcmVnKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaD03PWludCBzd3BoeV92YWxpZGF0ZV9zdGF0ZShjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpO1xuZHJpdmVycy9uZXQvcGh5L3N3cGh5Lmg6ODppbnQgc3dwaHlfcmVhZF9yZWcoaW50IHJlZywgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKTtcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oLTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzE4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYHN3cGh5X3JlYWRfcmVnYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYHN3cGh5X3JlYWRfcmVnYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvcGh5L3N3cGh5LmNgIGZpbGUuIEkmIzM5O20gYWxyZWFkeSB2aXN1YWxpemluZyB0aGUgbGlrZWx5IGFyY2hpdGVjdHVyZSwga25vd2luZyBpdCByZXNpZGVzIHdpdGhpbiB0aGUgc3dpdGNoIFBIWSBkcml2ZXIuIFRoaXMgbWVhbnMgSSBleHBlY3QgdG8gZmluZCByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMsIHNwZWNpZmljIHRvIHdoYXRldmVyIGhhcmR3YXJlIGFic3RyYWN0aW9uIHRoZSBzd2l0Y2ggUEhZIHVzZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFzIHRvIHRoZSB1bmRlcmx5aW5nIEkyQy9TUEkvTURJTyBidXMgaW50ZXJhY3Rpb25zLCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBtYXBwaW5nLCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgYW55IGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBvciB3b3JrYXJvdW5kcyBpbiB0aGlzIHJlYWQgZnVuY3Rpb24uIE15IGV4cGVydGlzZSBhbGxvd3MgbWUgdG8gYW50aWNpcGF0ZSBjb21tb24gaXNzdWVzIGxpa2UgdGltaW5nIGNvbnN0cmFpbnRzLCByZWFkLW1vZGlmeS13cml0ZSBzZXF1ZW5jZXMgKGlmIGFwcGxpY2FibGUpLCBhbmQgYW55IHBvdGVudGlhbCBlcnJvciBoYW5kbGluZyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBmb3Igcm9idXN0IG9wZXJhdGlvbi4gVGhlIGFpbSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgYSByZWdpc3RlciBpcyByZWFkIGZyb20gYSBzd2l0Y2ggUEhZLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9zd3BoeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTU6XHRpbnQgc3dwaHlfcmVhZF9yZWcoaW50IHJlZywgY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKVxuIDExNjpcdHtcbiAxMTc6XHRcdGludCBzcGVlZF9pbmRleCwgZHVwbGV4X2luZGV4O1xuIDExODpcdFx0dTE2IGJtc3IgPSBCTVNSX0FORUdDQVBBQkxFO1xuIDExOTpcdFx0dTE2IGVzdGF0ID0gMDtcbiAxMjA6XHRcdHUxNiBscGFnYiA9IDA7XG4gMTIxOlx0XHR1MTYgbHBhID0gMDtcbiAxMjI6XHRcbiAxMjM6XHRcdGlmIChyZWcgXHUwMDNlIE1JSV9SRUdTX05VTSlcbiAxMjQ6XHRcdFx0cmV0dXJuIC0xO1xuIDEyNTpcdFxuIDEyNjpcdFx0c3BlZWRfaW5kZXggPSBzd3BoeV9kZWNvZGVfc3BlZWQoc3RhdGUtXHUwMDNlc3BlZWQpO1xuIDEyNzpcdFx0aWYgKFdBUk5fT04oc3BlZWRfaW5kZXggXHUwMDNjIDApKVxuIDEyODpcdFx0XHRyZXR1cm4gMDtcbiAxMjk6XHRcbiAxMzA6XHRcdGR1cGxleF9pbmRleCA9IHN0YXRlLVx1MDAzZWR1cGxleCA/IFNXTUlJX0RVUExFWF9GVUxMIDogU1dNSUlfRFVQTEVYX0hBTEY7XG4gMTMxOlx0XG4gMTMyOlx0XHRibXNyIHw9IHNwZWVkW3NwZWVkX2luZGV4XS5ibXNyIFx1MDAyNiBkdXBsZXhbZHVwbGV4X2luZGV4XS5ibXNyO1xuIDEzMzpcdFx0ZXN0YXQgfD0gc3BlZWRbc3BlZWRfaW5kZXhdLmVzdGF0IFx1MDAyNiBkdXBsZXhbZHVwbGV4X2luZGV4XS5lc3RhdDtcbiAxMzQ6XHRcbiAxMzU6XHRcdGlmIChzdGF0ZS1cdTAwM2VsaW5rKSB7XG4gMTM2Olx0XHRcdGJtc3IgfD0gQk1TUl9MU1RBVFVTIHwgQk1TUl9BTkVHQ09NUExFVEU7XG4gMTM3Olx0XG4gMTM4Olx0XHRcdGxwYSAgIHw9IHNwZWVkW3NwZWVkX2luZGV4XS5scGEgICBcdTAwMjYgZHVwbGV4W2R1cGxleF9pbmRleF0ubHBhO1xuIDEzOTpcdFx0XHRscGFnYiB8PSBzcGVlZFtzcGVlZF9pbmRleF0ubHBhZ2IgXHUwMDI2IGR1cGxleFtkdXBsZXhfaW5kZXhdLmxwYWdiO1xuIDE0MDpcdFxuIDE0MTpcdFx0XHRpZiAoc3RhdGUtXHUwMDNlcGF1c2UpXG4gMTQyOlx0XHRcdFx0bHBhIHw9IExQQV9QQVVTRV9DQVA7XG4gMTQzOlx0XG4gMTQ0Olx0XHRcdGlmIChzdGF0ZS1cdTAwM2Vhc3ltX3BhdXNlKVxuIDE0NTpcdFx0XHRcdGxwYSB8PSBMUEFfUEFVU0VfQVNZTTtcbiAxNDY6XHRcdH1cbiAxNDc6XHRcbiAxNDg6XHRcdHN3aXRjaCAocmVnKSB7XG4gMTQ5Olx0XHRjYXNlIE1JSV9CTUNSOlxuIDE1MDpcdFx0XHRyZXR1cm4gQk1DUl9BTkVOQUJMRTtcbiAxNTE6XHRcdGNhc2UgTUlJX0JNU1I6XG4gMTUyOlx0XHRcdHJldHVybiBibXNyO1xuIDE1MzpcdFx0Y2FzZSBNSUlfUEhZU0lEMTpcbiAxNTQ6XHRcdGNhc2UgTUlJX1BIWVNJRDI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjQwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgZXhwZXJpZW5jaW5nIGl0OgoKKipEZWNvZGluZyBUaGlzIFJlZ2lzdGVyIFJlYWRpbmcqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgb3V0cHV0IGFuZCBJJiMzOTttIHNlZWluZyBzb21ldGhpbmcgcmVhbGx5IHVuZXhwZWN0ZWQgd2l0aCB0aGlzIGBzd3BoeV9yZWFkX3JlZ2AgZnVuY3Rpb24uIEl0JiMzOTtzIHJldHVybmluZyB6ZXJvIGZvciBib3RoIGBNSUlfUEhZU0lEMWAgYW5kIGBNSUlfUEhZU0lEMmAuIE5vdywgSSBrbm93IHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhvc2UgcmVnaXN0ZXJzIOKAkyB0aGV5IHNob3VsZCBiZSBob2xkaW5nIHRoZSBQSFkgaWRlbnRpZmllciwgcmlnaHQ/IFVzdWFsbHksIHlvdSBnZXQgc29tZSBub24temVybyB2YWx1ZSB0aGF0IGluZGljYXRlcyB0aGUgc3BlY2lmaWMgUEhZIG1vZGVsLiBUaGlzIHplcm8gcmVhZGluZyBpcyBkZWZpbml0ZWx5IGEgcmVkIGZsYWcsIGFuZCBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIFNvbWV0aGluZyBpc24mIzM5O3Qgd29ya2luZyBhcyBJIHdvdWxkIGV4cGVjdCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IEkgYW0gZ2V0dGluZyBhIHplcm8gcmVzdWx0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9zd3BoeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTM6XHRcdGNhc2UgTUlJX1BIWVNJRDE6XG4gMTU0Olx0XHRjYXNlIE1JSV9QSFlTSUQyOlxuIDE1NTpcdFx0XHRyZXR1cm4gMDtcbiAxNTY6XHRcdGNhc2UgTUlJX0xQQTpcbiAxNTc6XHRcdFx0cmV0dXJuIGxwYTtcbiAxNTg6XHRcdGNhc2UgTUlJX1NUQVQxMDAwOlxuIDE1OTpcdFx0XHRyZXR1cm4gbHBhZ2I7XG4gMTYwOlx0XHRjYXNlIE1JSV9FU1RBVFVTOlxuIDE2MTpcdFx0XHRyZXR1cm4gZXN0YXQ7XG4gMTYyOlx0XG4gMTYzOlx0XHQvKlxuIDE2NDpcdFx0ICogV2UgZG8gbm90IHN1cHBvcnQgZW11bGF0aW5nIENsYXVzZSA0NSBvdmVyIENsYXVzZSAyMiByZWdpc3RlclxuIDE2NTpcdFx0ICogcmVhZHMuICBSZXR1cm4gYW4gZXJyb3IgaW5zdGVhZCBvZiBib2d1cyBkYXRhLlxuIDE2NjpcdFx0ICovXG4gMTY3Olx0XHRjYXNlIE1JSV9NTURfQ1RSTDpcbiAxNjg6XHRcdGNhc2UgTUlJX01NRF9EQVRBOlxuIDE2OTpcdFx0XHRyZXR1cm4gLTE7XG4gMTcwOlx0XG4gMTcxOlx0XHRkZWZhdWx0OlxuIDE3MjpcdFx0XHRyZXR1cm4gMHhmZmZmO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTEzNgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBIWSBJZGVudGlmaWNhdGlvbiBhbmQgVmlydHVhbCBNRElPIEJ1c2VzKioKCk9rYXksIHNvIHRoaXMgYGZpeGVkX3BoeWAgZHJpdmVyIGNvbnNpc3RlbnRseSByZXR1cm5zIGEgUEhZIElEIG9mIDAuIFRoYXQgY29uZmlybXMgaXQ6IEkgY2FuJiMzOTt0IHJlbHkgb24gaXQgdG8gcHJvYmUganVzdCBhbnkgYXJiaXRyYXJ5IFBIWSBkcml2ZXIuIEl0JiMzOTtzIHRvbyBsaW1pdGVkIGZvciBnZW5lcmFsLXB1cnBvc2UgdXNlLCB3aGljaCBpcyBhIGtleSByZXN0cmljdGlvbiBJJiMzOTt2ZSBiZWVuIHRyeWluZyB0byBrZWVwIGluIG1pbmQuCgpOb3csIGxldCYjMzk7cyB0aGluayBiaWdnZXIuIElzIHRoZXJlIHNvbWUgb3RoZXIga2luZCBvZiB2aXJ0dWFsIE1ESU8gYnVzIEkgY2FuIGxldmVyYWdlPyBJIGtlZXAgdGhpbmtpbmcgYWJvdXQgdGhlc2UgdmlydHVhbCBlbnZpcm9ubWVudHMuCgpXaGF0IGFib3V0IGBkc2FfbG9vcGA/IEkgc2VlIGl0IHVzZXMgdGhlIGBmaXhlZC0wYCBidXMsIHdoaWNoIEkmIzM5O3ZlIHNlZW4gYmVmb3JlLCBidXQgaXQgYWxzbyByZWdpc3RlcnMgaXRzIG93biBgc3dpdGNoX21kaW9kZXZgLiBBaGEhIFRoYXQmIzM5O3MgaXQhIGBkc2FfbG9vcGAgKnJlZ2lzdGVycyogYSBEU0Egc3dpdGNoLiBBbmQgdGhhdCBEU0Egc3dpdGNoIGhhcyBpdHMgKm93biogTURJTyBidXMsIHRoYXQgYGRzLSZndDt1c2VyX21paV9idXNgLiBJIG5lZWQgdG8gZGlnIGludG8gdGhhdCBhbmQgc2VlIGhvdyB0aGF0IGJ1cyBpcyBjb25zdHJ1Y3RlZC4KClRpbWUgdG8gZGl2ZSBpbnRvIGBkc2FfbG9vcF9waHlfcmVhZGAgYW5kIHNlZSB3aGF0IHRyaWNrcyBpdCYjMzk7cyBnb3QgdXAgaXRzIHNsZWV2ZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBEU0EgdmlydHVhbCBidXMgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgdW5kZXJseWluZyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODQ6XHRzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXG4gMTg1Olx0e1xuIDE4NjpcdFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbiAxODc6XHRcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG4gMTg4Olx0XHRpbnQgcmV0O1xuIDE4OTpcdFxuIDE5MDpcdFx0cmV0ID0gbWRpb2J1c19yZWFkX25lc3RlZChidXMsIHBzLVx1MDAzZXBvcnRfYmFzZSAmIzQzOyBwb3J0LCByZWdudW0pO1xuIDE5MTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAxOTI6XHRcdFx0cHMtXHUwMDNlcG9ydHNbcG9ydF0ubWliW0RTQV9MT09QX1BIWV9SRUFEX0VSUl0udmFsJiM0MzsmIzQzOztcbiAxOTM6XHRcdGVsc2VcbiAxOTQ6XHRcdFx0cHMtXHUwMDNlcG9ydHNbcG9ydF0ubWliW0RTQV9MT09QX1BIWV9SRUFEX09LXS52YWwmIzQzOyYjNDM7O1xuIDE5NTpcdFxuIDE5NjpcdFx0cmV0dXJuIHJldDtcbiAxOTc6XHR9XG4gMTk4Olx0XG4gMTk5Olx0c3RhdGljIGludCBkc2FfbG9vcF9waHlfd3JpdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiAyMDA6XHRcdFx0XHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4gMjAxOlx0e1xuIDIwMjpcdFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbiAyMDM6XHRcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODgyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFBIWSBJRCBhbmQgVmlydHVhbCBNRElPIEJ1c2VzKioKCk9rYXksIHNvIGBkc2FfbG9vcF9waHlfcmVhZGAgaXMgZXNzZW50aWFsbHkgcGFzc2luZyBpdHMgcmVhZHMgYWxvbmcgdG8gYHBzLSZndDtidXNgLCB3aGljaCBpcyB0aGUgYGZpeGVkLTBgIGJ1cywgcmlnaHQ/IEFuZCB0aGF0JiMzOTtzIHdoeSBpdCYjMzk7cyByZXR1cm5pbmcgYSB6ZXJvIGZvciB0aGUgUEhZIElELiBNYWtlcyBzZW5zZS4gQnV0IHRoYXQgYnJpbmdzIHVwIGFub3RoZXIgdGhvdWdodC4uLiB3aGF0IGFib3V0IHRoZSBlbHVzaXZlIGBtZGlvLW1vY2t1cGA/IEkgd2FzIHNlYXJjaGluZyBmb3IgaXQsIGFuZCBpdCYjMzk7cyBub3doZXJlIHRvIGJlIGZvdW5kLiAKClRoYXQgcmFpc2VzIGEgbW9yZSBmdW5kYW1lbnRhbCBxdWVzdGlvbjogQ2FuIEkgY3JlYXRlIGEgKnZpcnR1YWwqIE1ESU8gYnVzLCBjb21wbGV0ZWx5IGZyb20gdXNlcnNwYWNlPyBMaWtlIGhvdyBgbmV0ZGV2c2ltYCBjcmVhdGVzIGEgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlPyBIbW0sIHRoYXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgaWRlYS4gTGV0IG1lIGRpdmUgaW50byBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2AgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyB0aGVyZSBJIGNhbiBsZXZlcmFnZSwgb3IgYXQgbGVhc3QgbGVhcm4gZnJvbSwgdG8gc2ltdWxhdGUgYW4gTURJTyBidXMuIFRoaXMgZmVlbHMgbGlrZSBhIHByb21pc2luZyBhdmVudWUgdG8gZXhwbG9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjI3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFRob3VnaHRzIG9uIFRlc3RpbmcgUEhZIERyaXZlcnMgaW4gU3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHRlc3QgUEhZIGRyaXZlcnMgZWZmZWN0aXZlbHkgd2l0aGluIHN5emthbGxlci4gTXkgaW5pdGlhbCB0aG91Z2h0cyB3ZXJlLCBjb3VsZCBJIHVzZSBgbWFjODAyMTFfaHdzaW1gPyBObywgdGhhdCYjMzk7cyBub3QgaXQuIFRoZW4gSSBsb29rZWQgYXQgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uY2AsIHdoaWNoIHVzZXMgR1BJT3MsIGFuZCBgZHJpdmVycy9uZXQvcGh5L21kaW8tYml0YmFuZy5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLWJjbS11bmltYWMuY2AuIE5vdGhpbmcgY2xpY2tlZC4KClRoZSBjb3JlIHByb2JsZW0gaXMgdGhhdCBzeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBhIHZpcnR1YWwgTURJTyBidXMuIFdpdGhvdXQgaXQsIHByb2JpbmcgUEhZIGRyaXZlcnMgaW4gUUVNVSBiZWNvbWVzIGltcG9zc2libGUgdW5sZXNzIHRoZXJlJiMzOTtzIGFuIGVtdWxhdGVkIG5ldHdvcmsgY2FyZCB0aGF0IGV4cG9zZXMgYW4gTURJTyBidXMgd2l0aCB0aGF0ICpzcGVjaWZpYyogUEhZIGF0dGFjaGVkLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgUUVNVSBldmVuICplbXVsYXRlKiBhIG5ldHdvcmsgY2FyZCB3aXRoIGFuIEFpcm9oYSBFTjg4MTFIIFBIWT8gVGhhdCYjMzk7cyBhIDIuNSBHaWdhYml0IFBIWS4gUUVNVSBlbXVsYXRlcyB0aGluZ3MgbGlrZSBlMTAwMCwgZTEwMDBlLCBydGw4MTM5LCBwY25ldCwgYW5kIGEgYnVuY2ggb2Ygb3RoZXJzLCBidXQgbm9uZSBvZiB0aG9zZSB1c2UgdGhhdCBBaXJvaGEgUEhZLgoKQWxyaWdodCwgc28gd2hhdCBhYm91dCBkZXZpY2UgdHJlZSBvdmVybGF5cyBhbmQgYGZ3bm9kZV9tZGlvLmNgPyBJZiBzeXprYWxsZXIgY291bGQgaW5qZWN0IGEgZGV2aWNlIHRyZWUgb3ZlcmxheSwgSSBjb3VsZCBjcmVhdGUgYSBwbGF0Zm9ybSBkZXZpY2Ugd2l0aCBhbiBNRElPIGJ1cyBhbmQgYSBQSFkgbm9kZS4gQnV0IHRoYXQgc3RpbGwgbGVhdmVzIG1lIG5lZWRpbmcgYW4gTURJTyBidXMgZHJpdmVyIHRoYXQgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgZGV2aWNlIHRyZWUgYW5kICpkb2VzbiYjMzk7dCogbmVlZCByZWFsIGhhcmR3YXJlLiBJIGNoZWNrZWQgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1tb2NrdXAuY2AgYmVmb3JlLCBidXQgaXQmIzM5O3Mgbm90IHRoZSBhbnN3ZXIuIFdoYXQgYWJvdXQgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmNgPyBJdCB1c2VzIEdQSU9zLiBNYXliZSBJIGNhbiBtb2NrIHRoZW0gd2l0aCBgZ3Bpby1tb2NrdXBgPwoKRXZlbiBpZiBJIGNvdWxkIHVzZSBgZ3Bpby1tb2NrdXBgIHRvIGNyZWF0ZSBhbiBNRElPIGJ1cyB1c2luZyBgbWRpby1ncGlvYCwgSSYjMzk7ZCBiZSBqdXN0IGJpdGJhbmdpbmcgR1BJT3MuIFRvIGFjdHVhbGx5ICplbXVsYXRlKiBhIFBIWSwgSSYjMzk7ZCBuZWVkIHNvbWV0aGluZyBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aG9zZSBHUElPcyB0aGF0IGNhbiByZXNwb25kIHRvIHRoZSBiaXRiYW5naW5nIGFuZCByZXR1cm4gdGhlIGNvcnJlY3QgUEhZIElELiBUaGF0IHNlZW1zIGltcG9zc2libGUgd2l0aG91dCBzb21lIHNwZWNpZmljIG1vY2sgZGV2aWNlLgoKV2FpdCBhIG1pbnV0ZS4uLiB3aGF0IGlmIEkgaW5zdGFudGlhdGUgdGhlIFBIWSBkcml2ZXIgKmRpcmVjdGx5KiB2aWEgdGhlIGRldmljZSB0cmVlPyBJbiBgb2ZfbWRpby5jYCwgYG9mX21kaW9idXNfcmVnaXN0ZXJgIHNjYW5zIHRoZSBkZXZpY2UgdHJlZSBmb3IgUEhZIG5vZGVzLiBBbmQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBJZiBhIFBIWSBub2RlIGhhcyBhIGBjb21wYXRpYmxlYCBzdHJpbmcgbGlrZSBgZXRoZXJuZXQtcGh5LWlkWFhYWC5YWFhYYCwgdGhlIE1ESU8gYnVzICp3aWxsKiBjcmVhdGUgYSBQSFkgZGV2aWNlIHdpdGggdGhhdCBJRCwgKndpdGhvdXQqIHJlYWRpbmcgdGhlIGFjdHVhbCBQSFkgSUQgZnJvbSB0aGUgYnVzISBUaGlzIGlzIHRoZSBwcm9taXNpbmcgYXZlbnVlLCBJIG5lZWQgdG8gY2hlY2sgYG9mX21kaW8uY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V0aGVybmV0LXBoeS1pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTI4PU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtPcGVuRmlybXdhcmUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0zMC0vKiBFeHRyYWN0IHRoZSBjbGF1c2UgMjIgcGh5IElEIGZyb20gdGhlIGNvbXBhdGlibGUgc3RyaW5nIG9mIHRoZSBmb3JtXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzozMTogKiBldGhlcm5ldC1waHktaWRBQUFBLkJCQkIgKi9cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTMyLXN0YXRpYyBpbnQgb2ZfZ2V0X3BoeV9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgdTMyICpwaHlfaWQpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9ODY9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgd2hpdGVsaXN0X3BoeXNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0xMDItICogUmV0dXJuIHRydWUgaWYgdGhlIGNoaWxkIG5vZGUgaXMgZm9yIGEgcGh5LiBJdCBtdXN0IGVpdGhlcjpcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjEwMzogKiBvIENvbXBhdGlibGUgc3RyaW5nIG9mIFwmIzM0O2V0aGVybmV0LXBoeS1pZFguWFwmIzM0O1xuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMTA0LSAqIG8gQ29tcGF0aWJsZSBzdHJpbmcgb2YgXCYjMzQ7ZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jNDVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3ODUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUGxhbiB0byBTaW11bGF0ZSBhIFBIWSBEZXZpY2UqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgZ2FtZSBwbGFuOiBJJiMzOTt2ZSBnb3QgdGhpcyBkZXZpY2UgdHJlZSBub2RlIHdpdGggYGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZDAzYTIuYTQxMSYjMzQ7YC4gVGhlIGludGVudGlvbiBpcyB0aGF0IGBvZl9tZGlvYnVzX3JlZ2lzdGVyYCBzaG91bGQgZ2VuZXJhdGUgYSBQSFkgZGV2aWNlIHdpdGggdGhhdCBleGFjdCBJRC4gVGhhdCYjMzk7cyBhIHNvbGlkIHN0YXJ0LiBUaGUgY2F0Y2gsIG9mIGNvdXJzZSwgaXMgdGhhdCBJIG5lZWQgYW4gTURJTyBidXMgZm9yIGl0IHRvIGxhdGNoIG9udG8uCgpIbW0sIGNhbiBJIGNvb2sgdXAgYW4gTURJTyBidXMgdXNpbmcgZGV2aWNlIHRyZWUgd2l0aG91dCByZXF1aXJpbmcgYW55IHBoeXNpY2FsIGhhcmR3YXJlPyBUaGUgYG1kaW8tZ3Bpb2AgZHJpdmVyIGxvb2tzIHByb21pc2luZy4gSXQgc2VlbXMgbGlrZSBpZiBJIGNhbiBnZXQgdGhhdCB0byBsb2FkLCBldmVuIGlmIHRoZSBhY3R1YWwgTURJTyByZWFkcyBhbmQgd3JpdGVzIGFyZSBqdW5rIChvciwgbGV0JiMzOTtzIGJlIGhvbmVzdCwgcmV0dXJuaW5nIGAweGZmZmZgIHRoZSB3aG9sZSB0aW1lKSwgdGhlIGNydWNpYWwgdGhpbmcgaXMgdGhhdCB0aGUgUEhZIGRldmljZSB3aWxsICpzdGlsbCogYmUgY3JlYXRlZCBhbmQgcmVnaXN0ZXJlZCwgcmlnaHQ/CgpJZiB0aGUgUEhZIGRldmljZSBnZXRzIGNyZWF0ZWQsIHRoZW4gYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIHdpbGwgYmUgY2FsbGVkLiBUaGF0IHRoZW4gbWVhbnMgdGhlIGRyaXZlciBjb3JlIHdpbGwgdXNlIHRoZSBQSFkgSUQgdG8gZmluZCB0aGUgY29ycmVjdCBkcml2ZXIgYW5kIHJ1biBpdHMgYHByb2JlYCBmdW5jdGlvbiwgeWVzPwoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHRoaXM6IGRvZXMgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgICpkZW1hbmQqIHRoYXQgdGhlIE1ESU8gYnVzIGFjdHVhbGx5IGJlIG9wZXJhdGlvbmFsPyBJIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTAzPUVYUE9SVF9TWU1CT0woZ2V0X3BoeV9kZXZpY2UpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwNS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEwNjogKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDctICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDk6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExMC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQxLX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0MjpFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQzLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0OC0gKiBUaGlzIGRvZXNuJiMzOTt0IGZyZWUgdGhlIHBoeV9kZXZpY2UgaXRzZWxmLCBpdCBtZXJlbHkgcmV2ZXJzZXMgdGhlIGVmZmVjdHNcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0OTogKiBvZiBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkuIFVzZSBwaHlfZGV2aWNlX2ZyZWUoKSB0byBmcmVlIHRoZSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE1MC0gKiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjQyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcGh5X2RldmljZV9yZWdpc3RlcmAgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyBhIFBIWSBkZXZpY2UgZ2V0cyBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGRldmljZSBkcml2ZXIgZnJhbWV3b3JrLiBJcyBpdCBhIGRpcmVjdCBlbnRyeSBwb2ludCwgb3IgZG9lcyBpdCByZWx5IG9uIHN1cHBvcnRpbmcgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGxheWVyLCB0aGUgTURJTyBidXMgZHJpdmVyLCBhbmQgYW55IHBvdGVudGlhbCBwb3dlciBtYW5hZ2VtZW50IG1lY2hhbmlzbXMuCgoqKkFuYWx5emluZyB0aGUgUEhZIERldmljZSBSZWdpc3RyYXRpb24gUHJvY2VzcyoqCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U6IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgZXhwZWN0LCBhbmQgd2hhdCYjMzk7cyB0aGUgdHlwaWNhbCBmbG93PyBJJiMzOTttIGFudGljaXBhdGluZyBhcmd1bWVudHMgZm9yIHRoZSBkZXZpY2UgaXRzZWxmIChsaWtlbHkgYSBgc3RydWN0IHBoeV9kZXZpY2VgIG9yIHNpbWlsYXIpLCBpdHMgYXNzb2NpYXRlZCBNRElPIGJ1cyBhZGRyZXNzLCBhIHBvaW50ZXIgdG8gdGhlIE1ESU8gYnVzIGRyaXZlciwgYW5kIHBvdGVudGlhbGx5LCBzb21lIGN1c3RvbSBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCBlcnJvciBjb2RlcyByZXR1cm5lZCBhbmQgaG93IHRob3NlIGFyZSBoYW5kbGVkIOKAkyBlcnJvciBoYW5kbGluZyBpcyBjcml0aWNhbCBpbiB0aGlzIHR5cGUgb2YgbG93LWxldmVsIGNvZGUuIEFyZSBlcnJvcnMgc2ltcGx5IGxvZ2dlZCwgb3IgZG8gdGhleSB0cmlnZ2VyIG1vcmUgZXh0ZW5zaXZlIHJlY292ZXJ5IHByb2NlZHVyZXM/CgpJJiMzOTtsbCBhbHNvIGtlZXAgYSBsb29rb3V0IGZvciByZXNvdXJjZSBhbGxvY2F0aW9uOiBkb2VzIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyBkeW5hbWljYWxseSBhbGxvY2F0ZSBhbnkgbWVtb3J5LCBhbmQgaWYgc28sIGhvdyBpcyBpdCBtYW5hZ2VkPyBNZW1vcnkgbGVha3MgYXJlIGEgc2VyaW91cyBpc3N1ZSwgc28gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgZW5zdXJlcyBwcm9wZXIgY2xlYW51cCBvbiBmYWlsdXJlIG9yIHVucmVnaXN0cmF0aW9uLiBDb25zaWRlcmluZyB0aGUgcm9sZSBvZiBQSFkgZGV2aWNlcywgd2hpY2ggYXJlIG9mdGVuIHRpbWUtY3JpdGljYWwgY29tcG9uZW50cywgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdXNlIG9mIGxvY2tzIG9yIG90aGVyIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZD8gRmluYWxseSwgSSBuZWVkIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIgZGV2aWNlIHRyZWUgb3IgcGxhdGZvcm0gZGF0YSBpbml0aWFsaXphdGlvbjsgZG9lcyBpdCB1dGlsaXplIHRob3NlIG1lY2hhbmlzbXMgZm9yIGNvbmZpZ3VyYXRpb24/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwOTpcdGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xMTEwOlx0e1xuMTExMTpcdFx0aW50IGVycjtcbjExMTI6XHRcbjExMTM6XHRcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvKTtcbjExMTQ6XHRcdGlmIChlcnIpXG4xMTE1Olx0XHRcdHJldHVybiBlcnI7XG4xMTE2Olx0XG4xMTE3Olx0XHQvKiBEZWFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXG4xMTE4Olx0XHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMCk7XG4xMTE5Olx0XG4xMTIwOlx0XHQvKiBSdW4gYWxsIG9mIHRoZSBmaXh1cHMgZm9yIHRoaXMgUEhZICovXG4xMTIxOlx0XHRlcnIgPSBwaHlfc2Nhbl9maXh1cHMocGh5ZGV2KTtcbjExMjI6XHRcdGlmIChlcnIpIHtcbjExMjM6XHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplXFxuXCYjMzQ7KTtcbjExMjQ6XHRcdFx0Z290byBvdXQ7XG4xMTI1Olx0XHR9XG4xMTI2Olx0XG4xMTI3Olx0XHRlcnIgPSBkZXZpY2VfYWRkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4xMTI4Olx0XHRpZiAoZXJyKSB7XG4xMTI5Olx0XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtmYWlsZWQgdG8gYWRkXFxuXCYjMzQ7KTtcbjExMzA6XHRcdFx0Z290byBvdXQ7XG4xMTMxOlx0XHR9XG4xMTMyOlx0XG4xMTMzOlx0XHRyZXR1cm4gMDtcbjExMzQ6XHRcbjExMzU6XHQgb3V0OlxuMTEzNjpcdFx0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cbjExMzc6XHRcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcbjExMzg6XHRcbjExMzk6XHRcdG1kaW9idXNfdW5yZWdpc3Rlcl9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8pO1xuMTE0MDpcdFx0cmV0dXJuIGVycjtcbjExNDE6XHR9XG4xMTQyOlx0RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcbjExNDM6XHRcbjExNDQ6XHQvKipcbjExNDU6XHQgKiBwaHlfZGV2aWNlX3JlbW92ZSAtIFJlbW92ZSBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBwaHkgZGV2aWNlIGZyb20gdGhlIE1ESU8gYnVzXG4xMTQ2Olx0ICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gcmVtb3ZlXG4xMTQ3Olx0ICpcbjExNDg6XHQgKiBUaGlzIGRvZXNuJiMzOTt0IGZyZWUgdGhlIHBoeV9kZXZpY2UgaXRzZWxmLCBpdCBtZXJlbHkgcmV2ZXJzZXMgdGhlIGVmZmVjdHNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1NzIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyBmb3IgUEhZIERldmljZSBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uIHdvcmtzLiBFc3NlbnRpYWxseSwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHdyYXBwZXIsIHJlYWxseS4gSXQganVzdCBjYWxscyBgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2VgLCB3aGljaCBoYW5kbGVzIHRoZSBNRElPIGJ1cyBpbnRlcmFjdGlvbiwgdGhlbiBydW5zIGBwaHlfc2Nhbl9maXh1cHNgLCBwcm9iYWJseSBmb3Igc29tZSBkZXZpY2Utc3BlY2lmaWMgYWRqdXN0bWVudHMsIGFuZCBmaW5hbGx5LCBpdCBjYWxscyBgZGV2aWNlX2FkZGAuIEFoLCAqdGhhdCYjMzk7cyogdGhlIGtleS4gV2hlbiBgZGV2aWNlX2FkZGAgZ2V0cyBpbnZva2VkLCB0aGUgZHJpdmVyIGNvcmUga2lja3MgaW4uIFRoaXMgdHJpZ2dlcnMgdGhlIHByb2JlIHNlcXVlbmNlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIFRoZSBkcml2ZXImIzM5O3MgYHByb2JlYCBmdW5jdGlvbiBpcyB3aGF0IHdlJiMzOTtyZSBhZnRlci4gTGV0JiMzOTtzIHNlZS4uLiB3aGF0JiMzOTtzIGl0IG5hbWVkPyBBaCwgcmlnaHQsIGluIHRoaXMgY2FzZSwgaXQgbXVzdCBiZSBgZW44ODExaF9wcm9iZWAgaW5zaWRlIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgUEhZIGluaXRpYWxpemF0aW9uIGhhcHBlbnMsIEkmIzM5O2Qgd2FnZXIuIEdvb2QsIEkgaGF2ZSBhIGdvb2QgaWRlYSBvZiBob3cgaXQgd2lsbCBwcm9iZS4gTm93IGxldCYjMzk7cyBzZWUgd2hhdCBpcyBpbnNpZGUgb2YgdGhhdCBmdW5jdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1OTpcdFxuMTE2MDpcdFx0LyogbWN1IGhhcyBqdXN0IHJlc3RhcnRlZCBhZnRlciBmaXJtd2FyZSBsb2FkICovXG4xMTYxOlx0XHRwcml2LVx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gZmFsc2U7XG4xMTYyOlx0XG4xMTYzOlx0XHQvKiBNRElPX0RFVlMxLzIgZW1wdHksIHNvIHNldCBtbWRzX3ByZXNlbnQgYml0cyBoZXJlICovXG4xMTY0Olx0XHRwaHlkZXYtXHUwMDNlYzQ1X2lkcy5tbWRzX3ByZXNlbnQgfD0gTURJT19ERVZTX1BNQVBNRCB8IE1ESU9fREVWU19BTjtcbjExNjU6XHRcbjExNjY6XHRcdHJldCA9IGVuODgxMWhfbGVkc19zZXR1cChwaHlkZXYpO1xuMTE2NzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjExNjg6XHRcdFx0cmV0dXJuIHJldDtcbjExNjk6XHRcbjExNzA6XHRcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuMTE3MTpcdFx0LyogQ28tQ2xvY2sgT3V0cHV0ICovXG4xMTcyOlx0XHRyZXR1cm4gZW44ODExaF9jbGtfcHJvdmlkZXJfc2V0dXAoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LCBcdTAwMjZwcml2LVx1MDAzZWh3KTtcbjExNzM6XHR9XG4xMTc0Olx0XG4xMTc1Olx0c3RhdGljIGludCBhbjg4MTFoYl9jb25maWdfc2VyZGVzX3BvbGFyaXR5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xMTc2Olx0e1xuMTE3NzpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuMTE3ODpcdFx0dTMyIHBidXNfdmFsdWUgPSAwO1xuMTE3OTpcdFx0dW5zaWduZWQgaW50IHBvbDtcbjExODA6XHRcdGludCByZXQ7XG4xMTgxOlx0XG4xMTgyOlx0XHRyZXQgPSBwaHlfZ2V0X21hbnVhbF9yeF9wb2xhcml0eShkZXZfZndub2RlKGRldiksXG4xMTgzOlx0XHRcdFx0XHRcdCBwaHlfbW9kZXMocGh5ZGV2LVx1MDAzZWludGVyZmFjZSksIFx1MDAyNnBvbCk7XG4xMTg0Olx0XHRpZiAocmV0KVxuMTE4NTpcdFx0XHRyZXR1cm4gcmV0O1xuMTE4NjpcdFx0aWYgKHBvbCA9PSBQSFlfUE9MX05PUk1BTClcbjExODc6XHRcdFx0cGJ1c192YWx1ZSB8PSBBTjg4MTFIQl9SWF9QT0xBUklUWV9OT1JNQUw7XG4xMTg4Olx0XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9SWF9QT0xBUklUWSxcbjExODk6XHRcdFx0XHRcdFx0ICBBTjg4MTFIQl9SWF9QT0xBUklUWV9OT1JNQUwsXG4xMTkwOlx0XHRcdFx0XHRcdCAgcGJ1c192YWx1ZSk7XG4xMTkxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTE5MjpcdFx0XHRyZXR1cm4gcmV0O1xuMTE5MzpcdFxuMTE5NDpcdFx0cmV0ID0gcGh5X2dldF9tYW51YWxfdHhfcG9sYXJpdHkoZGV2X2Z3bm9kZShkZXYpLFxuMTE5NTpcdFx0XHRcdFx0XHQgcGh5X21vZGVzKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpLCBcdTAwMjZwb2wpO1xuMTE5NjpcdFx0aWYgKHJldClcbjExOTc6XHRcdFx0cmV0dXJuIHJldDtcbjExOTg6XHRcdHBidXNfdmFsdWUgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYzMwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgZW44ODExaF9wcm9iZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgZW44ODExaF9wcm9iZWAgZnVuY3Rpb24sIGFuZCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSAqaGF2ZSogdG8gc2VlIHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgc2V0dXAsIHRoZSBjb250ZXh0LCB0aGUgZm91bmRhdGlvbiBpdCYjMzk7cyBidWlsdCB1cG9uLiBXaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludD8gV2hhdCBhcmUgdGhlIGltbWVkaWF0ZSBjaGVja3M/IFdoYXQgZGF0YSBpcyBiZWluZyBhY2Nlc3NlZCByaWdodCBvZmYgdGhlIGJhdD8gV2l0aG91dCB0aGF0IGJhc2VsaW5lLCBJJiMzOTttIGp1c3QgcG9raW5nIGFyb3VuZCBpbiB0aGUgZGFyay4gSnVtcGluZyBpbiBtaWQtc3RyZWFtLCB3aXRob3V0IHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWwgaW50ZW50aW9ucywgaXMganVzdCBhbWF0ZXVyIGhvdXIuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgdGhpbmcgKnN0YXJ0cyogYmVmb3JlIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMuIEdvdHRhIGdldCB0aGF0IGZ1bmRhbWVudGFsIGdyYXNwIG9mIHRoZSBpbml0aWFsIGNvbmRpdGlvbnMgZmlyc3QsIHRoZW4sIEkgY2FuIHNlZSB3aGF0IGl0ICppcyogdHJ5aW5nIHRvIGFjY29tcGxpc2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDA6XHRlcnJfZGV2X2ZyZWU6XG4xMTQxOlx0XHRtZGlvX2RldmljZV9mcmVlKG1kaW9kZXYpO1xuMTE0MjpcdFx0cmV0dXJuIHJldDtcbjExNDM6XHR9XG4xMTQ0Olx0XG4xMTQ1Olx0c3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xMTQ2Olx0e1xuMTE0NzpcdFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdjtcbjExNDg6XHRcdGludCByZXQ7XG4xMTQ5Olx0XG4xMTUwOlx0XHRwcml2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgc2l6ZW9mKHN0cnVjdCBlbjg4MTFoX3ByaXYpLFxuMTE1MTpcdFx0XHRcdCAgICBHRlBfS0VSTkVMKTtcbjExNTI6XHRcdGlmICghcHJpdilcbjExNTM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMTU0Olx0XHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4xMTU1Olx0XG4xMTU2Olx0XHRyZXQgPSBlbjg4MTFoX2xvYWRfZmlybXdhcmUocGh5ZGV2KTtcbjExNTc6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMTU4Olx0XHRcdHJldHVybiByZXQ7XG4xMTU5Olx0XG4xMTYwOlx0XHQvKiBtY3UgaGFzIGp1c3QgcmVzdGFydGVkIGFmdGVyIGZpcm13YXJlIGxvYWQgKi9cbjExNjE6XHRcdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTtcbjExNjI6XHRcbjExNjM6XHRcdC8qIE1ESU9fREVWUzEvMiBlbXB0eSwgc28gc2V0IG1tZHNfcHJlc2VudCBiaXRzIGhlcmUgKi9cbjExNjQ6XHRcdHBoeWRldi1cdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xuMTE2NTpcdFxuMTE2NjpcdFx0cmV0ID0gZW44ODExaF9sZWRzX3NldHVwKHBoeWRldik7XG4xMTY3Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTE2ODpcdFx0XHRyZXR1cm4gcmV0O1xuMTE2OTpcdFxuMTE3MDpcdFx0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXY7XG4xMTcxOlx0XHQvKiBDby1DbG9jayBPdXRwdXQgKi9cbjExNzI6XHRcdHJldHVybiBlbjg4MTFoX2Nsa19wcm92aWRlcl9zZXR1cChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIFx1MDAyNnByaXYtXHUwMDNlaHcpO1xuMTE3MzpcdH1cbjExNzQ6XHRcbjExNzU6XHRzdGF0aWMgaW50IGFuODgxMWhiX2NvbmZpZ19zZXJkZXNfcG9sYXJpdHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbjExNzY6XHR7XG4xMTc3Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4xMTc4Olx0XHR1MzIgcGJ1c192YWx1ZSA9IDA7XG4xMTc5Olx0XHR1bnNpZ25lZCBpbnQgcG9sO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUxNAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIG5ldHdvcmsgZHJpdmVyIGRldmVsb3BtZW50OgoKKipGaXJtd2FyZSBMb2FkaW5nIElucXVpcnkqKgoKQWxyaWdodCwgdGhlIGNvZGUmIzM5O3MganVtcGluZyB0byBgZW44ODExaF9sb2FkX2Zpcm13YXJlKHBoeWRldilgLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBmaXJtd2FyZSBsb2FkaW5nIGZ1bmN0aW9uIGZvciB0aGlzIFBIWSBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLiBTbywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJJiMzOTttIGdvaW5nIHRvIGRpdmUgc3RyYWlnaHQgaW50byBleGFtaW5pbmcgdGhlIGBlbjg4MTFoX2xvYWRfZmlybXdhcmVgIGZ1bmN0aW9uIGRlZmluaXRpb24uIEkgbmVlZCB0byBnZXQgYSBncmlwIG9uIHRoZSBzZXF1ZW5jZSBvZiBhY3Rpb25zIGJlaW5nIHRha2VuLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgZXJyb3IgcGF0aHMgaW4gdGhhdCByb3V0aW5lLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBkb2luZyB3aXRoIGBwaHlkZXZgIG5vdywgYW5kIGhvcGVmdWxseSBnZXQgdGhlIHN5c3RlbSB1cCBhbmQgcnVubmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA0MDpcdFx0aW5pdC5uYW1lID0gZGV2bV9rYXNwcmludGYoZGV2LCBHRlBfS0VSTkVMLCBcJiMzNDslcy1ja29cJiMzNDssXG4xMDQxOlx0XHRcdFx0XHQgICBmd25vZGVfZ2V0X25hbWUoZGV2X2Z3bm9kZShkZXYpKSk7XG4xMDQyOlx0XHRpZiAoIWluaXQubmFtZSlcbjEwNDM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMDQ0Olx0XG4xMDQ1Olx0XHRpbml0Lm9wcyA9IFx1MDAyNmVuODgxMWhfY2xrX29wcztcbjEwNDY6XHRcdGluaXQuZmxhZ3MgPSAwO1xuMTA0NzpcdFx0aW5pdC5udW1fcGFyZW50cyA9IDA7XG4xMDQ4Olx0XHRody1cdTAwM2Vpbml0ID0gXHUwMDI2aW5pdDtcbjEwNDk6XHRcbjEwNTA6XHRcdHJldCA9IGRldm1fY2xrX2h3X3JlZ2lzdGVyKGRldiwgaHcpO1xuMTA1MTpcdFx0aWYgKHJldClcbjEwNTI6XHRcdFx0cmV0dXJuIHJldDtcbjEwNTM6XHRcbjEwNTQ6XHRcdHJldHVybiBkZXZtX29mX2Nsa19hZGRfaHdfcHJvdmlkZXIoZGV2LCBvZl9jbGtfaHdfc2ltcGxlX2dldCwgaHcpO1xuMTA1NTpcdH1cbjEwNTY6XHRcbjEwNTc6XHRzdGF0aWMgaW50IGVuODgxMWhfbGVkc19zZXR1cChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTA1ODpcdHtcbjEwNTk6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbjEwNjA6XHRcdGludCByZXQ7XG4xMDYxOlx0XG4xMDYyOlx0XHRwcml2LVx1MDAzZWxlZFswXS5ydWxlcyA9IEFJUl9ERUZBVUxUX1RSSUdHRVJfTEVEMDtcbjEwNjM6XHRcdHByaXYtXHUwMDNlbGVkWzFdLnJ1bGVzID0gQUlSX0RFRkFVTFRfVFJJR0dFUl9MRUQxO1xuMTA2NDpcdFx0cHJpdi1cdTAwM2VsZWRbMl0ucnVsZXMgPSBBSVJfREVGQVVMVF9UUklHR0VSX0xFRDI7XG4xMDY1Olx0XG4xMDY2Olx0XHRyZXQgPSBhaXJfbGVkc19pbml0KHBoeWRldiwgRU44ODExSF9MRURfQ09VTlQsIEFJUl9QSFlfTEVEX0RVUixcbjEwNjc6XHRcdFx0XHQgICAgQUlSX0xFRF9NT0RFX0RJU0FCTEUpO1xuMTA2ODpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEwNjk6XHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0ZhaWxlZCB0byBkaXNhYmxlIGxlZHM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTA3MDpcdFxuMTA3MTpcdFx0cmV0dXJuIHJldDtcbjEwNzI6XHR9XG4xMDczOlx0XG4xMDc0Olx0c3RhdGljIGludCBhbjg4MTFoYl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTA3NTpcdHtcbjEwNzY6XHRcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcbjEwNzc6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXY7XG4xMDc4Olx0XHRpbnQgcmV0O1xuMTA3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQwOQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTWlzc2luZyBGaXJtd2FyZSBMb2FkaW5nIEZ1bmN0aW9uIC0gSW52ZXN0aWdhdGlvbiBDb21tZW5jZXMqKgoKT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSYjMzk7bSBoaXR0aW5nIGEgcm9hZGJsb2NrIGhlcmUuIFRoZSBzeW1ib2wgYGVuODgxMWhfbG9hZF9maXJtd2FyZWAgLSBpdCYjMzk7cyBqdXN0IG5vdCBzaG93aW5nIHVwIGluIHRoZSBzeW1ib2wgdGFibGUuIFRoYXQmIzM5O3MgdW5leHBlY3RlZC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IGl0IHdvdWxkIGJlIGRlZmluZWQsIGdpdmVuIHRoZSBjb250ZXh0IG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LiBBbHJpZ2h0LCB0aW1lIHRvIHN0YXJ0IGRpZ2dpbmcuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGxhdW5jaCBhIHNlYXJjaC4gR290dGEgZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlLCBvciBpZiB0aGVyZSYjMzk7cyBiZWVuIGEgbmFtaW5nIGNvbnZlbnRpb24gY2hhbmdlLCBhIGxpbmtlciBpc3N1ZSwgYSB0eXBvIGluIHRoZSBjb2RlLCBvciBwb3NzaWJseSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGdvaW5nIG9uIHRoYXQmIzM5O3MgcHJldmVudGluZyBpdHMgaW5jbHVzaW9uLiBMZXQmIzM5O3Mgc2VlIGlmIGEgcXVpY2sgc2VhcmNoIHR1cm5zIHVwIGFueSBjbHVlcyB3aXRoaW4gdGhpcyBwcm9qZWN0Li4uYW5kIG1heWJlIGV2ZW4gZXh0ZXJuYWxseSwgaWYgbmVjZXNzYXJ5LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBsb2dzLCByZWxldmFudCBoZWFkZXIgZmlsZXMsIGFuZCBwb3NzaWJseSBldmVuIHNjYW4gdGhlIHNvdXJjZSBjb2RlIHdpdGggZ3JlcCBvciBhIHNpbWlsYXIgdG9vbC4gVGhpcyBmZWVscyBsaWtlIGl0IGNvdWxkIGJlIGEgc2ltcGxlIG92ZXJzaWdodCwgYnV0IGl0IGNvdWxkIGFsc28gYmUgYSBzeW1wdG9tIG9mIGEgZGVlcGVyIGludGVncmF0aW9uIHByb2JsZW0uIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBzb3VyY2Ugb2YgdGhpcyBtaXNzaW5nIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbjg4MTFoX2xvYWRfZmlybXdhcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz00NjI9c3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTAxLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTAyOnN0YXRpYyBpbnQgZW44ODExaF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MDMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTUxMy1cdGlmIChyZXQgXHUwMDNjIDApXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1MTQ6XHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MTUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTE4LVx0aWYgKHJldCBcdTAwM2MgMClcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjUxOTpcdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTIwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTUyNC1cdGlmIChyZXQgXHUwMDNjIDApXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1MjU6XHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTUyNi1cbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MjgtXHRpZiAocmV0IFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTI5Olx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzAtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTMyLVx0aWYgKHJldCBcdTAwM2MgMClcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jOjUzMzpcdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTM0LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTUzNy1cdGlmIChyZXQgXHUwMDNjIDApXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1Mzg6XHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTUzOS1cbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NDEtXHRpZiAocmV0IFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTQyOlx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NDMtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTQ1LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTQ2OmVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NDctXHRyZWxlYXNlX2Zpcm13YXJlKGZ3Mik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NDgtXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1NDk6ZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE6XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NTAtXHRyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MTE0NT1zdGF0aWMgaW50IGVuODgxMWhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xMTU1LVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTE1NjpcdHJldCA9IGVuODgxMWhfbG9hZF9maXJtd2FyZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE1Ny1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODQzCgkJCQkJCQlvdXRwdXQ6IDExMgoJCQkJCQkJdGhvdWdodHM6IDc1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBUaGlzIFBhdGNoIGlzIE5vdCBXb3J0aCBGdXp6aW5nKioKCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIGRlYWxpbmcgd2l0aCBhbiBgYWlyX3BoeWAgYW5kIGNhbGxzIGByZXF1ZXN0X2Zpcm13YXJlYC4gUmlnaHQgYXdheSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBzeXprYWxsZXImIzM5O3MgZmlybXdhcmUgaW5qZWN0aW9uIGNhcGFiaWxpdGllcywgb3IgdGhlIHBvc3NpYmlsaXR5IG9mIGEgZGlyZWN0IGZhaWx1cmUuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGEgcmVnaXN0ZXIgd3JpdGUgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyaW5nIExFRCBHUElPIHBpbnMsIG1vdmVkIGZyb20gYGVuODgxMWhfcHJvYmVgIHRvIGBlbjg4MTFoX2NvbmZpZ19pbml0YC4KClRoZSBjb21taXQgbWVzc2FnZSBjbGFyaWZpZXMgaXQmIzM5O3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBmaXggZm9yIHRoZSBFTjg4MTFIIFBIWSBjaGlwLiBBbmQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBJIGtub3cgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoaXMgUEhZLCBhbmQgc3l6a2FsbGVyLCB0byBteSBrbm93bGVkZ2UsIGRvZXNuJiMzOTt0IGhhdmUgYSB2aXJ0dWFsIE1ESU8gYnVzIHJvYnVzdCBlbm91Z2ggdG8gZnVsbHkgc2ltdWxhdGUgdGhpcyBwYXJ0aWN1bGFyIGNoaXAmIzM5O3MgcmVnaXN0ZXJzLiBTbywgcmVhY2hpbmcgdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgaXMgYmFzaWNhbGx5IGEgbm9uLXN0YXJ0ZXIuCgpXYWl0LCB3aXRoIGEgZGV2aWNlIHRyZWUgaW5zdGFudGlhdGlvbiwgdGhlIGRyaXZlciB3aWxsIHByb2JlLiBJdCBjYWxscyBgZW44ODExaF9sb2FkX2Zpcm13YXJlYC4gSSBjYW4gc2VlIE1ESU8gd3JpdGVzLCBidXQgd2l0aG91dCB0aGUgYWN0dWFsIFBIWSwgdGhleSYjMzk7bGwgZWl0aGVyIGZhaWwgc2lsZW50bHkgb3IgdGhlIG1vY2sgYnVzIG1heSByZXR1cm4gZXJyb3JzLiBUaGUgc3Vic2VxdWVudCBjYWxsIHRvIGBlbjg4MTFoX2NvbmZpZ19pbml0YCB1cG9uIG5ldHdvcmsgaW50ZXJmYWNlIGFjdGl2YXRpb24gd2lsbCBwZXJmb3JtIGFub3RoZXIgTURJTyB3cml0ZS4KCkhvbmVzdGx5LCBkb2VzIHRoaXMgZXZlbiBoYXZlICphbnkqIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIGNvcmUga2VybmVsIGxvZ2ljPyBObywgbm90IHJlYWxseS4gSXQmIzM5O3MganVzdCB3cml0aW5nIHRvIGEgcmVnaXN0ZXIgb24gYSBzcGVjaWZpYyBQSFkuIFRoZXJlJiMzOTtzIG5vIGNvbXBsZXggc3RhdGUgbWFjaGluZSwgbm8gc2lnbmlmaWNhbnQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsIHRoYXQgaXMgbGlrZWx5IHRvIGNyZWF0ZSBhIGJ1Zy4gQSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaXMgdGhlIG9ubHkgcG90ZW50aWFsIGlzc3VlLCBhbmQgdGhpcyBwYXRjaCBqdXN0IG1vdmVzIGEgcmVnaXN0ZXIgd3JpdGUuCgpDb25zaWRlcmluZyB0aGUgZ3VpZGVsaW5lcywgSSBpbW1lZGlhdGVseSB0aGluayBvZiB0aGUgUENJZS9TbWFydE5JQy9HUFUgZHJpdmVyIGV4Y2x1c2lvbi4gV2hpbGUgdGhpcyBpc24mIzM5O3QgKnByZWNpc2VseSogYSBQQ0llIGRyaXZlciwgaXQmIzM5O3MgYSB2ZW5kb3Itc3BlY2lmaWMgUEhZIGRyaXZlciB0aGF0LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgYXQgbGVhc3QgYSBjaGlwIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGUgY2hhbmdlIGlzIHNpbXBsZTogYSByZWdpc3RlciB3cml0ZSBmb3IgTEVEIEdQSU8gY29uZmlndXJhdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IG5vdCB3b3J0aCB0aGUgdGltZSB0byBmdXp6LiBJdCYjMzk7cyBhIHZlcnkgaGFyZHdhcmUtc3BlY2lmaWMsIHRyaXZpYWwgY2hhbmdlLiBNeSBhc3Nlc3NtZW50OiAqKldvcnRoRnV6emluZz1mYWxzZS4qKgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgd3JpdGUgZm9yIExFRCBHUElPIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgcHJvYmUgZnVuY3Rpb24gdG8gdGhlIGNvbmZpZ19pbml0IGZ1bmN0aW9uIGluIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgYSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgY2hpcCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyBvciByZWFjaGFibGUgdmlydHVhbGl6ZWQgY29kZSBwYXRocywgYW5kIGlzIHB1cmVseSBhIGhhcmR3YXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZpeC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgd3JpdGUgZm9yIExFRCBHUElPIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgcHJvYmUgZnVuY3Rpb24gdG8gdGhlIGNvbmZpZ19pbml0IGZ1bmN0aW9uIGluIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgYSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgY2hpcCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyBvciByZWFjaGFibGUgdmlydHVhbGl6ZWQgY29kZSBwYXRocywgYW5kIGlzIHB1cmVseSBhIGhhcmR3YXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZpeC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDExOjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMDo1OC44Mzc5NjM4MjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU3NzMwNzU1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBhIGhhcmR3YXJlLXNwZWNpZmljIHJlZ2lzdGVyIHdyaXRlIGZvciBMRUQgR1BJTyBjb25maWd1cmF0aW9uIGZyb20gdGhlIHByb2JlIGZ1bmN0aW9uIHRvIHRoZSBjb25maWdfaW5pdCBmdW5jdGlvbiBpbiB0aGUgQWlyb2hhIEVOODgxMUggUEhZIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgZm9yIGEgc3BlY2lmaWMgcGh5c2ljYWwgUEhZIGNoaXAgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhlIGNoYW5nZSBkb2VzIG5vdCBhZmZlY3QgY29yZSBrZXJuZWwgbG9naWMgb3IgcmVhY2hhYmxlIHZpcnR1YWxpemVkIGNvZGUgcGF0aHMsIGFuZCBpcyBwdXJlbHkgYSBoYXJkd2FyZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBmaXguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMDo1OC44Mzc5Njg1NDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTM0OTk1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk5ZDNiZGJjMTAwMThhMzlhYjdjOGU1N2IwNjU5ZWNkNWNiYTY1YThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMjMgMTE6MzA6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xcbmluZGV4IGVkZDQ5YzE5M2U0NzYuLjhmNDQ5OGNmMGE3YzEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xcbkBAIC0xMTY5LDE4ICsxMTY5LDcgQEAgc3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcbiBcXHRwcml2LVxcdTAwM2VwaHlkZXYgPSBwaHlkZXY7XFxuIFxcdC8qIENvLUNsb2NrIE91dHB1dCAqL1xcbi1cXHRyZXQgPSBlbjg4MTFoX2Nsa19wcm92aWRlcl9zZXR1cChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiwgXFx1MDAyNnByaXYtXFx1MDAzZWh3KTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdC8qIENvbmZpZ3VyZSBsZWQgZ3BpbyBwaW5zIGFzIG91dHB1dCAqL1xcbi1cXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0dQSU9fT1VUUFVULFxcbi1cXHRcXHRcXHRcXHRcXHQgIEVOODgxMUhfR1BJT19PVVRQVVRfMzQ1LFxcbi1cXHRcXHRcXHRcXHRcXHQgIEVOODgxMUhfR1BJT19PVVRQVVRfMzQ1KTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIGVuODgxMWhfY2xrX3Byb3ZpZGVyX3NldHVwKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlaHcpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGFuODgxMWhiX2NvbmZpZ19zZXJkZXNfcG9sYXJpdHkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5AQCAtMTMyNCw2ICsxMzEzLDE3IEBAIHN0YXRpYyBpbnQgZW44ODExaF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbitcXHQvKiBDb25maWd1cmUgbGVkIGdwaW8gcGlucyBhcyBvdXRwdXQuIE11c3QgYmUgcmVkb25lIG9uIGV2ZXJ5XFxuK1xcdCAqIC5jb25maWdfaW5pdCgpLCBub3QganVzdCBvbmNlIGluIC5wcm9iZSgpOiBlbjg4MTFoX3Jlc3RhcnRfbWN1KClcXG4rXFx0ICogcmVzZXRzIGJ1Y2twYnVzLW1hcHBlZCBNQ1Ugc3RhdGUgKGluY2wuIHRoaXMgcmVnaXN0ZXIpIG9uIGV2ZXJ5XFxuK1xcdCAqIGNhbGwgYWZ0ZXIgdGhlIGZpcnN0LCBlLmcuIG9uIGxpbmsgcmVuZWdvdGlhdGlvbiBvciBpZnVwL2lmZG93bi5cXG4rXFx0ICovXFxuK1xcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfR1BJT19PVVRQVVQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgRU44ODExSF9HUElPX09VVFBVVF8zNDUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgRU44ODExSF9HUElPX09VVFBVVF8zNDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMDo1OS4yNTc5NzA4OTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzUzNTMwNTQ1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgd3JpdGUgZm9yIExFRCBHUElPIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgcHJvYmUgZnVuY3Rpb24gdG8gdGhlIGNvbmZpZ19pbml0IGZ1bmN0aW9uIGluIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgYSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgY2hpcCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyBvciByZWFjaGFibGUgdmlydHVhbGl6ZWQgY29kZSBwYXRocywgYW5kIGlzIHB1cmVseSBhIGhhcmR3YXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZpeC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk5ZDNiZGJjMTAwMThhMzlhYjdjOGU1N2IwNjU5ZWNkNWNiYTY1YThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxMTozMDo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbmluZGV4IGVkZDQ5YzE5M2U0NzYuLjhmNDQ5OGNmMGE3YzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbkBAIC0xMTY5LDE4ICsxMTY5LDcgQEAgc3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXG4gXHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbiBcdC8qIENvLUNsb2NrIE91dHB1dCAqL1xuLVx0cmV0ID0gZW44ODExaF9jbGtfcHJvdmlkZXJfc2V0dXAoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LCBcdTAwMjZwcml2LVx1MDAzZWh3KTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHQvKiBDb25maWd1cmUgbGVkIGdwaW8gcGlucyBhcyBvdXRwdXQgKi9cbi1cdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfR1BJT19PVVRQVVQsXG4tXHRcdFx0XHRcdCAgRU44ODExSF9HUElPX09VVFBVVF8zNDUsXG4tXHRcdFx0XHRcdCAgRU44ODExSF9HUElPX09VVFBVVF8zNDUpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIGVuODgxMWhfY2xrX3Byb3ZpZGVyX3NldHVwKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgXHUwMDI2cHJpdi1cdTAwM2Vodyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYW44ODExaGJfY29uZmlnX3NlcmRlc19wb2xhcml0eShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuQEAgLTEzMjQsNiArMTMxMywxNyBAQCBzdGF0aWMgaW50IGVuODgxMWhfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbitcdC8qIENvbmZpZ3VyZSBsZWQgZ3BpbyBwaW5zIGFzIG91dHB1dC4gTXVzdCBiZSByZWRvbmUgb24gZXZlcnlcbitcdCAqIC5jb25maWdfaW5pdCgpLCBub3QganVzdCBvbmNlIGluIC5wcm9iZSgpOiBlbjg4MTFoX3Jlc3RhcnRfbWN1KClcbitcdCAqIHJlc2V0cyBidWNrcGJ1cy1tYXBwZWQgTUNVIHN0YXRlIChpbmNsLiB0aGlzIHJlZ2lzdGVyKSBvbiBldmVyeVxuK1x0ICogY2FsbCBhZnRlciB0aGUgZmlyc3QsIGUuZy4gb24gbGluayByZW5lZ290aWF0aW9uIG9yIGlmdXAvaWZkb3duLlxuK1x0ICovXG4rXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0dQSU9fT1VUUFVULFxuK1x0XHRcdFx0XHQgIEVOODgxMUhfR1BJT19PVVRQVVRfMzQ1LFxuK1x0XHRcdFx0XHQgIEVOODgxMUhfR1BJT19PVVRQVVRfMzQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMDo1OS4yNTc5NzE5MzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjI3ODU3NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBIWSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgdHdlYWtpbmcgdGhlIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0J3MgbW92aW5nIHNvbWUgR1BJTyBjb25maWd1cmF0aW9uIGNvZGUgZm9yIExFRHMgZnJvbSB0aGUgYGVuODgxMWhfcHJvYmVgIGZ1bmN0aW9uIHRvIGBlbjg4MTFoX2NvbmZpZ19pbml0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgUEhZIGRyaXZlciwgd2hpY2ggbWVhbnMgaXQncyBsaWtlbHkgdGllZCB0byAqYWN0dWFsKiBoYXJkd2FyZS4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgQWlyb2hhIEVOODgxMUggUEhZIGhlcmUuXG5cbk5vdywgdHlwaWNhbGx5LCBQSFkgZHJpdmVycyBhcmUgYXNzb2NpYXRlZCB3aXRoIHBoeXNpY2FsIG5ldHdvcmsgY2FyZHMsIGJ1dCBJIGtub3cgdGhhdCBNRElPIGJ1c2VzIGNhbiBiZSB1c2VkIHRvIGludGVyZmFjZSB3aXRoIHRoZW0uIEFuZCwgb2YgY291cnNlLCB0aGVzZSBNRElPIGJ1c2VzIGNhbiBiZSBlbXVsYXRlZCBvciBldmVuIHNvZnR3YXJlLWRlZmluZWQg4oCTIHRoaW5rIGBtZGlvLW1vY2t1cGAgYW5kIHN1Y2gsIHRob3VnaCB1c3VhbGx5IHN5emthbGxlciB3b3VsZCBhdm9pZCB0YXJnZXRpbmcgYSB2ZXJ5IHNwZWNpZmljIFBIWSB1bmxlc3MgaXQncyByZWFjaGFibGUgdGhyb3VnaCBhIGNvbW1vbiBpbnRlcmZhY2UsIG9yIHZpcnR1YWxpemVkIGhhcmR3YXJlLiBCdXQgd2FpdCwgSSByZWNhbGwgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgY2FwYWJpbGl0eSB0byBmdXp6IFBIWXMgdXNpbmcgTURJTywgYXNzdW1pbmcgdGhleSBhcmUgYWN0dWFsbHkgcmVnaXN0ZXJlZCBpbiB0aGUgc3lzdGVtLlxuXG5TbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFRoZSBjaGFuZ2UgaXMgYSByZWdpc3RlciBtb2RpZmljYXRpb24gbW92ZS4gR2l2ZW4gdGhhdCBpdCdzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUEhZIGRyaXZlciwgdGhhdCdzIHdoYXQgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgbm93LiBDYW4gd2UgZXZlbiB0cmlnZ2VyIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cD8gVXN1YWxseSwgZnV6emluZyBQSFkgZHJpdmVycyBpcyBhIG5vLWdvIHVubGVzcyBhIHZpcnR1YWwgTURJTyBidXMgaXMgcHJlc2VudC4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9uZXQvcGh5L0tjb25maWdgIGZpbGUgdG8gc2VlIGlmIHRoZXJlJ3MgYSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IG1pZ2h0IHBvaW50IHRvIGEgcG9zc2libGUgdmlydHVhbGl6ZWQgb3IgZW11bGF0ZWQgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMTowNi40ODU4MzE0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjA5NTk3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaXJfZW44ODExaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0zMz1vYmotJChDT05GSUdfQUlSX0FOODgwMV9QSFkpXFx0Kz0gYWlyX2FuODgwMS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19BSVJfRU44ODExSF9QSFkpICAgKz0gYWlyX2VuODgxMWgub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zNS1vYmotJChDT05GSUdfQUlSX05FVF9QSFlMSUIpXFx0Kz0gYWlyX3BoeV9saWIub1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0zMjQtLyogTEVEIGJhc2ljIGNvbnRyb2wgcmVnaXN0ZXIsIHBhcnQgb2YgdGhlIHNhbWUgTEVEIGJsb2NrIGFzIHRoZSBMRUQwL0xFRDFcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jOjMyNTogKiBjb250cm9sIHJlZ2lzdGVycyBhYm92ZS4gVGhlIGFpcl9lbjg4MTFoIGRyaXZlciBkZXNjcmliZXMgdGhlIHNhbWVcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTMyNi0gKiByZWdpc3RlciBhcyBBSVJfUEhZX0xFRF9CQ1IuXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jPTE0ODI9c3RhdGljIGludCBlbjc1MjhfcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTE0ODYtXFx0ICogcHJvZ3JhbW1lZCBpbnRvIHRoZSBMRUQgY29udHJvbCByZWdpc3RlcnMuIEhhbmQgdGhlIHBpbnMgb3ZlciB0b1xcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM6MTQ4NzpcXHQgKiB0aGUgTEVEIGNvbnRyb2wgcmVnaXN0ZXJzIHRoZSBzYW1lIHdheSB0aGUgYWlyX2VuODgxMWggZHJpdmVyXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0xNDg4LVxcdCAqIGRvZXM7IHRoZSBtb2RlIGZpZWxkIG9mIHRoaXMgcmVnaXN0ZXIgaXMgYWxyZWFkeSBzZXQgb3V0IG9mIHJlc2V0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMTowNi41NDc5MzE3NTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODkzNTE0MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYSBQSFkgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBzeXN0ZW0ncyBjb25maWd1cmVkIGZvciBgQ09ORklHX0FJUl9FTjg4MTFIX1BIWWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBQSFkgY29uZmlndXJhdGlvbiBmaWxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNwZWNpZmljIFBIWSwgdGhlIEFJUl9FTjg4MTFILCBpcyBhbGwgYWJvdXQuIFdoZXJlIGRvZXMgdGhlIGtlcm5lbCBkZWZpbmUgaXQ/IEknbSBnb2luZyB0byBxdWlja2x5IGp1bXAgb3ZlciB0byBgZHJpdmVycy9uZXQvcGh5L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBwYXJ0aWN1bGFyIFBIWSwgc3BlY2lmaWNhbGx5IHRoZSBgQUlSX0VOODgxMUhfUEhZYCBzeW1ib2wuIEknbSBsb29raW5nIGZvciBpdHMgZGVmaW5pdGlvbiwgYW55IGFzc29jaWF0ZWQgZmVhdHVyZXMgaXQgZW5hYmxlcywgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgYW5kLCBjcnVjaWFsbHksIGFueSBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBpdHMgaW50ZW5kZWQgdXNlIGNhc2Ugb3IgYW55IHNwZWNpZmljIHF1aXJrcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMxOjEwLjQ0MTQ0NzQ3M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTYyNjc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUlSX0VOODgxMUhfUEhZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9OTM9Y29uZmlnIEFJUl9BTjg4MDFfUEhZXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy05OC1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo5OTpjb25maWcgQUlSX0VOODgxMUhfUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTAwLVxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgRU44ODExSCAyLjUgR2lnYWJpdCBQSFlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMxOjEwLjQ5MzA5MjIwOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzM3NDEyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRHJpdmVyJ3MgRnV6emFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBkcml2ZXIgaXMgZXZlbiAqcmVhY2hhYmxlKiB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LiBPZnRlbiwgdGhlc2UgUEhZIGRyaXZlcnMgYXJlIGVzc2VudGlhbGx5IE1ESU8gZGV2aWNlcywgYW5kIE1ESU8gZGV2aWNlcyBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZywgZXNwZWNpYWxseSBpZiB0aGVyZSdzIGEgdmlydHVhbCBNRElPIGJ1cyBhdmFpbGFibGUuIEkndmUgZ290IHRvIGNoZWNrIHRoZSBpbnN0cnVjdGlvbnMgYWdhaW4sIHRob3VnaC4gQWgsIHJpZ2h0LCB0aGUgY2F2ZWF0OiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi4gY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBEb2VzIGEgUEhZIGRyaXZlciBmYWxsIGludG8gdGhhdCBcInZlbmRvci1zcGVjaWZpY1wiIGNhdGVnb3J5IHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmU/IEl0J3MgYSBiaXQgb2YgYSBncmF5IGFyZWEuIFVzdWFsbHksIHRoZXNlIFBIWSBkcml2ZXJzIGFyZSBwcm9iZWQgd2hlbiB0aGUgTURJTyBidXMgc2NhbnMgZm9yIGF2YWlsYWJsZSBQSFlzIGFuZCBmaW5kcyBhIG1hdGNoaW5nIFBIWSBJRC4gVGhlIGNhdGNoIHdpdGggUUVNVSBpcyB0aGF0LCAqdW5sZXNzKiB0aGVyZSdzIGEgc3BlY2lmaWMgZW11bGF0ZWQgbmV0d29yayBjYXJkIHRoYXQgc3BlY2lmaWNhbGx5IGV4cG9zZXMgYW5kIG1vZGVscyB0aGlzIFBIWSwgdGhlIGRyaXZlciB3b24ndCBldmVuIGJlIHByb2JlZCwgaGVuY2UgdW4tZnV6emFibGUuXG5cbkJ1dCwgaGFuZyBvbiBhIHNlY29uZC4gRGlkbid0IEkgcmVjYWxsIHNvbWV0aGluZyBhYm91dCBzeXprYWxsZXIgaGF2aW5nIGEgdmlydHVhbCBNRElPIGJ1cz8gSSB0aGluayB0aGVyZSdzIGEgXCJtZGlvLW1vY2t1cFwiIG9yIHNvbWV0aGluZyBzaW1pbGFyLi4uIE5vLCB3YWl0LCBtYXliZSBub3QuIEkgc2hvdWxkIHZlcmlmeS4gQWgsIHllcyEgSSdtIHByZXR0eSBzdXJlIHRoZXJlJ3MgYSBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9ja3VwLmNgIG9yIHNvbWV0aGluZyB2ZXJ5IHNpbWlsYXIuIFRoYXQgY291bGQgY2hhbmdlIGV2ZXJ5dGhpbmchIEkgbmVlZCB0byBjb25maXJtIHRoaXMgcXVpY2tseSBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgYXMgdGhhdCBjb3VsZCBtZWFuIGl0ICppcyogZnV6emFibGUgaW4gUUVNVS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMToxNS44NjY4MzUxMDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMDIzMTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8tbW9ja3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMxOjE1LjkxNDg0NDU1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc3MjYxNTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTURJTyBCdXMgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgZGVlcGVyLCBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHByZXNlbmNlIG9mIGEgdmlydHVhbCBNRElPIGJ1cy4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSBzeXN0ZW0gdXRpbGl6ZXMgYSB2aXJ0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNRElPIChNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0KSBpbnRlcmZhY2UsIHBlcmhhcHMgZW11bGF0ZWQgb3Igc29mdHdhcmUtZGVmaW5lZC4gVGhpcyBwcmVsaW1pbmFyeSBzdGVwIGlzIGNydWNpYWwuIFRoaXMgd2lsbCBoZWxwIGluZm9ybSB3aGV0aGVyIEknbSB3b3JraW5nIHdpdGggYSBzdGFuZGFyZCBoYXJkd2FyZSBpbnRlcmZhY2Ugb3IgYSBtb3JlIGFic3RyYWN0ZWQgZW52aXJvbm1lbnQsIHdoaWNoIHdpbGwgZHJhc3RpY2FsbHkgYWZmZWN0IGhvdyBJIHByb2NlZWQgd2l0aCBhbnkgc3Vic2VxdWVudCBhbmFseXNpcyBvciBjb25maWd1cmF0aW9uIHRhc2tzIHJlbGF0ZWQgdG8gUEhZIGludGVyYWN0aW9uLCBwYXJ0aWN1bGFybHkgd2hlbiBpdCBjb21lcyB0byBhbnkgTURJTyBpbnRlcmFjdGlvbi4gSSB3YW50IHRvIGtub3cgdGhpcyAqYmVmb3JlKiBnb2luZyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTY4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6MjEuNjg3NDYyNTI1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU5MjI1NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9ja3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMxOjIxLjczNTA2MzgxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzcxOTAwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIE1ESU8gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhcnRpY3VsYXIgbmV0d29yayBpc3N1ZS4gTXkgaW5pdGlhbCBndXQgdGVsbHMgbWUgdG8gY2hlY2sgdGhlIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSAoTURJTykgZHJpdmVycy4gVGhleSdyZSBvZnRlbiB0aGUgZ2F0ZXdheSB0byBQSFkgaW50ZXJhY3Rpb25zLCBhbmQgcHJvYmxlbXMgdGhlcmUgY2FuIG1hbmlmZXN0IGluIGEgdmFyaWV0eSBvZiB3YXlzLiBTbywgZmlyc3QgdGhpbmcncyBmaXJzdCwgSSdtIGhlYWRpbmcgb3ZlciB0byB0aGUgYGRyaXZlcnMvbmV0L21kaW8vYCBkaXJlY3RvcnkuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBpbnRlcmFjdHMgd2l0aCB0aGUgcGh5c2ljYWwgbGF5ZXIgZGV2aWNlcy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290IGluIHRoZXJlLiBJJ20gaG9waW5nIGl0J3Mgd2VsbC1vcmdhbml6ZWQgYW5kIGNsZWFybHkgc3RydWN0dXJlZC4uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1vbiBpbXBsZW1lbnRhdGlvbnMsIGdlbmVyaWMgTURJTyBhY2Nlc3Mgcm91dGluZXMsIGFuZCBhbnl0aGluZyBzcGVjaWZpYyB0byB0aGUgdGFyZ2V0IGhhcmR3YXJlLCByaWdodCBhd2F5LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3Mgd2hhdCBtaWdodCBiZSBnb2luZyB3cm9uZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMxOjI1LjcxMjI1NjM5MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MjgxNjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vY2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6MjUuNzU3NzkxMzc2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzk1MzQ4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhwbG9yaW5nIFVzZXIgU3BhY2UgQWNjZXNzIHRvIFBIWSBEcml2ZXJzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IGNsZXZlciB3YXkgdG8gcG9rZSBhdCBQSFkgZHJpdmVycyBkaXJlY3RseSBmcm9tIHVzZXIgc3BhY2UsIHdpdGhvdXQgYWN0dWFsbHkgaGF2aW5nIHRoZSBoYXJkd2FyZSBpbiBmcm9udCBvZiBtZS4gSSd2ZSBiZWVuIHBvbmRlcmluZyB0aGlzLiBJdCBmZWVscyBsaWtlIHRoZXJlIGhhcyB0byBiZSBhIHZpcnR1YWwgcGF0aC4gQ291bGQgSSB1c2Ugc29tZXRoaW5nIGxpa2UgYGRzYV9sb29wYCBvciBtYXliZSBldmVuIGBmaXhlZC1waHlgPyBIb2xkIG9uLCB0aG91Z2guLi4gYGZpeGVkLXBoeWAgaXMgcmVhbGx5IGRlc2lnbmVkIGZvciB0aG9zZSBmaXhlZCBsaW5rcywgbm90IGZvciBzb21lIGdlbmVyYWwgZXhwbG9yYXRpb24gb2YgZGlmZmVyZW50IFBIWSBkcml2ZXJzLiBUaGF0J3Mgbm90IGdvaW5nIHRvIGRvIHdoYXQgSSB3YW50LiBIbW0sIHdoYXQgYWJvdXQgYG5ldGRldnNpbWA/IE5vdyB0aGF0J3MgaW50ZXJlc3RpbmcuIERvZXMgdGhhdCBoYXZlIGEgc2ltdWxhdGVkIE1ESU8gYnVzPyBJZiBpdCBkb2VzLCBtYXliZSBJIGNhbiB1c2UgdGhhdCB0byB0ZXN0IGFuZCBwcm90b3R5cGUgc29tZSB0aGluZ3MuLi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXRhaWxzIGFuZCBkb2N1bWVudGF0aW9uIG9uIHRoYXQuIFRoaXMgaXMgd2hlcmUgaXQgc3RhcnRzIHRvIGdldCBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAyMSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMxOjI5LjgzNzMzMDY2NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2MzQ2MDUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6MjkuODgyOTcxMzExWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTk1OTAwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgd2FpdCBhIG1pbnV0ZS4gU29tZXRoaW5nIGZlZWxzIG9mZi4gR2VuZXJhbGx5LCBzeXprYWxsZXIgaXNuJ3QgdXNlZCB0byBmdXp6IFBIWSBkcml2ZXJzIGRpcmVjdGx5LCByaWdodD8gVGhleSdyZSB1c3VhbGx5IGhhcmR3YXJlLXNwZWNpZmljLCBtZWFuaW5nIHRoZXkgbmVlZCB0aGUgZXhhY3QgaGFyZHdhcmUgdG8gZXZlbiBiZSBhY2Nlc3NpYmxlIGFuZCBmdXp6YWJsZS4gU28sIHRoZSB1c3VhbCBhcHByb2FjaCBkb2Vzbid0IHJlYWxseSB3b3JrLlxuXG5MZXQncyBwYXVzZSBhbmQgZG91YmxlLWNoZWNrLiBJIHNob3VsZCByZWFsbHkgbG9vayBhdCB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBNRElPIG9yIFBIWS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byBzZWUgaWYgdGhlcmUncyBhbiBleGlzdGluZyBmcmFtZXdvcmsgdGhhdCBJIGNhbiB1c2UuIFRoaXMgd2lsbCBjbGFyaWZ5IGhvdyB0aGlzIHBhcnRpY3VsYXIgc2l0dWF0aW9uIHNob3VsZCBiZSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzE4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6MzMuMDgyNTYzOTkyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODg4MjU3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RzYS9kc2EuYz02MjI9c3RhdGljIGludCBkc2Ffc3dpdGNoX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbm5ldC9kc2EvZHNhLmMtNjU0LVxcdGlmICghZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyBcXHUwMDI2XFx1MDAyNiBkcy1cXHUwMDNlb3BzLVxcdTAwM2VwaHlfcmVhZCkge1xcbm5ldC9kc2EvZHNhLmM6NjU1OlxcdFxcdGRzLVxcdTAwM2V1c2VyX21paV9idXMgPSBtZGlvYnVzX2FsbG9jKCk7XFxubmV0L2RzYS9kc2EuYy02NTYtXFx0XFx0aWYgKCFkcy1cXHUwMDNldXNlcl9taWlfYnVzKSB7XFxuLS1cXG5uZXQvZHNhL2RzYS5jLTY2Mi1cXG5uZXQvZHNhL2RzYS5jOjY2MzpcXHRcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGRzLVxcdTAwM2V1c2VyX21paV9idXMpO1xcbm5ldC9kc2EvZHNhLmMtNjY0LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2RzYS9kc2EuYy02NzQtXFx0aWYgKGRzLVxcdTAwM2V1c2VyX21paV9idXMgXFx1MDAyNlxcdTAwMjYgZHMtXFx1MDAzZW9wcy1cXHUwMDNlcGh5X3JlYWQpXFxubmV0L2RzYS9kc2EuYzo2NzU6XFx0XFx0bWRpb2J1c19mcmVlKGRzLVxcdTAwM2V1c2VyX21paV9idXMpO1xcbm5ldC9kc2EvZHNhLmMtNjc2LXRlYXJkb3duOlxcbi0tXFxubmV0L2RzYS9kc2EuYz02ODY9c3RhdGljIHZvaWQgZHNhX3N3aXRjaF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTY5My1cXHRpZiAoZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyBcXHUwMDI2XFx1MDAyNiBkcy1cXHUwMDNlb3BzLVxcdTAwM2VwaHlfcmVhZCkge1xcbm5ldC9kc2EvZHNhLmM6Njk0OlxcdFxcdG1kaW9idXNfdW5yZWdpc3Rlcihkcy1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG5uZXQvZHNhL2RzYS5jOjY5NTpcXHRcXHRtZGlvYnVzX2ZyZWUoZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyk7XFxubmV0L2RzYS9kc2EuYy02OTYtXFx0XFx0ZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyA9IE5VTEw7XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0xMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbm90aWZpZXIuaFxcdTAwM2VcXG5uZXQvZHNhL3BvcnQuYzoxMjojaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbWRpby5oXFx1MDAzZVxcbm5ldC9kc2EvcG9ydC5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9uZXQuaFxcdTAwM2VcXG4tLVxcbm5ldC9kc2EvcG9ydC5jPTE3MjY9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkc2Ffc3dpdGNoZXNfYXBwbHlfd29ya2Fyb3VuZHNbXSA9IHtcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTE3OTYtI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pXFxubmV0L2RzYS9wb3J0LmM6MTc5NzpcXHRcXFwic21zYyxsYW45MzAzLW1kaW9cXFwiLFxcbm5ldC9kc2EvcG9ydC5jLTE3OTgtI2VuZGlmXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbmV0LmhcXHUwMDNlXFxubmV0L2RzYS91c2VyLmM6MTQ6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX21kaW8uaFxcdTAwM2VcXG5uZXQvZHNhL3VzZXIuYzoxNTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby5oXFx1MDAzZVxcbm5ldC9kc2EvdXNlci5jLTE2LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFxcdTAwM2VcXG4tLVxcbm5ldC9kc2EvdXNlci5jPTI2Mzc9c3RhdGljIGludCBkc2FfdXNlcl9waHlfY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqdXNlcl9kZXYsIGludCBhZGRyLFxcbi0tXFxubmV0L2RzYS91c2VyLmMtMjY0Mi1cXG5uZXQvZHNhL3VzZXIuYzoyNjQzOlxcdHVzZXJfZGV2LVxcdTAwM2VwaHlkZXYgPSBtZGlvYnVzX2dldF9waHkoZHMtXFx1MDAzZXVzZXJfbWlpX2J1cywgYWRkcik7XFxubmV0L2RzYS91c2VyLmMtMjY0NC1cXHRpZiAoIXVzZXJfZGV2LVxcdTAwM2VwaHlkZXYpIHtcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jPTU4Nz1jb252ZXJ0X2xlZ2FjeV9zZXR0aW5nc190b19saW5rX2tzZXR0aW5ncyhcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTYyMS1cXHRcXHQ9IGxlZ2FjeV9zZXR0aW5ncy1cXHUwMDNlYXV0b25lZztcXG5uZXQvZXRodG9vbC9jb21tb24uYzo2MjI6XFx0bGlua19rc2V0dGluZ3MtXFx1MDAzZWJhc2UubWRpb19zdXBwb3J0XFxubmV0L2V0aHRvb2wvY29tbW9uLmM6NjIzOlxcdFxcdD0gbGVnYWN5X3NldHRpbmdzLVxcdTAwM2VtZGlvX3N1cHBvcnQ7XFxubmV0L2V0aHRvb2wvY29tbW9uLmMtNjI0LVxcdGxpbmtfa3NldHRpbmdzLVxcdTAwM2ViYXNlLmV0aF90cF9tZGl4XFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTM4Mj1jb252ZXJ0X2xpbmtfa3NldHRpbmdzX3RvX2xlZ2FjeV9zZXR0aW5ncyhcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDEyLVxcdFxcdD0gbGlua19rc2V0dGluZ3MtXFx1MDAzZWJhc2UuYXV0b25lZztcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjQxMzpcXHRsZWdhY3lfc2V0dGluZ3MtXFx1MDAzZW1kaW9fc3VwcG9ydFxcbm5ldC9ldGh0b29sL2lvY3RsLmM6NDE0OlxcdFxcdD0gbGlua19rc2V0dGluZ3MtXFx1MDAzZWJhc2UubWRpb19zdXBwb3J0O1xcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDE1LVxcdGxlZ2FjeV9zZXR0aW5ncy1cXHUwMDNlZXRoX3RwX21kaXhcXG4tLVxcbm5ldC9ldGh0b29sL3BoeS5jPTcwPXN0YXRpYyBpbnQgcGh5X3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxcbi0tXFxubmV0L2V0aHRvb2wvcGh5LmMtOTEtXFxubmV0L2V0aHRvb2wvcGh5LmM6OTI6XFx0cmVwX2RhdGEtXFx1MDAzZW5hbWUgPSBrc3RyZHVwKGRldl9uYW1lKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2KSwgR0ZQX0tFUk5FTCk7XFxubmV0L2V0aHRvb2wvcGh5LmMtOTMtXFx0aWYgKCFyZXBfZGF0YS1cXHUwMDNlbmFtZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6MzMuMTUxNDUyMDA1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0NzczNDEyOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBVc2VyLVNwYWNlIFBIWSBEZXZpY2UgQ3JlYXRpb24qKlxuXG5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBDYW4gYSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uIHNvbWVob3cgY29uanVyZSB1cCBhIFBIWSBkZXZpY2UgYXQgd2lsbCwgdXNpbmcgbmV0bGluayBvciBieSBtYW5pcHVsYXRpbmcgc3lzZnM/IE15IGluaXRpYWwgaHVuY2ggaXMgbm8sIG5vdCByZWFsbHkuIFBIWSBkZXZpY2VzLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGFyZSBmdW5kYW1lbnRhbGx5IGxpbmtlZCB0byB0aGUgcGh5c2ljYWwgTURJTyBidXMgYW5kIGFyZSBpbnN0YW50aWF0ZWQgZHVyaW5nIHRoYXQgYnVzJ3Mgc2NhbiBwcm9jZXNzLCByZWFkaW5nIHRob3NlIGNydWNpYWwgUEhZIElEIHJlZ2lzdGVycy4gSWYgdGhlcmUncyBubyBhY3R1YWwgcGh5c2ljYWwgTURJTyBidXMsIHRoZW4gdHlwaWNhbGx5LCB0aGVyZSBhcmUgbm8gUEhZIGRldmljZXMsIHNpbXBsZSBhcyB0aGF0LlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgSSB0aGluayBJ4oCZbSBmb3JnZXR0aW5nIHNvbWV0aGluZ+KApiBpc27igJl0IGBkc2FfbG9vcGAgYSBtb2NrIERTQSBzd2l0Y2gsIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBzaW11bGF0ZSBhbiBNRElPIGJ1cz8gSWYgSSByZW1lbWJlciBjb3JyZWN0bHksIHRoYXQgc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCB0aGUgYW5zd2VyIEkgbmVlZC4gVGhhdCdzIGl0ISBJIG5lZWQgdG8gY29uc3VsdCB0aGUgc291cmNlLiBMZXQncyBkaWcgaW50byBgZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNgIGFuZCBjb25maXJtIG15IGh5cG90aGVzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NjYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMTo0MS42Mjg3OTU4OTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Mjg5NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NzQ9c3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZzW1BIWV9NQVhfQUREUl07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NzU6c3RhdGljIHN0cnVjdCBtZGlvX2RldmljZSAqc3dpdGNoX21kaW9kZXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNzYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz0xODQ9c3RhdGljIGludCBkc2FfbG9vcF9waHlfcmVhZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgcmVnbnVtKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg5LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE5MDpcXHRyZXQgPSBtZGlvYnVzX3JlYWRfbmVzdGVkKGJ1cywgcHMtXFx1MDAzZXBvcnRfYmFzZSArIHBvcnQsIHJlZ251bSk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTkxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9MTk5PXN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3dyaXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjA2OlxcdHJldCA9IG1kaW9idXNfd3JpdGVfbmVzdGVkKGJ1cywgcHMtXFx1MDAzZXBvcnRfYmFzZSArIHBvcnQsIHJlZ251bSwgdmFsdWUpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwNy1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTI1MD1zdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI2My1cXHQvKiBKdXN0IGRvIGEgc2xlZXBpbmcgb3BlcmF0aW9uIHRvIG1ha2UgbG9ja2RlcCBjaGVja3MgZWZmZWN0aXZlICovXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjY0OlxcdG1kaW9idXNfcmVhZChidXMsIHBzLVxcdTAwM2Vwb3J0X2Jhc2UgKyBwb3J0LCBNSUlfQk1TUik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjY1LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9MjgzPXN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkyLVxcdC8qIEp1c3QgZG8gYSBzbGVlcGluZyBvcGVyYXRpb24gdG8gbWFrZSBsb2NrZGVwIGNoZWNrcyBlZmZlY3RpdmUgKi9cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyOTM6XFx0bWRpb2J1c19yZWFkKGJ1cywgcHMtXFx1MDAzZXBvcnRfYmFzZSArIHBvcnQsIE1JSV9CTVNSKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yOTQtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz0zMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBkc2FfbG9vcF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTQtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU1OnN0YXRpYyBpbnQgZHNhX2xvb3BfZHJ2X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTYte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NzpcXHRzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEgKnBkYXRhID0gbWRpb2Rldi1cXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU4LVxcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2NC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNjU6XFx0ZHMgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpkcyksIEdGUF9LRVJORUwpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2Ni1cXHRpZiAoIWRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzY4LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM2OTpcXHRkcy1cXHUwMDNlZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNzAtXFx0ZHMtXFx1MDAzZW51bV9wb3J0cyA9IERTQV9MT09QX05VTV9QT1JUUztcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNzEtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzcyOlxcdHBzID0gZGV2bV9remFsbG9jKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqcHMpLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNzMtXFx0aWYgKCFwcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODI6XFx0ZHMtXFx1MDAzZWRldiA9IFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzgzLVxcdGRzLVxcdTAwM2VvcHMgPSBcXHUwMDI2ZHNhX2xvb3BfZHJpdmVyO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4NC1cXHRkcy1cXHUwMDNlcHJpdiA9IHBzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM4NTpcXHRwcy1cXHUwMDNlYnVzID0gbWRpb2Rldi1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Ni1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODc6XFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODgtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTAtXFx0aWYgKCFyZXQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzkxOlxcdFxcdGRldl9pbmZvKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogMHglMHhcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzkyLVxcdFxcdFxcdCBwZGF0YS1cXHUwMDNlbmFtZSwgcGRhdGEtXFx1MDAzZWVuYWJsZWRfcG9ydHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM5NzpzdGF0aWMgdm9pZCBkc2FfbG9vcF9kcnZfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTgte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM5OTpcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDAwLVxcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQxMzpcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDE0LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDE5LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMDpcXHRkZXZfc2V0X2RydmRhdGEoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldiwgTlVMTCk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIxLX1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDIzOnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgZHNhX2xvb3BfZHJ2ID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyNDpcXHQubWRpb2Rydi5kcml2ZXJcXHQ9IHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjUtXFx0XFx0Lm5hbWVcXHQ9IFxcXCJkc2EtbG9vcFxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00MzI9c3RhdGljIGludCBkc2FfbG9vcF9idXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM0LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzU6XFx0cmV0dXJuIGRydiA9PSBcXHUwMDI2ZHNhX2xvb3BfZHJ2Lm1kaW9kcnYuZHJpdmVyO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzNi19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00Mzg9c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ2OnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2Rldih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDYzOlxcdGJ1cyA9IG1kaW9fZmluZF9idXMoXFxcImZpeGVkLTBcXFwiKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjQtXFx0aWYgKFdBUk5fT04oIWJ1cykpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDY3OlxcdHN3aXRjaF9tZGlvZGV2ID0gbWRpb19kZXZpY2VfY3JlYXRlKGJ1cywgMzEpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ2ODpcXHRpZiAoSVNfRVJSKHN3aXRjaF9tZGlvZGV2KSlcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjktXFx0XFx0Z290byBvdXQ7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDcwLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MTpcXHRzd2l0Y2hfbWRpb2Rldi1cXHUwMDNlYnVzX21hdGNoID0gZHNhX2xvb3BfYnVzX21hdGNoO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MjpcXHRzd2l0Y2hfbWRpb2Rldi1cXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGEgPSBcXHUwMDI2ZHNhX2xvb3BfcGRhdGE7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDczLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3NDpcXHRyZXQgPSBtZGlvX2RldmljZV9yZWdpc3Rlcihzd2l0Y2hfbWRpb2Rldik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDc1LVxcdGlmIChyZXQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDc2OlxcdFxcdG1kaW9fZGV2aWNlX2ZyZWUoc3dpdGNoX21kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3Ny1vdXQ6XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00ODI9c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDg2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ4NzpcXHRyZXQgPSBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODgtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5My1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTQ6XFx0cmV0ID0gbWRpb19kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNmRzYV9sb29wX2Rydik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDk1LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTYtXFx0XFx0ZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKCk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk3OlxcdFxcdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk4OlxcdFxcdG1kaW9fZGV2aWNlX2ZyZWUoc3dpdGNoX21kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5OS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz01MDU9c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDYte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcXHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZkc2FfbG9vcF9kcnYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwOC1cXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDk6XFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MTA6XFx0bWRpb19kZXZpY2VfZnJlZShzd2l0Y2hfbWRpb2Rldik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTExLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6NDEuNjc2MDkxNDM3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzQ2OTU5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGRzYV9sb29wYCBhbmQgYG1kaW8tbW9ja3VwYCBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBkc2FfbG9vcGAgaXMgbGV2ZXJhZ2luZyB0aGUgYGZpeGVkLTBgIGJ1cy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIHRvIGBtZGlvLW1vY2t1cGAuIEhtbSwgZG9lcyB0aGlzIGV2ZW4gZXhpc3Q/IExldCBtZSBxdWlja2x5IHZlcmlmeSBieSBjaGVja2luZyBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9ja3VwLmNgLiBOb3BlLCB0aGF0IHdhc24ndCB0aGUgcmlnaHQgcGF0aC4gT2theSwgcGVyaGFwcyBpdCdzIHVuZGVyIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tbW9ja3VwLmNgIGluc3RlYWQ/IFN0aWxsIG5vIGx1Y2suIFRpbWUgdG8gdGFrZSBhIGJyb2FkZXIgYXBwcm9hY2g7IEknbGwgYnJvd3NlIHRoZSBgZHJpdmVycy9uZXQvcGh5L2AgZGlyZWN0b3J5IHRvIHNlZSBpZiB0aGVyZSdzIGFueSByZWxldmFudCBjb2RlIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGlzIGBkc2FfbG9vcGAgLyBgZml4ZWQtMGAgLyBgbWRpby1tb2NrdXBgIGludGVyYWN0aW9uLiBIb3BlZnVsbHksIEkgY2FuIGZpbmQgc29tZXRoaW5nIHVzZWZ1bCBpbiB0aG9zZSBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMTo0NS44MTA3OTAwODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC9waHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImFkaW4uY1wiLFxuICAgIFwiYWRpbjExMDAuY1wiLFxuICAgIFwiYWRpbjExNDAtcGh5LmNcIixcbiAgICBcImFpcl9hbjg4MDEuY1wiLFxuICAgIFwiYWlyX2VuODgxMWguY1wiLFxuICAgIFwiYWlyX3BoeV9saWIuY1wiLFxuICAgIFwiYWlyX3BoeV9saWIuaFwiLFxuICAgIFwiYW1kLmNcIixcbiAgICBcImFzMjF4eHguY1wiLFxuICAgIFwiYXg4ODc5NmIuY1wiLFxuICAgIFwiYXg4ODc5NmJfcnVzdC5yc1wiLFxuICAgIFwiYmNtLWN5Z251cy5jXCIsXG4gICAgXCJiY20tcGh5LWxpYi5jXCIsXG4gICAgXCJiY20tcGh5LWxpYi5oXCIsXG4gICAgXCJiY20tcGh5LXB0cC5jXCIsXG4gICAgXCJiY201NDE0MC5jXCIsXG4gICAgXCJiY202M3h4LmNcIixcbiAgICBcImJjbTd4eHguY1wiLFxuICAgIFwiYmNtODQ4ODEuY1wiLFxuICAgIFwiYmNtODd4eC5jXCIsXG4gICAgXCJicm9hZGNvbS5jXCIsXG4gICAgXCJjaWNhZGEuY1wiLFxuICAgIFwiY29ydGluYS5jXCIsXG4gICAgXCJkYXA4MjExci5jXCIsXG4gICAgXCJkYXZpY29tLmNcIixcbiAgICBcImRwODM2NDAuY1wiLFxuICAgIFwiZHA4MzY0MF9yZWcuaFwiLFxuICAgIFwiZHA4MzgyMi5jXCIsXG4gICAgXCJkcDgzODQ4LmNcIixcbiAgICBcImRwODM4NjcuY1wiLFxuICAgIFwiZHA4Mzg2OS5jXCIsXG4gICAgXCJkcDgzdGM4MTEuY1wiLFxuICAgIFwiZHA4M3RkNTEwLmNcIixcbiAgICBcImRwODN0ZzcyMC5jXCIsXG4gICAgXCJldDEwMTFjLmNcIixcbiAgICBcImZpeGVkX3BoeS5jXCIsXG4gICAgXCJpY3BsdXMuY1wiLFxuICAgIFwiaW50ZWwteHdheS5jXCIsXG4gICAgXCJsaW5rbW9kZS5jXCIsXG4gICAgXCJseHQuY1wiLFxuICAgIFwibWFydmVsbC04OHEyeHh4LmNcIixcbiAgICBcIm1hcnZlbGwtODh4MjIyMi5jXCIsXG4gICAgXCJtYXJ2ZWxsLmNcIixcbiAgICBcIm1hcnZlbGwxMGcuY1wiLFxuICAgIFwibWRpby1vcGVuLWFsbGlhbmNlLmhcIixcbiAgICBcIm1kaW9fYnVzLmNcIixcbiAgICBcIm1kaW9fYnVzX3Byb3ZpZGVyLmNcIixcbiAgICBcIm1kaW9fZGV2aWNlLmNcIixcbiAgICBcIm1kaW9fZGV2cmVzLmNcIixcbiAgICBcIm1lc29uLWd4bC5jXCIsXG4gICAgXCJtaWNyZWwuY1wiLFxuICAgIFwibWljcm9jaGlwLmNcIixcbiAgICBcIm1pY3JvY2hpcF9yZHNfcHRwLmNcIixcbiAgICBcIm1pY3JvY2hpcF9yZHNfcHRwLmhcIixcbiAgICBcIm1pY3JvY2hpcF90MS5jXCIsXG4gICAgXCJtaWNyb2NoaXBfdDFzLmNcIixcbiAgICBcIm1paV90aW1lc3RhbXBlci5jXCIsXG4gICAgXCJtb3RvcmNvbW0uY1wiLFxuICAgIFwibXhsLTg2MTEwLmNcIixcbiAgICBcIm14bC1ncHkuY1wiLFxuICAgIFwibmF0aW9uYWwuY1wiLFxuICAgIFwibmNuMjYwMDAuY1wiLFxuICAgIFwibnhwLWM0NS10amExMXh4LW1hY3NlYy5jXCIsXG4gICAgXCJueHAtYzQ1LXRqYTExeHguY1wiLFxuICAgIFwibnhwLWM0NS10amExMXh4LmhcIixcbiAgICBcIm54cC1jYnR4LmNcIixcbiAgICBcIm54cC10amExMXh4LmNcIixcbiAgICBcIm9wZW5fYWxsaWFuY2VfaGVscGVycy5jXCIsXG4gICAgXCJvcGVuX2FsbGlhbmNlX2hlbHBlcnMuaFwiLFxuICAgIFwicGh5LWM0NS5jXCIsXG4gICAgXCJwaHktY2Fwcy5oXCIsXG4gICAgXCJwaHktY29yZS5jXCIsXG4gICAgXCJwaHkuY1wiLFxuICAgIFwicGh5X2NhcHMuY1wiLFxuICAgIFwicGh5X2RldmljZS5jXCIsXG4gICAgXCJwaHlfbGVkX3RyaWdnZXJzLmNcIixcbiAgICBcInBoeV9saW5rX3RvcG9sb2d5LmNcIixcbiAgICBcInBoeV9wYWNrYWdlLmNcIixcbiAgICBcInBoeV9wb3J0LmNcIixcbiAgICBcInBoeWxpYi1pbnRlcm5hbC5oXCIsXG4gICAgXCJwaHlsaWIuaFwiLFxuICAgIFwicGh5bGluay5jXCIsXG4gICAgXCJxc2VtaS5jXCIsXG4gICAgXCJxdDIwMjUucnNcIixcbiAgICBcInJvY2tjaGlwLmNcIixcbiAgICBcInNmcC1idXMuY1wiLFxuICAgIFwic2ZwLmNcIixcbiAgICBcInNmcC5oXCIsXG4gICAgXCJzbXNjLmNcIixcbiAgICBcInN0ZTEwWHAuY1wiLFxuICAgIFwic3R1YnMuY1wiLFxuICAgIFwic3dwaHkuY1wiLFxuICAgIFwic3dwaHkuaFwiLFxuICAgIFwidGVyYW5ldGljcy5jXCIsXG4gICAgXCJ1UEQ2MDYyMC5jXCIsXG4gICAgXCJ2aXRlc3NlLmNcIixcbiAgICBcInhpbGlueF9nbWlpMnJnbWlpLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogW1xuICAgIFwiYXF1YW50aWFcIixcbiAgICBcIm1lZGlhdGVrXCIsXG4gICAgXCJtc2NjXCIsXG4gICAgXCJxY29tXCIsXG4gICAgXCJyZWFsdGVrXCJcbiAgXVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6NDUuODEwOTIwMzExWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDU2NDQ3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBQSFkgRHJpdmVyIEluc3RhbnRpYXRpb24gV2l0aG91dCBIYXJkd2FyZSoqXG5cbk9rYXksIHNvIEkgc2VlIGBtZGlvX2J1cy5jYCBpcyBwcmVzZW50LCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IHByaW1hcnkgcXVlc3Rpb24gbm93IGlzOiBjYW4gSSBpbnN0YW50aWF0ZSBhIFBIWSBkcml2ZXIgd2l0aG91dCBhY3R1YWxseSBoYXZpbmcgdGhlIHBoeXNpY2FsIGhhcmR3YXJlPyBJJ20gdHJ5aW5nIHRvIGV4cGxvcmUgdGhpcyB0aGVvcmV0aWNhbGx5LCBtYXliZSBmb3Igc29tZSBmdXp6aW5nIG9yIHRlc3RpbmcgcHVycG9zZXMuIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIGFib3V0IFN5emthbGxlciBoYXZpbmcgc29tZSBleGlzdGluZyBzdXBwb3J0IGZvciBmdXp6aW5nIHRoZXNlIGRyaXZlcnMuIExldCBtZSBkaWcgaW50byB0aGF0IGFuZCBzZWUgaWYgSSBjYW4gZmluZCBhbnkgU3l6a2FsbGVyIGRlc2NyaXB0aW9ucyByZWxhdGVkIHRvIFBIWXMuIFRoYXQgbWlnaHQgZ2l2ZSBtZSBzb21lIGNsdWVzIGFib3V0IGhvdyB0byBhcHByb2FjaCB0aGlzLCBvciBzaG93IHNvbWUga25vd24gdGVjaG5pcXVlcyBmb3IgdmlydHVhbGl6aW5nIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDkwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMxOjQ5Ljc1NjU2NzU0NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAwODAxMzMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5el9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6NDkuODI2NjU0MTI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NDkzMDY5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBLZXJuZWwgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJIGhpdCBhIHdhbGwgd2l0aCB0aGUgYHN5el9gIHNlYXJjaCDigJMgdGhhdCdzIGEgZGVhZCBlbmQuIEkgbmVlZCBhIGRpZmZlcmVudCBhbmdsZS4gSG1tLCBsZXQgbWUgdGhpbmsgYWJvdXQgdmlydHVhbCBNRElPIGJ1c2VzLiBJcyB0aGVyZSBhbnl0aGluZyBpbiB0aGUga2VybmVsIHRoYXQgd291bGQgc2ltdWxhdGUgb3IgZW11bGF0ZSBhbiBNRElPIGJ1cz8gSSBuZWVkIGEgd2F5IHRvIGluamVjdCBhIFBIWSBpbnRvIHRoZSBzeXN0ZW0sIGFuZCB0aGF0IHNlZW1zIGxpa2UgdGhlIG5leHQgbG9naWNhbCBzdGVwLlxuXG5JIGluaXRpYWxseSBjb25zaWRlcmVkIGBkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmNgLiBUaGF04oCZcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGFsbG93cyBmb3IgUEhZcyB3aXRoIGZpeGVkIGxpbmtzLCBidXQgaXQgdXNlcyBhIHNwZWNpZmljLCBidWlsdC1pbiBkcml2ZXIsIGBmaXhlZF9waHlgLiBOb3QgcXVpdGUgd2hhdCBJJ20gbG9va2luZyBmb3IsIGFuZCBpdCdzIHByb2JhYmx5IHRvbyByaWdpZCBmb3Igd2hhdCBJIG5lZWQuXG5cbknigJl2ZSBydWxlZCBvdXQgYSBmZXcgb3RoZXIgb3B0aW9ucy4gYG5ldGRldnNpbWAg4oCTIG5vLiBgdHVuYC9gdGFwYCDigJMgbm8gTURJTy4gYG1hYzgwMjExX2h3c2ltYD8gTm9wZS4gYHZrbXNgPyBOZWdhdGl2ZS4gSSdtIGVzc2VudGlhbGx5IGxvb2tpbmcgZm9yIGEgd2F5IHRvIHRyaWNrIHRoZSBrZXJuZWwgaW50byBiZWxpZXZpbmcgYSBzcGVjaWZpYyBQSFksIGluIHRoaXMgY2FzZSwgYGFpcl9lbjg4MTFoYCwgaXMgcHJlc2VudCBpbiBteSBRRU1VIGVudmlyb25tZW50LlxuXG5TbywgaG93IGRvIEkgZ28gYWJvdXQgcHJvYmluZyBgYWlyX2VuODgxMWhgIGVmZmVjdGl2ZWx5IGluIGEgUUVNVSBzZXR1cD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBQSFkgZHJpdmVyIHJlZ2lzdHJhdGlvbiBhbmQgZGlzY292ZXJ5IHdvcmsuIEkndmUgZ290IGl0LCBhIFBIWSBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiB1c2luZyBgcGh5X2RyaXZlcl9yZWdpc3RlcmAuIFRoZW4sIHdoZW4gYW4gTURJTyBidXMgaXMgcmVnaXN0ZXJlZCwgaXQgc2NhbnMgZm9yIFBIWXMuIFdoZW4gaXQgZmluZHMgYSBtYXRjaGluZyBQSFkgSUQsIGl0IGJpbmRzIHRoZSBkcml2ZXIuXG5cblRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHRoZW4gYmVjb21lcyBob3cgZG8gSSBjcmVhdGUgYSAqZmFrZSogTURJTyBidXMgdGhhdCByZXBvcnRzIHRoZSBQSFkgSUQgdGhhdCBJIHdhbnQ/IEkgbmVlZCBhIGZha2UgTURJTyBidXMgdGhhdCByZXR1cm5zIGEgc3Bvb2ZlZCBQSFkgSUQgZHVyaW5nIHJlYWRzLiBEb2VzIHRoZSBrZXJuZWwgaGF2ZSBhbnkgcHJlLWV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBjb3VsZCBoZWxwIG1lIGFjY29tcGxpc2ggdGhpcz8gSSdsbCBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvbmV0L21kaW8vYCBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC4gVGhhdCdzIHRoZSBtb3N0IGxpa2VseSBwbGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MTcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6NTguMzc1OTYyODg3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC9tZGlvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJhY3BpX21kaW8uY1wiLFxuICAgIFwiZndub2RlX21kaW8uY1wiLFxuICAgIFwibWRpby1haXJvaGEuY1wiLFxuICAgIFwibWRpby1hc3BlZWQuY1wiLFxuICAgIFwibWRpby1iY20taXByb2MuY1wiLFxuICAgIFwibWRpby1iY20tdW5pbWFjLmNcIixcbiAgICBcIm1kaW8tYml0YmFuZy5jXCIsXG4gICAgXCJtZGlvLWNhdml1bS5jXCIsXG4gICAgXCJtZGlvLWNhdml1bS5oXCIsXG4gICAgXCJtZGlvLWdwaW8uY1wiLFxuICAgIFwibWRpby1oaXNpLWZlbWFjLmNcIixcbiAgICBcIm1kaW8taTJjLmNcIixcbiAgICBcIm1kaW8taXBxNDAxOS5jXCIsXG4gICAgXCJtZGlvLWlwcTgwNjQuY1wiLFxuICAgIFwibWRpby1tb3hhcnQuY1wiLFxuICAgIFwibWRpby1tc2NjLW1paW0uY1wiLFxuICAgIFwibWRpby1tdXgtYmNtLWlwcm9jLmNcIixcbiAgICBcIm1kaW8tbXV4LWJjbTYzNjguY1wiLFxuICAgIFwibWRpby1tdXgtZ3Bpby5jXCIsXG4gICAgXCJtZGlvLW11eC1tZXNvbi1nMTJhLmNcIixcbiAgICBcIm1kaW8tbXV4LW1lc29uLWd4bC5jXCIsXG4gICAgXCJtZGlvLW11eC1tbWlvcmVnLmNcIixcbiAgICBcIm1kaW8tbXV4LW11bHRpcGxleGVyLmNcIixcbiAgICBcIm1kaW8tbXV4LmNcIixcbiAgICBcIm1kaW8tbXZ1c2IuY1wiLFxuICAgIFwibWRpby1vY3Rlb24uY1wiLFxuICAgIFwibWRpby1waWM2NGhwc2MuY1wiLFxuICAgIFwibWRpby1yZWFsdGVrLXJ0bDkzMDAuY1wiLFxuICAgIFwibWRpby1yZWdtYXAuY1wiLFxuICAgIFwibWRpby1zdW40aS5jXCIsXG4gICAgXCJtZGlvLXRodW5kZXIuY1wiLFxuICAgIFwibWRpby14Z2VuZS5jXCIsXG4gICAgXCJvZl9tZGlvLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzE6NTguMzc2MDM4NDQ3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzEyNTU5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBNaXNzaW5nIE1ESU8gTW9ja3VwKipcblxuT2theSwgc28gdGhlcmUncyBubyBgbWRpby1tb2NrdXAuY2AgZmlsZS4gVGhhdCdzIHVuZXhwZWN0ZWQuIFdhaXQgYSBtaW51dGUuLi4gSSByZW1lbWJlciB0aGF0IHRoZSBgZHNhX2xvb3BgIHNldHVwIGFjdHVhbGx5ICpjcmVhdGVzKiBhIGZha2UgTURJTyBidXMuIFJpZ2h0ISBMZXQncyBnZXQgYmFjayB0byBgZHNhX2xvb3AuY2AgYW5kIHJlZnJlc2ggbXkgbWVtb3J5LlxuXG5BaCwgeWVzLiBJIHNlZSBpdCBub3cuIEl0IHVzZXMgYG1kaW9fZmluZF9idXMoXCJmaXhlZC0wXCIpYC4gVGhhdCByaW5ncyBhIGJlbGwuIFRoYXQgc3RyaW5nLi4uIHRoYXQncyB0aGUgbmFtZSBvZiB0aGUgYGZpeGVkX21kaW9fYnVzYCB0aGF0J3MgY3JlYXRlZCBieSBgZml4ZWRfcGh5LmNgLiBJIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoYXQgcGFydCBvZiB0aGUgc2V0dXAsIHNvIEknbGwgcXVpY2tseSBjaGVjayBgZml4ZWRfcGh5LmNgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODE0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMyOjAzLjQwNzI5NzA2OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM0NzgzMDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpeGVkX21kaW9fYnVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9MTkzPUVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV91bnJlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTk0LVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxOTU6c3RhdGljIGludCBfX2luaXQgZml4ZWRfbWRpb19idXNfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xOTYte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTIxOC19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjIxOTptb2R1bGVfaW5pdChmaXhlZF9tZGlvX2J1c19pbml0KTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjIwLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoyMjE6c3RhdGljIHZvaWQgX19leGl0IGZpeGVkX21kaW9fYnVzX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjIyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0yMjUtfVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoyMjY6bW9kdWxlX2V4aXQoZml4ZWRfbWRpb19idXNfZXhpdCk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTIyNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzI6MDMuNzQyMDg1Nzk1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0ODgzNzE5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFZlcnNhdGlsaXR5IG9mIGBmaXhlZF9tZGlvX2J1c2AqKlxuXG5IbW0sIGludGVyZXN0aW5nIHF1ZXN0aW9uLiBDYW4gSSBsZXZlcmFnZSBgZml4ZWRfbWRpb19idXNgIHRvIHByb2JlIGp1c3QgKmFueSogUEhZIGRyaXZlcj8gTXkgZ3V0IHNheXMgXCJwcm9iYWJseSwgYnV0IHdpdGggY2F2ZWF0cy5cIiBMZXQgbWUgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBidXMgaXMgc3RydWN0dXJlZC4uLiByaWdodCwgaXQncyBkZXNpZ25lZCB0byByZXByZXNlbnQgYSBzdGF0aWNhbGx5IGRlZmluZWQgTURJTyBidXMsIHBlcmZlY3QgZm9yIHRob3NlIHNjZW5hcmlvcyB3aGVyZSB0aGUgUEhZIGNvbmZpZ3VyYXRpb24gaXMga25vd24gYXQgY29tcGlsZSB0aW1lIG9yIHN5c3RlbSBpbml0aWFsaXphdGlvbiwgbGlrZSBpbiBTb0NzIHdpdGggaW50ZWdyYXRlZCBQSFlzLiBUaGUgYmVhdXR5IGlzIGl0IGF2b2lkcyB0aGUgdXN1YWwgTURJTyBwcm9iaW5nIGRhbmNlLlxuXG5TbywgdGhlIGtleSBoZXJlIGlzIHdoZXRoZXIgdGhlIFBIWSBkcml2ZXIgKmV4cGVjdHMqIHRoaXMgc3RhdGljIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBleHBlY3RlZCBidXMuIExldCdzIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBmdW5jdGlvbnMgbGlrZSBgZml4ZWRfcGh5X2FkZGAgb3Igc2ltaWxhciBtZWNoYW5pc21zLiBJIG5lZWQgdG8gc2VlIHdoYXQgYXNzdW1wdGlvbnMgdGhlc2UgZml4ZWQgUEhZIGRyaXZlcnMgbWFrZSBhYm91dCB0aGUgdW5kZXJseWluZyBNRElPIGJ1cyBpbmZyYXN0cnVjdHVyZS4gRG8gdGhleSBzaW1wbHkgZXhwZWN0IGEgc3RydWN0dXJlIHdpdGggYSBwYXJ0aWN1bGFyIHNldCBvZiBvcGVyYXRpb25zLCBvciBhcmUgdGhlcmUgZGVlcGVyIGRlcGVuZGVuY2llcz8gSXMgdGhlcmUgYSBsZXZlbCBvZiBhYnN0cmFjdGlvbiB0aGF0IHRoaXMgYnVzIGFic3RyYWN0aW9uIGlzIHByZXNlbnRpbmcgdGhhdCBpcyB1bml2ZXJzYWwgZW5vdWdoIHRvIGRvIHNvP1xuXG5JZiB0aGUgZHJpdmVycyBhcmUgZmFpcmx5IGdlbmVyaWMgaW4gdGhlaXIgYnVzIGludGVyYWN0aW9uLCBhbmQgdGhleSByZWx5IG9uIHRoZSBNRElPIGJ1cydzIHN0YW5kYXJkIGFjY2VzcyBmdW5jdGlvbnMsIHRoZW4geWVzLCBpbiB0aGVvcnksIEkgbWlnaHQgYmUgYWJsZSB0byBnZXQgYXdheSB3aXRoIHVzaW5nIGBmaXhlZF9tZGlvX2J1c2AgdG8gYXR0YWNoIHRvIG1vcmUgYXJiaXRyYXJ5IFBIWSBkcml2ZXJzLiBJdCdzIHJlYWxseSBhYm91dCB0aGUgZHJpdmVyJ3MgZXhwZWN0YXRpb25zIGFuZCBob3cgY2xvc2VseSBpdCBiaW5kcyB0byB0aGUgYnVzJ3MgaW1wbGVtZW50YXRpb24uIEl0IGRlcGVuZHMgb24gd2hldGhlciB0aGUgYGZpeGVkX21kaW9fYnVzYCBhYnN0cmFjdGlvbiBpcyB0cnVseSBcImJ1cy1hZ25vc3RpY1wiIGVub3VnaCB0byBzdWl0IHRoZSB3aWRlciB2YXJpZXR5IG9mIFBIWSBkcml2ZXJzIG91dCB0aGVyZS5cblxuVGltZSB0byBjb25zdWx0IHRoZSBzb3VyY2UgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjowOS4yMzA0NjA2M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk3NDAzODQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpeGVkX3BoeV9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjowOS4yOTAyMTI0MDRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMzE0NjM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgdGhlIGBmaXhlZF9waHlfcmVnaXN0ZXJgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgYGZpeGVkX3BoeV9yZWdpc3RlcmAuIFRoaXMgaW1wbGllcyB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgUEhZIChQaHlzaWNhbCBMYXllcikgZGV2aWNlIGFuZCBhcmUgcHJvYmFibHkgdHJvdWJsZXNob290aW5nIG9yIGNvbmZpZ3VyaW5nIHNvbWUgYXNwZWN0IG9mIGl0cyBiZWhhdmlvci4gXCJGaXhlZFwiIGlzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIHRoaXMgcmVnaXN0ZXIgaXMgZWl0aGVyIGhhcmQtY29kZWQgb3Igbm90IGR5bmFtaWNhbGx5IG5lZ290aWF0ZWQuIFRoaXMgY291bGQgaW5kaWNhdGUgYSBzdGF0aWMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgb3IgYSByZWdpc3RlciB0aGF0IG5lZWRzIHNwZWNpZmljIGF0dGVudGlvbiBmb3IgYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIHJldmlzaW9uIG9yIHNldHVwLiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIGltbWVkaWF0ZWx5IHNjYW5uaW5nIHRoZSBsYW5kc2NhcGUgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuOiBBcmUgd2UgbG9va2luZyBhdCBhIGtub3duIGlzc3VlIHdpdGggdGhpcyBQSFkgbW9kZWw/IElzIHRoaXMgcmVnaXN0ZXIgcmVsYXRlZCB0byBzcGVlZC9kdXBsZXggc2V0dGluZ3MsIHBvd2VyIG1hbmFnZW1lbnQsIG9yIHBlcmhhcHMgY2xvY2tpbmc/IERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgdGhpcyBjb3VsZCBiZSBhIHZpdGFsIHN0ZXAgaW4gaXNvbGF0aW5nIHRoZSBjYXVzZSBvZiBhIHByb2JsZW0gb3IgdmFsaWRhdGluZyBhIHBhcnRpY3VsYXIgc2V0dXAuIFVuZGVyc3RhbmRpbmcgdGhlIHB1cnBvc2UgYW5kIGNvbnN0cmFpbnRzIG9mIHRoaXMgcGFydGljdWxhciByZWdpc3RlciBpcyBub3cgcGFyYW1vdW50IGZvciBwcm9jZWVkaW5nIGVmZmVjdGl2ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg2MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMyOjEzLjQyMzM2MDk2OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2NjI5NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZml4ZWRfcGh5X3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9MTE4PXN0YXRpYyBpbnQgZml4ZWRfcGh5X2dldF9mcmVlX2FkZHIodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xMzAtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjEzMTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTEzMi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Mi19XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3MzpFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy0xNzQtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjE3NTpzdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyXzEwMGZkKHZvaWQpXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE3Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgxLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxODI6XFx0cmV0dXJuIGZpeGVkX3BoeV9yZWdpc3RlcihcXHUwMDI2c3RhdHVzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTgzLX1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTg0OkVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9yZWdpc3Rlcl8xMDBmZCk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE4NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzI6MTMuNDcyMDI5ODgzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTEzNTA0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgdGhlIFBIWSBEZXZpY2UgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gYGZpeGVkX3BoeV9yZWdpc3RlcmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyByZXNwb25zaWJsZSBmb3IgYnJpbmdpbmcgYSBQSFkgZGV2aWNlIG9ubGluZSwgc3BlY2lmaWNhbGx5IG9uIHRoZSBgZml4ZWRfbWRpb19idXNgLiAgVGhhdCBtYWtlcyBzZW5zZTsgd2UncmUgZGVhbGluZyB3aXRoIGEgZml4ZWQgY29uZmlndXJhdGlvbiBoZXJlLiBCdXQgd2hhdCdzIHRoaXMgYWJvdXQgcmVnaXN0ZXJpbmcgaXQgd2l0aCBhIGBwaHlfaWRgIG9mIDA/IFRoYXQncyBhIGxpdHRsZSBzdHJhbmdlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHdvcmtpbmdzIG9mIGBmaXhlZF9waHlfcmVnaXN0ZXJgLiBUaW1lIHRvIGRpdmUgYmFjayBpbiBhbmQgZG91YmxlLWNoZWNrIGV4YWN0bHkgaG93IHRoYXQgcmVnaXN0cmF0aW9uIHByb2Nlc3MgdW5mb2xkcyBhbmQgd2hhdCBhc3N1bXB0aW9ucyBpdCBtYWtlcyBhYm91dCB0aGUgYHBoeV9pZGAuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpc24ndCBnb2luZyB0byBjYXVzZSBjb25mbGljdHMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBkb3duIHRoZSBsaW5lLiBMZXQncyBzZWUgaG93IHRoYXQncyBoYW5kbGVkIGludGVybmFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDc4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzI6MTcuNDIzMzgzOTI2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzE6XFx0c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxcbiAxMzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4gMTMzOlxcdHtcXG4gMTM0OlxcdFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHk7XFxuIDEzNTpcXHRcXHRpbnQgcGh5X2FkZHI7XFxuIDEzNjpcXHRcXHRpbnQgcmV0O1xcbiAxMzc6XFx0XFxuIDEzODpcXHRcXHRyZXQgPSBzd3BoeV92YWxpZGF0ZV9zdGF0ZShzdGF0dXMpO1xcbiAxMzk6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDE0MDpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiAxNDE6XFx0XFxuIDE0MjpcXHRcXHRpZiAoIWZtYl9taWlfYnVzIHx8IGZtYl9taWlfYnVzLVxcdTAwM2VzdGF0ZSAhPSBNRElPQlVTX1JFR0lTVEVSRUQpXFxuIDE0MzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTtcXG4gMTQ0OlxcdFxcbiAxNDU6XFx0XFx0LyogR2V0IHRoZSBuZXh0IGF2YWlsYWJsZSBQSFkgYWRkcmVzcywgdXAgdG8gTlVNX0ZQICovXFxuIDE0NjpcXHRcXHRwaHlfYWRkciA9IGZpeGVkX3BoeV9nZXRfZnJlZV9hZGRyKCk7XFxuIDE0NzpcXHRcXHRpZiAocGh5X2FkZHIgXFx1MDAzYyAwKVxcbiAxNDg6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIocGh5X2FkZHIpO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRmbWJfZml4ZWRfcGh5c1twaHlfYWRkcl0uc3RhdHVzID0gKnN0YXR1cztcXG4gMTUxOlxcdFxcdGZtYl9maXhlZF9waHlzW3BoeV9hZGRyXS5zdGF0dXMubGluayA9IHRydWU7XFxuIDE1MjpcXHRcXG4gMTUzOlxcdFxcdHBoeSA9IGdldF9waHlfZGV2aWNlKGZtYl9taWlfYnVzLCBwaHlfYWRkciwgZmFsc2UpO1xcbiAxNTQ6XFx0XFx0aWYgKElTX0VSUihwaHkpKSB7XFxuIDE1NTpcXHRcXHRcXHRmaXhlZF9waHlfZGVsKHBoeV9hZGRyKTtcXG4gMTU2OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiAxNTc6XFx0XFx0fVxcbiAxNTg6XFx0XFxuIDE1OTpcXHRcXHRvZl9ub2RlX2dldChucCk7XFxuIDE2MDpcXHRcXHRwaHktXFx1MDAzZW1kaW8uZGV2Lm9mX25vZGUgPSBucDtcXG4gMTYxOlxcdFxcdHBoeS1cXHUwMDNlaXNfcHNldWRvX2ZpeGVkX2xpbmsgPSB0cnVlO1xcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHRyZXQgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XFxuIDE2NDpcXHRcXHRpZiAocmV0KSB7XFxuIDE2NTpcXHRcXHRcXHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcXG4gMTY2OlxcdFxcdFxcdG9mX25vZGVfcHV0KG5wKTtcXG4gMTY3OlxcdFxcdFxcdGZpeGVkX3BoeV9kZWwocGh5X2FkZHIpO1xcbiAxNjg6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gMTY5OlxcdFxcdH1cXG4gMTcwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjoxNy40MjM0NDk2MjZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM3Nzc5NTA0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBQSFkgSUQgUmV0cmlldmFsKipcblxuQWxyaWdodCwgc28gYGdldF9waHlfZGV2aWNlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIHN1cHBvc2VkIHRvIHB1bGwgdGhlIFBIWSBJRCBvZmYgdGhlIE1ESU8gYnVzLiBUaGF0IG1ha2VzIHNlbnNlLCBzdGFuZGFyZCBwcmFjdGljZS4gQnV0IHRoZSBxdWVzdGlvbiBpczogaG93IGlzIHRoZSBNRElPIGJ1cyAqYWN0dWFsbHkqIGJlaW5nIGFjY2Vzc2VkIGhlcmU/IEkgbmVlZCB0byB0cmFjZSB0aGUgcmVhZCBvcGVyYXRpb24gdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMga29zaGVyLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGF0IGBmbWJfbWlpX2J1c2AgaXMgZG9pbmc7IHRoYXQgbGlrZWx5IGhvbGRzIHRoZSBsb3dlci1sZXZlbCBidXMgYWNjZXNzIGNvZGUuIEFuZCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRhdGEgYWNjZXNzLCBJIHNob3VsZCBsb29rIGRpcmVjdGx5IGludG8gYGZpeGVkX21kaW9fcmVhZGAuIFRoYXQncyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBzZWUgdGhlIGxvdy1sZXZlbCByZWdpc3RlciBpbnRlcmFjdGlvbnMuIEkgc3VzcGVjdCBJIG1pZ2h0IGZpbmQgdGhlIHNwZWNpZmljIE1ESU8gcmVhZCBzZXF1ZW5jZSBhbmQgYWRkcmVzcyBzZXR1cCB0aGVyZSwgbWF5YmUgd2l0aCBzb21lIGJpdC1iYW5naW5nIGRldGFpbHMgZGVwZW5kaW5nIG9uIHRoZSBoYXJkd2FyZS4gVW5kZXJzdGFuZGluZyB0aGF0IHdpbGwgdmFsaWRhdGUgdGhlIGVudGlyZSBQSFkgSUQgcmV0cmlldmFsIHNlcXVlbmNlIGFuZCBoZWxwIHNwb3QgYW55IHBvdGVudGlhbCBpc3N1ZXMsIGxpa2UgaW5jb3JyZWN0IGFkZHJlc3Npbmcgb3IgdGltaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM0MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzI6MjYuODAxMjQ4MjIxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY3MDMzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaXhlZF9tZGlvX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz01OT1FWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02MC1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NjE6c3RhdGljIGludCBmaXhlZF9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSlcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTE5NT1zdGF0aWMgaW50IF9faW5pdCBmaXhlZF9tZGlvX2J1c19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjA0LVxcdGZtYl9taWlfYnVzLVxcdTAwM2VuYW1lID0gXFxcIkZpeGVkIE1ESU8gQnVzXFxcIjtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MjA1OlxcdGZtYl9taWlfYnVzLVxcdTAwM2VyZWFkID0gXFx1MDAyNmZpeGVkX21kaW9fcmVhZDtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjA2LVxcdGZtYl9taWlfYnVzLVxcdTAwM2V3cml0ZSA9IFxcdTAwMjZmaXhlZF9tZGlvX3dyaXRlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjoyNi44NTE5MjQ0MDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkwNTM4NjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uOiBgZml4ZWRfbWRpb19yZWFkYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBvbiBteSBtaW5kIGlzIGBmaXhlZF9tZGlvX3JlYWRgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBcIkZpeGVkXCIgaW1wbGllcyBhIHNwZWNpZmljIG9yIHByZWRldGVybWluZWQgY29uZmlndXJhdGlvbiBmb3IgdGhlIE1ESU8gcmVhZCBvcGVyYXRpb24uIFRoaXMgaW1tZWRpYXRlbHkgcmFpc2VzIHNvbWUgcXVlc3Rpb25zOlxuXG4qICAgV2hhdCdzIGZpeGVkPyBJcyBpdCB0aGUgTURJTyBhZGRyZXNzLCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyB3aXRoaW4gdGhhdCBNRElPIGRldmljZSwgdGhlIGRhdGEgZm9ybWF0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBcImZpeGVkXCIgYXBwcm9hY2ggdXN1YWxseSBzYWNyaWZpY2VzIHNvbWUgZGVncmVlIG9mIGZsZXhpYmlsaXR5IGZvciBwcmVkaWN0YWJsZSBiZWhhdmlvciBvciBwb3RlbnRpYWxseSwgb3B0aW1pemF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdHJhZGUtb2ZmcyBhdCBwbGF5LlxuKiAgIFdoeSBcImZpeGVkXCI/IElzIHRoaXMgZm9yIGEgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBhIHBhcnRpY3VsYXIgdGVzdCBzZXR1cCwgb3IgcGVyaGFwcyBhIHNpbXBsaWZpZWQgZHJpdmVyIGltcGxlbWVudGF0aW9uPyBDb250ZXh0IGlzIGtleSBoZXJlLiBJcyBpdCBhIGNvcm5lciBjYXNlIG9yIHRoZSBjb21tb24gZGVmYXVsdD9cbiogICBXaGF0IGlzIGJlaW5nIHJlYWQgd2l0aCBNRElPPyBXaGF0IHN5c3RlbSB1c2VzIHRoaXM/IFdoYXQgd2lsbCBpdCB0ZWxsIG1lP1xuXG5NeSBtaW5kIHN0YXJ0cyB0byBjaHVybiB0aHJvdWdoIHJlbGF0ZWQgY29uY2VwdHM6IE1ESU8gKE1hbmFnZW1lbnQgRGF0YSBJbnB1dC9PdXRwdXQpIGlzIG9idmlvdXNseSBhIHNlcmlhbCBpbnRlcmZhY2UgY29tbW9ubHkgdXNlZCBmb3IgY29uZmlndXJpbmcgYW5kIG1vbml0b3JpbmcgUEhZcyAoUGh5c2ljYWwgTGF5ZXIgVHJhbnNjZWl2ZXJzKS4gU28sIGlmIEkgd2VyZSB0byBiZSB1c2luZyB0aGlzLCBpdCdzIHNvbWV0aGluZyBsb3dlci1sZXZlbCBoYXJkd2FyZSByZWxhdGVkLiBJJ2xsIG5lZWQgdG8gbG9vayBhdDpcblxuKiAgIERvZXMgdGhpcyBpbXBsZW1lbnRhdGlvbiBoYW5kbGUgZXJyb3IgY29uZGl0aW9ucyBhbmQgcmV0cmllcz8gXCJGaXhlZFwiIG1pZ2h0IG1lYW4gc2ltcGxlciBlcnJvciBoYW5kbGluZy5cbiogICBXaGF0J3MgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlPyBJcyB0aGlzIGEgc3RhbmRhbG9uZSBmdW5jdGlvbiwgb3IgZG9lcyBpdCBmaXQgaW50byBhIGxhcmdlciBNRElPIGRyaXZlciBvciBmcmFtZXdvcms/XG4qICAgSG93IGRvZXMgaXQgaGFuZGxlIHRoZSB0aW1pbmcgY29uc3RyYWludHMgaW5oZXJlbnQgaW4gTURJTyBjb21tdW5pY2F0aW9uPyBGaXhlZCBNRElPIGNvdWxkIGltcGx5IHNwZWNpZmljIHRpbWluZyBsb29wcy5cbiogICBXaGF0IGFib3V0IGludGVycnVwdCBoYW5kbGluZywgaWYgYW55PyBQZXJoYXBzIHRoZSBcImZpeGVkXCIgbmF0dXJlIHNpbXBsaWZpZXMgdGhlIGludGVycnVwdCBtYW5hZ2VtZW50LlxuXG5JJ20gc3RhcnRpbmcgdG8gYnVpbGQgYSBtZW50YWwgcGljdHVyZSBvZiB3aGF0IEkgZXhwZWN0IHRvIGZpbmQuIE5vdywgbGV0J3MgZGlnIGludG8gdGhlIGRldGFpbHMgdG8gY29uZmlybSB0aGVzZSBhc3N1bXB0aW9ucyBhbmQgZXhwbG9yZSB0aGUgc3BlY2lmaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkwMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMyOjMzLjc1NzMxMzI2NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjE6XFx0c3RhdGljIGludCBmaXhlZF9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSlcXG4gIDYyOlxcdHtcXG4gIDYzOlxcdFxcdHN0cnVjdCBmaXhlZF9waHkgKmZwO1xcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeV9hZGRyKTtcXG4gIDY2OlxcdFxcdGlmICghZnApXFxuICA2NzpcXHRcXHRcXHRyZXR1cm4gMHhmZmZmO1xcbiAgNjg6XFx0XFxuICA2OTpcXHRcXHRpZiAoZnAtXFx1MDAzZWxpbmtfdXBkYXRlKVxcbiAgNzA6XFx0XFx0XFx0ZnAtXFx1MDAzZWxpbmtfdXBkYXRlKGZwLVxcdTAwM2VwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2RldiwgXFx1MDAyNmZwLVxcdTAwM2VzdGF0dXMpO1xcbiAgNzE6XFx0XFxuICA3MjpcXHRcXHRyZXR1cm4gc3dwaHlfcmVhZF9yZWcocmVnX251bSwgXFx1MDAyNmZwLVxcdTAwM2VzdGF0dXMpO1xcbiAgNzM6XFx0fVxcbiAgNzQ6XFx0XFxuICA3NTpcXHRzdGF0aWMgaW50IGZpeGVkX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSxcXG4gIDc2OlxcdFxcdFxcdFxcdCAgICB1MTYgdmFsKVxcbiAgNzc6XFx0e1xcbiAgNzg6XFx0XFx0cmV0dXJuIDA7XFxuICA3OTpcXHR9XFxuICA4MDpcXHRcXG4gIDgxOlxcdC8qXFxuICA4MjpcXHQgKiBJZiBzb21ldGhpbmcgd2VpcmQgaXMgcmVxdWlyZWQgdG8gYmUgZG9uZSB3aXRoIGxpbmsvc3BlZWQsXFxuICA4MzpcXHQgKiBuZXR3b3JrIGRyaXZlciBpcyBhYmxlIHRvIGFzc2lnbiBhIGZ1bmN0aW9uIHRvIGltcGxlbWVudCB0aGlzLlxcbiAgODQ6XFx0ICogTWF5IGJlIHVzZWZ1bCBmb3IgUEhZJ3MgdGhhdCBuZWVkIHRvIGJlIHNvZnR3YXJlLWRyaXZlbi5cXG4gIDg1OlxcdCAqL1xcbiAgODY6XFx0aW50IGZpeGVkX3BoeV9zZXRfbGlua191cGRhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gIDg3OlxcdFxcdFxcdFxcdCAgICAgIGludCAoKmxpbmtfdXBkYXRlKShzdHJ1Y3QgbmV0X2RldmljZSAqLFxcbiAgODg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICopKVxcbiAgODk6XFx0e1xcbiAgOTA6XFx0XFx0c3RydWN0IGZpeGVkX3BoeSAqZnA7XFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdGlmICghcGh5ZGV2IHx8ICFwaHlkZXYtXFx1MDAzZW1kaW8uYnVzKVxcbiAgOTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA5NDpcXHRcXG4gIDk1OlxcdFxcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbiAgOTY6XFx0XFx0aWYgKCFmcClcXG4gIDk3OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRmcC1cXHUwMDNlbGlua191cGRhdGUgPSBsaW5rX3VwZGF0ZTtcXG4gMTAwOlxcdFxcdGZwLVxcdTAwM2VwaHlkZXYgPSBwaHlkZXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMyOjMzLjc1NzM4MDAzNVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTUzOTA2OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBgc3dwaHlfcmVhZF9yZWdgIGZvciBQSFkgSUQgUmV0cmlldmFsKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBzd3BoeV9yZWFkX3JlZ2AgaXMgc3VwcG9zZWQgdG8gZ2l2ZSB1cyB0aGUgUEhZIElELiBUaGF0IG1ha2VzIHNlbnNlLCBhIHN0YW5kYXJkIGFwcHJvYWNoLiBOb3csIG15IGZpcnN0IG1vdmUgaXMgdG8gZGlnIGluIGFuZCB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBJIHdhbnQgdG8gcXVpY2tseSBjb25maXJtIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZWFkaW5nIHRoaXMgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoYXQgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbi4gV2hhdCdzIHRoZSByZWdpc3RlciBtYXAgaW4gdGhlIHVuZGVybHlpbmcgc2lsaWNvbiwgYW5kIHdoYXQncyB0aGUgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlPyBMZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZS4gSSdtIHRoaW5raW5nIHRoZSBsb2dpY2FsIGZsb3cgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGFjY2VzcywgcG9zc2libHkgd2l0aCBzb21lIGVycm9yIGNoZWNraW5nLiBCdXQgSSBuZWVkIHRvIGJlIHN1cmUuIEknbGwgbWVudGFsbHkgd2FsayB0aHJvdWdoIGl0IGFuZCBtYWtlIHN1cmUgdGhhdCBpdCByZXR1cm5zIHRoZSBleHBlY3RlZCBQSFkgSUQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTE5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjozNy4zMTEyOTAyNjlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODQxMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3cGh5X3JlYWRfcmVnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTYxPXN0YXRpYyBpbnQgZml4ZWRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0pXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNzEtXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjcyOlxcdHJldHVybiBzd3BoeV9yZWFkX3JlZyhyZWdfbnVtLCBcXHUwMDI2ZnAtXFx1MDAzZXN0YXR1cyk7XFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTczLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MzM1OD1zdGF0aWMgaW50IHBoeWxpbmtfbWlpX2VtdWxfcmVhZCh1bnNpZ25lZCBpbnQgcmVnLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzcwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzM3MTpcXHR2YWwgPSBzd3BoeV9yZWFkX3JlZyhyZWcsIFxcdTAwMjZmcyk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzcyLVxcdGlmIChyZWcgPT0gTUlJX0JNU1IpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jPTEwNj1FWFBPUlRfU1lNQk9MX0dQTChzd3BoeV92YWxpZGF0ZV9zdGF0ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy0xMDgtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmM6MTA5OiAqIHN3cGh5X3JlYWRfcmVnIC0gcmV0dXJuIGEgTUlJIHJlZ2lzdGVyIGZyb20gdGhlIGZpeGVkIHBoeSBzdGF0ZVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExMC0gKiBAcmVnOiBNSUkgcmVnaXN0ZXJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5jLTExNC0gKi9cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzoxMTU6aW50IHN3cGh5X3JlYWRfcmVnKGludCByZWcsIGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0ZSlcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYy0xMTYte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5LmMtMTc0LX1cXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuYzoxNzU6RVhQT1JUX1NZTUJPTF9HUEwoc3dwaHlfcmVhZF9yZWcpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N3cGh5Lmg9Nz1pbnQgc3dwaHlfdmFsaWRhdGVfc3RhdGUoY29uc3Qgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgKnN0YXRlKTtcXG5kcml2ZXJzL25ldC9waHkvc3dwaHkuaDo4OmludCBzd3BoeV9yZWFkX3JlZyhpbnQgcmVnLCBjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpO1xcbmRyaXZlcnMvbmV0L3BoeS9zd3BoeS5oLTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMyOjM3LjM2MjEzNTkxM1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM4MjQ5MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgc3dwaHlfcmVhZF9yZWdgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYHN3cGh5X3JlYWRfcmVnYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvcGh5L3N3cGh5LmNgIGZpbGUuIEknbSBhbHJlYWR5IHZpc3VhbGl6aW5nIHRoZSBsaWtlbHkgYXJjaGl0ZWN0dXJlLCBrbm93aW5nIGl0IHJlc2lkZXMgd2l0aGluIHRoZSBzd2l0Y2ggUEhZIGRyaXZlci4gVGhpcyBtZWFucyBJIGV4cGVjdCB0byBmaW5kIHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcywgc3BlY2lmaWMgdG8gd2hhdGV2ZXIgaGFyZHdhcmUgYWJzdHJhY3Rpb24gdGhlIHN3aXRjaCBQSFkgdXNlcy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhcyB0byB0aGUgdW5kZXJseWluZyBJMkMvU1BJL01ESU8gYnVzIGludGVyYWN0aW9ucywgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgbWFwcGluZywgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGFueSBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3Mgb3Igd29ya2Fyb3VuZHMgaW4gdGhpcyByZWFkIGZ1bmN0aW9uLiBNeSBleHBlcnRpc2UgYWxsb3dzIG1lIHRvIGFudGljaXBhdGUgY29tbW9uIGlzc3VlcyBsaWtlIHRpbWluZyBjb25zdHJhaW50cywgcmVhZC1tb2RpZnktd3JpdGUgc2VxdWVuY2VzIChpZiBhcHBsaWNhYmxlKSwgYW5kIGFueSBwb3RlbnRpYWwgZXJyb3IgaGFuZGxpbmcgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgZm9yIHJvYnVzdCBvcGVyYXRpb24uIFRoZSBhaW0gaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IGEgcmVnaXN0ZXIgaXMgcmVhZCBmcm9tIGEgc3dpdGNoIFBIWS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjo0MS41MDAzODc4OTdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3N3cGh5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE1OlxcdGludCBzd3BoeV9yZWFkX3JlZyhpbnQgcmVnLCBjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdGUpXFxuIDExNjpcXHR7XFxuIDExNzpcXHRcXHRpbnQgc3BlZWRfaW5kZXgsIGR1cGxleF9pbmRleDtcXG4gMTE4OlxcdFxcdHUxNiBibXNyID0gQk1TUl9BTkVHQ0FQQUJMRTtcXG4gMTE5OlxcdFxcdHUxNiBlc3RhdCA9IDA7XFxuIDEyMDpcXHRcXHR1MTYgbHBhZ2IgPSAwO1xcbiAxMjE6XFx0XFx0dTE2IGxwYSA9IDA7XFxuIDEyMjpcXHRcXG4gMTIzOlxcdFxcdGlmIChyZWcgXFx1MDAzZSBNSUlfUkVHU19OVU0pXFxuIDEyNDpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDEyNTpcXHRcXG4gMTI2OlxcdFxcdHNwZWVkX2luZGV4ID0gc3dwaHlfZGVjb2RlX3NwZWVkKHN0YXRlLVxcdTAwM2VzcGVlZCk7XFxuIDEyNzpcXHRcXHRpZiAoV0FSTl9PTihzcGVlZF9pbmRleCBcXHUwMDNjIDApKVxcbiAxMjg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDEyOTpcXHRcXG4gMTMwOlxcdFxcdGR1cGxleF9pbmRleCA9IHN0YXRlLVxcdTAwM2VkdXBsZXggPyBTV01JSV9EVVBMRVhfRlVMTCA6IFNXTUlJX0RVUExFWF9IQUxGO1xcbiAxMzE6XFx0XFxuIDEzMjpcXHRcXHRibXNyIHw9IHNwZWVkW3NwZWVkX2luZGV4XS5ibXNyIFxcdTAwMjYgZHVwbGV4W2R1cGxleF9pbmRleF0uYm1zcjtcXG4gMTMzOlxcdFxcdGVzdGF0IHw9IHNwZWVkW3NwZWVkX2luZGV4XS5lc3RhdCBcXHUwMDI2IGR1cGxleFtkdXBsZXhfaW5kZXhdLmVzdGF0O1xcbiAxMzQ6XFx0XFxuIDEzNTpcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWxpbmspIHtcXG4gMTM2OlxcdFxcdFxcdGJtc3IgfD0gQk1TUl9MU1RBVFVTIHwgQk1TUl9BTkVHQ09NUExFVEU7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdFxcdGxwYSAgIHw9IHNwZWVkW3NwZWVkX2luZGV4XS5scGEgICBcXHUwMDI2IGR1cGxleFtkdXBsZXhfaW5kZXhdLmxwYTtcXG4gMTM5OlxcdFxcdFxcdGxwYWdiIHw9IHNwZWVkW3NwZWVkX2luZGV4XS5scGFnYiBcXHUwMDI2IGR1cGxleFtkdXBsZXhfaW5kZXhdLmxwYWdiO1xcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZXBhdXNlKVxcbiAxNDI6XFx0XFx0XFx0XFx0bHBhIHw9IExQQV9QQVVTRV9DQVA7XFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlYXN5bV9wYXVzZSlcXG4gMTQ1OlxcdFxcdFxcdFxcdGxwYSB8PSBMUEFfUEFVU0VfQVNZTTtcXG4gMTQ2OlxcdFxcdH1cXG4gMTQ3OlxcdFxcbiAxNDg6XFx0XFx0c3dpdGNoIChyZWcpIHtcXG4gMTQ5OlxcdFxcdGNhc2UgTUlJX0JNQ1I6XFxuIDE1MDpcXHRcXHRcXHRyZXR1cm4gQk1DUl9BTkVOQUJMRTtcXG4gMTUxOlxcdFxcdGNhc2UgTUlJX0JNU1I6XFxuIDE1MjpcXHRcXHRcXHRyZXR1cm4gYm1zcjtcXG4gMTUzOlxcdFxcdGNhc2UgTUlJX1BIWVNJRDE6XFxuIDE1NDpcXHRcXHRjYXNlIE1JSV9QSFlTSUQyOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjo0MS41MDA0NTMzOTdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxNzY3Mjk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGV4cGVyaWVuY2luZyBpdDpcblxuKipEZWNvZGluZyBUaGlzIFJlZ2lzdGVyIFJlYWRpbmcqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gbG9va2luZyBhdCB0aGlzIG91dHB1dCBhbmQgSSdtIHNlZWluZyBzb21ldGhpbmcgcmVhbGx5IHVuZXhwZWN0ZWQgd2l0aCB0aGlzIGBzd3BoeV9yZWFkX3JlZ2AgZnVuY3Rpb24uIEl0J3MgcmV0dXJuaW5nIHplcm8gZm9yIGJvdGggYE1JSV9QSFlTSUQxYCBhbmQgYE1JSV9QSFlTSUQyYC4gTm93LCBJIGtub3cgdGhlIHNpZ25pZmljYW5jZSBvZiB0aG9zZSByZWdpc3RlcnMg4oCTIHRoZXkgc2hvdWxkIGJlIGhvbGRpbmcgdGhlIFBIWSBpZGVudGlmaWVyLCByaWdodD8gVXN1YWxseSwgeW91IGdldCBzb21lIG5vbi16ZXJvIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHRoZSBzcGVjaWZpYyBQSFkgbW9kZWwuIFRoaXMgemVybyByZWFkaW5nIGlzIGRlZmluaXRlbHkgYSByZWQgZmxhZywgYW5kIG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gU29tZXRoaW5nIGlzbid0IHdvcmtpbmcgYXMgSSB3b3VsZCBleHBlY3QsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBJIGFtIGdldHRpbmcgYSB6ZXJvIHJlc3VsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NDAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMyOjQ2LjExODEyODQ5MloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvc3dwaHkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTM6XFx0XFx0Y2FzZSBNSUlfUEhZU0lEMTpcXG4gMTU0OlxcdFxcdGNhc2UgTUlJX1BIWVNJRDI6XFxuIDE1NTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTU2OlxcdFxcdGNhc2UgTUlJX0xQQTpcXG4gMTU3OlxcdFxcdFxcdHJldHVybiBscGE7XFxuIDE1ODpcXHRcXHRjYXNlIE1JSV9TVEFUMTAwMDpcXG4gMTU5OlxcdFxcdFxcdHJldHVybiBscGFnYjtcXG4gMTYwOlxcdFxcdGNhc2UgTUlJX0VTVEFUVVM6XFxuIDE2MTpcXHRcXHRcXHRyZXR1cm4gZXN0YXQ7XFxuIDE2MjpcXHRcXG4gMTYzOlxcdFxcdC8qXFxuIDE2NDpcXHRcXHQgKiBXZSBkbyBub3Qgc3VwcG9ydCBlbXVsYXRpbmcgQ2xhdXNlIDQ1IG92ZXIgQ2xhdXNlIDIyIHJlZ2lzdGVyXFxuIDE2NTpcXHRcXHQgKiByZWFkcy4gIFJldHVybiBhbiBlcnJvciBpbnN0ZWFkIG9mIGJvZ3VzIGRhdGEuXFxuIDE2NjpcXHRcXHQgKi9cXG4gMTY3OlxcdFxcdGNhc2UgTUlJX01NRF9DVFJMOlxcbiAxNjg6XFx0XFx0Y2FzZSBNSUlfTU1EX0RBVEE6XFxuIDE2OTpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdGRlZmF1bHQ6XFxuIDE3MjpcXHRcXHRcXHRyZXR1cm4gMHhmZmZmO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjo0Ni4xMTgxODY4MjJaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU3MDM5Njk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFBIWSBJZGVudGlmaWNhdGlvbiBhbmQgVmlydHVhbCBNRElPIEJ1c2VzKipcblxuT2theSwgc28gdGhpcyBgZml4ZWRfcGh5YCBkcml2ZXIgY29uc2lzdGVudGx5IHJldHVybnMgYSBQSFkgSUQgb2YgMC4gVGhhdCBjb25maXJtcyBpdDogSSBjYW4ndCByZWx5IG9uIGl0IHRvIHByb2JlIGp1c3QgYW55IGFyYml0cmFyeSBQSFkgZHJpdmVyLiBJdCdzIHRvbyBsaW1pdGVkIGZvciBnZW5lcmFsLXB1cnBvc2UgdXNlLCB3aGljaCBpcyBhIGtleSByZXN0cmljdGlvbiBJJ3ZlIGJlZW4gdHJ5aW5nIHRvIGtlZXAgaW4gbWluZC5cblxuTm93LCBsZXQncyB0aGluayBiaWdnZXIuIElzIHRoZXJlIHNvbWUgb3RoZXIga2luZCBvZiB2aXJ0dWFsIE1ESU8gYnVzIEkgY2FuIGxldmVyYWdlPyBJIGtlZXAgdGhpbmtpbmcgYWJvdXQgdGhlc2UgdmlydHVhbCBlbnZpcm9ubWVudHMuXG5cbldoYXQgYWJvdXQgYGRzYV9sb29wYD8gSSBzZWUgaXQgdXNlcyB0aGUgYGZpeGVkLTBgIGJ1cywgd2hpY2ggSSd2ZSBzZWVuIGJlZm9yZSwgYnV0IGl0IGFsc28gcmVnaXN0ZXJzIGl0cyBvd24gYHN3aXRjaF9tZGlvZGV2YC4gQWhhISBUaGF0J3MgaXQhIGBkc2FfbG9vcGAgKnJlZ2lzdGVycyogYSBEU0Egc3dpdGNoLiBBbmQgdGhhdCBEU0Egc3dpdGNoIGhhcyBpdHMgKm93biogTURJTyBidXMsIHRoYXQgYGRzLVx1MDAzZXVzZXJfbWlpX2J1c2AuIEkgbmVlZCB0byBkaWcgaW50byB0aGF0IGFuZCBzZWUgaG93IHRoYXQgYnVzIGlzIGNvbnN0cnVjdGVkLlxuXG5UaW1lIHRvIGRpdmUgaW50byBgZHNhX2xvb3BfcGh5X3JlYWRgIGFuZCBzZWUgd2hhdCB0cmlja3MgaXQncyBnb3QgdXAgaXRzIHNsZWV2ZS4gTGV0J3Mgc2VlIGhvdyB0aGF0IERTQSB2aXJ0dWFsIGJ1cyBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTM2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzI6NTIuNjg4NTg2MDQ1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4NDpcXHRzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXFxuIDE4NTpcXHR7XFxuIDE4NjpcXHRcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG4gMTg3OlxcdFxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbiAxODg6XFx0XFx0aW50IHJldDtcXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0cmV0ID0gbWRpb2J1c19yZWFkX25lc3RlZChidXMsIHBzLVxcdTAwM2Vwb3J0X2Jhc2UgKyBwb3J0LCByZWdudW0pO1xcbiAxOTE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDE5MjpcXHRcXHRcXHRwcy1cXHUwMDNlcG9ydHNbcG9ydF0ubWliW0RTQV9MT09QX1BIWV9SRUFEX0VSUl0udmFsKys7XFxuIDE5MzpcXHRcXHRlbHNlXFxuIDE5NDpcXHRcXHRcXHRwcy1cXHUwMDNlcG9ydHNbcG9ydF0ubWliW0RTQV9MT09QX1BIWV9SRUFEX09LXS52YWwrKztcXG4gMTk1OlxcdFxcbiAxOTY6XFx0XFx0cmV0dXJuIHJldDtcXG4gMTk3OlxcdH1cXG4gMTk4OlxcdFxcbiAxOTk6XFx0c3RhdGljIGludCBkc2FfbG9vcF9waHlfd3JpdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gMjAwOlxcdFxcdFxcdFxcdCAgICAgIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4gMjAxOlxcdHtcXG4gMjAyOlxcdFxcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVxcdTAwM2Vwcml2O1xcbiAyMDM6XFx0XFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBzLVxcdTAwM2VidXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMyOjUyLjY4ODY2MDA4NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU3NTA0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFBIWSBJRCBhbmQgVmlydHVhbCBNRElPIEJ1c2VzKipcblxuT2theSwgc28gYGRzYV9sb29wX3BoeV9yZWFkYCBpcyBlc3NlbnRpYWxseSBwYXNzaW5nIGl0cyByZWFkcyBhbG9uZyB0byBgcHMtXHUwMDNlYnVzYCwgd2hpY2ggaXMgdGhlIGBmaXhlZC0wYCBidXMsIHJpZ2h0PyBBbmQgdGhhdCdzIHdoeSBpdCdzIHJldHVybmluZyBhIHplcm8gZm9yIHRoZSBQSFkgSUQuIE1ha2VzIHNlbnNlLiBCdXQgdGhhdCBicmluZ3MgdXAgYW5vdGhlciB0aG91Z2h0Li4uIHdoYXQgYWJvdXQgdGhlIGVsdXNpdmUgYG1kaW8tbW9ja3VwYD8gSSB3YXMgc2VhcmNoaW5nIGZvciBpdCwgYW5kIGl0J3Mgbm93aGVyZSB0byBiZSBmb3VuZC4gXG5cblRoYXQgcmFpc2VzIGEgbW9yZSBmdW5kYW1lbnRhbCBxdWVzdGlvbjogQ2FuIEkgY3JlYXRlIGEgKnZpcnR1YWwqIE1ESU8gYnVzLCBjb21wbGV0ZWx5IGZyb20gdXNlcnNwYWNlPyBMaWtlIGhvdyBgbmV0ZGV2c2ltYCBjcmVhdGVzIGEgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlPyBIbW0sIHRoYXQncyBhbiBpbnRlcmVzdGluZyBpZGVhLiBMZXQgbWUgZGl2ZSBpbnRvIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vYCBhbmQgc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgdGhlcmUgSSBjYW4gbGV2ZXJhZ2UsIG9yIGF0IGxlYXN0IGxlYXJuIGZyb20sIHRvIHNpbXVsYXRlIGFuIE1ESU8gYnVzLiBUaGlzIGZlZWxzIGxpa2UgYSBwcm9taXNpbmcgYXZlbnVlIHRvIGV4cGxvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODgyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzI6NTcuNTQ2MTY3Mjk1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk2MTU1NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMjo1Ny41OTkxMzU0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODczMTMzMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHRzIG9uIFRlc3RpbmcgUEhZIERyaXZlcnMgaW4gU3l6a2FsbGVyKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0byB0ZXN0IFBIWSBkcml2ZXJzIGVmZmVjdGl2ZWx5IHdpdGhpbiBzeXprYWxsZXIuIE15IGluaXRpYWwgdGhvdWdodHMgd2VyZSwgY291bGQgSSB1c2UgYG1hYzgwMjExX2h3c2ltYD8gTm8sIHRoYXQncyBub3QgaXQuIFRoZW4gSSBsb29rZWQgYXQgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uY2AsIHdoaWNoIHVzZXMgR1BJT3MsIGFuZCBgZHJpdmVycy9uZXQvcGh5L21kaW8tYml0YmFuZy5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLWJjbS11bmltYWMuY2AuIE5vdGhpbmcgY2xpY2tlZC5cblxuVGhlIGNvcmUgcHJvYmxlbSBpcyB0aGF0IHN5emthbGxlciBkb2Vzbid0IGhhdmUgYSB2aXJ0dWFsIE1ESU8gYnVzLiBXaXRob3V0IGl0LCBwcm9iaW5nIFBIWSBkcml2ZXJzIGluIFFFTVUgYmVjb21lcyBpbXBvc3NpYmxlIHVubGVzcyB0aGVyZSdzIGFuIGVtdWxhdGVkIG5ldHdvcmsgY2FyZCB0aGF0IGV4cG9zZXMgYW4gTURJTyBidXMgd2l0aCB0aGF0ICpzcGVjaWZpYyogUEhZIGF0dGFjaGVkLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgUUVNVSBldmVuICplbXVsYXRlKiBhIG5ldHdvcmsgY2FyZCB3aXRoIGFuIEFpcm9oYSBFTjg4MTFIIFBIWT8gVGhhdCdzIGEgMi41IEdpZ2FiaXQgUEhZLiBRRU1VIGVtdWxhdGVzIHRoaW5ncyBsaWtlIGUxMDAwLCBlMTAwMGUsIHJ0bDgxMzksIHBjbmV0LCBhbmQgYSBidW5jaCBvZiBvdGhlcnMsIGJ1dCBub25lIG9mIHRob3NlIHVzZSB0aGF0IEFpcm9oYSBQSFkuXG5cbkFscmlnaHQsIHNvIHdoYXQgYWJvdXQgZGV2aWNlIHRyZWUgb3ZlcmxheXMgYW5kIGBmd25vZGVfbWRpby5jYD8gSWYgc3l6a2FsbGVyIGNvdWxkIGluamVjdCBhIGRldmljZSB0cmVlIG92ZXJsYXksIEkgY291bGQgY3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIHdpdGggYW4gTURJTyBidXMgYW5kIGEgUEhZIG5vZGUuIEJ1dCB0aGF0IHN0aWxsIGxlYXZlcyBtZSBuZWVkaW5nIGFuIE1ESU8gYnVzIGRyaXZlciB0aGF0IGNhbiBiZSBpbnN0YW50aWF0ZWQgdmlhIGRldmljZSB0cmVlIGFuZCAqZG9lc24ndCogbmVlZCByZWFsIGhhcmR3YXJlLiBJIGNoZWNrZWQgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1tb2NrdXAuY2AgYmVmb3JlLCBidXQgaXQncyBub3QgdGhlIGFuc3dlci4gV2hhdCBhYm91dCBgZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uY2A/IEl0IHVzZXMgR1BJT3MuIE1heWJlIEkgY2FuIG1vY2sgdGhlbSB3aXRoIGBncGlvLW1vY2t1cGA/XG5cbkV2ZW4gaWYgSSBjb3VsZCB1c2UgYGdwaW8tbW9ja3VwYCB0byBjcmVhdGUgYW4gTURJTyBidXMgdXNpbmcgYG1kaW8tZ3Bpb2AsIEknZCBiZSBqdXN0IGJpdGJhbmdpbmcgR1BJT3MuIFRvIGFjdHVhbGx5ICplbXVsYXRlKiBhIFBIWSwgSSdkIG5lZWQgc29tZXRoaW5nIG9uIHRoZSBvdGhlciBzaWRlIG9mIHRob3NlIEdQSU9zIHRoYXQgY2FuIHJlc3BvbmQgdG8gdGhlIGJpdGJhbmdpbmcgYW5kIHJldHVybiB0aGUgY29ycmVjdCBQSFkgSUQuIFRoYXQgc2VlbXMgaW1wb3NzaWJsZSB3aXRob3V0IHNvbWUgc3BlY2lmaWMgbW9jayBkZXZpY2UuXG5cbldhaXQgYSBtaW51dGUuLi4gd2hhdCBpZiBJIGluc3RhbnRpYXRlIHRoZSBQSFkgZHJpdmVyICpkaXJlY3RseSogdmlhIHRoZSBkZXZpY2UgdHJlZT8gSW4gYG9mX21kaW8uY2AsIGBvZl9tZGlvYnVzX3JlZ2lzdGVyYCBzY2FucyB0aGUgZGV2aWNlIHRyZWUgZm9yIFBIWSBub2Rlcy4gQW5kIGhlcmUncyB0aGUga2lja2VyOiBJZiBhIFBIWSBub2RlIGhhcyBhIGBjb21wYXRpYmxlYCBzdHJpbmcgbGlrZSBgZXRoZXJuZXQtcGh5LWlkWFhYWC5YWFhYYCwgdGhlIE1ESU8gYnVzICp3aWxsKiBjcmVhdGUgYSBQSFkgZGV2aWNlIHdpdGggdGhhdCBJRCwgKndpdGhvdXQqIHJlYWRpbmcgdGhlIGFjdHVhbCBQSFkgSUQgZnJvbSB0aGUgYnVzISBUaGlzIGlzIHRoZSBwcm9taXNpbmcgYXZlbnVlLCBJIG5lZWQgdG8gY2hlY2sgYG9mX21kaW8uY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjI3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMzOjA4LjQ3MjI3Mjc5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTc5NTg1MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXRoZXJuZXQtcGh5LWlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTI4PU1PRFVMRV9ERVNDUklQVElPTihcXFwiT3BlbkZpcm13YXJlIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1xcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMzAtLyogRXh0cmFjdCB0aGUgY2xhdXNlIDIyIHBoeSBJRCBmcm9tIHRoZSBjb21wYXRpYmxlIHN0cmluZyBvZiB0aGUgZm9ybVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjMxOiAqIGV0aGVybmV0LXBoeS1pZEFBQUEuQkJCQiAqL1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTMyLXN0YXRpYyBpbnQgb2ZfZ2V0X3BoeV9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgdTMyICpwaHlfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz04Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB3aGl0ZWxpc3RfcGh5c1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMTAyLSAqIFJldHVybiB0cnVlIGlmIHRoZSBjaGlsZCBub2RlIGlzIGZvciBhIHBoeS4gSXQgbXVzdCBlaXRoZXI6XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6MTAzOiAqIG8gQ29tcGF0aWJsZSBzdHJpbmcgb2YgXFxcImV0aGVybmV0LXBoeS1pZFguWFxcXCJcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0xMDQtICogbyBDb21wYXRpYmxlIHN0cmluZyBvZiBcXFwiZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jNDVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMzOjA4Ljg3MDIzNTcwOVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODcwMzg2NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFBsYW4gdG8gU2ltdWxhdGUgYSBQSFkgRGV2aWNlKipcblxuT2theSwgaGVyZSdzIHRoZSBnYW1lIHBsYW46IEkndmUgZ290IHRoaXMgZGV2aWNlIHRyZWUgbm9kZSB3aXRoIGBjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWQwM2EyLmE0MTFcImAuIFRoZSBpbnRlbnRpb24gaXMgdGhhdCBgb2ZfbWRpb2J1c19yZWdpc3RlcmAgc2hvdWxkIGdlbmVyYXRlIGEgUEhZIGRldmljZSB3aXRoIHRoYXQgZXhhY3QgSUQuIFRoYXQncyBhIHNvbGlkIHN0YXJ0LiBUaGUgY2F0Y2gsIG9mIGNvdXJzZSwgaXMgdGhhdCBJIG5lZWQgYW4gTURJTyBidXMgZm9yIGl0IHRvIGxhdGNoIG9udG8uXG5cbkhtbSwgY2FuIEkgY29vayB1cCBhbiBNRElPIGJ1cyB1c2luZyBkZXZpY2UgdHJlZSB3aXRob3V0IHJlcXVpcmluZyBhbnkgcGh5c2ljYWwgaGFyZHdhcmU/IFRoZSBgbWRpby1ncGlvYCBkcml2ZXIgbG9va3MgcHJvbWlzaW5nLiBJdCBzZWVtcyBsaWtlIGlmIEkgY2FuIGdldCB0aGF0IHRvIGxvYWQsIGV2ZW4gaWYgdGhlIGFjdHVhbCBNRElPIHJlYWRzIGFuZCB3cml0ZXMgYXJlIGp1bmsgKG9yLCBsZXQncyBiZSBob25lc3QsIHJldHVybmluZyBgMHhmZmZmYCB0aGUgd2hvbGUgdGltZSksIHRoZSBjcnVjaWFsIHRoaW5nIGlzIHRoYXQgdGhlIFBIWSBkZXZpY2Ugd2lsbCAqc3RpbGwqIGJlIGNyZWF0ZWQgYW5kIHJlZ2lzdGVyZWQsIHJpZ2h0P1xuXG5JZiB0aGUgUEhZIGRldmljZSBnZXRzIGNyZWF0ZWQsIHRoZW4gYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIHdpbGwgYmUgY2FsbGVkLiBUaGF0IHRoZW4gbWVhbnMgdGhlIGRyaXZlciBjb3JlIHdpbGwgdXNlIHRoZSBQSFkgSUQgdG8gZmluZCB0aGUgY29ycmVjdCBkcml2ZXIgYW5kIHJ1biBpdHMgYHByb2JlYCBmdW5jdGlvbiwgeWVzP1xuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgdGhpczogZG9lcyBgcGh5X2RldmljZV9yZWdpc3RlcmAgKmRlbWFuZCogdGhhdCB0aGUgTURJTyBidXMgYWN0dWFsbHkgYmUgb3BlcmF0aW9uYWw/IEkgbmVlZCB0byBkaWcgaW50byB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc4NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzoxNC43NDA2MjU5MzVaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NzA4NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9kZXZpY2VfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTExMDM9RVhQT1JUX1NZTUJPTChnZXRfcGh5X2RldmljZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDUtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTA2OiAqIHBoeV9kZXZpY2VfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXNcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDctICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTA4LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEwOTppbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExMC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDEtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0MjpFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0My1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0OC0gKiBUaGlzIGRvZXNuJ3QgZnJlZSB0aGUgcGh5X2RldmljZSBpdHNlbGYsIGl0IG1lcmVseSByZXZlcnNlcyB0aGUgZWZmZWN0c1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0OTogKiBvZiBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkuIFVzZSBwaHlfZGV2aWNlX2ZyZWUoKSB0byBmcmVlIHRoZSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNTAtICogYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzoxNC44MDUzNDA3MThaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5Mzg4MjIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIHRoZSBjb3JlIG9mIGhvdyBhIFBIWSBkZXZpY2UgZ2V0cyBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGRldmljZSBkcml2ZXIgZnJhbWV3b3JrLiBJcyBpdCBhIGRpcmVjdCBlbnRyeSBwb2ludCwgb3IgZG9lcyBpdCByZWx5IG9uIHN1cHBvcnRpbmcgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGxheWVyLCB0aGUgTURJTyBidXMgZHJpdmVyLCBhbmQgYW55IHBvdGVudGlhbCBwb3dlciBtYW5hZ2VtZW50IG1lY2hhbmlzbXMuXG5cbioqQW5hbHl6aW5nIHRoZSBQSFkgRGV2aWNlIFJlZ2lzdHJhdGlvbiBQcm9jZXNzKipcblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlOiB3aGF0IGRhdGEgc3RydWN0dXJlcyBkb2VzIGl0IGV4cGVjdCwgYW5kIHdoYXQncyB0aGUgdHlwaWNhbCBmbG93PyBJJ20gYW50aWNpcGF0aW5nIGFyZ3VtZW50cyBmb3IgdGhlIGRldmljZSBpdHNlbGYgKGxpa2VseSBhIGBzdHJ1Y3QgcGh5X2RldmljZWAgb3Igc2ltaWxhciksIGl0cyBhc3NvY2lhdGVkIE1ESU8gYnVzIGFkZHJlc3MsIGEgcG9pbnRlciB0byB0aGUgTURJTyBidXMgZHJpdmVyLCBhbmQgcG90ZW50aWFsbHksIHNvbWUgY3VzdG9tIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIGVycm9yIGNvZGVzIHJldHVybmVkIGFuZCBob3cgdGhvc2UgYXJlIGhhbmRsZWQg4oCTIGVycm9yIGhhbmRsaW5nIGlzIGNyaXRpY2FsIGluIHRoaXMgdHlwZSBvZiBsb3ctbGV2ZWwgY29kZS4gQXJlIGVycm9ycyBzaW1wbHkgbG9nZ2VkLCBvciBkbyB0aGV5IHRyaWdnZXIgbW9yZSBleHRlbnNpdmUgcmVjb3ZlcnkgcHJvY2VkdXJlcz9cblxuSSdsbCBhbHNvIGtlZXAgYSBsb29rb3V0IGZvciByZXNvdXJjZSBhbGxvY2F0aW9uOiBkb2VzIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyBkeW5hbWljYWxseSBhbGxvY2F0ZSBhbnkgbWVtb3J5LCBhbmQgaWYgc28sIGhvdyBpcyBpdCBtYW5hZ2VkPyBNZW1vcnkgbGVha3MgYXJlIGEgc2VyaW91cyBpc3N1ZSwgc28gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgZW5zdXJlcyBwcm9wZXIgY2xlYW51cCBvbiBmYWlsdXJlIG9yIHVucmVnaXN0cmF0aW9uLiBDb25zaWRlcmluZyB0aGUgcm9sZSBvZiBQSFkgZGV2aWNlcywgd2hpY2ggYXJlIG9mdGVuIHRpbWUtY3JpdGljYWwgY29tcG9uZW50cywgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgbG9ja3Mgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkPyBGaW5hbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZXMgd2l0aCB0aGUgYnJvYWRlciBkZXZpY2UgdHJlZSBvciBwbGF0Zm9ybSBkYXRhIGluaXRpYWxpemF0aW9uOyBkb2VzIGl0IHV0aWxpemUgdGhvc2UgbWVjaGFuaXNtcyBmb3IgY29uZmlndXJhdGlvbj9cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NDIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzoyMC42OTkyMjU5NDFaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwOSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEwOTpcXHRpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjExMTA6XFx0e1xcbjExMTE6XFx0XFx0aW50IGVycjtcXG4xMTEyOlxcdFxcbjExMTM6XFx0XFx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2UoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbyk7XFxuMTExNDpcXHRcXHRpZiAoZXJyKVxcbjExMTU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMTE2OlxcdFxcbjExMTc6XFx0XFx0LyogRGVhc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xcbjExMTg6XFx0XFx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDApO1xcbjExMTk6XFx0XFxuMTEyMDpcXHRcXHQvKiBSdW4gYWxsIG9mIHRoZSBmaXh1cHMgZm9yIHRoaXMgUEhZICovXFxuMTEyMTpcXHRcXHRlcnIgPSBwaHlfc2Nhbl9maXh1cHMocGh5ZGV2KTtcXG4xMTIyOlxcdFxcdGlmIChlcnIpIHtcXG4xMTIzOlxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiZmFpbGVkIHRvIGluaXRpYWxpemVcXFxcblxcXCIpO1xcbjExMjQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTEyNTpcXHRcXHR9XFxuMTEyNjpcXHRcXG4xMTI3OlxcdFxcdGVyciA9IGRldmljZV9hZGQoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYpO1xcbjExMjg6XFx0XFx0aWYgKGVycikge1xcbjExMjk6XFx0XFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJmYWlsZWQgdG8gYWRkXFxcXG5cXFwiKTtcXG4xMTMwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjExMzE6XFx0XFx0fVxcbjExMzI6XFx0XFxuMTEzMzpcXHRcXHRyZXR1cm4gMDtcXG4xMTM0OlxcdFxcbjExMzU6XFx0IG91dDpcXG4xMTM2OlxcdFxcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXFxuMTEzNzpcXHRcXHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7XFxuMTEzODpcXHRcXG4xMTM5OlxcdFxcdG1kaW9idXNfdW5yZWdpc3Rlcl9kZXZpY2UoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbyk7XFxuMTE0MDpcXHRcXHRyZXR1cm4gZXJyO1xcbjExNDE6XFx0fVxcbjExNDI6XFx0RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG4xMTQzOlxcdFxcbjExNDQ6XFx0LyoqXFxuMTE0NTpcXHQgKiBwaHlfZGV2aWNlX3JlbW92ZSAtIFJlbW92ZSBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBwaHkgZGV2aWNlIGZyb20gdGhlIE1ESU8gYnVzXFxuMTE0NjpcXHQgKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byByZW1vdmVcXG4xMTQ3OlxcdCAqXFxuMTE0ODpcXHQgKiBUaGlzIGRvZXNuJ3QgZnJlZSB0aGUgcGh5X2RldmljZSBpdHNlbGYsIGl0IG1lcmVseSByZXZlcnNlcyB0aGUgZWZmZWN0c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzoyMC42OTkzOTE3NTFaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQwMTIxNTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIFJlYXNvbmluZyBmb3IgUEhZIERldmljZSBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbiB3b3Jrcy4gRXNzZW50aWFsbHksIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHdyYXBwZXIsIHJlYWxseS4gSXQganVzdCBjYWxscyBgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2VgLCB3aGljaCBoYW5kbGVzIHRoZSBNRElPIGJ1cyBpbnRlcmFjdGlvbiwgdGhlbiBydW5zIGBwaHlfc2Nhbl9maXh1cHNgLCBwcm9iYWJseSBmb3Igc29tZSBkZXZpY2Utc3BlY2lmaWMgYWRqdXN0bWVudHMsIGFuZCBmaW5hbGx5LCBpdCBjYWxscyBgZGV2aWNlX2FkZGAuIEFoLCAqdGhhdCdzKiB0aGUga2V5LiBXaGVuIGBkZXZpY2VfYWRkYCBnZXRzIGludm9rZWQsIHRoZSBkcml2ZXIgY29yZSBraWNrcyBpbi4gVGhpcyB0cmlnZ2VycyB0aGUgcHJvYmUgc2VxdWVuY2UuIFRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBUaGUgZHJpdmVyJ3MgYHByb2JlYCBmdW5jdGlvbiBpcyB3aGF0IHdlJ3JlIGFmdGVyLiBMZXQncyBzZWUuLi4gd2hhdCdzIGl0IG5hbWVkPyBBaCwgcmlnaHQsIGluIHRoaXMgY2FzZSwgaXQgbXVzdCBiZSBgZW44ODExaF9wcm9iZWAgaW5zaWRlIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBQSFkgaW5pdGlhbGl6YXRpb24gaGFwcGVucywgSSdkIHdhZ2VyLiBHb29kLCBJIGhhdmUgYSBnb29kIGlkZWEgb2YgaG93IGl0IHdpbGwgcHJvYmUuIE5vdyBsZXQncyBzZWUgd2hhdCBpcyBpbnNpZGUgb2YgdGhhdCBmdW5jdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MjM1NzIsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMzOjI5LjEwMDYwOTM2NloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1OSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE1OTpcXHRcXG4xMTYwOlxcdFxcdC8qIG1jdSBoYXMganVzdCByZXN0YXJ0ZWQgYWZ0ZXIgZmlybXdhcmUgbG9hZCAqL1xcbjExNjE6XFx0XFx0cHJpdi1cXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTtcXG4xMTYyOlxcdFxcbjExNjM6XFx0XFx0LyogTURJT19ERVZTMS8yIGVtcHR5LCBzbyBzZXQgbW1kc19wcmVzZW50IGJpdHMgaGVyZSAqL1xcbjExNjQ6XFx0XFx0cGh5ZGV2LVxcdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xcbjExNjU6XFx0XFxuMTE2NjpcXHRcXHRyZXQgPSBlbjg4MTFoX2xlZHNfc2V0dXAocGh5ZGV2KTtcXG4xMTY3OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjExNjg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTY5OlxcdFxcbjExNzA6XFx0XFx0cHJpdi1cXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xcbjExNzE6XFx0XFx0LyogQ28tQ2xvY2sgT3V0cHV0ICovXFxuMTE3MjpcXHRcXHRyZXR1cm4gZW44ODExaF9jbGtfcHJvdmlkZXJfc2V0dXAoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIFxcdTAwMjZwcml2LVxcdTAwM2Vodyk7XFxuMTE3MzpcXHR9XFxuMTE3NDpcXHRcXG4xMTc1OlxcdHN0YXRpYyBpbnQgYW44ODExaGJfY29uZmlnX3NlcmRlc19wb2xhcml0eShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjExNzY6XFx0e1xcbjExNzc6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuMTE3ODpcXHRcXHR1MzIgcGJ1c192YWx1ZSA9IDA7XFxuMTE3OTpcXHRcXHR1bnNpZ25lZCBpbnQgcG9sO1xcbjExODA6XFx0XFx0aW50IHJldDtcXG4xMTgxOlxcdFxcbjExODI6XFx0XFx0cmV0ID0gcGh5X2dldF9tYW51YWxfcnhfcG9sYXJpdHkoZGV2X2Z3bm9kZShkZXYpLFxcbjExODM6XFx0XFx0XFx0XFx0XFx0XFx0IHBoeV9tb2RlcyhwaHlkZXYtXFx1MDAzZWludGVyZmFjZSksIFxcdTAwMjZwb2wpO1xcbjExODQ6XFx0XFx0aWYgKHJldClcXG4xMTg1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE4NjpcXHRcXHRpZiAocG9sID09IFBIWV9QT0xfTk9STUFMKVxcbjExODc6XFx0XFx0XFx0cGJ1c192YWx1ZSB8PSBBTjg4MTFIQl9SWF9QT0xBUklUWV9OT1JNQUw7XFxuMTE4ODpcXHRcXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9SWF9QT0xBUklUWSxcXG4xMTg5OlxcdFxcdFxcdFxcdFxcdFxcdCAgQU44ODExSEJfUlhfUE9MQVJJVFlfTk9STUFMLFxcbjExOTA6XFx0XFx0XFx0XFx0XFx0XFx0ICBwYnVzX3ZhbHVlKTtcXG4xMTkxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjExOTI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTkzOlxcdFxcbjExOTQ6XFx0XFx0cmV0ID0gcGh5X2dldF9tYW51YWxfdHhfcG9sYXJpdHkoZGV2X2Z3bm9kZShkZXYpLFxcbjExOTU6XFx0XFx0XFx0XFx0XFx0XFx0IHBoeV9tb2RlcyhwaHlkZXYtXFx1MDAzZWludGVyZmFjZSksIFxcdTAwMjZwb2wpO1xcbjExOTY6XFx0XFx0aWYgKHJldClcXG4xMTk3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE5ODpcXHRcXHRwYnVzX3ZhbHVlID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzM6MjkuMTAwNzEwOTk2WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTI4MzMxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBgZW44ODExaF9wcm9iZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgZW44ODExaF9wcm9iZWAgZnVuY3Rpb24sIGFuZCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSAqaGF2ZSogdG8gc2VlIHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgc2V0dXAsIHRoZSBjb250ZXh0LCB0aGUgZm91bmRhdGlvbiBpdCdzIGJ1aWx0IHVwb24uIFdoYXQncyB0aGUgZW50cnkgcG9pbnQ/IFdoYXQgYXJlIHRoZSBpbW1lZGlhdGUgY2hlY2tzPyBXaGF0IGRhdGEgaXMgYmVpbmcgYWNjZXNzZWQgcmlnaHQgb2ZmIHRoZSBiYXQ/IFdpdGhvdXQgdGhhdCBiYXNlbGluZSwgSSdtIGp1c3QgcG9raW5nIGFyb3VuZCBpbiB0aGUgZGFyay4gSnVtcGluZyBpbiBtaWQtc3RyZWFtLCB3aXRob3V0IHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWwgaW50ZW50aW9ucywgaXMganVzdCBhbWF0ZXVyIGhvdXIuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgdGhpbmcgKnN0YXJ0cyogYmVmb3JlIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMuIEdvdHRhIGdldCB0aGF0IGZ1bmRhbWVudGFsIGdyYXNwIG9mIHRoZSBpbml0aWFsIGNvbmRpdGlvbnMgZmlyc3QsIHRoZW4sIEkgY2FuIHNlZSB3aGF0IGl0ICppcyogdHJ5aW5nIHRvIGFjY29tcGxpc2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjMzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzozMy4xOTM1NDYyOTVaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0ZXJyX2Rldl9mcmVlOlxcbjExNDE6XFx0XFx0bWRpb19kZXZpY2VfZnJlZShtZGlvZGV2KTtcXG4xMTQyOlxcdFxcdHJldHVybiByZXQ7XFxuMTE0MzpcXHR9XFxuMTE0NDpcXHRcXG4xMTQ1OlxcdHN0YXRpYyBpbnQgZW44ODExaF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjExNDY6XFx0e1xcbjExNDc6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdjtcXG4xMTQ4OlxcdFxcdGludCByZXQ7XFxuMTE0OTpcXHRcXG4xMTUwOlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIHNpemVvZihzdHJ1Y3QgZW44ODExaF9wcml2KSxcXG4xMTUxOlxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMKTtcXG4xMTUyOlxcdFxcdGlmICghcHJpdilcXG4xMTUzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjExNTQ6XFx0XFx0cGh5ZGV2LVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4xMTU1OlxcdFxcbjExNTY6XFx0XFx0cmV0ID0gZW44ODExaF9sb2FkX2Zpcm13YXJlKHBoeWRldik7XFxuMTE1NzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMTU4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE1OTpcXHRcXG4xMTYwOlxcdFxcdC8qIG1jdSBoYXMganVzdCByZXN0YXJ0ZWQgYWZ0ZXIgZmlybXdhcmUgbG9hZCAqL1xcbjExNjE6XFx0XFx0cHJpdi1cXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTtcXG4xMTYyOlxcdFxcbjExNjM6XFx0XFx0LyogTURJT19ERVZTMS8yIGVtcHR5LCBzbyBzZXQgbW1kc19wcmVzZW50IGJpdHMgaGVyZSAqL1xcbjExNjQ6XFx0XFx0cGh5ZGV2LVxcdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xcbjExNjU6XFx0XFxuMTE2NjpcXHRcXHRyZXQgPSBlbjg4MTFoX2xlZHNfc2V0dXAocGh5ZGV2KTtcXG4xMTY3OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjExNjg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTY5OlxcdFxcbjExNzA6XFx0XFx0cHJpdi1cXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xcbjExNzE6XFx0XFx0LyogQ28tQ2xvY2sgT3V0cHV0ICovXFxuMTE3MjpcXHRcXHRyZXR1cm4gZW44ODExaF9jbGtfcHJvdmlkZXJfc2V0dXAoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIFxcdTAwMjZwcml2LVxcdTAwM2Vodyk7XFxuMTE3MzpcXHR9XFxuMTE3NDpcXHRcXG4xMTc1OlxcdHN0YXRpYyBpbnQgYW44ODExaGJfY29uZmlnX3NlcmRlc19wb2xhcml0eShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjExNzY6XFx0e1xcbjExNzc6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuMTE3ODpcXHRcXHR1MzIgcGJ1c192YWx1ZSA9IDA7XFxuMTE3OTpcXHRcXHR1bnNpZ25lZCBpbnQgcG9sO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzozMy4xOTM2NDgwNzVaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1Mjg5NDM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgbmV0d29yayBkcml2ZXIgZGV2ZWxvcG1lbnQ6XG5cbioqRmlybXdhcmUgTG9hZGluZyBJbnF1aXJ5KipcblxuQWxyaWdodCwgdGhlIGNvZGUncyBqdW1waW5nIHRvIGBlbjg4MTFoX2xvYWRfZmlybXdhcmUocGh5ZGV2KWAuIFRoYXQncyB0aGUgY3JpdGljYWwgZmlybXdhcmUgbG9hZGluZyBmdW5jdGlvbiBmb3IgdGhpcyBQSFkgZGV2aWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLiBTbywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGV4YW1pbmluZyB0aGUgYGVuODgxMWhfbG9hZF9maXJtd2FyZWAgZnVuY3Rpb24gZGVmaW5pdGlvbi4gSSBuZWVkIHRvIGdldCBhIGdyaXAgb24gdGhlIHNlcXVlbmNlIG9mIGFjdGlvbnMgYmVpbmcgdGFrZW4sIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBlcnJvciBwYXRocyBpbiB0aGF0IHJvdXRpbmUuIExldCdzIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZG9pbmcgd2l0aCBgcGh5ZGV2YCBub3csIGFuZCBob3BlZnVsbHkgZ2V0IHRoZSBzeXN0ZW0gdXAgYW5kIHJ1bm5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTE0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzozNy4yNDY1NDQ0MzhaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA0MDpcXHRcXHRpbml0Lm5hbWUgPSBkZXZtX2thc3ByaW50ZihkZXYsIEdGUF9LRVJORUwsIFxcXCIlcy1ja29cXFwiLFxcbjEwNDE6XFx0XFx0XFx0XFx0XFx0ICAgZndub2RlX2dldF9uYW1lKGRldl9md25vZGUoZGV2KSkpO1xcbjEwNDI6XFx0XFx0aWYgKCFpbml0Lm5hbWUpXFxuMTA0MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMDQ0OlxcdFxcbjEwNDU6XFx0XFx0aW5pdC5vcHMgPSBcXHUwMDI2ZW44ODExaF9jbGtfb3BzO1xcbjEwNDY6XFx0XFx0aW5pdC5mbGFncyA9IDA7XFxuMTA0NzpcXHRcXHRpbml0Lm51bV9wYXJlbnRzID0gMDtcXG4xMDQ4OlxcdFxcdGh3LVxcdTAwM2Vpbml0ID0gXFx1MDAyNmluaXQ7XFxuMTA0OTpcXHRcXG4xMDUwOlxcdFxcdHJldCA9IGRldm1fY2xrX2h3X3JlZ2lzdGVyKGRldiwgaHcpO1xcbjEwNTE6XFx0XFx0aWYgKHJldClcXG4xMDUyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTA1MzpcXHRcXG4xMDU0OlxcdFxcdHJldHVybiBkZXZtX29mX2Nsa19hZGRfaHdfcHJvdmlkZXIoZGV2LCBvZl9jbGtfaHdfc2ltcGxlX2dldCwgaHcpO1xcbjEwNTU6XFx0fVxcbjEwNTY6XFx0XFxuMTA1NzpcXHRzdGF0aWMgaW50IGVuODgxMWhfbGVkc19zZXR1cChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjEwNTg6XFx0e1xcbjEwNTk6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4xMDYwOlxcdFxcdGludCByZXQ7XFxuMTA2MTpcXHRcXG4xMDYyOlxcdFxcdHByaXYtXFx1MDAzZWxlZFswXS5ydWxlcyA9IEFJUl9ERUZBVUxUX1RSSUdHRVJfTEVEMDtcXG4xMDYzOlxcdFxcdHByaXYtXFx1MDAzZWxlZFsxXS5ydWxlcyA9IEFJUl9ERUZBVUxUX1RSSUdHRVJfTEVEMTtcXG4xMDY0OlxcdFxcdHByaXYtXFx1MDAzZWxlZFsyXS5ydWxlcyA9IEFJUl9ERUZBVUxUX1RSSUdHRVJfTEVEMjtcXG4xMDY1OlxcdFxcbjEwNjY6XFx0XFx0cmV0ID0gYWlyX2xlZHNfaW5pdChwaHlkZXYsIEVOODgxMUhfTEVEX0NPVU5ULCBBSVJfUEhZX0xFRF9EVVIsXFxuMTA2NzpcXHRcXHRcXHRcXHQgICAgQUlSX0xFRF9NT0RFX0RJU0FCTEUpO1xcbjEwNjg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTA2OTpcXHRcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkZhaWxlZCB0byBkaXNhYmxlIGxlZHM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEwNzA6XFx0XFxuMTA3MTpcXHRcXHRyZXR1cm4gcmV0O1xcbjEwNzI6XFx0fVxcbjEwNzM6XFx0XFxuMTA3NDpcXHRzdGF0aWMgaW50IGFuODgxMWhiX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTA3NTpcXHR7XFxuMTA3NjpcXHRcXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XFxuMTA3NzpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2O1xcbjEwNzg6XFx0XFx0aW50IHJldDtcXG4xMDc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzozNy4yNDY2NDIxODdaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQyMzkzMDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNaXNzaW5nIEZpcm13YXJlIExvYWRpbmcgRnVuY3Rpb24gLSBJbnZlc3RpZ2F0aW9uIENvbW1lbmNlcyoqXG5cbk9rYXksIGhvbGQgb24gYSBtaW51dGUuIEknbSBoaXR0aW5nIGEgcm9hZGJsb2NrIGhlcmUuIFRoZSBzeW1ib2wgYGVuODgxMWhfbG9hZF9maXJtd2FyZWAgLSBpdCdzIGp1c3Qgbm90IHNob3dpbmcgdXAgaW4gdGhlIHN5bWJvbCB0YWJsZS4gVGhhdCdzIHVuZXhwZWN0ZWQuIE15IGluaXRpYWwgYXNzdW1wdGlvbiB3YXMgdGhhdCBpdCB3b3VsZCBiZSBkZWZpbmVkLCBnaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSBsb29raW5nIGF0LiBBbHJpZ2h0LCB0aW1lIHRvIHN0YXJ0IGRpZ2dpbmcuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGxhdW5jaCBhIHNlYXJjaC4gR290dGEgZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlLCBvciBpZiB0aGVyZSdzIGJlZW4gYSBuYW1pbmcgY29udmVudGlvbiBjaGFuZ2UsIGEgbGlua2VyIGlzc3VlLCBhIHR5cG8gaW4gdGhlIGNvZGUsIG9yIHBvc3NpYmx5IHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZ29pbmcgb24gdGhhdCdzIHByZXZlbnRpbmcgaXRzIGluY2x1c2lvbi4gTGV0J3Mgc2VlIGlmIGEgcXVpY2sgc2VhcmNoIHR1cm5zIHVwIGFueSBjbHVlcyB3aXRoaW4gdGhpcyBwcm9qZWN0Li4uYW5kIG1heWJlIGV2ZW4gZXh0ZXJuYWxseSwgaWYgbmVjZXNzYXJ5LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGxvZ3MsIHJlbGV2YW50IGhlYWRlciBmaWxlcywgYW5kIHBvc3NpYmx5IGV2ZW4gc2NhbiB0aGUgc291cmNlIGNvZGUgd2l0aCBncmVwIG9yIGEgc2ltaWxhciB0b29sLiBUaGlzIGZlZWxzIGxpa2UgaXQgY291bGQgYmUgYSBzaW1wbGUgb3ZlcnNpZ2h0LCBidXQgaXQgY291bGQgYWxzbyBiZSBhIHN5bXB0b20gb2YgYSBkZWVwZXIgaW50ZWdyYXRpb24gcHJvYmxlbS4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIHNvdXJjZSBvZiB0aGlzIG1pc3NpbmcgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDA5LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMTozMzo0My42NzA1NzQ3NDZaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyOTg5MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuODgxMWhfbG9hZF9maXJtd2FyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz00NjI9c3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MDEtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTAyOnN0YXRpYyBpbnQgZW44ODExaF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTAzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTUxMy1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzo1MTQ6XFx0XFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MTUtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MTgtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTE5OlxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MjAtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MjQtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTI1OlxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MjYtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MjgtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTI5OlxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzAtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzItXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTMzOlxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzQtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzctXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTM4OlxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01MzktXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NDEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTQyOlxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NDMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NDUtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTQ2OmVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtNTQ3LVxcdHJlbGVhc2VfZmlybXdhcmUoZncyKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy01NDgtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6NTQ5OmVuODgxMWhfbG9hZF9maXJtd2FyZV9yZWwxOlxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTU1MC1cXHRyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYz0xMTQ1PXN0YXRpYyBpbnQgZW44ODExaF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTE1NS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYzoxMTU2OlxcdHJldCA9IGVuODgxMWhfbG9hZF9maXJtd2FyZShwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTExNTctXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMzOjQzLjcyMzU3MDQxMVoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg4NzQyODg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBUaGlzIFBhdGNoIGlzIE5vdCBXb3J0aCBGdXp6aW5nKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgZGVhbGluZyB3aXRoIGFuIGBhaXJfcGh5YCBhbmQgY2FsbHMgYHJlcXVlc3RfZmlybXdhcmVgLiBSaWdodCBhd2F5LCBJJ20gdGhpbmtpbmcgYWJvdXQgc3l6a2FsbGVyJ3MgZmlybXdhcmUgaW5qZWN0aW9uIGNhcGFiaWxpdGllcywgb3IgdGhlIHBvc3NpYmlsaXR5IG9mIGEgZGlyZWN0IGZhaWx1cmUuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGEgcmVnaXN0ZXIgd3JpdGUgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyaW5nIExFRCBHUElPIHBpbnMsIG1vdmVkIGZyb20gYGVuODgxMWhfcHJvYmVgIHRvIGBlbjg4MTFoX2NvbmZpZ19pbml0YC5cblxuVGhlIGNvbW1pdCBtZXNzYWdlIGNsYXJpZmllcyBpdCdzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZml4IGZvciB0aGUgRU44ODExSCBQSFkgY2hpcC4gQW5kIGhlcmUncyB0aGUga2lja2VyOiBJIGtub3cgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhpcyBQSFksIGFuZCBzeXprYWxsZXIsIHRvIG15IGtub3dsZWRnZSwgZG9lc24ndCBoYXZlIGEgdmlydHVhbCBNRElPIGJ1cyByb2J1c3QgZW5vdWdoIHRvIGZ1bGx5IHNpbXVsYXRlIHRoaXMgcGFydGljdWxhciBjaGlwJ3MgcmVnaXN0ZXJzLiBTbywgcmVhY2hpbmcgdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgaXMgYmFzaWNhbGx5IGEgbm9uLXN0YXJ0ZXIuXG5cbldhaXQsIHdpdGggYSBkZXZpY2UgdHJlZSBpbnN0YW50aWF0aW9uLCB0aGUgZHJpdmVyIHdpbGwgcHJvYmUuIEl0IGNhbGxzIGBlbjg4MTFoX2xvYWRfZmlybXdhcmVgLiBJIGNhbiBzZWUgTURJTyB3cml0ZXMsIGJ1dCB3aXRob3V0IHRoZSBhY3R1YWwgUEhZLCB0aGV5J2xsIGVpdGhlciBmYWlsIHNpbGVudGx5IG9yIHRoZSBtb2NrIGJ1cyBtYXkgcmV0dXJuIGVycm9ycy4gVGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgZW44ODExaF9jb25maWdfaW5pdGAgdXBvbiBuZXR3b3JrIGludGVyZmFjZSBhY3RpdmF0aW9uIHdpbGwgcGVyZm9ybSBhbm90aGVyIE1ESU8gd3JpdGUuXG5cbkhvbmVzdGx5LCBkb2VzIHRoaXMgZXZlbiBoYXZlICphbnkqIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIGNvcmUga2VybmVsIGxvZ2ljPyBObywgbm90IHJlYWxseS4gSXQncyBqdXN0IHdyaXRpbmcgdG8gYSByZWdpc3RlciBvbiBhIHNwZWNpZmljIFBIWS4gVGhlcmUncyBubyBjb21wbGV4IHN0YXRlIG1hY2hpbmUsIG5vIHNpZ25pZmljYW50IGludGVyYWN0aW9uIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCB0aGF0IGlzIGxpa2VseSB0byBjcmVhdGUgYSBidWcuIEEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGlzIHRoZSBvbmx5IHBvdGVudGlhbCBpc3N1ZSwgYW5kIHRoaXMgcGF0Y2gganVzdCBtb3ZlcyBhIHJlZ2lzdGVyIHdyaXRlLlxuXG5Db25zaWRlcmluZyB0aGUgZ3VpZGVsaW5lcywgSSBpbW1lZGlhdGVseSB0aGluayBvZiB0aGUgUENJZS9TbWFydE5JQy9HUFUgZHJpdmVyIGV4Y2x1c2lvbi4gV2hpbGUgdGhpcyBpc24ndCAqcHJlY2lzZWx5KiBhIFBDSWUgZHJpdmVyLCBpdCdzIGEgdmVuZG9yLXNwZWNpZmljIFBIWSBkcml2ZXIgdGhhdCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUsIG9yIGF0IGxlYXN0IGEgY2hpcCBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlIGNoYW5nZSBpcyBzaW1wbGU6IGEgcmVnaXN0ZXIgd3JpdGUgZm9yIExFRCBHUElPIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgZGVmaW5pdGVseSBub3Qgd29ydGggdGhlIHRpbWUgdG8gZnV6ei4gSXQncyBhIHZlcnkgaGFyZHdhcmUtc3BlY2lmaWMsIHRyaXZpYWwgY2hhbmdlLiBNeSBhc3Nlc3NtZW50OiAqKldvcnRoRnV6emluZz1mYWxzZS4qKlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg0MywiT3V0cHV0VG9rZW5zIjoxMTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTE6MzM6NTQuNjExMDAxOFoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgd3JpdGUgZm9yIExFRCBHUElPIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgcHJvYmUgZnVuY3Rpb24gdG8gdGhlIGNvbmZpZ19pbml0IGZ1bmN0aW9uIGluIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgYSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgY2hpcCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyBvciByZWFjaGFibGUgdmlydHVhbGl6ZWQgY29kZSBwYXRocywgYW5kIGlzIHB1cmVseSBhIGhhcmR3YXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZpeC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgd3JpdGUgZm9yIExFRCBHUElPIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgcHJvYmUgZnVuY3Rpb24gdG8gdGhlIGNvbmZpZ19pbml0IGZ1bmN0aW9uIGluIHRoZSBBaXJvaGEgRU44ODExSCBQSFkgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgYSBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgY2hpcCB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYyBvciByZWFjaGFibGUgdmlydHVhbGl6ZWQgY29kZSBwYXRocywgYW5kIGlzIHB1cmVseSBhIGhhcmR3YXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZpeC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDExOjMzOjU0LjYxMTAyNzNaIiwiU2VxIjo2MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowsmsxp[1] Phase: Running StartedAt: 2026-08-23 11:34:05 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsmsxp[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-23 11:34:05 +0000 UTC FinishedAt: 2026-08-23 11:34:10 +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,}