Name: series-workflowscmch Phase: Failed StartedAt: 2026-07-15 06:49:37 +0000 UTC FinishedAt: 2026-07-15 07:05:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscmch[0] Phase: Succeeded StartedAt: 2026-07-15 06:49:37 +0000 UTC FinishedAt: 2026-07-15 07:05:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscmch[0].run-triage Phase: Succeeded StartedAt: 2026-07-15 06:49:37 +0000 UTC FinishedAt: 2026-07-15 07:05:45 +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+CgkJCTx0ZD4yMDI2LzA3LzE1IDA3OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgdG8gdGhlIFZGSU8gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNzowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDcwZDE0MGQzMTdjMjkwODRkMjMyYzgzM2FkMjU1NmY3OWM3MWJiYzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAwNzowNToyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NmRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX2RlZmluZXMuaFxuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXG5AQCAtMCwwICYjNDM7MSBAQFxuJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mNTBkNDUwZDNlOTQ5NVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgJiM0MzsxLDU2NCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9pZHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9iYXJyaWVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWlpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZTEwMDBfcmVncy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2UxMDAwX2RlZmluZXMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlMTAwMF84MjU3NS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYgMHgxMEM5XG4mIzQzOyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcbiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUiAwXG4mIzQzOyNkZWZpbmUgTVNJWF9WRUNUT1JfTUFTSyAoMSBcdTAwM2NcdTAwM2MgTVNJWF9WRUNUT1IpXG4mIzQzOyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi9cbiYjNDM7XG4mIzQzO3N0cnVjdCBpZ2JfdHhfZGVzYyB7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3ImIzM5O3MgZGF0YSBidWZmZXIgKi9cbiYjNDM7XHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuJiM0MztcdFx0XHR1MzIgb2xpbmZvX3N0YXR1czsgLyogQ29udGV4dC9CdWZmZXIgaW5mbyAqL1xuJiM0MztcdFx0fSByZWFkO1xuJiM0MztcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi9cbiYjNDM7XHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbiYjNDM7XHRcdFx0dTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqL1xuJiM0MztcdFx0fSB3YjtcbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlnYl9yeF9kZXNjIHtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuJiM0MztcdFx0XHR1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqL1xuJiM0MztcdFx0fSByZWFkO1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovXG4mIzQzO1x0XHRcdHUxNiBoZHJfaW5mbzsgICAgIC8qIFNwbGl0IEhlYWQsIGJ1ZiBsZW4gKi9cbiYjNDM7XHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbiYjNDM7XHRcdFx0dTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqL1xuJiM0MztcdFx0XHR1MTYgbGVuZ3RoOyAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovXG4mIzQzO1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4mIzQzO1x0XHR9IHdiOyAvKiB3cml0ZWJhY2sgKi9cbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlnYiB7XG4mIzQzO1x0dm9pZCAqYmFyMDtcbiYjNDM7XHR1MzIgdHhfdGFpbDtcbiYjNDM7XHR1MzIgcnhfdGFpbDtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuJiM0MztcdHN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbiYjNDM7e1xuJiM0MztcdHdyaXRlbCh2YWwsIGlnYi1cdTAwM2ViYXIwICYjNDM7IHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlYWRsKGlnYi1cdTAwM2ViYXIwICYjNDM7IHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIG1kaWM7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQSBwcm9kdWN0aW9uIGRyaXZlciB3b3VsZCBob2xkIHRoZSBTVy9GVyBzZW1hcGhvcmUgKFNXU00uU1dFU01CSSAmIzQzOyB0aGVcbiYjNDM7XHQgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGVcbiYjNDM7XHQgKiBkZXZpY2UmIzM5O3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxuJiM0MztcdCAqIGV4Y2x1c2l2ZWx5IG9uIGEgZGVkaWNhdGVkIHRlc3QgZGV2aWNlIHdpdGggbm8gYWN0aXZlIG1hbmFnZWFiaWxpdHlcbiYjNDM7XHQgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZVxuJiM0MztcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxuJiM0MztcdCAqL1xuJiM0MztcdG1kaWMgPSAoKCh1MzIpZGF0YSkgfFxuJiM0MztcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbiYjNDM7XHRcdCgxIFx1MDAzY1x1MDAzYyBFMTAwMF9NRElDX1BIWV9TSElGVCkgfFxuJiM0MztcdFx0RTEwMDBfTURJQ19PUF9XUklURSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfTURJQywgbWRpYyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1c2xlZXAoNTApO1xuJiM0MztcdFx0bWRpYyA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9NRElDKTtcbiYjNDM7XHRcdGlmIChtZGljIFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldFxuJiM0MzsgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFja1xuJiM0MzsgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4mIzQzOyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGVcbiYjNDM7ICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LlxuJiM0MzsgKlxuJiM0MzsgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byBcJiMzNDtVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrXG4mIzQzOyAqIG9uIHRoZSA4MjU3NlwmIzM0OywgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgXCYjMzQ7TUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkXG4mIzQzOyAqIG9uIHRoaXMgZGV2aWNlLlwmIzM0OyAgUkNUTC5MQk1fTUFDIGlzIHN0aWxsIHNldCBlbHNld2hlcmUgYXMgYSBRRU1VLW9ubHlcbiYjNDM7ICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZVxuJiM0MzsgKiByYXRpb25hbGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGN0cmw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBLaWNrIHRoZSBhdXRvbmVnIG1hY2hpbmVyeSBzb2xlbHkgdG8gYnJpbmcgU1RBVFVTLkxVIHVwIHVuZGVyXG4mIzQzO1x0ICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0c1xuJiM0MztcdCAqIGF1dG9uZWctZG9uZSB0aW1lciwgYW5kIHdpdGhvdXQgTFUgc2V0IGl0cyByZWNlaXZlIHBhdGhcbiYjNDM7XHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuJiM0MztcdCAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGVcbiYjNDM7XHQgKiBiZWxvdyBjbGVhcnMgdGhlIGF1dG9uZWctZW5hYmxlIGJpdCwgc28gdGhpcyBpcyBlZmZlY3RpdmVseSBhXG4mIzQzO1x0ICogbm8tb3AgdGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0KHZvaWQpaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuJiM0MztcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbiYjNDM7XG4mIzQzO1x0LyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICYjNDM7IDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuJiM0MztcdHJldCA9IGlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfTE9PUEJBQ0sgfFxuJiM0MztcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuJiM0MztcdFx0XHQgICAgQk1DUl9GVUxMRFBMWCk7XG4mIzQzO1x0VkZJT19BU1NFUlRfRVEocmV0LCAwLCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2xcbiYjNDM7XHQgKiBzZWxmdGVzdCBpbiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnkgdGhlXG4mIzQzO1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0dXNsZWVwKDUwMDAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZ1xuJiM0MztcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4mIzQzO1x0ICogbm9ybWFsbHkgd2FpdHMgZm9yIGEgcmVhbCBuZWdvdGlhdGVkIGxpbmsuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfU1BEX1NFTDtcbiYjNDM7XHRjdHJsIHw9IEUxMDAwX0NUUkxfRlJDU1BEIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfU1BEXzEwMDAgfFxuJiM0MztcdFx0RTEwMDBfQ1RSTF9GRCB8XG4mIzQzO1x0XHRFMTAwMF9DVFJMX1NMVTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCYjMzk7cyBtc2xlZXAoNTAwKVxuJiM0MztcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuJiM0MztcdCAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCg1MDAwMDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXZmaW9fcGNpX2RldmljZV9tYXRjaChkZXZpY2UsIFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVzZXQoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlXG4mIzQzO1x0ICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb25cbiYjNDM7XHQgKiA0LjIuMS42LjEpLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCgyMDAwKTtcbiYjNDM7XHRWRklPX0FTU0VSVF9FUShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgXHUwMDI2IEUxMDAwX0NUUkxfUlNULCAwKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFByb2dyYW0gdGhlIGRldmljZSBpbnRvIGEgdXNhYmxlIHN0YXRlLiAgU3BsaXQgb3V0IG9mIGlnYl9pbml0KCkgc28gaXRcbiYjNDM7ICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxuJiM0MzsgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcbiYjNDM7ICogdmlhIFZGSU8uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHR1NjQgaW92YV90eCwgaW92YV9yeDtcbiYjNDM7XHR1MzIgY3RybCwgcmN0bDtcbiYjNDM7XHR1MTYgY21kX3JlZztcbiYjNDM7XHRpbnQgcmV0cmllcztcbiYjNDM7XG4mIzQzO1x0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNldHhfcmluZyk7XG4mIzQzO1x0aW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNlcnhfcmluZyk7XG4mIzQzO1xuJiM0MztcbiYjNDM7XG4mIzQzO1x0LyogU2lnbmFsIHRoYXQgdGhlIGRyaXZlciBpcyBsb2FkZWQgKi9cbiYjNDM7XHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcbiYjNDM7XHRjdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEO1xuJiM0MztcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBQQ0kgQnVzIE1hc3Rlci4gKi9cbiYjNDM7XHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xuJiM0MztcdGlmICgoY21kX3JlZyBcdTAwMjYgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9XG4mIzQzO1x0ICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7XG4mIzQzO1x0XHRjbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuJiM0MztcdFx0dmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXG4mIzQzO1x0aWdiX3NldHVwX2xvb3BiYWNrKGlnYik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGlzYWJsZSBETUEgcmUtc2VuZCBvbiBQQ0llIGNvbXBsZXRpb24gdGltZW91dCAoODI1NzYgZGF0YXNoZWV0XG4mIzQzO1x0ICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGVcbiYjNDM7XHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xuJiM0MztcdCAqIHVubWFwcGVkIElPVkFzOyB3aXRoIHRoZSBkZWZhdWx0IChzZXQpIHZhbHVlLCB0aGUgZGV2aWNlIGtlZXBzXG4mIzQzO1x0ICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kXG4mIzQzO1x0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxuJiM0MztcdCAqL1xuJiM0MztcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dDUiwgY3RybCk7XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCBcdTAwM2VcdTAwM2UgMzIpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREgoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcdTAwM2VcdTAwM2UgMzIpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzZcbiYjNDM7XHQgKiBkYXRhc2hlZXQgc2VjdGlvbiA3LjEuNS4yOiBcJiMzNDtTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxuJiM0MztcdCAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWxcbiYjNDM7XHQgKiBkZXNjcmlwdG9ycy5cJiMzNDsgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXG4mIzQzO1x0ICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3JcbiYjNDM7XHQgKiByZXF1aXJlcyB0aGlzIGZvcm1hdC4gIFNlY3Rpb24gOC4xMC4yIHNwZWNpZmllcyBERVNDVFlQRVsyNzoyNV0uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXNcbiYjNDM7XHQgKiBpbnRlbnRpb25hbDogcGVyIHNlY3Rpb24gNy4xLjMuMSBhIHplcm8gQlNJWkVQQUNLRVQgZmFsbHMgYmFjayB0b1xuJiM0MztcdCAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDhcbiYjNDM7XHQgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkICovXG4mIzQzO1x0cmV0cmllcyA9IDIwMDA7XG4mIzQzO1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuJiM0MztcdFx0aWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpIFx1MDAyNiBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR1c2xlZXAoMTApO1xuJiM0MztcdH1cbiYjNDM7XHRWRklPX0FTU0VSVF9HRShyZXRyaWVzLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvblxuJiM0MztcdCAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJiMzOTtzIGVtdWxhdGVkIGlnYlxuJiM0MztcdCAqIGRvZXMgbm90IGhvbm9yIFBIWSByZWdpc3RlciAwIGJpdCAxNCAoUEhZIGludGVybmFsIGxvb3BiYWNrKSBhbmRcbiYjNDM7XHQgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlhcbiYjNDM7XHQgKiBxdWV1ZS4gIERhdGFzaGVldCA4LjEwLjEgKFJDVEwgcmVnaXN0ZXIpIGFkdmlzZXMgXCYjMzQ7V2hlbiB1c2luZyB0aGVcbiYjNDM7XHQgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGJcJiMzNDssIHNvIHNldHRpbmcgTEJNX01BQ1xuJiM0MztcdCAqIGhlcmUgZGV2aWF0ZXMgZnJvbSBkYXRhc2hlZXQgZ3VpZGFuY2U7IGVtcGlyaWNhbGx5IHRoZSBiaXQgaGFzXG4mIzQzO1x0ICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFja1xuJiM0MztcdCAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlXG4mIzQzO1x0ICogc2VsZnRlc3Qgd29yayBvbiBib3RoIHJlYWwgaGFyZHdhcmUgYW5kIFFFTVUgd2l0aG91dCBjb25kaXRpb25hbFxuJiM0MztcdCAqIGNvZGUgcGF0aHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmN0bCA9IEUxMDAwX1JDVExfRU4gfCAgICAgICAvKiBSZWNlaXZlciBFbmFibGUgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovXG4mIzQzO1x0ICAgICAgIEUxMDAwX1JDVExfTVBFIHwgICAgICAvKiBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9CQU0gfCAgICAgIC8qIEJyb2FkY2FzdCBBY2NlcHQgTW9kZSAqL1xuJiM0MztcdCAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCByY3RsKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4pO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByb2dyYW0gTVNJLVggaW50ZXJydXB0IHJvdXRpbmcgcGVyIDgyNTc2IGRhdGFzaGVldDpcbiYjNDM7XHQgKlxuJiM0MztcdCAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvXG4mIzQzO1x0ICogcm91dGUgaW50ZXJydXB0IGNhdXNlcyB0aHJvdWdoIElWQVIgbWFwcGluZywgYW5kIEVJQU1FIChiaXQgMzApXG4mIzQzO1x0ICogdG8gYXBwbHkgRUlBTSBvbiBNU0ktWCBhc3NlcnRpb24gKHdpdGhvdXQgRUlBTUUsIEVJQU0gb25seVxuJiM0MztcdCAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEVJQUMgKHNlY3Rpb24gOC44LjUpOiBlbmFibGUgYXV0by1jbGVhciBvZiBFSUNSIGZvciB2ZWN0b3IgMC5cbiYjNDM7XHQgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlXG4mIzQzO1x0ICogdGVzdCBjYW4gc2VlIHNwdXJpb3VzIGludGVycnVwdHMgb24gdGhlIG5leHQgbWVtY3B5IGJhdGNoLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb25cbiYjNDM7XHQgKiBNU0ktWCBhc3NlcnRpb24gKGVmZmVjdGl2ZSBiZWNhdXNlIEVJQU1FIGlzIHNldCksIHNvIGEgc2luZ2xlXG4mIzQzO1x0ICogaW50ZXJydXB0IGlzIGRlbGl2ZXJlZCBwZXIgbWVtY3B5IGJhdGNoIGV2ZW4gaWYgdGhlIGNhdXNlXG4mIzQzO1x0ICogcmUtYXNzZXJ0cyBiZWZvcmUgc29mdHdhcmUgcmUtZW5hYmxlcyB0aGUgbWFzay5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIElWQVIgKHNlY3Rpb24gNy4zLjEuMiwgcmVnaXN0ZXIgZGVmaW5pdGlvbiBpbiA4LjguMTMpOiBtYXAgUlhcbiYjNDM7XHQgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwgRTEwMDBfR1BJRV9FSUFNRSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIE1TSVhfVkVDVE9SX01BU0spO1xuJiM0MztcbiYjNDM7XHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTtcbiYjNDM7XG4mIzQzO1x0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi9cbiYjNDM7XHRpZ2ItXHUwMDNldHhfdGFpbCA9IDA7XG4mIzQzO1x0aWdiLVx1MDAzZXJ4X3RhaWwgPSAwO1xuJiM0MztcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfc2l6ZSA9IElHQl9NQVhfQ0hVTktfU0laRTtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxO1xuJiM0MztcdGRldmljZS1cdTAwM2Vkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHRWRklPX0FTU0VSVF9HRShkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpO1xuJiM0MztcbiYjNDM7XHRpZ2ItXHUwMDNlYmFyMCA9IGRldmljZS1cdTAwM2ViYXJzWzBdLnZhZGRyO1xuJiM0MztcbiYjNDM7XHRpZ2JfcmVzZXQoaWdiKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxuJiM0MztcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxuJiM0MztcdCAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZ1xuJiM0MztcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cbiYjNDM7XHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxuJiM0MztcdCAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLlxuJiM0MztcdCAqL1xuJiM0MztcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVtb3ZlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XG4mIzQzO1x0aWdiX3Jlc2V0KGlnYik7XG4mIzQzO1xuJiM0MztcdHZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1DLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9lbmFibGUoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSB3cml0ZS10by1jbGVhciAoZGF0YXNoZWV0IDcuMy40LjIpLiAgSW4gTVNJLVggbW9kZSB3aXRoIEVJQUNcbiYjNDM7XHQgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzIFwmIzM0O0lmIGFueSBiaXRzIGFyZSBzZXRcbiYjNDM7XHQgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWRcJiMzNDssIHdoaWNoIHJ1bGVzIG91dFxuJiM0MztcdCAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsXG4mIzQzO1x0ICogY2xlYXJlZCBieSB3cml0aW5nIDEuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsXG4mIzQzO1x0XHRcdCAgICAgaW92YV90IGRzdCwgdTY0IHNpemUsIHU2NCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XG4mIzQzO1x0c3RydWN0IGlnYl90eF9kZXNjICp0eDtcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XG4mIzQzO1x0aWdiX2lycV9kaXNhYmxlKGlnYik7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dHggPSBcdTAwMjZpZ2ItXHUwMDNldHhfcmluZ1tpZ2ItXHUwMDNldHhfdGFpbF07XG4mIzQzO1x0XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW2lnYi1cdTAwM2VyeF90YWlsXTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQodHgsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcbiYjNDM7XHRcdG1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuJiM0MztcbiYjNDM7XHRcdHJ4LVx1MDAzZXJlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChkc3QpO1xuJiM0MztcdFx0cngtXHUwMDNlcmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApO1xuJiM0MztcbiYjNDM7XHRcdHR4LVx1MDAzZXJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChzcmMpO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEJ1aWxkIGFuIGFkdmFuY2VkIGRhdGEgZGVzY3JpcHRvciBwZXIgODI1NzYgZGF0YXNoZWV0XG4mIzQzO1x0XHQgKiBzZWN0aW9uIDcuMi4yLjMuICBERVhUIG1hcmtzIHRoZSBkZXNjcmlwdG9yIGFzIGFkdmFuY2VkXG4mIzQzO1x0XHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxuJiM0MztcdFx0ICogZGVzY3JpcHRvcjsgSUZDUyBhc2tzIHRoZSBNQUMgdG8gYXBwZW5kIHRoZSBFdGhlcm5ldFxuJiM0MztcdFx0ICogRkNTICh3aXRob3V0IGl0IHRoZSBmcmFtZSBpcyBkcm9wcGVkIGFzIG1hbGZvcm1lZCk7XG4mIzQzO1x0XHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxuJiM0MztcdFx0ICogaW4gYml0cyAxNTowIG9mIGNtZF90eXBlX2xlbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dHgtXHUwMDNlcmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9ERVhUIHxcbiYjNDM7XHRcdFx0RTEwMDBfQURWVFhEX0RDTURfSUZDUyB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemVcbiYjNDM7XHRcdCAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR0eC1cdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxuJiM0MztcdFx0XHRjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSBcdTAwM2NcdTAwM2MgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVCk7XG4mIzQzO1xuJiM0MztcdFx0aWdiLVx1MDAzZXR4X3RhaWwgPSAoaWdiLVx1MDAzZXR4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0XHRpZ2ItXHUwMDNlcnhfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCAmIzQzOyAxKSAlIFJJTkdfU0laRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItXHUwMDNlcnhfdGFpbCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi1cdTAwM2V0eF90YWlsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVzZXQgdGhlIGRldmljZSB2aWEgVkZJT19ERVZJQ0VfUkVTRVQgKFBDSWUgRkxSIG9uIHRoZSA4MjU3NikgYW5kXG4mIzQzOyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWFxuJiM0MzsgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyXG4mIzQzOyAqIHZpYSB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBiZWZvcmUgcmVwcm9ncmFtbWluZyBzbyBhbnkgY2FsbGVyLWNhY2hlZFxuJiM0MzsgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuXG4mIzQzOyAqXG4mIzQzOyAqIEZMUiBjbGVhcnMgZGV2aWNlLXNpZGUgc3RhdGUgdG8gcG93ZXItb24gcmVzZXQgdmFsdWVzIChkYXRhc2hlZXRcbiYjNDM7ICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyBcJiMzNDtlcXVpdmFsZW50IHRvIGEgRDAtXHUwMDNlRDMtXHUwMDNlRDAgdHJhbnNpdGlvblwmIzM0OyksIHNvXG4mIzQzOyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWxcbiYjNDM7ICogdmFsdWVzLCBhbmQgaWdiX2h3X2luaXQoKSByZXNldHMgdHhfdGFpbC9yeF90YWlsIHRvIDAuICBUaGUgbmV4dFxuJiM0MzsgKiBpZ2JfbWVtY3B5X3N0YXJ0KCkgd2lsbCBtZW1zZXQgZWFjaCBkZXNjcmlwdG9yIGl0IHRvdWNoZXMgYmVmb3JlXG4mIzQzOyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlXG4mIzQzOyAqIG5lZWRlZCBoZXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0dmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7XG4mIzQzO1x0dmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbiYjNDM7XHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl9tZW1jcHlfd2FpdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuJiM0MztcdHUzMiBzdGF0dXMgPSAwO1xuJiM0MztcdHUzMiBwcmV2X3RhaWw7XG4mIzQzO1x0aW50IHJldHJpZXM7XG4mIzQzO1xuJiM0MztcdHByZXZfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCAmIzQzOyBSSU5HX1NJWkUgLSAxKSAlIFJJTkdfU0laRTtcbiYjNDM7XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW3ByZXZfdGFpbF07XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVhbCA4MjU3NiBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhdCBsaW5lIHJhdGUuXG4mIzQzO1x0ICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsXG4mIzQzO1x0ICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdFxuJiM0MztcdCAqIHZhbGlkIG1lbWNweSB0YWtlcyB+MzIgbXMgb24gdGhlIHdpcmUsIHBsdXMgcGVyLWZyYW1lIHByZWFtYmxlLFxuJiM0MztcdCAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrXG4mIzQzO1x0ICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZztcbiYjNDM7XHQgKiB+NnggdGhlIGxpbmUtcmF0ZSBmbG9vciBsZWF2ZXMgY29tZm9ydGFibGUgaGVhZHJvb20gZm9yIGhvc3RcbiYjNDM7XHQgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQVxuJiM0MztcdCAqIHRlc3RzIGJvdW5kZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0cmllcyA9IDIwMDtcbiYjNDM7XHR3aGlsZSAocmV0cmllcy0tIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtXHUwMDNld2Iuc3RhdHVzX2Vycm9yKSk7XG4mIzQzO1x0XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdHVzbGVlcCgxMDAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRW5zdXJlIHRoZSB0ZXN0IGNvZGUgZG9lc24mIzM5O3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUFcbiYjNDM7XHRcdCAqIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgd2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZVxuJiM0MztcdFx0ICogZGVzY3JpcHRvciB3cml0ZWJhY2sgaXMgY29tcGxldGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJtYigpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaXJxX2NsZWFyKGlnYik7XG4mIzQzO1xuJiM0MztcdGlnYl9pcnFfZW5hYmxlKGlnYik7XG4mIzQzO1xuJiM0MztcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXNcbiYjNDM7XHQgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbFxuJiM0MztcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXG4mIzQzO1x0ICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lXG4mIzQzO1x0ICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWRcbiYjNDM7XHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXG4mIzQzO1x0ICogaXMgcmVxdWlyZWQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBEZWxheSBiZWZvcmUgcmVxdWVzdGluZyByZXNldCBzbyBQQ0llL0lPTU1VL0FFUiBlcnJvciBoYW5kbGluZ1xuJiM0MztcdCAqIHRyaWdnZXJlZCBieSB0aGUganVzdC1vYnNlcnZlZCBETUEgZmF1bHQgY2FuIHJlbGVhc2UgdGhlIGRldmljZVxuJiM0MztcdCAqIGxvY2sgVkZJT19ERVZJQ0VfUkVTRVQgY29udGVuZHMgZm9yLiAgVGhlIDEwIG1zIHZhbHVlIGlzXG4mIzQzO1x0ICogaGV1cmlzdGljLiAgVGhlIGN1cnJlbnQgbWVtY3B5IHN0aWxsIGZhaWxzIHdpdGggLUVUSU1FRE9VVDtcbiYjNDM7XHQgKiByZWNvdmVyeSBvbmx5IGVuc3VyZXMgdGhlIG5leHQgbWVtY3B5IHN0YXJ0cyBmcm9tIGEgdXNhYmxlIHN0YXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCgxMDAwMCk7XG4mIzQzO1x0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9zZW5kX21zaShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O2lnYlwmIzM0OyxcbiYjNDM7XHQucHJvYmUgPSBpZ2JfcHJvYmUsXG4mIzQzO1x0LmluaXQgPSBpZ2JfaW5pdCxcbiYjNDM7XHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcbiYjNDM7XHQubWVtY3B5X3N0YXJ0ID0gaWdiX21lbWNweV9zdGFydCxcbiYjNDM7XHQubWVtY3B5X3dhaXQgPSBpZ2JfbWVtY3B5X3dhaXQsXG4mIzQzO1x0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuaW5kZXggMjg1ODg4NWE4OWJiYmYuLjJlNjdhZmMwZDU4MDk4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbkBAIC02OCw2ICYjNDM7NjgsOCBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxuIHZvaWQgdmZpb19wY2lfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcbiB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KTtcbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtOTIsNiAmIzQzOzk0LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4gXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4mIzQzO1x0XHRcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcbiBcdFx0XHRcdFx0dTMyIHZlY3RvciwgaW50IGNvdW50KVxuIHtcbkBAIC0xMDMsNiAmIzQzOzExMSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuJiM0MztcdFx0XHRcdFx0ICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcbiB7XG4gXHRyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtXHUwMDNlaW9tbXUsIHZhZGRyLCBpb3ZhKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuaW5kZXggOWY0N2JjZWVkMTZmNGMuLjFmMTNjY2EwNDM0OGI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAIExJQlZGSU9fQyAmIzQzOz0gdmZpb19wY2lfZHJpdmVyLmNcbiBpZmVxICgkKEFSQ0g6eDg2XzY0PXg4NikseDg2KVxuIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pb2F0L2lvYXQuY1xuIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9kc2EvZHNhLmNcbiYjNDM7TElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2lnYi9pZ2IuY1xuIGVuZGlmXG4gXG4gTElCVkZJT19PVVRQVVQgOj0gJChPVVRQVVQpL2xpYnZmaW9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5pbmRleCBmYzc1ZTA0ZWYwMTBjZi4uN2I4Mzk0ZDBhYzUwNzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbkBAIC0xMDYsNiAmIzQzOzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxuIFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCAwLCAwLCBOVUxMKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXG4mIzQzOyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlXG4mIzQzOyAqIGludGVycnVwdHMgYWZ0ZXIgYSBWRklPX0RFVklDRV9SRVNFVCwgd2hpY2ggdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGVcbiYjNDM7ICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcbiYjNDM7ICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpc1xuJiM0MzsgKiBoZWxwZXIgZGVsaWJlcmF0ZWx5IHByZXNlcnZlcyB0aGVtLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gdmVjdG9yOyBpIFx1MDAzYyB2ZWN0b3IgJiM0MzsgY291bnQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkc1tpXSwgMCxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3ZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXG5cJiMzNDssIGkpO1xuJiM0MztcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIHZlY3RvciwgY291bnQsIGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHMgJiM0MzsgdmVjdG9yKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9pcnFfZ2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG5pbmRleCA2ODI3ZjRhNmZlYmU5OS4uYTVkMDU0NzEzMmM0MDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcbkBAIC01LDEyICYjNDM7NSwxNCBAQFxuICNpZmRlZiBfX3g4Nl82NF9fXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGRzYV9vcHM7XG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzO1xuJiM0MztleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcztcbiAjZW5kaWZcbiBcbiBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcbiAjaWZkZWYgX194ODZfNjRfX1xuIFx0XHUwMDI2ZHNhX29wcyxcbiBcdFx1MDAyNmlvYXRfb3BzLFxuJiM0MztcdFx1MDAyNmlnYl9vcHMsXG4gI2VuZGlmXG4gfTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNzowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBuZXcgZHJpdmVyIHRvIHRoZSBWRklPIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLy4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgY2FuIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcwZDE0MGQzMTdjMjkwODRkMjMyYzgzM2FkMjU1NmY3OWM3MWJiYzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxNSAwNzowNToyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmgKQEAgLTAsMCAmIzQzOzEgQEAKJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfODI1NzUuaApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NmQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmgKQEAgLTAsMCAmIzQzOzEgQEAKJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfZGVmaW5lcy5oClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaApAQCAtMCwwICYjNDM7MSBAQAomIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mNTBkNDUwZDNlOTQ5NQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jCkBAIC0wLDAgJiM0MzsxLDU2NCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2lfcmVncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2lfaWRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vYmFycmllci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9taWkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2UxMDAwX3JlZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlMTAwMF9kZWZpbmVzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZTEwMDBfODI1NzUuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2IDB4MTBDOQomIzQzOyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjQKJiM0MzsjZGVmaW5lIE1TSVhfVkVDVE9SIDAKJiM0MzsjZGVmaW5lIE1TSVhfVkVDVE9SX01BU0sgKDEgJmx0OyZsdDsgTVNJWF9WRUNUT1IpCiYjNDM7I2RlZmluZSBSSU5HX1NJWkUgNDA5NiAvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gcmluZyAqLwomIzQzOwomIzQzO3N0cnVjdCBpZ2JfdHhfZGVzYyB7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3ImIzM5O3MgZGF0YSBidWZmZXIgKi8KJiM0MzsJCQl1MzIgY21kX3R5cGVfbGVuOyAvKiBDb21tYW5kL1R5cGUvTGVuZ3RoICovCiYjNDM7CQkJdTMyIG9saW5mb19zdGF0dXM7IC8qIENvbnRleHQvQnVmZmVyIGluZm8gKi8KJiM0MzsJCX0gcmVhZDsKJiM0MzsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTY0IHJzdmQ7ICAgICAgICAvKiBSZXNlcnZlZCAqLwomIzQzOwkJCXUzMiBueHRzZXFfc2VlZDsgLyogTmV4dCBzZXF1ZW5jZSBzZWVkICovCiYjNDM7CQkJdTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqLwomIzQzOwkJfSB3YjsKJiM0MzsJfTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBpZ2JfcnhfZGVzYyB7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTY0IHBrdF9hZGRyOyAvKiBQYWNrZXQgYnVmZmVyIGFkZHJlc3MgKi8KJiM0MzsJCQl1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqLwomIzQzOwkJfSByZWFkOwomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQl1MTYgcGt0X2luZm87ICAgICAvKiBSU1MgdHlwZSwgUGFja2V0IHR5cGUgKi8KJiM0MzsJCQl1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovCiYjNDM7CQkJdTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi8KJiM0MzsJCQl1MzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovCiYjNDM7CQkJdTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqLwomIzQzOwkJCXUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovCiYjNDM7CQl9IHdiOyAvKiB3cml0ZWJhY2sgKi8KJiM0MzsJfTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBpZ2IgewomIzQzOwl2b2lkICpiYXIwOwomIzQzOwl1MzIgdHhfdGFpbDsKJiM0MzsJdTMyIHJ4X3RhaWw7CiYjNDM7CXN0cnVjdCBpZ2JfdHhfZGVzYyB0eF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7CiYjNDM7CXN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtJmd0O2RyaXZlci5yZWdpb24udmFkZHI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfd3JpdGUzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcsIHUzMiB2YWwpCiYjNDM7ewomIzQzOwl3cml0ZWwodmFsLCBpZ2ItJmd0O2JhcjAgJiM0MzsgcmVnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1MzIgaWdiX3JlYWQzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVhZGwoaWdiLSZndDtiYXIwICYjNDM7IHJlZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQomIzQzO3sKJiM0MzsJdTMyIG1kaWM7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXcml0ZSBhIFBIWSByZWdpc3RlciBvdmVyIE1ESU8uCiYjNDM7CSAqCiYjNDM7CSAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgJiM0MzsgdGhlCiYjNDM7CSAqIFNXX0ZXX1NZTkMgUEhZIGJpdCkgYWNyb3NzIHRoZSBNRElPIHRyYW5zYWN0aW9uIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHRoZQomIzQzOwkgKiBkZXZpY2UmIzM5O3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvbgomIzQzOwkgKiBleGNsdXNpdmVseSBvbiBhIGRlZGljYXRlZCB0ZXN0IGRldmljZSB3aXRoIG5vIGFjdGl2ZSBtYW5hZ2VhYmlsaXR5CiYjNDM7CSAqIGNvbnRlbmRpbmcgZm9yIHRoZSBQSFksIHNvIHRoZSBzeW5jIGlzIG9taXR0ZWQ7IGl0IHNob3VsZCBiZSBhZGRlZCBoZXJlCiYjNDM7CSAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLgomIzQzOwkgKi8KJiM0MzsJbWRpYyA9ICgoKHUzMilkYXRhKSB8CiYjNDM7CQkob2Zmc2V0ICZsdDsmbHQ7IEUxMDAwX01ESUNfUkVHX1NISUZUKSB8CiYjNDM7CQkoMSAmbHQ7Jmx0OyBFMTAwMF9NRElDX1BIWV9TSElGVCkgfAomIzQzOwkJRTEwMDBfTURJQ19PUF9XUklURSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfTURJQywgbWRpYyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAxMDAwOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdXNsZWVwKDUwKTsKJiM0MzsJCW1kaWMgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfTURJQyk7CiYjNDM7CQlpZiAobWRpYyAmYW1wOyBFMTAwMF9NRElDX1JFQURZKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghKG1kaWMgJmFtcDsgRTEwMDBfTURJQ19SRUFEWSkpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWlmIChtZGljICZhbXA7IEUxMDAwX01ESUNfRVJST1IpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldAomIzQzOyAqIHNlY3Rpb24gMy41LjYuMy4xLiAgRm9yY2UgdGhlIFBIWSB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxvb3BiYWNrCiYjNDM7ICogZW5hYmxlZCwgdGhlbiBmb3JjZSB0aGUgTUFDIGxpbmsgc3RhdGUgdG8gbWF0Y2guICBJbnRlcm5hbCBsb29wYmFjawomIzQzOyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGUKJiM0MzsgKiBwaHlzaWNhbCBsaW5rIHN0YXRlIGlzIGlycmVsZXZhbnQuCiYjNDM7ICoKJiM0MzsgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byAmIzM0O1VzZSBQSFkgTG9vcGJhY2sgaW5zdGVhZCBvZiBNQUMgTG9vcGJhY2sKJiM0MzsgKiBvbiB0aGUgODI1NzYmIzM0OywgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgJiMzNDtNQUMgTG9vcGJhY2sgaXMgbm90IHVzZWQKJiM0MzsgKiBvbiB0aGlzIGRldmljZS4mIzM0OyAgUkNUTC5MQk1fTUFDIGlzIHN0aWxsIHNldCBlbHNld2hlcmUgYXMgYSBRRU1VLW9ubHkKJiM0MzsgKiBhY2NvbW1vZGF0aW9uOyBzZWUgdGhlIFJDVEwgcHJvZ3JhbW1pbmcgaW4gdGhlIGNhbGxlciBmb3IgdGhlCiYjNDM7ICogcmF0aW9uYWxlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGlnYl9zZXR1cF9sb29wYmFjayhzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwl1MzIgY3RybDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlcgomIzQzOwkgKiBRRU1VJiMzOTtzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzCiYjNDM7CSAqIGF1dG9uZWctZG9uZSB0aW1lciwgYW5kIHdpdGhvdXQgTFUgc2V0IGl0cyByZWNlaXZlIHBhdGgKJiM0MzsJICogKGUxMDAweF9od19yeF9lbmFibGVkKSBkcm9wcyBldmVyeSBsb29wYmFjayBmcmFtZS4gIE9uIHJlYWwKJiM0MzsJICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZQomIzQzOwkgKiBiZWxvdyBjbGVhcnMgdGhlIGF1dG9uZWctZW5hYmxlIGJpdCwgc28gdGhpcyBpcyBlZmZlY3RpdmVseSBhCiYjNDM7CSAqIG5vLW9wIHRoZXJlLgomIzQzOwkgKi8KJiM0MzsJKHZvaWQpaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLAomIzQzOwkJCSAgICBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOwomIzQzOwomIzQzOwkvKiBQSFkgY29udHJvbDogbG9vcGJhY2sgJiM0MzsgMUdiL3MgZnVsbCBkdXBsZXgsIGF1dG9uZWcgZGlzYWJsZWQuICovCiYjNDM7CXJldCA9IGlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUiwKJiM0MzsJCQkgICAgQk1DUl9MT09QQkFDSyB8CiYjNDM7CQkJICAgIEJNQ1JfU1BFRUQxMDAwIHwKJiM0MzsJCQkgICAgQk1DUl9GVUxMRFBMWCk7CiYjNDM7CVZGSU9fQVNTRVJUX0VRKHJldCwgMCwgJiMzNDtGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXImIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2wKJiM0MzsJICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZQomIzQzOwkgKiBkYXRhc2hlZXQsIGJ1dCBlbXBpcmljYWxseSByZXF1aXJlZCBieSB0aGUga2VybmVsIGRyaXZlci4KJiM0MzsJICovCiYjNDM7CXVzbGVlcCg1MDAwMCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZvcmNlIHRoZSBNQUMgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsaW5rIHVwLiAgV2l0aG91dCBmb3JjaW5nCiYjNDM7CSAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwCiYjNDM7CSAqIG5vcm1hbGx5IHdhaXRzIGZvciBhIHJlYWwgbmVnb3RpYXRlZCBsaW5rLgomIzQzOwkgKi8KJiM0MzsJY3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTsKJiM0MzsJY3RybCAmYW1wOz0gfkUxMDAwX0NUUkxfU1BEX1NFTDsKJiM0MzsJY3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8CiYjNDM7CQlFMTAwMF9DVFJMX0ZSQ0RQWCB8CiYjNDM7CQlFMTAwMF9DVFJMX1NQRF8xMDAwIHwKJiM0MzsJCUUxMDAwX0NUUkxfRkQgfAomIzQzOwkJRTEwMDBfQ1RSTF9TTFU7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCYjMzk7cyBtc2xlZXAoNTAwKQomIzQzOwkgKiBhdCB0aGUgdGFpbCBvZiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnkKJiM0MzsJICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuCiYjNDM7CSAqLwomIzQzOwl1c2xlZXAoNTAwMDAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpZ2JfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJaWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX3Jlc2V0KHN0cnVjdCBpZ2IgKmlnYikKJiM0Mzt7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpOwomIzQzOwkvKgomIzQzOwkgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlCiYjNDM7CSAqIGNoZWNraW5nIGlmIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIHVzZWQgKDgyNTc2IGRhdGFzaGVldCBzZWN0aW9uCiYjNDM7CSAqIDQuMi4xLjYuMSkuCiYjNDM7CSAqLwomIzQzOwl1c2xlZXAoMjAwMCk7CiYjNDM7CVZGSU9fQVNTRVJUX0VRKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSAmYW1wOyBFMTAwMF9DVFJMX1JTVCwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSU1DLCAweEZGRkZGRkZGKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0CiYjNDM7ICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdAomIzQzOyAqIENUUkwuUlNUIGNsZWFycy4gIEV4cGVjdHMgYmFyMCB0byBiZSBtYXBwZWQgYW5kIE1TSS1YIGFscmVhZHkgZW5hYmxlZAomIzQzOyAqIHZpYSBWRklPLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGlnYl9od19pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwl1NjQgaW92YV90eCwgaW92YV9yeDsKJiM0MzsJdTMyIGN0cmwsIHJjdGw7CiYjNDM7CXUxNiBjbWRfcmVnOwomIzQzOwlpbnQgcmV0cmllczsKJiM0MzsKJiM0MzsJaW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItJmd0O3R4X3JpbmcpOwomIzQzOwlpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi0mZ3Q7cnhfcmluZyk7CiYjNDM7CiYjNDM7CiYjNDM7CiYjNDM7CS8qIFNpZ25hbCB0aGF0IHRoZSBkcml2ZXIgaXMgbG9hZGVkICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQpOwomIzQzOwljdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEOwomIzQzOwljdHJsICZhbXA7PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpOwomIzQzOwomIzQzOwkvKiBFbmFibGUgUENJIEJ1cyBNYXN0ZXIuICovCiYjNDM7CWNtZF9yZWcgPSB2ZmlvX3BjaV9jb25maWdfcmVhZHcoZGV2aWNlLCBQQ0lfQ09NTUFORCk7CiYjNDM7CWlmICgoY21kX3JlZyAmYW1wOyAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT0KJiM0MzsJICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7CiYjNDM7CQljbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpOwomIzQzOwkJdmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBDb25maWd1cmUgUEhZIGludGVybmFsIGxvb3BiYWNrIGZvciB0ZXN0aW5nLiAqLwomIzQzOwlpZ2Jfc2V0dXBfbG9vcGJhY2soaWdiKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRGlzYWJsZSBETUEgcmUtc2VuZCBvbiBQQ0llIGNvbXBsZXRpb24gdGltZW91dCAoODI1NzYgZGF0YXNoZWV0CiYjNDM7CSAqIHNlY3Rpb24gOC42LjEsIEdDUi5Db21wbGV0aW9uX1RpbWVvdXRfUmVzZW5kLCBiaXQgMTYpLiAgVGhlCiYjNDM7CSAqIG1peF9hbmRfbWF0Y2ggdGVzdCBpbnRlbnRpb25hbGx5IHN1Ym1pdHMgZGVzY3JpcHRvcnMgdGFyZ2V0aW5nCiYjNDM7CSAqIHVubWFwcGVkIElPVkFzOyB3aXRoIHRoZSBkZWZhdWx0IChzZXQpIHZhbHVlLCB0aGUgZGV2aWNlIGtlZXBzCiYjNDM7CSAqIHJldHJ5aW5nIHRoZSBmYWlsZWQgcmVhZCBpbmRlZmluaXRlbHksIHdoaWNoIGtlZXBzIFBDSWUgQUVSIGFuZAomIzQzOwkgKiBJT01NVSBlcnJvciBoYW5kbGluZyBidXN5IGFuZCBpbnRlcmZlcmVzIHdpdGggcmVzZXQgcmVjb3ZlcnkuCiYjNDM7CSAqLwomIzQzOwljdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0dDUik7CiYjNDM7CWN0cmwgJmFtcDs9IH5FMTAwMF9HQ1JfQ01QTF9UTU9VVF9SRVNFTkQ7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTsKJiM0MzsKJiM0MzsJLyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggJmd0OyZndDsgMzIpKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UWERDVEwoMCksIEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFMKDApLCAodTMyKWlvdmFfcngpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFIKDApLCAodTMyKShpb3ZhX3J4ICZndDsmZ3Q7IDMyKSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgMCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNlbGVjdCB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdC4gIFBlciA4MjU3NgomIzQzOwkgKiBkYXRhc2hlZXQgc2VjdGlvbiA3LjEuNS4yOiAmIzM0O1NSUkNUTFtuXS5ERVNDVFlQRSBtdXN0IGJlIHNldCB0byBhCiYjNDM7CSAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWwKJiM0MzsJICogZGVzY3JpcHRvcnMuJiMzNDsgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyCiYjNDM7CSAqIHdyaXRlYmFjayBsYXlvdXQgKHNlY3Rpb24gNy4xLjUuMiksIHNvIHBvbGxpbmcgcngud2Iuc3RhdHVzX2Vycm9yCiYjNDM7CSAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS4KJiM0MzsJICoKJiM0MzsJICogVGhlIGRpcmVjdCB3cml0ZSBhbHNvIHplcm9lcyBTUlJDVEwuQlNJWkVQQUNLRVQsIHdoaWNoIGlzCiYjNDM7CSAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvCiYjNDM7CSAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDgKJiM0MzsJICogYnl0ZXMgLS0gYW1wbGUgZm9yIHRoZSBsb29wYmFjayBmcmFtZXMgaGVyZS4KJiM0MzsJICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkICovCiYjNDM7CXJldHJpZXMgPSAyMDAwOwomIzQzOwl3aGlsZSAocmV0cmllcy0tICZndDsgMCkgewomIzQzOwkJaWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSAmYW1wOyBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpICZhbXA7IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJdXNsZWVwKDEwKTsKJiM0MzsJfQomIzQzOwlWRklPX0FTU0VSVF9HRShyZXRyaWVzLCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5hYmxlIFJlY2VpdmVyIGFuZCBUcmFuc21pdHRlci4gIFJDVEwuTEJNX01BQyBpcyBzZXQgaW4gYWRkaXRpb24KJiM0MzsJICogdG8gUEhZIGxvb3BiYWNrIGFzIGEgUUVNVS1vbmx5IGFjY29tbW9kYXRpb246IFFFTVUmIzM5O3MgZW11bGF0ZWQgaWdiCiYjNDM7CSAqIGRvZXMgbm90IGhvbm9yIFBIWSByZWdpc3RlciAwIGJpdCAxNCAoUEhZIGludGVybmFsIGxvb3BiYWNrKSBhbmQKJiM0MzsJICogcmVsaWVzIG9uIFJDVEwuTEJNX01BQyB0byB3cmFwIFRYIGRlc2NyaXB0b3JzIGJhY2sgdG8gdGhlIFJYCiYjNDM7CSAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyAmIzM0O1doZW4gdXNpbmcgdGhlCiYjNDM7CSAqIGludGVybmFsIFBIWSwgTEJNIHNob3VsZCByZW1haW4gc2V0IHRvIDAwYiYjMzQ7LCBzbyBzZXR0aW5nIExCTV9NQUMKJiM0MzsJICogaGVyZSBkZXZpYXRlcyBmcm9tIGRhdGFzaGVldCBndWlkYW5jZTsgZW1waXJpY2FsbHkgdGhlIGJpdCBoYXMKJiM0MzsJICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFjawomIzQzOwkgKiBpcyBub3QgaW1wbGVtZW50ZWQgKGRhdGFzaGVldCAzLjUuNi4yKS4gIFNldHRpbmcgYm90aCBsZXRzIHRoZQomIzQzOwkgKiBzZWxmdGVzdCB3b3JrIG9uIGJvdGggcmVhbCBoYXJkd2FyZSBhbmQgUUVNVSB3aXRob3V0IGNvbmRpdGlvbmFsCiYjNDM7CSAqIGNvZGUgcGF0aHMuCiYjNDM7CSAqLwomIzQzOwlyY3RsID0gRTEwMDBfUkNUTF9FTiB8ICAgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAqLwomIzQzOwkgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovCiYjNDM7CSAgICAgICBFMTAwMF9SQ1RMX01QRSB8ICAgICAgLyogTXVsdGljYXN0IFByb21pc2N1b3VzICovCiYjNDM7CSAgICAgICBFMTAwMF9SQ1RMX0JBTSB8ICAgICAgLyogQnJvYWRjYXN0IEFjY2VwdCBNb2RlICovCiYjNDM7CSAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIHJjdGwpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4pOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6CiYjNDM7CSAqCiYjNDM7CSAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvCiYjNDM7CSAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKQomIzQzOwkgKiB0byBhcHBseSBFSUFNIG9uIE1TSS1YIGFzc2VydGlvbiAod2l0aG91dCBFSUFNRSwgRUlBTSBvbmx5CiYjNDM7CSAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS4KJiM0MzsJICoKJiM0MzsJICogRUlBQyAoc2VjdGlvbiA4LjguNSk6IGVuYWJsZSBhdXRvLWNsZWFyIG9mIEVJQ1IgZm9yIHZlY3RvciAwLgomIzQzOwkgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlCiYjNDM7CSAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC4KJiM0MzsJICoKJiM0MzsJICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb24KJiM0MzsJICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLCBzbyBhIHNpbmdsZQomIzQzOwkgKiBpbnRlcnJ1cHQgaXMgZGVsaXZlcmVkIHBlciBtZW1jcHkgYmF0Y2ggZXZlbiBpZiB0aGUgY2F1c2UKJiM0MzsJICogcmUtYXNzZXJ0cyBiZWZvcmUgc29mdHdhcmUgcmUtZW5hYmxlcyB0aGUgbWFzay4KJiM0MzsJICoKJiM0MzsJICogSVZBUiAoc2VjdGlvbiA3LjMuMS4yLCByZWdpc3RlciBkZWZpbml0aW9uIGluIDguOC4xMyk6IG1hcCBSWAomIzQzOwkgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC4KJiM0MzsJICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR1BJRSwgRTEwMDBfR1BJRV9NU0lYX01PREUgfCBFMTAwMF9HUElFX0VJQU1FKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBNU0lYX1ZFQ1RPUl9NQVNLKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFNLCBNU0lYX1ZFQ1RPUl9NQVNLKTsKJiM0MzsKJiM0MzsJLyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSVZBUjAsIEUxMDAwX0lWQVJfVkFMSUQpOwomIzQzOwomIzQzOwkvKiBFbmFibGUgaW50ZXJydXB0cyBvbiB2ZWN0b3IgMCAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi8KJiM0MzsJaWdiLSZndDt0eF90YWlsID0gMDsKJiM0MzsJaWdiLSZndDtyeF90YWlsID0gMDsKJiM0MzsKJiM0MzsJZGV2aWNlLSZndDtkcml2ZXIubWF4X21lbWNweV9zaXplID0gSUdCX01BWF9DSFVOS19TSVpFOwomIzQzOwlkZXZpY2UtJmd0O2RyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTsKJiM0MzsJZGV2aWNlLSZndDtkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwomIzQzOwlWRklPX0FTU0VSVF9HRShkZXZpY2UtJmd0O2RyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTsKJiM0MzsKJiM0MzsJaWdiLSZndDtiYXIwID0gZGV2aWNlLSZndDtiYXJzWzBdLnZhZGRyOwomIzQzOwomIzQzOwlpZ2JfcmVzZXQoaWdiKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5hYmxlIE1TSS1YIHZpYSBWRklPIGJlZm9yZSBkZXZpY2Utc2lkZSByZWdpc3RlciBwcm9ncmFtbWluZy4KJiM0MzsJICogdmZpb19wY2lfbXNpeF9lbmFibGUoKSBvbmx5IHRvdWNoZXMgdGhlIFZGSU8gSVJRIG1hY2hpbmVyeSBhbmQgdGhlCiYjNDM7CSAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZwomIzQzOwkgKiBkZXBlbmRlbmN5IG9uIHRoZSBkZXZpY2Utc2lkZSB3cml0ZXMgcGVyZm9ybWVkIGJ5IGlnYl9od19pbml0KCkuCiYjNDM7CSAqIFBsYWNpbmcgaXQgaGVyZSBrZWVwcyBpZ2JfaHdfaW5pdCgpIHJldXNhYmxlIGZyb20gdGhlIHJlc2V0CiYjNDM7CSAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLgomIzQzOwkgKi8KJiM0MzsJdmZpb19wY2lfbXNpeF9lbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7CiYjNDM7CiYjNDM7CWlnYl9od19pbml0KGRldmljZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7CiYjNDM7CWlnYl9yZXNldChpZ2IpOwomIzQzOwomIzQzOwl2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9kaXNhYmxlKHN0cnVjdCBpZ2IgKmlnYikKJiM0Mzt7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfZW5hYmxlKHN0cnVjdCBpZ2IgKmlnYikKJiM0Mzt7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNUywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVXNlIHdyaXRlLXRvLWNsZWFyIChkYXRhc2hlZXQgNy4zLjQuMikuICBJbiBNU0ktWCBtb2RlIHdpdGggRUlBQwomIzQzOwkgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzICYjMzQ7SWYgYW55IGJpdHMgYXJlIHNldAomIzQzOwkgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWQmIzM0Oywgd2hpY2ggcnVsZXMgb3V0CiYjNDM7CSAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsCiYjNDM7CSAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLgomIzQzOwkgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsCiYjNDM7CQkJICAgICBpb3ZhX3QgZHN0LCB1NjQgc2l6ZSwgdTY0IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CXN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7CiYjNDM7CXN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlpZ2JfaXJxX2Rpc2FibGUoaWdiKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJdHggPSAmYW1wO2lnYi0mZ3Q7dHhfcmluZ1tpZ2ItJmd0O3R4X3RhaWxdOwomIzQzOwkJcnggPSAmYW1wO2lnYi0mZ3Q7cnhfcmluZ1tpZ2ItJmd0O3J4X3RhaWxdOwomIzQzOwomIzQzOwkJbWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7CiYjNDM7CQltZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTsKJiM0MzsKJiM0MzsJCXJ4LSZndDtyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTsKJiM0MzsJCXJ4LSZndDtyZWFkLmhkcl9hZGRyID0gY3B1X3RvX2xlNjQoMCk7CiYjNDM7CiYjNDM7CQl0eC0mZ3Q7cmVhZC5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KHNyYyk7CiYjNDM7CQkvKgomIzQzOwkJICogQnVpbGQgYW4gYWR2YW5jZWQgZGF0YSBkZXNjcmlwdG9yIHBlciA4MjU3NiBkYXRhc2hlZXQKJiM0MzsJCSAqIHNlY3Rpb24gNy4yLjIuMy4gIERFWFQgbWFya3MgdGhlIGRlc2NyaXB0b3IgYXMgYWR2YW5jZWQKJiM0MzsJCSAqIChyZXF1aXJlZCBieSBoYXJkd2FyZSk7IERUWVA9ZGF0YSBzZWxlY3RzIHRoZSBkYXRhCiYjNDM7CQkgKiBkZXNjcmlwdG9yOyBJRkNTIGFza3MgdGhlIE1BQyB0byBhcHBlbmQgdGhlIEV0aGVybmV0CiYjNDM7CQkgKiBGQ1MgKHdpdGhvdXQgaXQgdGhlIGZyYW1lIGlzIGRyb3BwZWQgYXMgbWFsZm9ybWVkKTsKJiM0MzsJCSAqIEVPUCBtYXJrcyBlbmQgb2YgcGFja2V0LiAgRFRBTEVOIGlzIHRoZSBidWZmZXIgbGVuZ3RoCiYjNDM7CQkgKiBpbiBiaXRzIDE1OjAgb2YgY21kX3R5cGVfbGVuLgomIzQzOwkJICovCiYjNDM7CQl0eC0mZ3Q7cmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8CiYjNDM7CQkJRTEwMDBfQURWVFhEX0RUWVBfREFUQSB8CiYjNDM7CQkJRTEwMDBfQURWVFhEX0RDTURfREVYVCB8CiYjNDM7CQkJRTEwMDBfQURWVFhEX0RDTURfSUZDUyB8CiYjNDM7CQkJRTEwMDBfQURWVFhEX0RDTURfRU9QKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBQQVlMRU4gKHNlY3Rpb24gNy4yLjIuMy4xMSkgaXMgdGhlIHRvdGFsIHBheWxvYWQgc2l6ZQomIzQzOwkJICogaW4gb2xpbmZvX3N0YXR1c1szMToxNF0uCiYjNDM7CQkgKi8KJiM0MzsJCXR4LSZndDtyZWFkLm9saW5mb19zdGF0dXMgPQomIzQzOwkJCWNwdV90b19sZTMyKCh1aW50MzJfdClzaXplICZsdDsmbHQ7IEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQpOwomIzQzOwomIzQzOwkJaWdiLSZndDt0eF90YWlsID0gKGlnYi0mZ3Q7dHhfdGFpbCAmIzQzOyAxKSAlIFJJTkdfU0laRTsKJiM0MzsJCWlnYi0mZ3Q7cnhfdGFpbCA9IChpZ2ItJmd0O3J4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIGlnYi0mZ3Q7cnhfdGFpbCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCBpZ2ItJmd0O3R4X3RhaWwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZAomIzQzOyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWAomIzQzOyAqIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LCBzbyByZS1hcm0gdGhlIHRyaWdnZXIKJiM0MzsgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWQKJiM0MzsgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuCiYjNDM7ICoKJiM0MzsgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0CiYjNDM7ICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyAmIzM0O2VxdWl2YWxlbnQgdG8gYSBEMC0mZ3Q7RDMtJmd0O0QwIHRyYW5zaXRpb24mIzM0OyksIHNvCiYjNDM7ICogRUlNUyBhbmQgRUlDUiBjb21lIGJhY2sgYXMgMCBmcm9tIHRoZWlyIHJlZ2lzdGVyLWRlZmluZWQgaW5pdGlhbAomIzQzOyAqIHZhbHVlcywgYW5kIGlnYl9od19pbml0KCkgcmVzZXRzIHR4X3RhaWwvcnhfdGFpbCB0byAwLiAgVGhlIG5leHQKJiM0MzsgKiBpZ2JfbWVtY3B5X3N0YXJ0KCkgd2lsbCBtZW1zZXQgZWFjaCBkZXNjcmlwdG9yIGl0IHRvdWNoZXMgYmVmb3JlCiYjNDM7ICogc3VibWlzc2lvbiwgc28gbm8gZXhwbGljaXQgSU1DL0VJQ1Igd3JpdGVzIG9yIHJpbmcgbWVtc2V0cyBhcmUKJiM0MzsgKiBuZWVkZWQgaGVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZ2JfZXJyb3JfcmVzZXRfYW5kX3JlaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwl2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTsKJiM0MzsJdmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTsKJiM0MzsJaWdiX2h3X2luaXQoZGV2aWNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpZ2JfbWVtY3B5X3dhaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CXN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7CiYjNDM7CXUzMiBzdGF0dXMgPSAwOwomIzQzOwl1MzIgcHJldl90YWlsOwomIzQzOwlpbnQgcmV0cmllczsKJiM0MzsKJiM0MzsJcHJldl90YWlsID0gKGlnYi0mZ3Q7cnhfdGFpbCAmIzQzOyBSSU5HX1NJWkUgLSAxKSAlIFJJTkdfU0laRTsKJiM0MzsJcnggPSAmYW1wO2lnYi0mZ3Q7cnhfcmluZ1twcmV2X3RhaWxdOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWFsIDgyNTc2IGhhcmR3YXJlIHByb2Nlc3NlcyB0aGUgZGVzY3JpcHRvciByaW5nIGF0IGxpbmUgcmF0ZS4KJiM0MzsJICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsCiYjNDM7CSAqIHNwbGl0IGludG8gNDA5NSAxIEtCIGZyYW1lcy4gIEF0IDEgR2IvcyAofjEyNSBNQi9zKSB0aGUgd29yc3QKJiM0MzsJICogdmFsaWQgbWVtY3B5IHRha2VzIH4zMiBtcyBvbiB0aGUgd2lyZSwgcGx1cyBwZXItZnJhbWUgcHJlYW1ibGUsCiYjNDM7CSAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrCiYjNDM7CSAqIGxhdGVuY3kuICBXYWl0IHVwIHRvIH4yMDAgbXMgYmVmb3JlIGRlY2xhcmluZyB0aGUgZGV2aWNlIGh1bmc7CiYjNDM7CSAqIH42eCB0aGUgbGluZS1yYXRlIGZsb29yIGxlYXZlcyBjb21mb3J0YWJsZSBoZWFkcm9vbSBmb3IgaG9zdAomIzQzOwkgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQQomIzQzOwkgKiB0ZXN0cyBib3VuZGVkLgomIzQzOwkgKi8KJiM0MzsJcmV0cmllcyA9IDIwMDsKJiM0MzsJd2hpbGUgKHJldHJpZXMtLSAmZ3Q7IDApIHsKJiM0MzsJCXN0YXR1cyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShyeC0mZ3Q7d2Iuc3RhdHVzX2Vycm9yKSk7CiYjNDM7CQlpZiAoc3RhdHVzICZhbXA7IDEpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl1c2xlZXAoMTAwMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHN0YXR1cyAmYW1wOyAxKQomIzQzOwkJLyoKJiM0MzsJCSAqIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGRvZXNuJiMzOTt0IHNwZWN1bGF0aXZlbHkgcmVhZCB0aGUgRE1BCiYjNDM7CQkgKiBkZXN0aW5hdGlvbiBidWZmZXIgYmVmb3JlIHdlIGhhdmUgdmVyaWZpZWQgdGhhdCB0aGUKJiM0MzsJCSAqIGRlc2NyaXB0b3Igd3JpdGViYWNrIGlzIGNvbXBsZXRlLgomIzQzOwkJICovCiYjNDM7CQlybWIoKTsKJiM0MzsKJiM0MzsJaWdiX2lycV9jbGVhcihpZ2IpOwomIzQzOwomIzQzOwlpZ2JfaXJxX2VuYWJsZShpZ2IpOwomIzQzOwomIzQzOwlpZiAoc3RhdHVzICZhbXA7IDEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzCiYjNDM7CSAqIHR5cGljYWxseSBmb2xsb3dzIGEgRE1BLXJlYWQgZmF1bHQgZnJvbSBvbmUgb2YgdGhlIGludGVudGlvbmFsCiYjNDM7CSAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lCiYjNDM7CSAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZQomIzQzOwkgKiByZWluaXRpYWxpemVzIHRoZSBxdWV1ZSByZWdpc3RlcnMgYnV0IGxlYXZlcyB0aGUgZW5naW5lIHdlZGdlZAomIzQzOwkgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpCiYjNDM7CSAqIGlzIHJlcXVpcmVkLgomIzQzOwkgKgomIzQzOwkgKiBEZWxheSBiZWZvcmUgcmVxdWVzdGluZyByZXNldCBzbyBQQ0llL0lPTU1VL0FFUiBlcnJvciBoYW5kbGluZwomIzQzOwkgKiB0cmlnZ2VyZWQgYnkgdGhlIGp1c3Qtb2JzZXJ2ZWQgRE1BIGZhdWx0IGNhbiByZWxlYXNlIHRoZSBkZXZpY2UKJiM0MzsJICogbG9jayBWRklPX0RFVklDRV9SRVNFVCBjb250ZW5kcyBmb3IuICBUaGUgMTAgbXMgdmFsdWUgaXMKJiM0MzsJICogaGV1cmlzdGljLiAgVGhlIGN1cnJlbnQgbWVtY3B5IHN0aWxsIGZhaWxzIHdpdGggLUVUSU1FRE9VVDsKJiM0MzsJICogcmVjb3Zlcnkgb25seSBlbnN1cmVzIHRoZSBuZXh0IG1lbWNweSBzdGFydHMgZnJvbSBhIHVzYWJsZSBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CXVzbGVlcCgxMDAwMCk7CiYjNDM7CWlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRVRJTUVET1VUOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtpZ2ImIzM0OywKJiM0MzsJLnByb2JlID0gaWdiX3Byb2JlLAomIzQzOwkuaW5pdCA9IGlnYl9pbml0LAomIzQzOwkucmVtb3ZlID0gaWdiX3JlbW92ZSwKJiM0MzsJLm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsCiYjNDM7CS5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCwKJiM0MzsJLnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLAomIzQzO307CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKaW5kZXggMjg1ODg4NWE4OWJiYmYuLjJlNjdhZmMwZDU4MDk4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oCkBAIC02OCw2ICYjNDM7NjgsOCBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLAogdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAogCQkJIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7CiB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KTsKJiM0Mzt2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwKJiM0MzsJCQkgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpOwogdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmY250bF9zZXRfbm9uYmxvY2soaW50IGZkKQpAQCAtOTIsNiAmIzQzOzk0LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiAJdmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAomIzQzOwkJCQkJIHUzMiB2ZWN0b3IsIGludCBjb3VudCkKJiM0Mzt7CiYjNDM7CXZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsCiAJCQkJCXUzMiB2ZWN0b3IsIGludCBjb3VudCkKIHsKQEAgLTEwMyw2ICYjNDM7MTExLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQogCXZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAomIzQzOwkJCQkJICB1MzIgdmVjdG9yLCBpbnQgY291bnQpCiYjNDM7ewomIzQzOwl2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSkKIHsKIAlyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtJmd0O2lvbW11LCB2YWRkciwgaW92YSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawppbmRleCA5ZjQ3YmNlZWQxNmY0Yy4uMWYxM2NjYTA0MzQ4YjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawpAQCAtMTIsNiAmIzQzOzEyLDcgQEAgTElCVkZJT19DICYjNDM7PSB2ZmlvX3BjaV9kcml2ZXIuYwogaWZlcSAoJChBUkNIOng4Nl82ND14ODYpLHg4NikKIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pb2F0L2lvYXQuYwogTElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2RzYS9kc2EuYwomIzQzO0xJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pZ2IvaWdiLmMKIGVuZGlmCiAKIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jCmluZGV4IGZjNzVlMDRlZjAxMGNmLi43YjgzOTRkMGFjNTA3NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKQEAgLTEwNiw2ICYjNDM7MTA2LDI4IEBAIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpCiAJdmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCAwLCAwLCBOVUxMKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogUmUtaXNzdWUgVkZJT19ERVZJQ0VfU0VUX0lSUVMgZm9yIGFuIGFscmVhZHktZW5hYmxlZCB2ZWN0b3IgcmFuZ2UgdXNpbmcKJiM0MzsgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZQomIzQzOyAqIGludGVycnVwdHMgYWZ0ZXIgYSBWRklPX0RFVklDRV9SRVNFVCwgd2hpY2ggdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUKJiM0MzsgKiBJUlEgdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QuICBSZWNyZWF0aW5nIHRoZQomIzQzOyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXMKJiM0MzsgKiBoZWxwZXIgZGVsaWJlcmF0ZWx5IHByZXNlcnZlcyB0aGVtLgomIzQzOyAqLwomIzQzO3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAomIzQzOwkJCSAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwljaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gdmVjdG9yOyBpICZsdDsgdmVjdG9yICYjNDM7IGNvdW50OyBpJiM0MzsmIzQzOykKJiM0MzsJCVZGSU9fQVNTRVJUX0dFKGRldmljZS0mZ3Q7bXNpX2V2ZW50ZmRzW2ldLCAwLAomIzQzOwkJCSAgICAgICAmIzM0O3ZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcbiYjMzQ7LCBpKTsKJiM0MzsKJiM0MzsJdmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtJmd0O21zaV9ldmVudGZkcyAmIzQzOyB2ZWN0b3IpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsCiAJCQkgICAgIHN0cnVjdCB2ZmlvX2lycV9pbmZvICppcnFfaW5mbykKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMKaW5kZXggNjgyN2Y0YTZmZWJlOTkuLmE1ZDA1NDcxMzJjNDA1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwpAQCAtNSwxMiAmIzQzOzUsMTQgQEAKICNpZmRlZiBfX3g4Nl82NF9fCiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgZHNhX29wczsKIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wczsKJiM0MztleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wczsKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHsKICNpZmRlZiBfX3g4Nl82NF9fCiAJJmFtcDtkc2Ffb3BzLAogCSZhbXA7aW9hdF9vcHMsCiYjNDM7CSZhbXA7aWdiX29wcywKICNlbmRpZgogfTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk5MgoJCQkJCQkJb3V0cHV0OiA4OQoJCQkJCQkJdGhvdWdodHM6IDc1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3Qgb24gS2VybmVsIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFkZGluZyBhbiBgaWdiYCBkcml2ZXIgdG8gdGhlIGB2ZmlvYCBzZWxmdGVzdHMuIEZpcnN0IGdsYW5jZSwgaXQmIzM5O3MgbW9kaWZ5aW5nIGZpbGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9gIGFuZCBhIGZldyBvdGhlciByZWxhdGVkIGZpbGVzIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2AgZGlyZWN0b3J5LiBObyBrZXJuZWwgc291cmNlIGNvZGUgY2hhbmdlcywgdGhhdCYjMzk7cyB0aGUga2V5LiBJIGhhZCB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgbGlzdCBvZiBjaGFuZ2VkIGZpbGVzIHRob3VnaCwganVzdCB0byBiZSBjZXJ0YWluLiBZZXMsIGBlMTAwMF84MjU3NS5oYCwgYGUxMDAwX2RlZmluZXMuaGAsIGFuZCBgZTEwMDBfcmVncy5oYCBhcmUgc3ltbGlua3MgYW5kIHRoYXQgaGVscHMgc29saWRpZnkgdGhhdCB0aGlzIGlzIGEgc2VsZnRlc3QgYWRkaXRpb24uCgpUaGlzIGlzIHN0cmljdGx5IGEgdXNlci1zcGFjZSBzZWxmdGVzdCBhZGRpdGlvbi4gSXQmIzM5O3MgKm5vdCogdG91Y2hpbmcgYW55dGhpbmcgaW4gdGhlIGNvcmUga2VybmVsLCBubyBkcml2ZXJzLCBubyBhcmNoaXRlY3R1cmVzLiBTbywgZG9lcyBpdCBtZWV0IHRoZSBjcml0ZXJpYSBmb3IgZnV6emluZz8gTGV0IG1lIHJldmlldyB0aGUgZ3VpZGFuY2UgYWdhaW4uIFdlJiMzOTtyZSBsb29raW5nIGZvciBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbC4uLiBNb2RpZmljYXRpb25zIHRvIGBEb2N1bWVudGF0aW9uL2AsIGBLY29uZmlnYCBmaWxlcywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgY29uc3RhbnRzIHdpdGhvdXQgZnVuY3Rpb25hbCBpbXBhY3QsIHVucmVhY2hhYmxlIGNvZGUuLi4gTm8sIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgZmFsbCBpbnRvIGFueSBvZiB0aG9zZSBjYXRlZ29yaWVzLgoKVGhlIGNydXggb2YgdGhlIHF1ZXN0aW9uOiBpcyBtb2RpZnlpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AgY29uc2lkZXJlZCBhICYjMzQ7ZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCYjMzQ7PyBObywgYWJzb2x1dGVseSBub3QuIFNlbGZ0ZXN0cyBhcmUgdXNlci1zcGFjZSBwcm9ncmFtcy4gVGhleSBhcmUgZm9yIHRlc3RpbmcgdGhlIGtlcm5lbCwgYnV0IHRoZXkgYXJlICpub3QqIHBhcnQgb2YgdGhlIGtlcm5lbCYjMzk7cyBleGVjdXRpb24gcGF0aC4gRnV6emluZyB0aGUga2VybmVsIGJhc2VkIG9uIGNoYW5nZXMgdG8gc2VsZnRlc3RzIGlzIHBvaW50bGVzcyBzaW5jZSB0aGUga2VybmVsIGl0c2VsZiBoYXNuJiMzOTt0IGNoYW5nZWQuCgpJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBUaGUgcHJvbXB0IHNwZWNpZmllczogJiMzNDtJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLiYjMzQ7IFRoaXMgb25seSBtb2RpZmllcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYC4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgKm5vdCogbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByYXRpb25hbGUgaXMgdGhhdCB0aGlzIHBhdGNoICpvbmx5KiBhZGRzIGEgbmV3IGRyaXZlciB0byB0aGUgVkZJTyBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYC4gSXQgZG9lc24mIzM5O3QgdG91Y2ggY29yZSBrZXJuZWwgY29kZSwgc28gbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgZm9yIGZ1enppbmcuCkFscmlnaHQsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBuZXcgZHJpdmVyIHRvIHRoZSBWRklPIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLy4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgY2FuIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgdG8gdGhlIFZGSU8gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA3OjA1OjI0LjAwMDAwMTAwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzcxMTQ0Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgYSBuZXcgZHJpdmVyIHRvIHRoZSBWRklPIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLy4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA3OjA1OjI0LjAwMDAwOTE5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc4MTkwNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzBkMTQwZDMxN2MyOTA4NGQyMzJjODMzYWQyNTU2Zjc5YzcxYmJjOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxNSAwNzowNToyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI4NGFmZmRlYzU1OThlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmhcXG5AQCAtMCwwICsxIEBAXFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF84MjU3NS5oXFxuXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxcbkBAIC0wLDAgKzEgQEBcXG4rLi4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX2RlZmluZXMuaFxcblxcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcXG5AQCAtMCwwICsxIEBAXFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmhcXG5cXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY1MGQ0NTBkM2U5NDk1XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jXFxuQEAgLTAsMCArMSw1NjQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpX3JlZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaV9pZHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9iYXJyaWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9taWkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiZTEwMDBfcmVncy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZTEwMDBfZGVmaW5lcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZTEwMDBfODI1NzUuaFxcXCJcXG4rXFxuKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzlcXG4rI2RlZmluZSBJR0JfTUFYX0NIVU5LX1NJWkUgMTAyNFxcbisjZGVmaW5lIE1TSVhfVkVDVE9SIDBcXG4rI2RlZmluZSBNU0lYX1ZFQ1RPUl9NQVNLICgxIFxcdTAwM2NcXHUwMDNjIE1TSVhfVkVDVE9SKVxcbisjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovXFxuK1xcbitzdHJ1Y3QgaWdiX3R4X2Rlc2Mge1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHU2NCBidWZmZXJfYWRkcjsgLyogQWRkcmVzcyBvZiBkZXNjcmlwdG9yJ3MgZGF0YSBidWZmZXIgKi9cXG4rXFx0XFx0XFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xcbitcXHRcXHRcXHR1MzIgb2xpbmZvX3N0YXR1czsgLyogQ29udGV4dC9CdWZmZXIgaW5mbyAqL1xcbitcXHRcXHR9IHJlYWQ7XFxuK1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovXFxuK1xcdFxcdFxcdHUzMiBueHRzZXFfc2VlZDsgLyogTmV4dCBzZXF1ZW5jZSBzZWVkICovXFxuK1xcdFxcdFxcdHUzMiBzdGF0dXM7ICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi9cXG4rXFx0XFx0fSB3YjtcXG4rXFx0fTtcXG4rfTtcXG4rXFxuK3N0cnVjdCBpZ2JfcnhfZGVzYyB7XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTY0IHBrdF9hZGRyOyAvKiBQYWNrZXQgYnVmZmVyIGFkZHJlc3MgKi9cXG4rXFx0XFx0XFx0dTY0IGhkcl9hZGRyOyAvKiBIZWFkZXIgYnVmZmVyIGFkZHJlc3MgKi9cXG4rXFx0XFx0fSByZWFkO1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1MTYgcGt0X2luZm87ICAgICAvKiBSU1MgdHlwZSwgUGFja2V0IHR5cGUgKi9cXG4rXFx0XFx0XFx0dTE2IGhkcl9pbmZvOyAgICAgLyogU3BsaXQgSGVhZCwgYnVmIGxlbiAqL1xcbitcXHRcXHRcXHR1MzIgcnNzOyAgICAgICAgICAvKiBSU1MgSGFzaCAqL1xcbitcXHRcXHRcXHR1MzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovXFxuK1xcdFxcdFxcdHUxNiBsZW5ndGg7ICAgICAgIC8qIFBhY2tldCBsZW5ndGggKi9cXG4rXFx0XFx0XFx0dTE2IHZsYW47ICAgICAgICAgLyogVkxBTiB0YWcgKi9cXG4rXFx0XFx0fSB3YjsgLyogd3JpdGViYWNrICovXFxuK1xcdH07XFxuK307XFxuK1xcbitzdHJ1Y3QgaWdiIHtcXG4rXFx0dm9pZCAqYmFyMDtcXG4rXFx0dTMyIHR4X3RhaWw7XFxuK1xcdHUzMiByeF90YWlsO1xcbitcXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xcbitcXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgcnhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xcbit9O1xcbitcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaWdiICp0b19pZ2Jfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHJldHVybiAoc3RydWN0IGlnYiAqKWRldmljZS1cXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcXG4re1xcbitcXHR3cml0ZWwodmFsLCBpZ2ItXFx1MDAzZWJhcjAgKyByZWcpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHUzMiBpZ2JfcmVhZDMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZylcXG4re1xcbitcXHRyZXR1cm4gcmVhZGwoaWdiLVxcdTAwM2ViYXIwICsgcmVnKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpZ2Jfd3JpdGVfcGh5KHN0cnVjdCBpZ2IgKmlnYiwgdTMyIG9mZnNldCwgdTE2IGRhdGEpXFxuK3tcXG4rXFx0dTMyIG1kaWM7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxcbitcXHQgKlxcbitcXHQgKiBBIHByb2R1Y3Rpb24gZHJpdmVyIHdvdWxkIGhvbGQgdGhlIFNXL0ZXIHNlbWFwaG9yZSAoU1dTTS5TV0VTTUJJICsgdGhlXFxuK1xcdCAqIFNXX0ZXX1NZTkMgUEhZIGJpdCkgYWNyb3NzIHRoZSBNRElPIHRyYW5zYWN0aW9uIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHRoZVxcbitcXHQgKiBkZXZpY2UncyBtYW5hZ2VtZW50IGZpcm13YXJlLiAgVGhlIHNlbGZ0ZXN0IG93bnMgdGhlIGFzc2lnbmVkIGZ1bmN0aW9uXFxuK1xcdCAqIGV4Y2x1c2l2ZWx5IG9uIGEgZGVkaWNhdGVkIHRlc3QgZGV2aWNlIHdpdGggbm8gYWN0aXZlIG1hbmFnZWFiaWxpdHlcXG4rXFx0ICogY29udGVuZGluZyBmb3IgdGhlIFBIWSwgc28gdGhlIHN5bmMgaXMgb21pdHRlZDsgaXQgc2hvdWxkIGJlIGFkZGVkIGhlcmVcXG4rXFx0ICogaWYgdGhpcyBldmVyIG5lZWRzIHRvIHJ1biBvbiBhIG1hbmFnZWFiaWxpdHktZW5hYmxlZCBOSUMuXFxuK1xcdCAqL1xcbitcXHRtZGljID0gKCgodTMyKWRhdGEpIHxcXG4rXFx0XFx0KG9mZnNldCBcXHUwMDNjXFx1MDAzYyBFMTAwMF9NRElDX1JFR19TSElGVCkgfFxcbitcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBFMTAwMF9NRElDX1BIWV9TSElGVCkgfFxcbitcXHRcXHRFMTAwMF9NRElDX09QX1dSSVRFKTtcXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfTURJQywgbWRpYyk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMTAwMDsgaSsrKSB7XFxuK1xcdFxcdHVzbGVlcCg1MCk7XFxuK1xcdFxcdG1kaWMgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfTURJQyk7XFxuK1xcdFxcdGlmIChtZGljIFxcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghKG1kaWMgXFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0aWYgKG1kaWMgXFx1MDAyNiBFMTAwMF9NRElDX0VSUk9SKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogQ29uZmlndXJlIHRoZSBkZXZpY2UgZm9yIFBIWSBpbnRlcm5hbCBsb29wYmFjayBwZXIgODI1NzYgZGF0YXNoZWV0XFxuKyAqIHNlY3Rpb24gMy41LjYuMy4xLiAgRm9yY2UgdGhlIFBIWSB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxvb3BiYWNrXFxuKyAqIGVuYWJsZWQsIHRoZW4gZm9yY2UgdGhlIE1BQyBsaW5rIHN0YXRlIHRvIG1hdGNoLiAgSW50ZXJuYWwgbG9vcGJhY2tcXG4rICogd3JhcHMgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBQSFkgZGF0YXBhdGggKHNlY3Rpb24gMy41LjYuMyksIHNvIHRoZVxcbisgKiBwaHlzaWNhbCBsaW5rIHN0YXRlIGlzIGlycmVsZXZhbnQuXFxuKyAqXFxuKyAqIFNlY3Rpb24gMy41LjYuMSBkaXJlY3RzIHRvIFxcXCJVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrXFxuKyAqIG9uIHRoZSA4MjU3NlxcXCIsIGFuZCBzZWN0aW9uIDMuNS42LjIgc3RhdGVzIFxcXCJNQUMgTG9vcGJhY2sgaXMgbm90IHVzZWRcXG4rICogb24gdGhpcyBkZXZpY2UuXFxcIiAgUkNUTC5MQk1fTUFDIGlzIHN0aWxsIHNldCBlbHNld2hlcmUgYXMgYSBRRU1VLW9ubHlcXG4rICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZVxcbisgKiByYXRpb25hbGUuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKVxcbit7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlclxcbitcXHQgKiBRRU1VJ3MgaWdiIGVtdWxhdGlvbjogUUVNVSBvbmx5IHVwZGF0ZXMgU1RBVFVTLkxVIHZpYSBpdHNcXG4rXFx0ICogYXV0b25lZy1kb25lIHRpbWVyLCBhbmQgd2l0aG91dCBMVSBzZXQgaXRzIHJlY2VpdmUgcGF0aFxcbitcXHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxcbitcXHQgKiBoYXJkd2FyZSBhdXRvbmVnIGNhbm5vdCBjb21wbGV0ZSBiZWZvcmUgdGhlIG5leHQgUEhZIHdyaXRlXFxuK1xcdCAqIGJlbG93IGNsZWFycyB0aGUgYXV0b25lZy1lbmFibGUgYml0LCBzbyB0aGlzIGlzIGVmZmVjdGl2ZWx5IGFcXG4rXFx0ICogbm8tb3AgdGhlcmUuXFxuK1xcdCAqL1xcbitcXHQodm9pZClpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsXFxuK1xcdFxcdFxcdCAgICBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpO1xcbitcXG4rXFx0LyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICsgMUdiL3MgZnVsbCBkdXBsZXgsIGF1dG9uZWcgZGlzYWJsZWQuICovXFxuK1xcdHJldCA9IGlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcXG4rXFx0XFx0XFx0ICAgIEJNQ1JfTE9PUEJBQ0sgfFxcbitcXHRcXHRcXHQgICAgQk1DUl9TUEVFRDEwMDAgfFxcbitcXHRcXHRcXHQgICAgQk1DUl9GVUxMRFBMWCk7XFxuK1xcdFZGSU9fQVNTRVJUX0VRKHJldCwgMCwgXFxcIkZhaWxlZCB0byB3cml0ZSBQSFkgY29udHJvbCByZWdpc3RlclxcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQnJpZWYgZGVsYXkgYmVmb3JlIGZvcmNpbmcgdGhlIE1BQywgbWlycm9yaW5nIHRoZSBrZXJuZWwgZXRodG9vbFxcbitcXHQgKiBzZWxmdGVzdCBpbiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnkgdGhlXFxuK1xcdCAqIGRhdGFzaGVldCwgYnV0IGVtcGlyaWNhbGx5IHJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwgZHJpdmVyLlxcbitcXHQgKi9cXG4rXFx0dXNsZWVwKDUwMDAwKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZvcmNlIHRoZSBNQUMgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsaW5rIHVwLiAgV2l0aG91dCBmb3JjaW5nXFxuK1xcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXFxuK1xcdCAqIG5vcm1hbGx5IHdhaXRzIGZvciBhIHJlYWwgbmVnb3RpYXRlZCBsaW5rLlxcbitcXHQgKi9cXG4rXFx0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcXG4rXFx0Y3RybCBcXHUwMDI2PSB+RTEwMDBfQ1RSTF9TUERfU0VMO1xcbitcXHRjdHJsIHw9IEUxMDAwX0NUUkxfRlJDU1BEIHxcXG4rXFx0XFx0RTEwMDBfQ1RSTF9GUkNEUFggfFxcbitcXHRcXHRFMTAwMF9DVFJMX1NQRF8xMDAwIHxcXG4rXFx0XFx0RTEwMDBfQ1RSTF9GRCB8XFxuK1xcdFxcdEUxMDAwX0NUUkxfU0xVO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU2V0dGxpbmcgZGVsYXkgbWF0Y2hpbmcgdGhlIGtlcm5lbCBldGh0b29sIHNlbGZ0ZXN0J3MgbXNsZWVwKDUwMClcXG4rXFx0ICogYXQgdGhlIHRhaWwgb2YgaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5XFxuK1xcdCAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLlxcbitcXHQgKi9cXG4rXFx0dXNsZWVwKDUwMDAwMCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWdiX3Byb2JlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRpZiAoIXZmaW9fcGNpX2RldmljZV9tYXRjaChkZXZpY2UsIFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfcmVzZXQoc3RydWN0IGlnYiAqaWdiKVxcbit7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xcbitcXHQvKlxcbitcXHQgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlXFxuK1xcdCAqIGNoZWNraW5nIGlmIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIHVzZWQgKDgyNTc2IGRhdGFzaGVldCBzZWN0aW9uXFxuK1xcdCAqIDQuMi4xLjYuMSkuXFxuK1xcdCAqL1xcbitcXHR1c2xlZXAoMjAwMCk7XFxuK1xcdFZGSU9fQVNTRVJUX0VRKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSBcXHUwMDI2IEUxMDAwX0NUUkxfUlNULCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JTUMsIDB4RkZGRkZGRkYpO1xcbit9XFxuK1xcbisvKlxcbisgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0XFxuKyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXRcXG4rICogQ1RSTC5SU1QgY2xlYXJzLiAgRXhwZWN0cyBiYXIwIHRvIGJlIG1hcHBlZCBhbmQgTVNJLVggYWxyZWFkeSBlbmFibGVkXFxuKyAqIHZpYSBWRklPLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaWdiX2h3X2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXHR1NjQgaW92YV90eCwgaW92YV9yeDtcXG4rXFx0dTMyIGN0cmwsIHJjdGw7XFxuK1xcdHUxNiBjbWRfcmVnO1xcbitcXHRpbnQgcmV0cmllcztcXG4rXFxuK1xcdGlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLVxcdTAwM2V0eF9yaW5nKTtcXG4rXFx0aW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXFx1MDAzZXJ4X3JpbmcpO1xcbitcXG4rXFxuK1xcbitcXHQvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcXG4rXFx0Y3RybCB8PSBFMTAwMF9DVFJMX0VYVF9EUlZfTE9BRDtcXG4rXFx0Y3RybCBcXHUwMDI2PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpO1xcbitcXG4rXFx0LyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqL1xcbitcXHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xcbitcXHRpZiAoKGNtZF9yZWcgXFx1MDAyNiAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT1cXG4rXFx0ICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7XFxuK1xcdFxcdGNtZF9yZWcgfD0gKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSk7XFxuK1xcdFxcdHZmaW9fcGNpX2NvbmZpZ193cml0ZXcoZGV2aWNlLCBQQ0lfQ09NTUFORCwgY21kX3JlZyk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXFxuK1xcdGlnYl9zZXR1cF9sb29wYmFjayhpZ2IpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRGlzYWJsZSBETUEgcmUtc2VuZCBvbiBQQ0llIGNvbXBsZXRpb24gdGltZW91dCAoODI1NzYgZGF0YXNoZWV0XFxuK1xcdCAqIHNlY3Rpb24gOC42LjEsIEdDUi5Db21wbGV0aW9uX1RpbWVvdXRfUmVzZW5kLCBiaXQgMTYpLiAgVGhlXFxuK1xcdCAqIG1peF9hbmRfbWF0Y2ggdGVzdCBpbnRlbnRpb25hbGx5IHN1Ym1pdHMgZGVzY3JpcHRvcnMgdGFyZ2V0aW5nXFxuK1xcdCAqIHVubWFwcGVkIElPVkFzOyB3aXRoIHRoZSBkZWZhdWx0IChzZXQpIHZhbHVlLCB0aGUgZGV2aWNlIGtlZXBzXFxuK1xcdCAqIHJldHJ5aW5nIHRoZSBmYWlsZWQgcmVhZCBpbmRlZmluaXRlbHksIHdoaWNoIGtlZXBzIFBDSWUgQUVSIGFuZFxcbitcXHQgKiBJT01NVSBlcnJvciBoYW5kbGluZyBidXN5IGFuZCBpbnRlcmZlcmVzIHdpdGggcmVzZXQgcmVjb3ZlcnkuXFxuK1xcdCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0dDUik7XFxuK1xcdGN0cmwgXFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpO1xcbitcXG4rXFx0LyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggXFx1MDAzZVxcdTAwM2UgMzIpKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UWERDVEwoMCksIEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBTCgwKSwgKHUzMilpb3ZhX3J4KTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcXHUwMDNlXFx1MDAzZSAzMikpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU2VsZWN0IHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyIGRlc2NyaXB0b3IgZm9ybWF0LiAgUGVyIDgyNTc2XFxuK1xcdCAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6IFxcXCJTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxcbitcXHQgKiB2YWx1ZSBvdGhlciB0aGFuIDAwMGIgZm9yIHRoZSA4MjU3NiB0byB3cml0ZSBiYWNrIHRoZSBzcGVjaWFsXFxuK1xcdCAqIGRlc2NyaXB0b3JzLlxcXCIgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXFxuK1xcdCAqIHdyaXRlYmFjayBsYXlvdXQgKHNlY3Rpb24gNy4xLjUuMiksIHNvIHBvbGxpbmcgcngud2Iuc3RhdHVzX2Vycm9yXFxuK1xcdCAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGRpcmVjdCB3cml0ZSBhbHNvIHplcm9lcyBTUlJDVEwuQlNJWkVQQUNLRVQsIHdoaWNoIGlzXFxuK1xcdCAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvXFxuK1xcdCAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDhcXG4rXFx0ICogYnl0ZXMgLS0gYW1wbGUgZm9yIHRoZSBsb29wYmFjayBmcmFtZXMgaGVyZS5cXG4rXFx0ICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi9cXG4rXFx0cmV0cmllcyA9IDIwMDA7XFxuK1xcdHdoaWxlIChyZXRyaWVzLS0gXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGlmICgoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSkgXFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpIFxcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR1c2xlZXAoMTApO1xcbitcXHR9XFxuK1xcdFZGSU9fQVNTRVJUX0dFKHJldHJpZXMsIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRW5hYmxlIFJlY2VpdmVyIGFuZCBUcmFuc21pdHRlci4gIFJDVEwuTEJNX01BQyBpcyBzZXQgaW4gYWRkaXRpb25cXG4rXFx0ICogdG8gUEhZIGxvb3BiYWNrIGFzIGEgUUVNVS1vbmx5IGFjY29tbW9kYXRpb246IFFFTVUncyBlbXVsYXRlZCBpZ2JcXG4rXFx0ICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZFxcbitcXHQgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlhcXG4rXFx0ICogcXVldWUuICBEYXRhc2hlZXQgOC4xMC4xIChSQ1RMIHJlZ2lzdGVyKSBhZHZpc2VzIFxcXCJXaGVuIHVzaW5nIHRoZVxcbitcXHQgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGJcXFwiLCBzbyBzZXR0aW5nIExCTV9NQUNcXG4rXFx0ICogaGVyZSBkZXZpYXRlcyBmcm9tIGRhdGFzaGVldCBndWlkYW5jZTsgZW1waXJpY2FsbHkgdGhlIGJpdCBoYXNcXG4rXFx0ICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFja1xcbitcXHQgKiBpcyBub3QgaW1wbGVtZW50ZWQgKGRhdGFzaGVldCAzLjUuNi4yKS4gIFNldHRpbmcgYm90aCBsZXRzIHRoZVxcbitcXHQgKiBzZWxmdGVzdCB3b3JrIG9uIGJvdGggcmVhbCBoYXJkd2FyZSBhbmQgUUVNVSB3aXRob3V0IGNvbmRpdGlvbmFsXFxuK1xcdCAqIGNvZGUgcGF0aHMuXFxuK1xcdCAqL1xcbitcXHRyY3RsID0gRTEwMDBfUkNUTF9FTiB8ICAgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX01QRSB8ICAgICAgLyogTXVsdGljYXN0IFByb21pc2N1b3VzICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX0JBTSB8ICAgICAgLyogQnJvYWRjYXN0IEFjY2VwdCBNb2RlICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi9cXG4rXFx0ICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIHJjdGwpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUHJvZ3JhbSBNU0ktWCBpbnRlcnJ1cHQgcm91dGluZyBwZXIgODI1NzYgZGF0YXNoZWV0OlxcbitcXHQgKlxcbitcXHQgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0b1xcbitcXHQgKiByb3V0ZSBpbnRlcnJ1cHQgY2F1c2VzIHRocm91Z2ggSVZBUiBtYXBwaW5nLCBhbmQgRUlBTUUgKGJpdCAzMClcXG4rXFx0ICogdG8gYXBwbHkgRUlBTSBvbiBNU0ktWCBhc3NlcnRpb24gKHdpdGhvdXQgRUlBTUUsIEVJQU0gb25seVxcbitcXHQgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuXFxuK1xcdCAqXFxuK1xcdCAqIEVJQUMgKHNlY3Rpb24gOC44LjUpOiBlbmFibGUgYXV0by1jbGVhciBvZiBFSUNSIGZvciB2ZWN0b3IgMC5cXG4rXFx0ICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZVxcbitcXHQgKiB0ZXN0IGNhbiBzZWUgc3B1cmlvdXMgaW50ZXJydXB0cyBvbiB0aGUgbmV4dCBtZW1jcHkgYmF0Y2guXFxuK1xcdCAqXFxuK1xcdCAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uXFxuK1xcdCAqIE1TSS1YIGFzc2VydGlvbiAoZWZmZWN0aXZlIGJlY2F1c2UgRUlBTUUgaXMgc2V0KSwgc28gYSBzaW5nbGVcXG4rXFx0ICogaW50ZXJydXB0IGlzIGRlbGl2ZXJlZCBwZXIgbWVtY3B5IGJhdGNoIGV2ZW4gaWYgdGhlIGNhdXNlXFxuK1xcdCAqIHJlLWFzc2VydHMgYmVmb3JlIHNvZnR3YXJlIHJlLWVuYWJsZXMgdGhlIG1hc2suXFxuK1xcdCAqXFxuK1xcdCAqIElWQVIgKHNlY3Rpb24gNy4zLjEuMiwgcmVnaXN0ZXIgZGVmaW5pdGlvbiBpbiA4LjguMTMpOiBtYXAgUlhcXG4rXFx0ICogY2F1c2UgMCB0byBNU0ktWCB2ZWN0b3IgMCBhbmQgbWFyayB0aGUgZW50cnkgdmFsaWQuXFxuK1xcdCAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwgRTEwMDBfR1BJRV9FSUFNRSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBQywgTVNJWF9WRUNUT1JfTUFTSyk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgTVNJWF9WRUNUT1JfTUFTSyk7XFxuK1xcbitcXHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JVkFSMCwgRTEwMDBfSVZBUl9WQUxJRCk7XFxuK1xcbitcXHQvKiBFbmFibGUgaW50ZXJydXB0cyBvbiB2ZWN0b3IgMCAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xcbitcXG4rXFx0LyogSW5pdGlhbGl6ZSBkcml2ZXIgc3RhdGUgYW5kIGNhcGFiaWxpdHkgbGltaXRzICovXFxuK1xcdGlnYi1cXHUwMDNldHhfdGFpbCA9IDA7XFxuK1xcdGlnYi1cXHUwMDNlcnhfdGFpbCA9IDA7XFxuK1xcbitcXHRkZXZpY2UtXFx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7XFxuK1xcdGRldmljZS1cXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxO1xcbitcXHRkZXZpY2UtXFx1MDAzZWRyaXZlci5tc2kgPSBNU0lYX1ZFQ1RPUjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVxcdTAwM2Vkcml2ZXIucmVnaW9uLnNpemUsIHNpemVvZihzdHJ1Y3QgaWdiKSk7XFxuK1xcbitcXHRpZ2ItXFx1MDAzZWJhcjAgPSBkZXZpY2UtXFx1MDAzZWJhcnNbMF0udmFkZHI7XFxuK1xcbitcXHRpZ2JfcmVzZXQoaWdiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEVuYWJsZSBNU0ktWCB2aWEgVkZJTyBiZWZvcmUgZGV2aWNlLXNpZGUgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcuXFxuK1xcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxcbitcXHQgKiBQQ0kgTVNJLVggY2FwYWJpbGl0eSB2aWEgY29uZmlnIHNwYWNlOyBpdCBoYXMgbm8gb3JkZXJpbmdcXG4rXFx0ICogZGVwZW5kZW5jeSBvbiB0aGUgZGV2aWNlLXNpZGUgd3JpdGVzIHBlcmZvcm1lZCBieSBpZ2JfaHdfaW5pdCgpLlxcbitcXHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxcbitcXHQgKiByZWNvdmVyeSBwYXRoICh3aGljaCBjYWxscyB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBpbnN0ZWFkKS5cXG4rXFx0ICovXFxuK1xcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xcbitcXG4rXFx0aWdiX2h3X2luaXQoZGV2aWNlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX3JlbW92ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIDApO1xcbitcXHRpZ2JfcmVzZXQoaWdiKTtcXG4rXFxuK1xcdHZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxcbit7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgTVNJWF9WRUNUT1JfTUFTSyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9pcnFfZW5hYmxlKHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2NsZWFyKHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDXFxuK1xcdCAqIHByb2dyYW1tZWQsIHNlY3Rpb24gOC44LjUgZXhwbGljaXRseSBzdGF0ZXMgXFxcIklmIGFueSBiaXRzIGFyZSBzZXRcXG4rXFx0ICogaW4gRUlBQywgdGhlIEVJQ1IgcmVnaXN0ZXIgc2hvdWxkIG5vdCBiZSByZWFkXFxcIiwgd2hpY2ggcnVsZXMgb3V0XFxuK1xcdCAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsXFxuK1xcdCAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLlxcbitcXHQgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsXFxuK1xcdFxcdFxcdCAgICAgaW92YV90IGRzdCwgdTY0IHNpemUsIHU2NCBjb3VudClcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFx0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcXG4rXFx0c3RydWN0IGlnYl90eF9kZXNjICp0eDtcXG4rXFx0dTMyIGk7XFxuK1xcbitcXHRpZ2JfaXJxX2Rpc2FibGUoaWdiKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudDsgaSsrKSB7XFxuK1xcdFxcdHR4ID0gXFx1MDAyNmlnYi1cXHUwMDNldHhfcmluZ1tpZ2ItXFx1MDAzZXR4X3RhaWxdO1xcbitcXHRcXHRyeCA9IFxcdTAwMjZpZ2ItXFx1MDAzZXJ4X3JpbmdbaWdiLVxcdTAwM2VyeF90YWlsXTtcXG4rXFxuK1xcdFxcdG1lbXNldCh0eCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xcbitcXHRcXHRtZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcXG4rXFxuK1xcdFxcdHJ4LVxcdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcXG4rXFx0XFx0cngtXFx1MDAzZXJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTtcXG4rXFxuK1xcdFxcdHR4LVxcdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQnVpbGQgYW4gYWR2YW5jZWQgZGF0YSBkZXNjcmlwdG9yIHBlciA4MjU3NiBkYXRhc2hlZXRcXG4rXFx0XFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxcbitcXHRcXHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxcbitcXHRcXHQgKiBkZXNjcmlwdG9yOyBJRkNTIGFza3MgdGhlIE1BQyB0byBhcHBlbmQgdGhlIEV0aGVybmV0XFxuK1xcdFxcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xcbitcXHRcXHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxcbitcXHRcXHQgKiBpbiBiaXRzIDE1OjAgb2YgY21kX3R5cGVfbGVuLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dHgtXFx1MDAzZXJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHxcXG4rXFx0XFx0XFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XFxuK1xcdFxcdFxcdEUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRENNRF9FT1ApO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQQVlMRU4gKHNlY3Rpb24gNy4yLjIuMy4xMSkgaXMgdGhlIHRvdGFsIHBheWxvYWQgc2l6ZVxcbitcXHRcXHQgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHR4LVxcdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxcbitcXHRcXHRcXHRjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSBcXHUwMDNjXFx1MDAzYyBFMTAwMF9BRFZUWERfUEFZTEVOX1NISUZUKTtcXG4rXFxuK1xcdFxcdGlnYi1cXHUwMDNldHhfdGFpbCA9IChpZ2ItXFx1MDAzZXR4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcXG4rXFx0XFx0aWdiLVxcdTAwM2VyeF90YWlsID0gKGlnYi1cXHUwMDNlcnhfdGFpbCArIDEpICUgUklOR19TSVpFO1xcbitcXHR9XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLVxcdTAwM2VyeF90YWlsKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi1cXHUwMDNldHhfdGFpbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxcbisgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVhcXG4rICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlclxcbisgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcXG4rICogZXZlbnRmZCByZW1haW5zIHZhbGlkLlxcbisgKlxcbisgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XFxuKyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgXFxcImVxdWl2YWxlbnQgdG8gYSBEMC1cXHUwMDNlRDMtXFx1MDAzZUQwIHRyYW5zaXRpb25cXFwiKSwgc29cXG4rICogRUlNUyBhbmQgRUlDUiBjb21lIGJhY2sgYXMgMCBmcm9tIHRoZWlyIHJlZ2lzdGVyLWRlZmluZWQgaW5pdGlhbFxcbisgKiB2YWx1ZXMsIGFuZCBpZ2JfaHdfaW5pdCgpIHJlc2V0cyB0eF90YWlsL3J4X3RhaWwgdG8gMC4gIFRoZSBuZXh0XFxuKyAqIGlnYl9tZW1jcHlfc3RhcnQoKSB3aWxsIG1lbXNldCBlYWNoIGRlc2NyaXB0b3IgaXQgdG91Y2hlcyBiZWZvcmVcXG4rICogc3VibWlzc2lvbiwgc28gbm8gZXhwbGljaXQgSU1DL0VJQ1Igd3JpdGVzIG9yIHJpbmcgbWVtc2V0cyBhcmVcXG4rICogbmVlZGVkIGhlcmUuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpZ2JfZXJyb3JfcmVzZXRfYW5kX3JlaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0dmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7XFxuK1xcdHZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XFxuK1xcdGlnYl9od19pbml0KGRldmljZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWdiX21lbWNweV93YWl0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFx0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcXG4rXFx0dTMyIHN0YXR1cyA9IDA7XFxuK1xcdHUzMiBwcmV2X3RhaWw7XFxuK1xcdGludCByZXRyaWVzO1xcbitcXG4rXFx0cHJldl90YWlsID0gKGlnYi1cXHUwMDNlcnhfdGFpbCArIFJJTkdfU0laRSAtIDEpICUgUklOR19TSVpFO1xcbitcXHRyeCA9IFxcdTAwMjZpZ2ItXFx1MDAzZXJ4X3JpbmdbcHJldl90YWlsXTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxcbitcXHQgKiBtYXhfbWVtY3B5X3NpemUgPSAoUklOR19TSVpFIC0gMSkgKiBJR0JfTUFYX0NIVU5LX1NJWkUgfj0gNCBNQixcXG4rXFx0ICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdFxcbitcXHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcXG4rXFx0ICogU0ZELCBJRkcgYW5kIEZDUyBvdmVyaGVhZCAofjMlKSBhbmQgZGVzY3JpcHRvciBmZXRjaC93cml0ZWJhY2tcXG4rXFx0ICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZztcXG4rXFx0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XFxuK1xcdCAqIHNjaGVkdWxpbmcgaml0dGVyIHdoaWxlIGtlZXBpbmcgdGhlIGludGVudGlvbmFsIGludmFsaWQtRE1BXFxuK1xcdCAqIHRlc3RzIGJvdW5kZWQuXFxuK1xcdCAqL1xcbitcXHRyZXRyaWVzID0gMjAwO1xcbitcXHR3aGlsZSAocmV0cmllcy0tIFxcdTAwM2UgMCkge1xcbitcXHRcXHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtXFx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xcbitcXHRcXHRpZiAoc3RhdHVzIFxcdTAwMjYgMSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdHVzbGVlcCgxMDAwKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDI2IDEpXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGRvZXNuJ3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUFcXG4rXFx0XFx0ICogZGVzdGluYXRpb24gYnVmZmVyIGJlZm9yZSB3ZSBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlXFxuK1xcdFxcdCAqIGRlc2NyaXB0b3Igd3JpdGViYWNrIGlzIGNvbXBsZXRlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cm1iKCk7XFxuK1xcbitcXHRpZ2JfaXJxX2NsZWFyKGlnYik7XFxuK1xcbitcXHRpZ2JfaXJxX2VuYWJsZShpZ2IpO1xcbitcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDI2IDEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzXFxuK1xcdCAqIHR5cGljYWxseSBmb2xsb3dzIGEgRE1BLXJlYWQgZmF1bHQgZnJvbSBvbmUgb2YgdGhlIGludGVudGlvbmFsXFxuK1xcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXFxuK1xcdCAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZVxcbitcXHQgKiByZWluaXRpYWxpemVzIHRoZSBxdWV1ZSByZWdpc3RlcnMgYnV0IGxlYXZlcyB0aGUgZW5naW5lIHdlZGdlZFxcbitcXHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXFxuK1xcdCAqIGlzIHJlcXVpcmVkLlxcbitcXHQgKlxcbitcXHQgKiBEZWxheSBiZWZvcmUgcmVxdWVzdGluZyByZXNldCBzbyBQQ0llL0lPTU1VL0FFUiBlcnJvciBoYW5kbGluZ1xcbitcXHQgKiB0cmlnZ2VyZWQgYnkgdGhlIGp1c3Qtb2JzZXJ2ZWQgRE1BIGZhdWx0IGNhbiByZWxlYXNlIHRoZSBkZXZpY2VcXG4rXFx0ICogbG9jayBWRklPX0RFVklDRV9SRVNFVCBjb250ZW5kcyBmb3IuICBUaGUgMTAgbXMgdmFsdWUgaXNcXG4rXFx0ICogaGV1cmlzdGljLiAgVGhlIGN1cnJlbnQgbWVtY3B5IHN0aWxsIGZhaWxzIHdpdGggLUVUSU1FRE9VVDtcXG4rXFx0ICogcmVjb3Zlcnkgb25seSBlbnN1cmVzIHRoZSBuZXh0IG1lbWNweSBzdGFydHMgZnJvbSBhIHVzYWJsZSBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdHVzbGVlcCgxMDAwMCk7XFxuK1xcdGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX3NlbmRfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgTVNJWF9WRUNUT1JfTUFTSyk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7XFxuK1xcdC5uYW1lID0gXFxcImlnYlxcXCIsXFxuK1xcdC5wcm9iZSA9IGlnYl9wcm9iZSxcXG4rXFx0LmluaXQgPSBpZ2JfaW5pdCxcXG4rXFx0LnJlbW92ZSA9IGlnYl9yZW1vdmUsXFxuK1xcdC5tZW1jcHlfc3RhcnQgPSBpZ2JfbWVtY3B5X3N0YXJ0LFxcbitcXHQubWVtY3B5X3dhaXQgPSBpZ2JfbWVtY3B5X3dhaXQsXFxuK1xcdC5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXFxuaW5kZXggMjg1ODg4NWE4OWJiYmYuLjJlNjdhZmMwZDU4MDk4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbkBAIC02OCw2ICs2OCw4IEBAIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXFxuIHZvaWQgdmZpb19wY2lfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcXG4gXFx0XFx0XFx0IHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XFxuIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpO1xcbit2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcXG4rXFx0XFx0XFx0ICAgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZmNudGxfc2V0X25vbmJsb2NrKGludCBmZClcXG5AQCAtOTIsNiArOTQsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4gXFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXFxuK1xcdFxcdFxcdFxcdFxcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXFxuIFxcdFxcdFxcdFxcdFxcdHUzMiB2ZWN0b3IsIGludCBjb3VudClcXG4ge1xcbkBAIC0xMDMsNiArMTExLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbiBcXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxcbitcXHRcXHRcXHRcXHRcXHQgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcXG4re1xcbitcXHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgaW50IF9fdG9faW92YShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHZvaWQgKnZhZGRyLCBpb3ZhX3QgKmlvdmEpXFxuIHtcXG4gXFx0cmV0dXJuIF9faW9tbXVfaHZhMmlvdmEoZGV2aWNlLVxcdTAwM2Vpb21tdSwgdmFkZHIsIGlvdmEpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xcbmluZGV4IDlmNDdiY2VlZDE2ZjRjLi4xZjEzY2NhMDQzNDhiNCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xcbkBAIC0xMiw2ICsxMiw3IEBAIExJQlZGSU9fQyArPSB2ZmlvX3BjaV9kcml2ZXIuY1xcbiBpZmVxICgkKEFSQ0g6eDg2XzY0PXg4NikseDg2KVxcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9pb2F0L2lvYXQuY1xcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9kc2EvZHNhLmNcXG4rTElCVkZJT19DICs9IGRyaXZlcnMvaWdiL2lnYi5jXFxuIGVuZGlmXFxuIFxcbiBMSUJWRklPX09VVFBVVCA6PSAkKE9VVFBVVCkvbGlidmZpb1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXFxuaW5kZXggZmM3NWUwNGVmMDEwY2YuLjdiODM5NGQwYWM1MDc2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcXG5AQCAtMTA2LDYgKzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxcbiBcXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xcbisgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZVxcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXFxuKyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXFxuKyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXNcXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cXG4rICovXFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcXG4rXFxuK1xcdGZvciAoaSA9IHZlY3RvcjsgaSBcXHUwMDNjIHZlY3RvciArIGNvdW50OyBpKyspXFxuK1xcdFxcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cXHUwMDNlbXNpX2V2ZW50ZmRzW2ldLCAwLFxcbitcXHRcXHRcXHQgICAgICAgXFxcInZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXFxcblxcXCIsIGkpO1xcbitcXG4rXFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXFx1MDAzZW1zaV9ldmVudGZkcyArIHZlY3Rvcik7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcXG5pbmRleCA2ODI3ZjRhNmZlYmU5OS4uYTVkMDU0NzEzMmM0MDUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xcbkBAIC01LDEyICs1LDE0IEBAXFxuICNpZmRlZiBfX3g4Nl82NF9fXFxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xcbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaW9hdF9vcHM7XFxuK2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xcbiAjZW5kaWZcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0ge1xcbiAjaWZkZWYgX194ODZfNjRfX1xcbiBcXHRcXHUwMDI2ZHNhX29wcyxcXG4gXFx0XFx1MDAyNmlvYXRfb3BzLFxcbitcXHRcXHUwMDI2aWdiX29wcyxcXG4gI2VuZGlmXFxuIH07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNzowNToyNC42NzkzMjkzNDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2OTE4MDY2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgdG8gdGhlIFZGSU8gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MGQxNDBkMzE3YzI5MDg0ZDIzMmM4MzNhZDI1NTZmNzljNzFiYmM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMDc6MDU6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCArMSBAQFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF84MjU3NS5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbkBAIC0wLDAgKzEgQEBcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmM3MzM2MzQxNzFiYjEzXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbkBAIC0wLDAgKzEgQEBcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mNTBkNDUwZDNlOTQ5NVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgKzEsNTY0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfaWRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vYmFycmllci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWlpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJlMTAwMF9yZWdzLmhcIlxuKyNpbmNsdWRlIFwiZTEwMDBfZGVmaW5lcy5oXCJcbisjaW5jbHVkZSBcImUxMDAwXzgyNTc1LmhcIlxuK1xuKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzlcbisjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0XG4rI2RlZmluZSBNU0lYX1ZFQ1RPUiAwXG4rI2RlZmluZSBNU0lYX1ZFQ1RPUl9NQVNLICgxIFx1MDAzY1x1MDAzYyBNU0lYX1ZFQ1RPUilcbisjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovXG4rXG4rc3RydWN0IGlnYl90eF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovXG4rXHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuK1x0XHRcdHUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovXG4rXHRcdH0gcmVhZDtcbitcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovXG4rXHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbitcdFx0XHR1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovXG4rXHRcdH0gd2I7XG4rXHR9O1xuK307XG4rXG4rc3RydWN0IGlnYl9yeF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuK1x0XHRcdHU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovXG4rXHRcdH0gcmVhZDtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1MTYgcGt0X2luZm87ICAgICAvKiBSU1MgdHlwZSwgUGFja2V0IHR5cGUgKi9cbitcdFx0XHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXG4rXHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbitcdFx0XHR1MzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovXG4rXHRcdFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xuK1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4rXHRcdH0gd2I7IC8qIHdyaXRlYmFjayAqL1xuK1x0fTtcbit9O1xuK1xuK3N0cnVjdCBpZ2Ige1xuK1x0dm9pZCAqYmFyMDtcbitcdHUzMiB0eF90YWlsO1xuK1x0dTMyIHJ4X3RhaWw7XG4rXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuK1x0c3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbit7XG4rXHR3cml0ZWwodmFsLCBpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuK3tcbitcdHJldHVybiByZWFkbChpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuK3tcbitcdHUzMiBtZGljO1xuK1x0aW50IGk7XG4rXG4rXHQvKlxuK1x0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxuK1x0ICpcbitcdCAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgKyB0aGVcbitcdCAqIFNXX0ZXX1NZTkMgUEhZIGJpdCkgYWNyb3NzIHRoZSBNRElPIHRyYW5zYWN0aW9uIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHRoZVxuK1x0ICogZGV2aWNlJ3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxuK1x0ICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eVxuK1x0ICogY29udGVuZGluZyBmb3IgdGhlIFBIWSwgc28gdGhlIHN5bmMgaXMgb21pdHRlZDsgaXQgc2hvdWxkIGJlIGFkZGVkIGhlcmVcbitcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxuK1x0ICovXG4rXHRtZGljID0gKCgodTMyKWRhdGEpIHxcbitcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbitcdFx0KDEgXHUwMDNjXHUwMDNjIEUxMDAwX01ESUNfUEhZX1NISUZUKSB8XG4rXHRcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9NRElDLCBtZGljKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkrKykge1xuK1x0XHR1c2xlZXAoNTApO1xuK1x0XHRtZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpO1xuK1x0XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogQ29uZmlndXJlIHRoZSBkZXZpY2UgZm9yIFBIWSBpbnRlcm5hbCBsb29wYmFjayBwZXIgODI1NzYgZGF0YXNoZWV0XG4rICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcbisgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4rICogd3JhcHMgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBQSFkgZGF0YXBhdGggKHNlY3Rpb24gMy41LjYuMyksIHNvIHRoZVxuKyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cbisgKlxuKyAqIFNlY3Rpb24gMy41LjYuMSBkaXJlY3RzIHRvIFwiVXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xuKyAqIG9uIHRoZSA4MjU3NlwiLCBhbmQgc2VjdGlvbiAzLjUuNi4yIHN0YXRlcyBcIk1BQyBMb29wYmFjayBpcyBub3QgdXNlZFxuKyAqIG9uIHRoaXMgZGV2aWNlLlwiICBSQ1RMLkxCTV9NQUMgaXMgc3RpbGwgc2V0IGVsc2V3aGVyZSBhcyBhIFFFTVUtb25seVxuKyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcbisgKiByYXRpb25hbGUuXG4rICovXG4rc3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHR1MzIgY3RybDtcbitcdGludCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlclxuK1x0ICogUUVNVSdzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzXG4rXHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXG4rXHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuK1x0ICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZVxuK1x0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxuK1x0ICogbm8tb3AgdGhlcmUuXG4rXHQgKi9cbitcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbitcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbitcbitcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayArIDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuK1x0cmV0ID0gaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuK1x0XHRcdCAgICBCTUNSX0xPT1BCQUNLIHxcbitcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuK1x0XHRcdCAgICBCTUNSX0ZVTExEUExYKTtcbitcdFZGSU9fQVNTRVJUX0VRKHJldCwgMCwgXCJGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcIik7XG4rXG4rXHQvKlxuK1x0ICogQnJpZWYgZGVsYXkgYmVmb3JlIGZvcmNpbmcgdGhlIE1BQywgbWlycm9yaW5nIHRoZSBrZXJuZWwgZXRodG9vbFxuK1x0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxuK1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMCk7XG4rXG4rXHQvKlxuK1x0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcbitcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4rXHQgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay5cbitcdCAqL1xuK1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbitcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9TUERfU0VMO1xuK1x0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XG4rXHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbitcdFx0RTEwMDBfQ1RSTF9TUERfMTAwMCB8XG4rXHRcdEUxMDAwX0NUUkxfRkQgfFxuK1x0XHRFMTAwMF9DVFJMX1NMVTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7XG4rXG4rXHQvKlxuK1x0ICogU2V0dGxpbmcgZGVsYXkgbWF0Y2hpbmcgdGhlIGtlcm5lbCBldGh0b29sIHNlbGZ0ZXN0J3MgbXNsZWVwKDUwMClcbitcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuK1x0ICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMDApO1xuK31cbitcbitzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX3Jlc2V0KHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSB8IEUxMDAwX0NUUkxfUlNUKTtcbitcdC8qXG4rXHQgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlXG4rXHQgKiBjaGVja2luZyBpZiB0aGlzIGRldmljZSBpcyByZWFkeSB0byBiZSB1c2VkICg4MjU3NiBkYXRhc2hlZXQgc2VjdGlvblxuK1x0ICogNC4yLjEuNi4xKS5cbitcdCAqL1xuK1x0dXNsZWVwKDIwMDApO1xuK1x0VkZJT19BU1NFUlRfRVEoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIFx1MDAyNiBFMTAwMF9DVFJMX1JTVCwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XG4rfVxuK1xuKy8qXG4rICogUHJvZ3JhbSB0aGUgZGV2aWNlIGludG8gYSB1c2FibGUgc3RhdGUuICBTcGxpdCBvdXQgb2YgaWdiX2luaXQoKSBzbyBpdFxuKyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXRcbisgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcbisgKiB2aWEgVkZJTy5cbisgKi9cbitzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXHR1NjQgaW92YV90eCwgaW92YV9yeDtcbitcdHUzMiBjdHJsLCByY3RsO1xuK1x0dTE2IGNtZF9yZWc7XG4rXHRpbnQgcmV0cmllcztcbitcbitcdGlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLVx1MDAzZXR4X3JpbmcpO1xuK1x0aW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNlcnhfcmluZyk7XG4rXG4rXG4rXG4rXHQvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqL1xuK1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCk7XG4rXHRjdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEO1xuK1x0Y3RybCBcdTAwMjY9IH5FMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSztcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpO1xuK1xuK1x0LyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqL1xuK1x0Y21kX3JlZyA9IHZmaW9fcGNpX2NvbmZpZ19yZWFkdyhkZXZpY2UsIFBDSV9DT01NQU5EKTtcbitcdGlmICgoY21kX3JlZyBcdTAwMjYgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9XG4rXHQgICAgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpIHtcbitcdFx0Y21kX3JlZyB8PSAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTtcbitcdFx0dmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTtcbitcdH1cbitcbitcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXG4rXHRpZ2Jfc2V0dXBfbG9vcGJhY2soaWdiKTtcbitcbitcdC8qXG4rXHQgKiBEaXNhYmxlIERNQSByZS1zZW5kIG9uIFBDSWUgY29tcGxldGlvbiB0aW1lb3V0ICg4MjU3NiBkYXRhc2hlZXRcbitcdCAqIHNlY3Rpb24gOC42LjEsIEdDUi5Db21wbGV0aW9uX1RpbWVvdXRfUmVzZW5kLCBiaXQgMTYpLiAgVGhlXG4rXHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xuK1x0ICogdW5tYXBwZWQgSU9WQXM7IHdpdGggdGhlIGRlZmF1bHQgKHNldCkgdmFsdWUsIHRoZSBkZXZpY2Uga2VlcHNcbitcdCAqIHJldHJ5aW5nIHRoZSBmYWlsZWQgcmVhZCBpbmRlZmluaXRlbHksIHdoaWNoIGtlZXBzIFBDSWUgQUVSIGFuZFxuK1x0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxuK1x0ICovXG4rXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0dDUik7XG4rXHRjdHJsIFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTtcbitcbitcdC8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBTCgwKSwgKHUzMilpb3ZhX3R4KTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggXHUwMDNlXHUwMDNlIDMyKSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFMKDApLCAodTMyKWlvdmFfcngpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcdTAwM2VcdTAwM2UgMzIpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTtcbitcbitcdC8qXG4rXHQgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzZcbitcdCAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6IFwiU1JSQ1RMW25dLkRFU0NUWVBFIG11c3QgYmUgc2V0IHRvIGFcbitcdCAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWxcbitcdCAqIGRlc2NyaXB0b3JzLlwiICBzdHJ1Y3QgaWdiX3J4X2Rlc2MgbWF0Y2hlcyB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlclxuK1x0ICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3JcbitcdCAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS5cbitcdCAqXG4rXHQgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXNcbitcdCAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvXG4rXHQgKiB0aGUgUkNUTC5CU0laRSBidWZmZXIgc2l6ZSwgd2hvc2UgcmVzZXQgZGVmYXVsdCAoMDBiKSBpcyAyMDQ4XG4rXHQgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLlxuK1x0ICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpO1xuK1xuK1x0LyogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkICovXG4rXHRyZXRyaWVzID0gMjAwMDtcbitcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDApIHtcbitcdFx0aWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSkgXHUwMDI2IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR1c2xlZXAoMTApO1xuK1x0fVxuK1x0VkZJT19BU1NFUlRfR0UocmV0cmllcywgMCk7XG4rXG4rXHQvKlxuK1x0ICogRW5hYmxlIFJlY2VpdmVyIGFuZCBUcmFuc21pdHRlci4gIFJDVEwuTEJNX01BQyBpcyBzZXQgaW4gYWRkaXRpb25cbitcdCAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJ3MgZW11bGF0ZWQgaWdiXG4rXHQgKiBkb2VzIG5vdCBob25vciBQSFkgcmVnaXN0ZXIgMCBiaXQgMTQgKFBIWSBpbnRlcm5hbCBsb29wYmFjaykgYW5kXG4rXHQgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlhcbitcdCAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyBcIldoZW4gdXNpbmcgdGhlXG4rXHQgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGJcIiwgc28gc2V0dGluZyBMQk1fTUFDXG4rXHQgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhc1xuK1x0ICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFja1xuK1x0ICogaXMgbm90IGltcGxlbWVudGVkIChkYXRhc2hlZXQgMy41LjYuMikuICBTZXR0aW5nIGJvdGggbGV0cyB0aGVcbitcdCAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWxcbitcdCAqIGNvZGUgcGF0aHMuXG4rXHQgKi9cbitcdHJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9NUEUgfCAgICAgIC8qIE11bHRpY2FzdCBQcm9taXNjdW91cyAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfQkFNIHwgICAgICAvKiBCcm9hZGNhc3QgQWNjZXB0IE1vZGUgKi9cbitcdCAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi9cbitcdCAgICAgICBFMTAwMF9SQ1RMX1NFQ1JDOyAgICAgLyogU3RyaXAgQ1JDIChuZWVkZWQgZm9yIG1lbWNtcCkgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4pO1xuK1xuK1x0LypcbitcdCAqIFByb2dyYW0gTVNJLVggaW50ZXJydXB0IHJvdXRpbmcgcGVyIDgyNTc2IGRhdGFzaGVldDpcbitcdCAqXG4rXHQgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0b1xuK1x0ICogcm91dGUgaW50ZXJydXB0IGNhdXNlcyB0aHJvdWdoIElWQVIgbWFwcGluZywgYW5kIEVJQU1FIChiaXQgMzApXG4rXHQgKiB0byBhcHBseSBFSUFNIG9uIE1TSS1YIGFzc2VydGlvbiAod2l0aG91dCBFSUFNRSwgRUlBTSBvbmx5XG4rXHQgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuXG4rXHQgKlxuK1x0ICogRUlBQyAoc2VjdGlvbiA4LjguNSk6IGVuYWJsZSBhdXRvLWNsZWFyIG9mIEVJQ1IgZm9yIHZlY3RvciAwLlxuK1x0ICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZVxuK1x0ICogdGVzdCBjYW4gc2VlIHNwdXJpb3VzIGludGVycnVwdHMgb24gdGhlIG5leHQgbWVtY3B5IGJhdGNoLlxuK1x0ICpcbitcdCAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uXG4rXHQgKiBNU0ktWCBhc3NlcnRpb24gKGVmZmVjdGl2ZSBiZWNhdXNlIEVJQU1FIGlzIHNldCksIHNvIGEgc2luZ2xlXG4rXHQgKiBpbnRlcnJ1cHQgaXMgZGVsaXZlcmVkIHBlciBtZW1jcHkgYmF0Y2ggZXZlbiBpZiB0aGUgY2F1c2VcbitcdCAqIHJlLWFzc2VydHMgYmVmb3JlIHNvZnR3YXJlIHJlLWVuYWJsZXMgdGhlIG1hc2suXG4rXHQgKlxuK1x0ICogSVZBUiAoc2VjdGlvbiA3LjMuMS4yLCByZWdpc3RlciBkZWZpbml0aW9uIGluIDguOC4xMyk6IG1hcCBSWFxuK1x0ICogY2F1c2UgMCB0byBNU0ktWCB2ZWN0b3IgMCBhbmQgbWFyayB0aGUgZW50cnkgdmFsaWQuXG4rXHQgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR1BJRSwgRTEwMDBfR1BJRV9NU0lYX01PREUgfCBFMTAwMF9HUElFX0VJQU1FKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBQywgTVNJWF9WRUNUT1JfTUFTSyk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIE1TSVhfVkVDVE9SX01BU0spO1xuK1xuK1x0LyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTtcbitcbitcdC8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIHZlY3RvciAwICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xuK1xuK1x0LyogSW5pdGlhbGl6ZSBkcml2ZXIgc3RhdGUgYW5kIGNhcGFiaWxpdHkgbGltaXRzICovXG4rXHRpZ2ItXHUwMDNldHhfdGFpbCA9IDA7XG4rXHRpZ2ItXHUwMDNlcnhfdGFpbCA9IDA7XG4rXG4rXHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfc2l6ZSA9IElHQl9NQVhfQ0hVTktfU0laRTtcbitcdGRldmljZS1cdTAwM2Vkcml2ZXIubWF4X21lbWNweV9jb3VudCA9IFJJTkdfU0laRSAtIDE7XG4rXHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1zaSA9IE1TSVhfVkVDVE9SO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXG4rXHRWRklPX0FTU0VSVF9HRShkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpO1xuK1xuK1x0aWdiLVx1MDAzZWJhcjAgPSBkZXZpY2UtXHUwMDNlYmFyc1swXS52YWRkcjtcbitcbitcdGlnYl9yZXNldChpZ2IpO1xuK1xuK1x0LypcbitcdCAqIEVuYWJsZSBNU0ktWCB2aWEgVkZJTyBiZWZvcmUgZGV2aWNlLXNpZGUgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcuXG4rXHQgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGVcbitcdCAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZ1xuK1x0ICogZGVwZW5kZW5jeSBvbiB0aGUgZGV2aWNlLXNpZGUgd3JpdGVzIHBlcmZvcm1lZCBieSBpZ2JfaHdfaW5pdCgpLlxuK1x0ICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXRcbitcdCAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLlxuK1x0ICovXG4rXHR2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbitcbitcdGlnYl9od19pbml0KGRldmljZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XG4rXHRpZ2JfcmVzZXQoaWdiKTtcbitcbitcdHZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxuK3tcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgTVNJWF9WRUNUT1JfTUFTSyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pcnFfZW5hYmxlKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2NsZWFyKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHQvKlxuK1x0ICogVXNlIHdyaXRlLXRvLWNsZWFyIChkYXRhc2hlZXQgNy4zLjQuMikuICBJbiBNU0ktWCBtb2RlIHdpdGggRUlBQ1xuK1x0ICogcHJvZ3JhbW1lZCwgc2VjdGlvbiA4LjguNSBleHBsaWNpdGx5IHN0YXRlcyBcIklmIGFueSBiaXRzIGFyZSBzZXRcbitcdCAqIGluIEVJQUMsIHRoZSBFSUNSIHJlZ2lzdGVyIHNob3VsZCBub3QgYmUgcmVhZFwiLCB3aGljaCBydWxlcyBvdXRcbitcdCAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsXG4rXHQgKiBjbGVhcmVkIGJ5IHdyaXRpbmcgMS5cbitcdCAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsXG4rXHRcdFx0ICAgICBpb3ZhX3QgZHN0LCB1NjQgc2l6ZSwgdTY0IGNvdW50KVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1x0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcbitcdHN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7XG4rXHR1MzIgaTtcbitcbitcdGlnYl9pcnFfZGlzYWJsZShpZ2IpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkrKykge1xuK1x0XHR0eCA9IFx1MDAyNmlnYi1cdTAwM2V0eF9yaW5nW2lnYi1cdTAwM2V0eF90YWlsXTtcbitcdFx0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1tpZ2ItXHUwMDNlcnhfdGFpbF07XG4rXG4rXHRcdG1lbXNldCh0eCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xuK1x0XHRtZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbitcbitcdFx0cngtXHUwMDNlcmVhZC5wa3RfYWRkciA9IGNwdV90b19sZTY0KGRzdCk7XG4rXHRcdHJ4LVx1MDAzZXJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTtcbitcbitcdFx0dHgtXHUwMDNlcmVhZC5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KHNyYyk7XG4rXHRcdC8qXG4rXHRcdCAqIEJ1aWxkIGFuIGFkdmFuY2VkIGRhdGEgZGVzY3JpcHRvciBwZXIgODI1NzYgZGF0YXNoZWV0XG4rXHRcdCAqIHNlY3Rpb24gNy4yLjIuMy4gIERFWFQgbWFya3MgdGhlIGRlc2NyaXB0b3IgYXMgYWR2YW5jZWRcbitcdFx0ICogKHJlcXVpcmVkIGJ5IGhhcmR3YXJlKTsgRFRZUD1kYXRhIHNlbGVjdHMgdGhlIGRhdGFcbitcdFx0ICogZGVzY3JpcHRvcjsgSUZDUyBhc2tzIHRoZSBNQUMgdG8gYXBwZW5kIHRoZSBFdGhlcm5ldFxuK1x0XHQgKiBGQ1MgKHdpdGhvdXQgaXQgdGhlIGZyYW1lIGlzIGRyb3BwZWQgYXMgbWFsZm9ybWVkKTtcbitcdFx0ICogRU9QIG1hcmtzIGVuZCBvZiBwYWNrZXQuICBEVEFMRU4gaXMgdGhlIGJ1ZmZlciBsZW5ndGhcbitcdFx0ICogaW4gYml0cyAxNTowIG9mIGNtZF90eXBlX2xlbi5cbitcdFx0ICovXG4rXHRcdHR4LVx1MDAzZXJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfFxuK1x0XHRcdEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfFxuK1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0RFWFQgfFxuK1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfFxuK1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7XG4rXHRcdC8qXG4rXHRcdCAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplXG4rXHRcdCAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLlxuK1x0XHQgKi9cbitcdFx0dHgtXHUwMDNlcmVhZC5vbGluZm9fc3RhdHVzID1cbitcdFx0XHRjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSBcdTAwM2NcdTAwM2MgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVCk7XG4rXG4rXHRcdGlnYi1cdTAwM2V0eF90YWlsID0gKGlnYi1cdTAwM2V0eF90YWlsICsgMSkgJSBSSU5HX1NJWkU7XG4rXHRcdGlnYi1cdTAwM2VyeF90YWlsID0gKGlnYi1cdTAwM2VyeF90YWlsICsgMSkgJSBSSU5HX1NJWkU7XG4rXHR9XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLVx1MDAzZXJ4X3RhaWwpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi1cdTAwM2V0eF90YWlsKTtcbit9XG4rXG4rLypcbisgKiBSZXNldCB0aGUgZGV2aWNlIHZpYSBWRklPX0RFVklDRV9SRVNFVCAoUENJZSBGTFIgb24gdGhlIDgyNTc2KSBhbmRcbisgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVhcbisgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyXG4rICogdmlhIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGJlZm9yZSByZXByb2dyYW1taW5nIHNvIGFueSBjYWxsZXItY2FjaGVkXG4rICogZXZlbnRmZCByZW1haW5zIHZhbGlkLlxuKyAqXG4rICogRkxSIGNsZWFycyBkZXZpY2Utc2lkZSBzdGF0ZSB0byBwb3dlci1vbiByZXNldCB2YWx1ZXMgKGRhdGFzaGVldFxuKyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgXCJlcXVpdmFsZW50IHRvIGEgRDAtXHUwMDNlRDMtXHUwMDNlRDAgdHJhbnNpdGlvblwiKSwgc29cbisgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsXG4rICogdmFsdWVzLCBhbmQgaWdiX2h3X2luaXQoKSByZXNldHMgdHhfdGFpbC9yeF90YWlsIHRvIDAuICBUaGUgbmV4dFxuKyAqIGlnYl9tZW1jcHlfc3RhcnQoKSB3aWxsIG1lbXNldCBlYWNoIGRlc2NyaXB0b3IgaXQgdG91Y2hlcyBiZWZvcmVcbisgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZVxuKyAqIG5lZWRlZCBoZXJlLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHR2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcbitcdHZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XG4rXHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuK31cbitcbitzdGF0aWMgaW50IGlnYl9tZW1jcHlfd2FpdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuK1x0dTMyIHN0YXR1cyA9IDA7XG4rXHR1MzIgcHJldl90YWlsO1xuK1x0aW50IHJldHJpZXM7XG4rXG4rXHRwcmV2X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgKyBSSU5HX1NJWkUgLSAxKSAlIFJJTkdfU0laRTtcbitcdHJ4ID0gXHUwMDI2aWdiLVx1MDAzZXJ4X3JpbmdbcHJldl90YWlsXTtcbitcbitcdC8qXG4rXHQgKiBSZWFsIDgyNTc2IGhhcmR3YXJlIHByb2Nlc3NlcyB0aGUgZGVzY3JpcHRvciByaW5nIGF0IGxpbmUgcmF0ZS5cbitcdCAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLFxuK1x0ICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdFxuK1x0ICogdmFsaWQgbWVtY3B5IHRha2VzIH4zMiBtcyBvbiB0aGUgd2lyZSwgcGx1cyBwZXItZnJhbWUgcHJlYW1ibGUsXG4rXHQgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFja1xuK1x0ICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZztcbitcdCAqIH42eCB0aGUgbGluZS1yYXRlIGZsb29yIGxlYXZlcyBjb21mb3J0YWJsZSBoZWFkcm9vbSBmb3IgaG9zdFxuK1x0ICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUFcbitcdCAqIHRlc3RzIGJvdW5kZWQuXG4rXHQgKi9cbitcdHJldHJpZXMgPSAyMDA7XG4rXHR3aGlsZSAocmV0cmllcy0tIFx1MDAzZSAwKSB7XG4rXHRcdHN0YXR1cyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShyeC1cdTAwM2V3Yi5zdGF0dXNfZXJyb3IpKTtcbitcdFx0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbitcdFx0XHRicmVhaztcbitcdFx0dXNsZWVwKDEwMDApO1xuK1x0fVxuK1xuK1x0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbitcdFx0LypcbitcdFx0ICogRW5zdXJlIHRoZSB0ZXN0IGNvZGUgZG9lc24ndCBzcGVjdWxhdGl2ZWx5IHJlYWQgdGhlIERNQVxuK1x0XHQgKiBkZXN0aW5hdGlvbiBidWZmZXIgYmVmb3JlIHdlIGhhdmUgdmVyaWZpZWQgdGhhdCB0aGVcbitcdFx0ICogZGVzY3JpcHRvciB3cml0ZWJhY2sgaXMgY29tcGxldGUuXG4rXHRcdCAqL1xuK1x0XHRybWIoKTtcbitcbitcdGlnYl9pcnFfY2xlYXIoaWdiKTtcbitcbitcdGlnYl9pcnFfZW5hYmxlKGlnYik7XG4rXG4rXHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qXG4rXHQgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXNcbitcdCAqIHR5cGljYWxseSBmb2xsb3dzIGEgRE1BLXJlYWQgZmF1bHQgZnJvbSBvbmUgb2YgdGhlIGludGVudGlvbmFsXG4rXHQgKiB1bm1hcHBlZC1JT1ZBIHRlc3RzOyB0aGUgZmF1bHQgbGVhdmVzIHRoZSBkZXNjcmlwdG9yIGVuZ2luZVxuK1x0ICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lXG4rXHQgKiByZWluaXRpYWxpemVzIHRoZSBxdWV1ZSByZWdpc3RlcnMgYnV0IGxlYXZlcyB0aGUgZW5naW5lIHdlZGdlZFxuK1x0ICogZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MsIHNvIGEgYnJvYWRlciBWRklPX0RFVklDRV9SRVNFVCAoRkxSKVxuK1x0ICogaXMgcmVxdWlyZWQuXG4rXHQgKlxuK1x0ICogRGVsYXkgYmVmb3JlIHJlcXVlc3RpbmcgcmVzZXQgc28gUENJZS9JT01NVS9BRVIgZXJyb3IgaGFuZGxpbmdcbitcdCAqIHRyaWdnZXJlZCBieSB0aGUganVzdC1vYnNlcnZlZCBETUEgZmF1bHQgY2FuIHJlbGVhc2UgdGhlIGRldmljZVxuK1x0ICogbG9jayBWRklPX0RFVklDRV9SRVNFVCBjb250ZW5kcyBmb3IuICBUaGUgMTAgbXMgdmFsdWUgaXNcbitcdCAqIGhldXJpc3RpYy4gIFRoZSBjdXJyZW50IG1lbWNweSBzdGlsbCBmYWlscyB3aXRoIC1FVElNRURPVVQ7XG4rXHQgKiByZWNvdmVyeSBvbmx5IGVuc3VyZXMgdGhlIG5leHQgbWVtY3B5IHN0YXJ0cyBmcm9tIGEgdXNhYmxlIHN0YXRlLlxuK1x0ICovXG4rXHR1c2xlZXAoMTAwMDApO1xuK1x0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcbitcbitcdHJldHVybiAtRVRJTUVET1VUO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcbitcdC5uYW1lID0gXCJpZ2JcIixcbitcdC5wcm9iZSA9IGlnYl9wcm9iZSxcbitcdC5pbml0ID0gaWdiX2luaXQsXG4rXHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcbitcdC5tZW1jcHlfc3RhcnQgPSBpZ2JfbWVtY3B5X3N0YXJ0LFxuK1x0Lm1lbWNweV93YWl0ID0gaWdiX21lbWNweV93YWl0LFxuK1x0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG5pbmRleCAyODU4ODg1YTg5YmJiZi4uMmU2N2FmYzBkNTgwOTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuQEAgLTY4LDYgKzY4LDggQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcbiB2b2lkIHZmaW9fcGNpX2lycV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4gXHRcdFx0IHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCk7XG4rdm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4rXHRcdFx0ICAgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcbiB2b2lkIHZmaW9fcGNpX2lycV90cmlnZ2VyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LCB1MzIgdmVjdG9yKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgZmNudGxfc2V0X25vbmJsb2NrKGludCBmZClcbkBAIC05Miw2ICs5NCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuIFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4rXHRcdFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4re1xuK1x0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4gXHRcdFx0XHRcdHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiB7XG5AQCAtMTAzLDYgKzExMSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4rXHRcdFx0XHRcdCAgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuK3tcbitcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcbiB7XG4gXHRyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtXHUwMDNlaW9tbXUsIHZhZGRyLCBpb3ZhKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuaW5kZXggOWY0N2JjZWVkMTZmNGMuLjFmMTNjY2EwNDM0OGI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuQEAgLTEyLDYgKzEyLDcgQEAgTElCVkZJT19DICs9IHZmaW9fcGNpX2RyaXZlci5jXG4gaWZlcSAoJChBUkNIOng4Nl82ND14ODYpLHg4NilcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9pb2F0L2lvYXQuY1xuIExJQlZGSU9fQyArPSBkcml2ZXJzL2RzYS9kc2EuY1xuK0xJQlZGSU9fQyArPSBkcml2ZXJzL2lnYi9pZ2IuY1xuIGVuZGlmXG4gXG4gTElCVkZJT19PVVRQVVQgOj0gJChPVVRQVVQpL2xpYnZmaW9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5pbmRleCBmYzc1ZTA0ZWYwMTBjZi4uN2I4Mzk0ZDBhYzUwNzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbkBAIC0xMDYsNiArMTA2LDI4IEBAIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpXG4gXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xuIH1cbiBcbisvKlxuKyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXG4rICogdGhlIGV4aXN0aW5nIGV2ZW50ZmRzLiAgSW50ZW5kZWQgZm9yIGRyaXZlcnMgdGhhdCBuZWVkIHRvIHJlLWFybSBkZXZpY2VcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXG4rICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcbisgKiBldmVudGZkcyB3b3VsZCBpbnZhbGlkYXRlIGFueSB0ZXN0LWZpeHR1cmUgY2FjaGUgb2YgdGhlIGZkLCBzbyB0aGlzXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cbisgKi9cbit2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbitcdFx0XHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcbitcbitcdGZvciAoaSA9IHZlY3RvcjsgaSBcdTAwM2MgdmVjdG9yICsgY291bnQ7IGkrKylcbitcdFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkc1tpXSwgMCxcbitcdFx0XHQgICAgICAgXCJ2ZWN0b3IgJWQgZXZlbnRmZCBub3QgYWxsb2NhdGVkXFxuXCIsIGkpO1xuK1xuK1x0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXHUwMDNlbXNpX2V2ZW50ZmRzICsgdmVjdG9yKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgICAgIHN0cnVjdCB2ZmlvX2lycV9pbmZvICppcnFfaW5mbylcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuaW5kZXggNjgyN2Y0YTZmZWJlOTkuLmE1ZDA1NDcxMzJjNDA1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG5AQCAtNSwxMiArNSwxNCBAQFxuICNpZmRlZiBfX3g4Nl82NF9fXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGRzYV9vcHM7XG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzO1xuK2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xuICNlbmRpZlxuIFxuIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0ge1xuICNpZmRlZiBfX3g4Nl82NF9fXG4gXHRcdTAwMjZkc2Ffb3BzLFxuIFx0XHUwMDI2aW9hdF9vcHMsXG4rXHRcdTAwMjZpZ2Jfb3BzLFxuICNlbmRpZlxuIH07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNzowNToyNC42NzkzMzIyMzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjkxNzY0OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgSW1wYWN0IG9uIEtlcm5lbCBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgYWRkaW5nIGFuIGBpZ2JgIGRyaXZlciB0byB0aGUgYHZmaW9gIHNlbGZ0ZXN0cy4gRmlyc3QgZ2xhbmNlLCBpdCdzIG1vZGlmeWluZyBmaWxlcyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvYCBhbmQgYSBmZXcgb3RoZXIgcmVsYXRlZCBmaWxlcyB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9gIGRpcmVjdG9yeS4gTm8ga2VybmVsIHNvdXJjZSBjb2RlIGNoYW5nZXMsIHRoYXQncyB0aGUga2V5LiBJIGhhZCB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgbGlzdCBvZiBjaGFuZ2VkIGZpbGVzIHRob3VnaCwganVzdCB0byBiZSBjZXJ0YWluLiBZZXMsIGBlMTAwMF84MjU3NS5oYCwgYGUxMDAwX2RlZmluZXMuaGAsIGFuZCBgZTEwMDBfcmVncy5oYCBhcmUgc3ltbGlua3MgYW5kIHRoYXQgaGVscHMgc29saWRpZnkgdGhhdCB0aGlzIGlzIGEgc2VsZnRlc3QgYWRkaXRpb24uXG5cblRoaXMgaXMgc3RyaWN0bHkgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGFkZGl0aW9uLiBJdCdzICpub3QqIHRvdWNoaW5nIGFueXRoaW5nIGluIHRoZSBjb3JlIGtlcm5lbCwgbm8gZHJpdmVycywgbm8gYXJjaGl0ZWN0dXJlcy4gU28sIGRvZXMgaXQgbWVldCB0aGUgY3JpdGVyaWEgZm9yIGZ1enppbmc/IExldCBtZSByZXZpZXcgdGhlIGd1aWRhbmNlIGFnYWluLiBXZSdyZSBsb29raW5nIGZvciBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbC4uLiBNb2RpZmljYXRpb25zIHRvIGBEb2N1bWVudGF0aW9uL2AsIGBLY29uZmlnYCBmaWxlcywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgY29uc3RhbnRzIHdpdGhvdXQgZnVuY3Rpb25hbCBpbXBhY3QsIHVucmVhY2hhYmxlIGNvZGUuLi4gTm8sIHRoaXMgcGF0Y2ggZG9lc24ndCBmYWxsIGludG8gYW55IG9mIHRob3NlIGNhdGVnb3JpZXMuXG5cblRoZSBjcnV4IG9mIHRoZSBxdWVzdGlvbjogaXMgbW9kaWZ5aW5nIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gIGNvbnNpZGVyZWQgYSBcImZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWxcIj8gTm8sIGFic29sdXRlbHkgbm90LiBTZWxmdGVzdHMgYXJlIHVzZXItc3BhY2UgcHJvZ3JhbXMuIFRoZXkgYXJlIGZvciB0ZXN0aW5nIHRoZSBrZXJuZWwsIGJ1dCB0aGV5IGFyZSAqbm90KiBwYXJ0IG9mIHRoZSBrZXJuZWwncyBleGVjdXRpb24gcGF0aC4gRnV6emluZyB0aGUga2VybmVsIGJhc2VkIG9uIGNoYW5nZXMgdG8gc2VsZnRlc3RzIGlzIHBvaW50bGVzcyBzaW5jZSB0aGUga2VybmVsIGl0c2VsZiBoYXNuJ3QgY2hhbmdlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gVGhlIHByb21wdCBzcGVjaWZpZXM6IFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIiBUaGlzIG9ubHkgbW9kaWZpZXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzICpub3QqIG1vZGlmeSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByYXRpb25hbGUgaXMgdGhhdCB0aGlzIHBhdGNoICpvbmx5KiBhZGRzIGEgbmV3IGRyaXZlciB0byB0aGUgVkZJTyBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYC4gSXQgZG9lc24ndCB0b3VjaCBjb3JlIGtlcm5lbCBjb2RlLCBzbyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBmb3IgZnV6emluZy5cbkFscmlnaHQsIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5OTIsIk91dHB1dFRva2VucyI6ODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNzowNTozNC4zNzEwOTk4NThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgdG8gdGhlIFZGSU8gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IGRyaXZlciB0byB0aGUgVkZJTyBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8uIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIGFuZCB0aGVyZWZvcmUgZG9lcyBub3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowscmch[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-15 06:49:37 +0000 UTC FinishedAt: 2026-07-15 07:05:35 +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+CgkJCTx0ZD4yMDI2LzA3LzE1IDA3OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgdG8gdGhlIFZGSU8gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNzowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDcwZDE0MGQzMTdjMjkwODRkMjMyYzgzM2FkMjU1NmY3OWM3MWJiYzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAwNzowNToyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NmRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX2RlZmluZXMuaFxuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXG5AQCAtMCwwICYjNDM7MSBAQFxuJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mNTBkNDUwZDNlOTQ5NVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgJiM0MzsxLDU2NCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9pZHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9iYXJyaWVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWlpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZTEwMDBfcmVncy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2UxMDAwX2RlZmluZXMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlMTAwMF84MjU3NS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYgMHgxMEM5XG4mIzQzOyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcbiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUiAwXG4mIzQzOyNkZWZpbmUgTVNJWF9WRUNUT1JfTUFTSyAoMSBcdTAwM2NcdTAwM2MgTVNJWF9WRUNUT1IpXG4mIzQzOyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi9cbiYjNDM7XG4mIzQzO3N0cnVjdCBpZ2JfdHhfZGVzYyB7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3ImIzM5O3MgZGF0YSBidWZmZXIgKi9cbiYjNDM7XHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuJiM0MztcdFx0XHR1MzIgb2xpbmZvX3N0YXR1czsgLyogQ29udGV4dC9CdWZmZXIgaW5mbyAqL1xuJiM0MztcdFx0fSByZWFkO1xuJiM0MztcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi9cbiYjNDM7XHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbiYjNDM7XHRcdFx0dTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqL1xuJiM0MztcdFx0fSB3YjtcbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlnYl9yeF9kZXNjIHtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuJiM0MztcdFx0XHR1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqL1xuJiM0MztcdFx0fSByZWFkO1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovXG4mIzQzO1x0XHRcdHUxNiBoZHJfaW5mbzsgICAgIC8qIFNwbGl0IEhlYWQsIGJ1ZiBsZW4gKi9cbiYjNDM7XHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbiYjNDM7XHRcdFx0dTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqL1xuJiM0MztcdFx0XHR1MTYgbGVuZ3RoOyAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovXG4mIzQzO1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4mIzQzO1x0XHR9IHdiOyAvKiB3cml0ZWJhY2sgKi9cbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlnYiB7XG4mIzQzO1x0dm9pZCAqYmFyMDtcbiYjNDM7XHR1MzIgdHhfdGFpbDtcbiYjNDM7XHR1MzIgcnhfdGFpbDtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuJiM0MztcdHN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbiYjNDM7e1xuJiM0MztcdHdyaXRlbCh2YWwsIGlnYi1cdTAwM2ViYXIwICYjNDM7IHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlYWRsKGlnYi1cdTAwM2ViYXIwICYjNDM7IHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIG1kaWM7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQSBwcm9kdWN0aW9uIGRyaXZlciB3b3VsZCBob2xkIHRoZSBTVy9GVyBzZW1hcGhvcmUgKFNXU00uU1dFU01CSSAmIzQzOyB0aGVcbiYjNDM7XHQgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGVcbiYjNDM7XHQgKiBkZXZpY2UmIzM5O3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxuJiM0MztcdCAqIGV4Y2x1c2l2ZWx5IG9uIGEgZGVkaWNhdGVkIHRlc3QgZGV2aWNlIHdpdGggbm8gYWN0aXZlIG1hbmFnZWFiaWxpdHlcbiYjNDM7XHQgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZVxuJiM0MztcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxuJiM0MztcdCAqL1xuJiM0MztcdG1kaWMgPSAoKCh1MzIpZGF0YSkgfFxuJiM0MztcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbiYjNDM7XHRcdCgxIFx1MDAzY1x1MDAzYyBFMTAwMF9NRElDX1BIWV9TSElGVCkgfFxuJiM0MztcdFx0RTEwMDBfTURJQ19PUF9XUklURSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfTURJQywgbWRpYyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1c2xlZXAoNTApO1xuJiM0MztcdFx0bWRpYyA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9NRElDKTtcbiYjNDM7XHRcdGlmIChtZGljIFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldFxuJiM0MzsgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFja1xuJiM0MzsgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4mIzQzOyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGVcbiYjNDM7ICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LlxuJiM0MzsgKlxuJiM0MzsgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byBcJiMzNDtVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrXG4mIzQzOyAqIG9uIHRoZSA4MjU3NlwmIzM0OywgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgXCYjMzQ7TUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkXG4mIzQzOyAqIG9uIHRoaXMgZGV2aWNlLlwmIzM0OyAgUkNUTC5MQk1fTUFDIGlzIHN0aWxsIHNldCBlbHNld2hlcmUgYXMgYSBRRU1VLW9ubHlcbiYjNDM7ICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZVxuJiM0MzsgKiByYXRpb25hbGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGN0cmw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBLaWNrIHRoZSBhdXRvbmVnIG1hY2hpbmVyeSBzb2xlbHkgdG8gYnJpbmcgU1RBVFVTLkxVIHVwIHVuZGVyXG4mIzQzO1x0ICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0c1xuJiM0MztcdCAqIGF1dG9uZWctZG9uZSB0aW1lciwgYW5kIHdpdGhvdXQgTFUgc2V0IGl0cyByZWNlaXZlIHBhdGhcbiYjNDM7XHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuJiM0MztcdCAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGVcbiYjNDM7XHQgKiBiZWxvdyBjbGVhcnMgdGhlIGF1dG9uZWctZW5hYmxlIGJpdCwgc28gdGhpcyBpcyBlZmZlY3RpdmVseSBhXG4mIzQzO1x0ICogbm8tb3AgdGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0KHZvaWQpaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuJiM0MztcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbiYjNDM7XG4mIzQzO1x0LyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICYjNDM7IDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuJiM0MztcdHJldCA9IGlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfTE9PUEJBQ0sgfFxuJiM0MztcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuJiM0MztcdFx0XHQgICAgQk1DUl9GVUxMRFBMWCk7XG4mIzQzO1x0VkZJT19BU1NFUlRfRVEocmV0LCAwLCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2xcbiYjNDM7XHQgKiBzZWxmdGVzdCBpbiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnkgdGhlXG4mIzQzO1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0dXNsZWVwKDUwMDAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZ1xuJiM0MztcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4mIzQzO1x0ICogbm9ybWFsbHkgd2FpdHMgZm9yIGEgcmVhbCBuZWdvdGlhdGVkIGxpbmsuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfU1BEX1NFTDtcbiYjNDM7XHRjdHJsIHw9IEUxMDAwX0NUUkxfRlJDU1BEIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfU1BEXzEwMDAgfFxuJiM0MztcdFx0RTEwMDBfQ1RSTF9GRCB8XG4mIzQzO1x0XHRFMTAwMF9DVFJMX1NMVTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCYjMzk7cyBtc2xlZXAoNTAwKVxuJiM0MztcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuJiM0MztcdCAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCg1MDAwMDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXZmaW9fcGNpX2RldmljZV9tYXRjaChkZXZpY2UsIFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVzZXQoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlXG4mIzQzO1x0ICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb25cbiYjNDM7XHQgKiA0LjIuMS42LjEpLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCgyMDAwKTtcbiYjNDM7XHRWRklPX0FTU0VSVF9FUShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgXHUwMDI2IEUxMDAwX0NUUkxfUlNULCAwKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFByb2dyYW0gdGhlIGRldmljZSBpbnRvIGEgdXNhYmxlIHN0YXRlLiAgU3BsaXQgb3V0IG9mIGlnYl9pbml0KCkgc28gaXRcbiYjNDM7ICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxuJiM0MzsgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcbiYjNDM7ICogdmlhIFZGSU8uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHR1NjQgaW92YV90eCwgaW92YV9yeDtcbiYjNDM7XHR1MzIgY3RybCwgcmN0bDtcbiYjNDM7XHR1MTYgY21kX3JlZztcbiYjNDM7XHRpbnQgcmV0cmllcztcbiYjNDM7XG4mIzQzO1x0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNldHhfcmluZyk7XG4mIzQzO1x0aW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNlcnhfcmluZyk7XG4mIzQzO1xuJiM0MztcbiYjNDM7XG4mIzQzO1x0LyogU2lnbmFsIHRoYXQgdGhlIGRyaXZlciBpcyBsb2FkZWQgKi9cbiYjNDM7XHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcbiYjNDM7XHRjdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEO1xuJiM0MztcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBQQ0kgQnVzIE1hc3Rlci4gKi9cbiYjNDM7XHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xuJiM0MztcdGlmICgoY21kX3JlZyBcdTAwMjYgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9XG4mIzQzO1x0ICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7XG4mIzQzO1x0XHRjbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuJiM0MztcdFx0dmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXG4mIzQzO1x0aWdiX3NldHVwX2xvb3BiYWNrKGlnYik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGlzYWJsZSBETUEgcmUtc2VuZCBvbiBQQ0llIGNvbXBsZXRpb24gdGltZW91dCAoODI1NzYgZGF0YXNoZWV0XG4mIzQzO1x0ICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGVcbiYjNDM7XHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xuJiM0MztcdCAqIHVubWFwcGVkIElPVkFzOyB3aXRoIHRoZSBkZWZhdWx0IChzZXQpIHZhbHVlLCB0aGUgZGV2aWNlIGtlZXBzXG4mIzQzO1x0ICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kXG4mIzQzO1x0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxuJiM0MztcdCAqL1xuJiM0MztcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dDUiwgY3RybCk7XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCBcdTAwM2VcdTAwM2UgMzIpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREgoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcdTAwM2VcdTAwM2UgMzIpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzZcbiYjNDM7XHQgKiBkYXRhc2hlZXQgc2VjdGlvbiA3LjEuNS4yOiBcJiMzNDtTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxuJiM0MztcdCAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWxcbiYjNDM7XHQgKiBkZXNjcmlwdG9ycy5cJiMzNDsgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXG4mIzQzO1x0ICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3JcbiYjNDM7XHQgKiByZXF1aXJlcyB0aGlzIGZvcm1hdC4gIFNlY3Rpb24gOC4xMC4yIHNwZWNpZmllcyBERVNDVFlQRVsyNzoyNV0uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXNcbiYjNDM7XHQgKiBpbnRlbnRpb25hbDogcGVyIHNlY3Rpb24gNy4xLjMuMSBhIHplcm8gQlNJWkVQQUNLRVQgZmFsbHMgYmFjayB0b1xuJiM0MztcdCAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDhcbiYjNDM7XHQgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkICovXG4mIzQzO1x0cmV0cmllcyA9IDIwMDA7XG4mIzQzO1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuJiM0MztcdFx0aWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpIFx1MDAyNiBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR1c2xlZXAoMTApO1xuJiM0MztcdH1cbiYjNDM7XHRWRklPX0FTU0VSVF9HRShyZXRyaWVzLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvblxuJiM0MztcdCAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJiMzOTtzIGVtdWxhdGVkIGlnYlxuJiM0MztcdCAqIGRvZXMgbm90IGhvbm9yIFBIWSByZWdpc3RlciAwIGJpdCAxNCAoUEhZIGludGVybmFsIGxvb3BiYWNrKSBhbmRcbiYjNDM7XHQgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlhcbiYjNDM7XHQgKiBxdWV1ZS4gIERhdGFzaGVldCA4LjEwLjEgKFJDVEwgcmVnaXN0ZXIpIGFkdmlzZXMgXCYjMzQ7V2hlbiB1c2luZyB0aGVcbiYjNDM7XHQgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGJcJiMzNDssIHNvIHNldHRpbmcgTEJNX01BQ1xuJiM0MztcdCAqIGhlcmUgZGV2aWF0ZXMgZnJvbSBkYXRhc2hlZXQgZ3VpZGFuY2U7IGVtcGlyaWNhbGx5IHRoZSBiaXQgaGFzXG4mIzQzO1x0ICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFja1xuJiM0MztcdCAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlXG4mIzQzO1x0ICogc2VsZnRlc3Qgd29yayBvbiBib3RoIHJlYWwgaGFyZHdhcmUgYW5kIFFFTVUgd2l0aG91dCBjb25kaXRpb25hbFxuJiM0MztcdCAqIGNvZGUgcGF0aHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmN0bCA9IEUxMDAwX1JDVExfRU4gfCAgICAgICAvKiBSZWNlaXZlciBFbmFibGUgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovXG4mIzQzO1x0ICAgICAgIEUxMDAwX1JDVExfTVBFIHwgICAgICAvKiBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9CQU0gfCAgICAgIC8qIEJyb2FkY2FzdCBBY2NlcHQgTW9kZSAqL1xuJiM0MztcdCAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCByY3RsKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4pO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByb2dyYW0gTVNJLVggaW50ZXJydXB0IHJvdXRpbmcgcGVyIDgyNTc2IGRhdGFzaGVldDpcbiYjNDM7XHQgKlxuJiM0MztcdCAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvXG4mIzQzO1x0ICogcm91dGUgaW50ZXJydXB0IGNhdXNlcyB0aHJvdWdoIElWQVIgbWFwcGluZywgYW5kIEVJQU1FIChiaXQgMzApXG4mIzQzO1x0ICogdG8gYXBwbHkgRUlBTSBvbiBNU0ktWCBhc3NlcnRpb24gKHdpdGhvdXQgRUlBTUUsIEVJQU0gb25seVxuJiM0MztcdCAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEVJQUMgKHNlY3Rpb24gOC44LjUpOiBlbmFibGUgYXV0by1jbGVhciBvZiBFSUNSIGZvciB2ZWN0b3IgMC5cbiYjNDM7XHQgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlXG4mIzQzO1x0ICogdGVzdCBjYW4gc2VlIHNwdXJpb3VzIGludGVycnVwdHMgb24gdGhlIG5leHQgbWVtY3B5IGJhdGNoLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb25cbiYjNDM7XHQgKiBNU0ktWCBhc3NlcnRpb24gKGVmZmVjdGl2ZSBiZWNhdXNlIEVJQU1FIGlzIHNldCksIHNvIGEgc2luZ2xlXG4mIzQzO1x0ICogaW50ZXJydXB0IGlzIGRlbGl2ZXJlZCBwZXIgbWVtY3B5IGJhdGNoIGV2ZW4gaWYgdGhlIGNhdXNlXG4mIzQzO1x0ICogcmUtYXNzZXJ0cyBiZWZvcmUgc29mdHdhcmUgcmUtZW5hYmxlcyB0aGUgbWFzay5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIElWQVIgKHNlY3Rpb24gNy4zLjEuMiwgcmVnaXN0ZXIgZGVmaW5pdGlvbiBpbiA4LjguMTMpOiBtYXAgUlhcbiYjNDM7XHQgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwgRTEwMDBfR1BJRV9FSUFNRSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIE1TSVhfVkVDVE9SX01BU0spO1xuJiM0MztcbiYjNDM7XHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTtcbiYjNDM7XG4mIzQzO1x0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi9cbiYjNDM7XHRpZ2ItXHUwMDNldHhfdGFpbCA9IDA7XG4mIzQzO1x0aWdiLVx1MDAzZXJ4X3RhaWwgPSAwO1xuJiM0MztcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfc2l6ZSA9IElHQl9NQVhfQ0hVTktfU0laRTtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxO1xuJiM0MztcdGRldmljZS1cdTAwM2Vkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHRWRklPX0FTU0VSVF9HRShkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpO1xuJiM0MztcbiYjNDM7XHRpZ2ItXHUwMDNlYmFyMCA9IGRldmljZS1cdTAwM2ViYXJzWzBdLnZhZGRyO1xuJiM0MztcbiYjNDM7XHRpZ2JfcmVzZXQoaWdiKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxuJiM0MztcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxuJiM0MztcdCAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZ1xuJiM0MztcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cbiYjNDM7XHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxuJiM0MztcdCAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLlxuJiM0MztcdCAqL1xuJiM0MztcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVtb3ZlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XG4mIzQzO1x0aWdiX3Jlc2V0KGlnYik7XG4mIzQzO1xuJiM0MztcdHZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1DLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9lbmFibGUoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSB3cml0ZS10by1jbGVhciAoZGF0YXNoZWV0IDcuMy40LjIpLiAgSW4gTVNJLVggbW9kZSB3aXRoIEVJQUNcbiYjNDM7XHQgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzIFwmIzM0O0lmIGFueSBiaXRzIGFyZSBzZXRcbiYjNDM7XHQgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWRcJiMzNDssIHdoaWNoIHJ1bGVzIG91dFxuJiM0MztcdCAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsXG4mIzQzO1x0ICogY2xlYXJlZCBieSB3cml0aW5nIDEuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsXG4mIzQzO1x0XHRcdCAgICAgaW92YV90IGRzdCwgdTY0IHNpemUsIHU2NCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XG4mIzQzO1x0c3RydWN0IGlnYl90eF9kZXNjICp0eDtcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XG4mIzQzO1x0aWdiX2lycV9kaXNhYmxlKGlnYik7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dHggPSBcdTAwMjZpZ2ItXHUwMDNldHhfcmluZ1tpZ2ItXHUwMDNldHhfdGFpbF07XG4mIzQzO1x0XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW2lnYi1cdTAwM2VyeF90YWlsXTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQodHgsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcbiYjNDM7XHRcdG1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuJiM0MztcbiYjNDM7XHRcdHJ4LVx1MDAzZXJlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChkc3QpO1xuJiM0MztcdFx0cngtXHUwMDNlcmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApO1xuJiM0MztcbiYjNDM7XHRcdHR4LVx1MDAzZXJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChzcmMpO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEJ1aWxkIGFuIGFkdmFuY2VkIGRhdGEgZGVzY3JpcHRvciBwZXIgODI1NzYgZGF0YXNoZWV0XG4mIzQzO1x0XHQgKiBzZWN0aW9uIDcuMi4yLjMuICBERVhUIG1hcmtzIHRoZSBkZXNjcmlwdG9yIGFzIGFkdmFuY2VkXG4mIzQzO1x0XHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxuJiM0MztcdFx0ICogZGVzY3JpcHRvcjsgSUZDUyBhc2tzIHRoZSBNQUMgdG8gYXBwZW5kIHRoZSBFdGhlcm5ldFxuJiM0MztcdFx0ICogRkNTICh3aXRob3V0IGl0IHRoZSBmcmFtZSBpcyBkcm9wcGVkIGFzIG1hbGZvcm1lZCk7XG4mIzQzO1x0XHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxuJiM0MztcdFx0ICogaW4gYml0cyAxNTowIG9mIGNtZF90eXBlX2xlbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dHgtXHUwMDNlcmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9ERVhUIHxcbiYjNDM7XHRcdFx0RTEwMDBfQURWVFhEX0RDTURfSUZDUyB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemVcbiYjNDM7XHRcdCAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR0eC1cdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxuJiM0MztcdFx0XHRjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSBcdTAwM2NcdTAwM2MgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVCk7XG4mIzQzO1xuJiM0MztcdFx0aWdiLVx1MDAzZXR4X3RhaWwgPSAoaWdiLVx1MDAzZXR4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0XHRpZ2ItXHUwMDNlcnhfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCAmIzQzOyAxKSAlIFJJTkdfU0laRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItXHUwMDNlcnhfdGFpbCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi1cdTAwM2V0eF90YWlsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVzZXQgdGhlIGRldmljZSB2aWEgVkZJT19ERVZJQ0VfUkVTRVQgKFBDSWUgRkxSIG9uIHRoZSA4MjU3NikgYW5kXG4mIzQzOyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWFxuJiM0MzsgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyXG4mIzQzOyAqIHZpYSB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBiZWZvcmUgcmVwcm9ncmFtbWluZyBzbyBhbnkgY2FsbGVyLWNhY2hlZFxuJiM0MzsgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuXG4mIzQzOyAqXG4mIzQzOyAqIEZMUiBjbGVhcnMgZGV2aWNlLXNpZGUgc3RhdGUgdG8gcG93ZXItb24gcmVzZXQgdmFsdWVzIChkYXRhc2hlZXRcbiYjNDM7ICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyBcJiMzNDtlcXVpdmFsZW50IHRvIGEgRDAtXHUwMDNlRDMtXHUwMDNlRDAgdHJhbnNpdGlvblwmIzM0OyksIHNvXG4mIzQzOyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWxcbiYjNDM7ICogdmFsdWVzLCBhbmQgaWdiX2h3X2luaXQoKSByZXNldHMgdHhfdGFpbC9yeF90YWlsIHRvIDAuICBUaGUgbmV4dFxuJiM0MzsgKiBpZ2JfbWVtY3B5X3N0YXJ0KCkgd2lsbCBtZW1zZXQgZWFjaCBkZXNjcmlwdG9yIGl0IHRvdWNoZXMgYmVmb3JlXG4mIzQzOyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlXG4mIzQzOyAqIG5lZWRlZCBoZXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0dmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7XG4mIzQzO1x0dmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbiYjNDM7XHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl9tZW1jcHlfd2FpdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuJiM0MztcdHUzMiBzdGF0dXMgPSAwO1xuJiM0MztcdHUzMiBwcmV2X3RhaWw7XG4mIzQzO1x0aW50IHJldHJpZXM7XG4mIzQzO1xuJiM0MztcdHByZXZfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCAmIzQzOyBSSU5HX1NJWkUgLSAxKSAlIFJJTkdfU0laRTtcbiYjNDM7XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW3ByZXZfdGFpbF07XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVhbCA4MjU3NiBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhdCBsaW5lIHJhdGUuXG4mIzQzO1x0ICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsXG4mIzQzO1x0ICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdFxuJiM0MztcdCAqIHZhbGlkIG1lbWNweSB0YWtlcyB+MzIgbXMgb24gdGhlIHdpcmUsIHBsdXMgcGVyLWZyYW1lIHByZWFtYmxlLFxuJiM0MztcdCAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrXG4mIzQzO1x0ICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZztcbiYjNDM7XHQgKiB+NnggdGhlIGxpbmUtcmF0ZSBmbG9vciBsZWF2ZXMgY29tZm9ydGFibGUgaGVhZHJvb20gZm9yIGhvc3RcbiYjNDM7XHQgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQVxuJiM0MztcdCAqIHRlc3RzIGJvdW5kZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0cmllcyA9IDIwMDtcbiYjNDM7XHR3aGlsZSAocmV0cmllcy0tIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtXHUwMDNld2Iuc3RhdHVzX2Vycm9yKSk7XG4mIzQzO1x0XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdHVzbGVlcCgxMDAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRW5zdXJlIHRoZSB0ZXN0IGNvZGUgZG9lc24mIzM5O3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUFcbiYjNDM7XHRcdCAqIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgd2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZVxuJiM0MztcdFx0ICogZGVzY3JpcHRvciB3cml0ZWJhY2sgaXMgY29tcGxldGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJtYigpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaXJxX2NsZWFyKGlnYik7XG4mIzQzO1xuJiM0MztcdGlnYl9pcnFfZW5hYmxlKGlnYik7XG4mIzQzO1xuJiM0MztcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXNcbiYjNDM7XHQgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbFxuJiM0MztcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXG4mIzQzO1x0ICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lXG4mIzQzO1x0ICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWRcbiYjNDM7XHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXG4mIzQzO1x0ICogaXMgcmVxdWlyZWQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBEZWxheSBiZWZvcmUgcmVxdWVzdGluZyByZXNldCBzbyBQQ0llL0lPTU1VL0FFUiBlcnJvciBoYW5kbGluZ1xuJiM0MztcdCAqIHRyaWdnZXJlZCBieSB0aGUganVzdC1vYnNlcnZlZCBETUEgZmF1bHQgY2FuIHJlbGVhc2UgdGhlIGRldmljZVxuJiM0MztcdCAqIGxvY2sgVkZJT19ERVZJQ0VfUkVTRVQgY29udGVuZHMgZm9yLiAgVGhlIDEwIG1zIHZhbHVlIGlzXG4mIzQzO1x0ICogaGV1cmlzdGljLiAgVGhlIGN1cnJlbnQgbWVtY3B5IHN0aWxsIGZhaWxzIHdpdGggLUVUSU1FRE9VVDtcbiYjNDM7XHQgKiByZWNvdmVyeSBvbmx5IGVuc3VyZXMgdGhlIG5leHQgbWVtY3B5IHN0YXJ0cyBmcm9tIGEgdXNhYmxlIHN0YXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCgxMDAwMCk7XG4mIzQzO1x0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9zZW5kX21zaShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O2lnYlwmIzM0OyxcbiYjNDM7XHQucHJvYmUgPSBpZ2JfcHJvYmUsXG4mIzQzO1x0LmluaXQgPSBpZ2JfaW5pdCxcbiYjNDM7XHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcbiYjNDM7XHQubWVtY3B5X3N0YXJ0ID0gaWdiX21lbWNweV9zdGFydCxcbiYjNDM7XHQubWVtY3B5X3dhaXQgPSBpZ2JfbWVtY3B5X3dhaXQsXG4mIzQzO1x0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuaW5kZXggMjg1ODg4NWE4OWJiYmYuLjJlNjdhZmMwZDU4MDk4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbkBAIC02OCw2ICYjNDM7NjgsOCBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxuIHZvaWQgdmZpb19wY2lfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcbiB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KTtcbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtOTIsNiAmIzQzOzk0LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4gXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4mIzQzO1x0XHRcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcbiBcdFx0XHRcdFx0dTMyIHZlY3RvciwgaW50IGNvdW50KVxuIHtcbkBAIC0xMDMsNiAmIzQzOzExMSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuJiM0MztcdFx0XHRcdFx0ICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcbiB7XG4gXHRyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtXHUwMDNlaW9tbXUsIHZhZGRyLCBpb3ZhKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuaW5kZXggOWY0N2JjZWVkMTZmNGMuLjFmMTNjY2EwNDM0OGI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAIExJQlZGSU9fQyAmIzQzOz0gdmZpb19wY2lfZHJpdmVyLmNcbiBpZmVxICgkKEFSQ0g6eDg2XzY0PXg4NikseDg2KVxuIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pb2F0L2lvYXQuY1xuIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9kc2EvZHNhLmNcbiYjNDM7TElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2lnYi9pZ2IuY1xuIGVuZGlmXG4gXG4gTElCVkZJT19PVVRQVVQgOj0gJChPVVRQVVQpL2xpYnZmaW9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5pbmRleCBmYzc1ZTA0ZWYwMTBjZi4uN2I4Mzk0ZDBhYzUwNzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbkBAIC0xMDYsNiAmIzQzOzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxuIFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCAwLCAwLCBOVUxMKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXG4mIzQzOyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlXG4mIzQzOyAqIGludGVycnVwdHMgYWZ0ZXIgYSBWRklPX0RFVklDRV9SRVNFVCwgd2hpY2ggdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGVcbiYjNDM7ICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcbiYjNDM7ICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpc1xuJiM0MzsgKiBoZWxwZXIgZGVsaWJlcmF0ZWx5IHByZXNlcnZlcyB0aGVtLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gdmVjdG9yOyBpIFx1MDAzYyB2ZWN0b3IgJiM0MzsgY291bnQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkc1tpXSwgMCxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3ZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXG5cJiMzNDssIGkpO1xuJiM0MztcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIHZlY3RvciwgY291bnQsIGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHMgJiM0MzsgdmVjdG9yKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9pcnFfZ2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG5pbmRleCA2ODI3ZjRhNmZlYmU5OS4uYTVkMDU0NzEzMmM0MDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcbkBAIC01LDEyICYjNDM7NSwxNCBAQFxuICNpZmRlZiBfX3g4Nl82NF9fXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGRzYV9vcHM7XG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzO1xuJiM0MztleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcztcbiAjZW5kaWZcbiBcbiBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcbiAjaWZkZWYgX194ODZfNjRfX1xuIFx0XHUwMDI2ZHNhX29wcyxcbiBcdFx1MDAyNmlvYXRfb3BzLFxuJiM0MztcdFx1MDAyNmlnYl9vcHMsXG4gI2VuZGlmXG4gfTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNzowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBuZXcgZHJpdmVyIHRvIHRoZSBWRklPIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLy4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgY2FuIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcwZDE0MGQzMTdjMjkwODRkMjMyYzgzM2FkMjU1NmY3OWM3MWJiYzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxNSAwNzowNToyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmgKQEAgLTAsMCAmIzQzOzEgQEAKJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfODI1NzUuaApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NmQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmgKQEAgLTAsMCAmIzQzOzEgQEAKJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfZGVmaW5lcy5oClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaApAQCAtMCwwICYjNDM7MSBAQAomIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mNTBkNDUwZDNlOTQ5NQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jCkBAIC0wLDAgJiM0MzsxLDU2NCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2lfcmVncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2lfaWRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vYmFycmllci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9taWkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2UxMDAwX3JlZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlMTAwMF9kZWZpbmVzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZTEwMDBfODI1NzUuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2IDB4MTBDOQomIzQzOyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjQKJiM0MzsjZGVmaW5lIE1TSVhfVkVDVE9SIDAKJiM0MzsjZGVmaW5lIE1TSVhfVkVDVE9SX01BU0sgKDEgJmx0OyZsdDsgTVNJWF9WRUNUT1IpCiYjNDM7I2RlZmluZSBSSU5HX1NJWkUgNDA5NiAvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gcmluZyAqLwomIzQzOwomIzQzO3N0cnVjdCBpZ2JfdHhfZGVzYyB7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3ImIzM5O3MgZGF0YSBidWZmZXIgKi8KJiM0MzsJCQl1MzIgY21kX3R5cGVfbGVuOyAvKiBDb21tYW5kL1R5cGUvTGVuZ3RoICovCiYjNDM7CQkJdTMyIG9saW5mb19zdGF0dXM7IC8qIENvbnRleHQvQnVmZmVyIGluZm8gKi8KJiM0MzsJCX0gcmVhZDsKJiM0MzsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTY0IHJzdmQ7ICAgICAgICAvKiBSZXNlcnZlZCAqLwomIzQzOwkJCXUzMiBueHRzZXFfc2VlZDsgLyogTmV4dCBzZXF1ZW5jZSBzZWVkICovCiYjNDM7CQkJdTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqLwomIzQzOwkJfSB3YjsKJiM0MzsJfTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBpZ2JfcnhfZGVzYyB7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTY0IHBrdF9hZGRyOyAvKiBQYWNrZXQgYnVmZmVyIGFkZHJlc3MgKi8KJiM0MzsJCQl1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqLwomIzQzOwkJfSByZWFkOwomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQl1MTYgcGt0X2luZm87ICAgICAvKiBSU1MgdHlwZSwgUGFja2V0IHR5cGUgKi8KJiM0MzsJCQl1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovCiYjNDM7CQkJdTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi8KJiM0MzsJCQl1MzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovCiYjNDM7CQkJdTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqLwomIzQzOwkJCXUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovCiYjNDM7CQl9IHdiOyAvKiB3cml0ZWJhY2sgKi8KJiM0MzsJfTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBpZ2IgewomIzQzOwl2b2lkICpiYXIwOwomIzQzOwl1MzIgdHhfdGFpbDsKJiM0MzsJdTMyIHJ4X3RhaWw7CiYjNDM7CXN0cnVjdCBpZ2JfdHhfZGVzYyB0eF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7CiYjNDM7CXN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtJmd0O2RyaXZlci5yZWdpb24udmFkZHI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfd3JpdGUzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcsIHUzMiB2YWwpCiYjNDM7ewomIzQzOwl3cml0ZWwodmFsLCBpZ2ItJmd0O2JhcjAgJiM0MzsgcmVnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1MzIgaWdiX3JlYWQzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVhZGwoaWdiLSZndDtiYXIwICYjNDM7IHJlZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQomIzQzO3sKJiM0MzsJdTMyIG1kaWM7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXcml0ZSBhIFBIWSByZWdpc3RlciBvdmVyIE1ESU8uCiYjNDM7CSAqCiYjNDM7CSAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgJiM0MzsgdGhlCiYjNDM7CSAqIFNXX0ZXX1NZTkMgUEhZIGJpdCkgYWNyb3NzIHRoZSBNRElPIHRyYW5zYWN0aW9uIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHRoZQomIzQzOwkgKiBkZXZpY2UmIzM5O3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvbgomIzQzOwkgKiBleGNsdXNpdmVseSBvbiBhIGRlZGljYXRlZCB0ZXN0IGRldmljZSB3aXRoIG5vIGFjdGl2ZSBtYW5hZ2VhYmlsaXR5CiYjNDM7CSAqIGNvbnRlbmRpbmcgZm9yIHRoZSBQSFksIHNvIHRoZSBzeW5jIGlzIG9taXR0ZWQ7IGl0IHNob3VsZCBiZSBhZGRlZCBoZXJlCiYjNDM7CSAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLgomIzQzOwkgKi8KJiM0MzsJbWRpYyA9ICgoKHUzMilkYXRhKSB8CiYjNDM7CQkob2Zmc2V0ICZsdDsmbHQ7IEUxMDAwX01ESUNfUkVHX1NISUZUKSB8CiYjNDM7CQkoMSAmbHQ7Jmx0OyBFMTAwMF9NRElDX1BIWV9TSElGVCkgfAomIzQzOwkJRTEwMDBfTURJQ19PUF9XUklURSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfTURJQywgbWRpYyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAxMDAwOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdXNsZWVwKDUwKTsKJiM0MzsJCW1kaWMgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfTURJQyk7CiYjNDM7CQlpZiAobWRpYyAmYW1wOyBFMTAwMF9NRElDX1JFQURZKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghKG1kaWMgJmFtcDsgRTEwMDBfTURJQ19SRUFEWSkpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWlmIChtZGljICZhbXA7IEUxMDAwX01ESUNfRVJST1IpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldAomIzQzOyAqIHNlY3Rpb24gMy41LjYuMy4xLiAgRm9yY2UgdGhlIFBIWSB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxvb3BiYWNrCiYjNDM7ICogZW5hYmxlZCwgdGhlbiBmb3JjZSB0aGUgTUFDIGxpbmsgc3RhdGUgdG8gbWF0Y2guICBJbnRlcm5hbCBsb29wYmFjawomIzQzOyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGUKJiM0MzsgKiBwaHlzaWNhbCBsaW5rIHN0YXRlIGlzIGlycmVsZXZhbnQuCiYjNDM7ICoKJiM0MzsgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byAmIzM0O1VzZSBQSFkgTG9vcGJhY2sgaW5zdGVhZCBvZiBNQUMgTG9vcGJhY2sKJiM0MzsgKiBvbiB0aGUgODI1NzYmIzM0OywgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgJiMzNDtNQUMgTG9vcGJhY2sgaXMgbm90IHVzZWQKJiM0MzsgKiBvbiB0aGlzIGRldmljZS4mIzM0OyAgUkNUTC5MQk1fTUFDIGlzIHN0aWxsIHNldCBlbHNld2hlcmUgYXMgYSBRRU1VLW9ubHkKJiM0MzsgKiBhY2NvbW1vZGF0aW9uOyBzZWUgdGhlIFJDVEwgcHJvZ3JhbW1pbmcgaW4gdGhlIGNhbGxlciBmb3IgdGhlCiYjNDM7ICogcmF0aW9uYWxlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGlnYl9zZXR1cF9sb29wYmFjayhzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwl1MzIgY3RybDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlcgomIzQzOwkgKiBRRU1VJiMzOTtzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzCiYjNDM7CSAqIGF1dG9uZWctZG9uZSB0aW1lciwgYW5kIHdpdGhvdXQgTFUgc2V0IGl0cyByZWNlaXZlIHBhdGgKJiM0MzsJICogKGUxMDAweF9od19yeF9lbmFibGVkKSBkcm9wcyBldmVyeSBsb29wYmFjayBmcmFtZS4gIE9uIHJlYWwKJiM0MzsJICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZQomIzQzOwkgKiBiZWxvdyBjbGVhcnMgdGhlIGF1dG9uZWctZW5hYmxlIGJpdCwgc28gdGhpcyBpcyBlZmZlY3RpdmVseSBhCiYjNDM7CSAqIG5vLW9wIHRoZXJlLgomIzQzOwkgKi8KJiM0MzsJKHZvaWQpaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLAomIzQzOwkJCSAgICBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOwomIzQzOwomIzQzOwkvKiBQSFkgY29udHJvbDogbG9vcGJhY2sgJiM0MzsgMUdiL3MgZnVsbCBkdXBsZXgsIGF1dG9uZWcgZGlzYWJsZWQuICovCiYjNDM7CXJldCA9IGlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUiwKJiM0MzsJCQkgICAgQk1DUl9MT09QQkFDSyB8CiYjNDM7CQkJICAgIEJNQ1JfU1BFRUQxMDAwIHwKJiM0MzsJCQkgICAgQk1DUl9GVUxMRFBMWCk7CiYjNDM7CVZGSU9fQVNTRVJUX0VRKHJldCwgMCwgJiMzNDtGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXImIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2wKJiM0MzsJICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZQomIzQzOwkgKiBkYXRhc2hlZXQsIGJ1dCBlbXBpcmljYWxseSByZXF1aXJlZCBieSB0aGUga2VybmVsIGRyaXZlci4KJiM0MzsJICovCiYjNDM7CXVzbGVlcCg1MDAwMCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZvcmNlIHRoZSBNQUMgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsaW5rIHVwLiAgV2l0aG91dCBmb3JjaW5nCiYjNDM7CSAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwCiYjNDM7CSAqIG5vcm1hbGx5IHdhaXRzIGZvciBhIHJlYWwgbmVnb3RpYXRlZCBsaW5rLgomIzQzOwkgKi8KJiM0MzsJY3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTsKJiM0MzsJY3RybCAmYW1wOz0gfkUxMDAwX0NUUkxfU1BEX1NFTDsKJiM0MzsJY3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8CiYjNDM7CQlFMTAwMF9DVFJMX0ZSQ0RQWCB8CiYjNDM7CQlFMTAwMF9DVFJMX1NQRF8xMDAwIHwKJiM0MzsJCUUxMDAwX0NUUkxfRkQgfAomIzQzOwkJRTEwMDBfQ1RSTF9TTFU7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCYjMzk7cyBtc2xlZXAoNTAwKQomIzQzOwkgKiBhdCB0aGUgdGFpbCBvZiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnkKJiM0MzsJICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuCiYjNDM7CSAqLwomIzQzOwl1c2xlZXAoNTAwMDAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpZ2JfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJaWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX3Jlc2V0KHN0cnVjdCBpZ2IgKmlnYikKJiM0Mzt7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpOwomIzQzOwkvKgomIzQzOwkgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlCiYjNDM7CSAqIGNoZWNraW5nIGlmIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIHVzZWQgKDgyNTc2IGRhdGFzaGVldCBzZWN0aW9uCiYjNDM7CSAqIDQuMi4xLjYuMSkuCiYjNDM7CSAqLwomIzQzOwl1c2xlZXAoMjAwMCk7CiYjNDM7CVZGSU9fQVNTRVJUX0VRKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSAmYW1wOyBFMTAwMF9DVFJMX1JTVCwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSU1DLCAweEZGRkZGRkZGKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0CiYjNDM7ICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdAomIzQzOyAqIENUUkwuUlNUIGNsZWFycy4gIEV4cGVjdHMgYmFyMCB0byBiZSBtYXBwZWQgYW5kIE1TSS1YIGFscmVhZHkgZW5hYmxlZAomIzQzOyAqIHZpYSBWRklPLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGlnYl9od19pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwl1NjQgaW92YV90eCwgaW92YV9yeDsKJiM0MzsJdTMyIGN0cmwsIHJjdGw7CiYjNDM7CXUxNiBjbWRfcmVnOwomIzQzOwlpbnQgcmV0cmllczsKJiM0MzsKJiM0MzsJaW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItJmd0O3R4X3JpbmcpOwomIzQzOwlpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi0mZ3Q7cnhfcmluZyk7CiYjNDM7CiYjNDM7CiYjNDM7CiYjNDM7CS8qIFNpZ25hbCB0aGF0IHRoZSBkcml2ZXIgaXMgbG9hZGVkICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQpOwomIzQzOwljdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEOwomIzQzOwljdHJsICZhbXA7PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpOwomIzQzOwomIzQzOwkvKiBFbmFibGUgUENJIEJ1cyBNYXN0ZXIuICovCiYjNDM7CWNtZF9yZWcgPSB2ZmlvX3BjaV9jb25maWdfcmVhZHcoZGV2aWNlLCBQQ0lfQ09NTUFORCk7CiYjNDM7CWlmICgoY21kX3JlZyAmYW1wOyAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT0KJiM0MzsJICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7CiYjNDM7CQljbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpOwomIzQzOwkJdmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBDb25maWd1cmUgUEhZIGludGVybmFsIGxvb3BiYWNrIGZvciB0ZXN0aW5nLiAqLwomIzQzOwlpZ2Jfc2V0dXBfbG9vcGJhY2soaWdiKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRGlzYWJsZSBETUEgcmUtc2VuZCBvbiBQQ0llIGNvbXBsZXRpb24gdGltZW91dCAoODI1NzYgZGF0YXNoZWV0CiYjNDM7CSAqIHNlY3Rpb24gOC42LjEsIEdDUi5Db21wbGV0aW9uX1RpbWVvdXRfUmVzZW5kLCBiaXQgMTYpLiAgVGhlCiYjNDM7CSAqIG1peF9hbmRfbWF0Y2ggdGVzdCBpbnRlbnRpb25hbGx5IHN1Ym1pdHMgZGVzY3JpcHRvcnMgdGFyZ2V0aW5nCiYjNDM7CSAqIHVubWFwcGVkIElPVkFzOyB3aXRoIHRoZSBkZWZhdWx0IChzZXQpIHZhbHVlLCB0aGUgZGV2aWNlIGtlZXBzCiYjNDM7CSAqIHJldHJ5aW5nIHRoZSBmYWlsZWQgcmVhZCBpbmRlZmluaXRlbHksIHdoaWNoIGtlZXBzIFBDSWUgQUVSIGFuZAomIzQzOwkgKiBJT01NVSBlcnJvciBoYW5kbGluZyBidXN5IGFuZCBpbnRlcmZlcmVzIHdpdGggcmVzZXQgcmVjb3ZlcnkuCiYjNDM7CSAqLwomIzQzOwljdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0dDUik7CiYjNDM7CWN0cmwgJmFtcDs9IH5FMTAwMF9HQ1JfQ01QTF9UTU9VVF9SRVNFTkQ7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTsKJiM0MzsKJiM0MzsJLyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggJmd0OyZndDsgMzIpKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UWERDVEwoMCksIEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFMKDApLCAodTMyKWlvdmFfcngpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFIKDApLCAodTMyKShpb3ZhX3J4ICZndDsmZ3Q7IDMyKSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgMCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNlbGVjdCB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdC4gIFBlciA4MjU3NgomIzQzOwkgKiBkYXRhc2hlZXQgc2VjdGlvbiA3LjEuNS4yOiAmIzM0O1NSUkNUTFtuXS5ERVNDVFlQRSBtdXN0IGJlIHNldCB0byBhCiYjNDM7CSAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWwKJiM0MzsJICogZGVzY3JpcHRvcnMuJiMzNDsgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyCiYjNDM7CSAqIHdyaXRlYmFjayBsYXlvdXQgKHNlY3Rpb24gNy4xLjUuMiksIHNvIHBvbGxpbmcgcngud2Iuc3RhdHVzX2Vycm9yCiYjNDM7CSAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS4KJiM0MzsJICoKJiM0MzsJICogVGhlIGRpcmVjdCB3cml0ZSBhbHNvIHplcm9lcyBTUlJDVEwuQlNJWkVQQUNLRVQsIHdoaWNoIGlzCiYjNDM7CSAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvCiYjNDM7CSAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDgKJiM0MzsJICogYnl0ZXMgLS0gYW1wbGUgZm9yIHRoZSBsb29wYmFjayBmcmFtZXMgaGVyZS4KJiM0MzsJICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkICovCiYjNDM7CXJldHJpZXMgPSAyMDAwOwomIzQzOwl3aGlsZSAocmV0cmllcy0tICZndDsgMCkgewomIzQzOwkJaWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSAmYW1wOyBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpICZhbXA7IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJdXNsZWVwKDEwKTsKJiM0MzsJfQomIzQzOwlWRklPX0FTU0VSVF9HRShyZXRyaWVzLCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5hYmxlIFJlY2VpdmVyIGFuZCBUcmFuc21pdHRlci4gIFJDVEwuTEJNX01BQyBpcyBzZXQgaW4gYWRkaXRpb24KJiM0MzsJICogdG8gUEhZIGxvb3BiYWNrIGFzIGEgUUVNVS1vbmx5IGFjY29tbW9kYXRpb246IFFFTVUmIzM5O3MgZW11bGF0ZWQgaWdiCiYjNDM7CSAqIGRvZXMgbm90IGhvbm9yIFBIWSByZWdpc3RlciAwIGJpdCAxNCAoUEhZIGludGVybmFsIGxvb3BiYWNrKSBhbmQKJiM0MzsJICogcmVsaWVzIG9uIFJDVEwuTEJNX01BQyB0byB3cmFwIFRYIGRlc2NyaXB0b3JzIGJhY2sgdG8gdGhlIFJYCiYjNDM7CSAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyAmIzM0O1doZW4gdXNpbmcgdGhlCiYjNDM7CSAqIGludGVybmFsIFBIWSwgTEJNIHNob3VsZCByZW1haW4gc2V0IHRvIDAwYiYjMzQ7LCBzbyBzZXR0aW5nIExCTV9NQUMKJiM0MzsJICogaGVyZSBkZXZpYXRlcyBmcm9tIGRhdGFzaGVldCBndWlkYW5jZTsgZW1waXJpY2FsbHkgdGhlIGJpdCBoYXMKJiM0MzsJICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFjawomIzQzOwkgKiBpcyBub3QgaW1wbGVtZW50ZWQgKGRhdGFzaGVldCAzLjUuNi4yKS4gIFNldHRpbmcgYm90aCBsZXRzIHRoZQomIzQzOwkgKiBzZWxmdGVzdCB3b3JrIG9uIGJvdGggcmVhbCBoYXJkd2FyZSBhbmQgUUVNVSB3aXRob3V0IGNvbmRpdGlvbmFsCiYjNDM7CSAqIGNvZGUgcGF0aHMuCiYjNDM7CSAqLwomIzQzOwlyY3RsID0gRTEwMDBfUkNUTF9FTiB8ICAgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAqLwomIzQzOwkgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovCiYjNDM7CSAgICAgICBFMTAwMF9SQ1RMX01QRSB8ICAgICAgLyogTXVsdGljYXN0IFByb21pc2N1b3VzICovCiYjNDM7CSAgICAgICBFMTAwMF9SQ1RMX0JBTSB8ICAgICAgLyogQnJvYWRjYXN0IEFjY2VwdCBNb2RlICovCiYjNDM7CSAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIHJjdGwpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4pOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6CiYjNDM7CSAqCiYjNDM7CSAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvCiYjNDM7CSAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKQomIzQzOwkgKiB0byBhcHBseSBFSUFNIG9uIE1TSS1YIGFzc2VydGlvbiAod2l0aG91dCBFSUFNRSwgRUlBTSBvbmx5CiYjNDM7CSAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS4KJiM0MzsJICoKJiM0MzsJICogRUlBQyAoc2VjdGlvbiA4LjguNSk6IGVuYWJsZSBhdXRvLWNsZWFyIG9mIEVJQ1IgZm9yIHZlY3RvciAwLgomIzQzOwkgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlCiYjNDM7CSAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC4KJiM0MzsJICoKJiM0MzsJICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb24KJiM0MzsJICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLCBzbyBhIHNpbmdsZQomIzQzOwkgKiBpbnRlcnJ1cHQgaXMgZGVsaXZlcmVkIHBlciBtZW1jcHkgYmF0Y2ggZXZlbiBpZiB0aGUgY2F1c2UKJiM0MzsJICogcmUtYXNzZXJ0cyBiZWZvcmUgc29mdHdhcmUgcmUtZW5hYmxlcyB0aGUgbWFzay4KJiM0MzsJICoKJiM0MzsJICogSVZBUiAoc2VjdGlvbiA3LjMuMS4yLCByZWdpc3RlciBkZWZpbml0aW9uIGluIDguOC4xMyk6IG1hcCBSWAomIzQzOwkgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC4KJiM0MzsJICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR1BJRSwgRTEwMDBfR1BJRV9NU0lYX01PREUgfCBFMTAwMF9HUElFX0VJQU1FKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBNU0lYX1ZFQ1RPUl9NQVNLKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFNLCBNU0lYX1ZFQ1RPUl9NQVNLKTsKJiM0MzsKJiM0MzsJLyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSVZBUjAsIEUxMDAwX0lWQVJfVkFMSUQpOwomIzQzOwomIzQzOwkvKiBFbmFibGUgaW50ZXJydXB0cyBvbiB2ZWN0b3IgMCAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi8KJiM0MzsJaWdiLSZndDt0eF90YWlsID0gMDsKJiM0MzsJaWdiLSZndDtyeF90YWlsID0gMDsKJiM0MzsKJiM0MzsJZGV2aWNlLSZndDtkcml2ZXIubWF4X21lbWNweV9zaXplID0gSUdCX01BWF9DSFVOS19TSVpFOwomIzQzOwlkZXZpY2UtJmd0O2RyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTsKJiM0MzsJZGV2aWNlLSZndDtkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwomIzQzOwlWRklPX0FTU0VSVF9HRShkZXZpY2UtJmd0O2RyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTsKJiM0MzsKJiM0MzsJaWdiLSZndDtiYXIwID0gZGV2aWNlLSZndDtiYXJzWzBdLnZhZGRyOwomIzQzOwomIzQzOwlpZ2JfcmVzZXQoaWdiKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5hYmxlIE1TSS1YIHZpYSBWRklPIGJlZm9yZSBkZXZpY2Utc2lkZSByZWdpc3RlciBwcm9ncmFtbWluZy4KJiM0MzsJICogdmZpb19wY2lfbXNpeF9lbmFibGUoKSBvbmx5IHRvdWNoZXMgdGhlIFZGSU8gSVJRIG1hY2hpbmVyeSBhbmQgdGhlCiYjNDM7CSAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZwomIzQzOwkgKiBkZXBlbmRlbmN5IG9uIHRoZSBkZXZpY2Utc2lkZSB3cml0ZXMgcGVyZm9ybWVkIGJ5IGlnYl9od19pbml0KCkuCiYjNDM7CSAqIFBsYWNpbmcgaXQgaGVyZSBrZWVwcyBpZ2JfaHdfaW5pdCgpIHJldXNhYmxlIGZyb20gdGhlIHJlc2V0CiYjNDM7CSAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLgomIzQzOwkgKi8KJiM0MzsJdmZpb19wY2lfbXNpeF9lbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7CiYjNDM7CiYjNDM7CWlnYl9od19pbml0KGRldmljZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7CiYjNDM7CWlnYl9yZXNldChpZ2IpOwomIzQzOwomIzQzOwl2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9kaXNhYmxlKHN0cnVjdCBpZ2IgKmlnYikKJiM0Mzt7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfZW5hYmxlKHN0cnVjdCBpZ2IgKmlnYikKJiM0Mzt7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNUywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVXNlIHdyaXRlLXRvLWNsZWFyIChkYXRhc2hlZXQgNy4zLjQuMikuICBJbiBNU0ktWCBtb2RlIHdpdGggRUlBQwomIzQzOwkgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzICYjMzQ7SWYgYW55IGJpdHMgYXJlIHNldAomIzQzOwkgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWQmIzM0Oywgd2hpY2ggcnVsZXMgb3V0CiYjNDM7CSAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsCiYjNDM7CSAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLgomIzQzOwkgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsCiYjNDM7CQkJICAgICBpb3ZhX3QgZHN0LCB1NjQgc2l6ZSwgdTY0IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CXN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7CiYjNDM7CXN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlpZ2JfaXJxX2Rpc2FibGUoaWdiKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJdHggPSAmYW1wO2lnYi0mZ3Q7dHhfcmluZ1tpZ2ItJmd0O3R4X3RhaWxdOwomIzQzOwkJcnggPSAmYW1wO2lnYi0mZ3Q7cnhfcmluZ1tpZ2ItJmd0O3J4X3RhaWxdOwomIzQzOwomIzQzOwkJbWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7CiYjNDM7CQltZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTsKJiM0MzsKJiM0MzsJCXJ4LSZndDtyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTsKJiM0MzsJCXJ4LSZndDtyZWFkLmhkcl9hZGRyID0gY3B1X3RvX2xlNjQoMCk7CiYjNDM7CiYjNDM7CQl0eC0mZ3Q7cmVhZC5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KHNyYyk7CiYjNDM7CQkvKgomIzQzOwkJICogQnVpbGQgYW4gYWR2YW5jZWQgZGF0YSBkZXNjcmlwdG9yIHBlciA4MjU3NiBkYXRhc2hlZXQKJiM0MzsJCSAqIHNlY3Rpb24gNy4yLjIuMy4gIERFWFQgbWFya3MgdGhlIGRlc2NyaXB0b3IgYXMgYWR2YW5jZWQKJiM0MzsJCSAqIChyZXF1aXJlZCBieSBoYXJkd2FyZSk7IERUWVA9ZGF0YSBzZWxlY3RzIHRoZSBkYXRhCiYjNDM7CQkgKiBkZXNjcmlwdG9yOyBJRkNTIGFza3MgdGhlIE1BQyB0byBhcHBlbmQgdGhlIEV0aGVybmV0CiYjNDM7CQkgKiBGQ1MgKHdpdGhvdXQgaXQgdGhlIGZyYW1lIGlzIGRyb3BwZWQgYXMgbWFsZm9ybWVkKTsKJiM0MzsJCSAqIEVPUCBtYXJrcyBlbmQgb2YgcGFja2V0LiAgRFRBTEVOIGlzIHRoZSBidWZmZXIgbGVuZ3RoCiYjNDM7CQkgKiBpbiBiaXRzIDE1OjAgb2YgY21kX3R5cGVfbGVuLgomIzQzOwkJICovCiYjNDM7CQl0eC0mZ3Q7cmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8CiYjNDM7CQkJRTEwMDBfQURWVFhEX0RUWVBfREFUQSB8CiYjNDM7CQkJRTEwMDBfQURWVFhEX0RDTURfREVYVCB8CiYjNDM7CQkJRTEwMDBfQURWVFhEX0RDTURfSUZDUyB8CiYjNDM7CQkJRTEwMDBfQURWVFhEX0RDTURfRU9QKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBQQVlMRU4gKHNlY3Rpb24gNy4yLjIuMy4xMSkgaXMgdGhlIHRvdGFsIHBheWxvYWQgc2l6ZQomIzQzOwkJICogaW4gb2xpbmZvX3N0YXR1c1szMToxNF0uCiYjNDM7CQkgKi8KJiM0MzsJCXR4LSZndDtyZWFkLm9saW5mb19zdGF0dXMgPQomIzQzOwkJCWNwdV90b19sZTMyKCh1aW50MzJfdClzaXplICZsdDsmbHQ7IEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQpOwomIzQzOwomIzQzOwkJaWdiLSZndDt0eF90YWlsID0gKGlnYi0mZ3Q7dHhfdGFpbCAmIzQzOyAxKSAlIFJJTkdfU0laRTsKJiM0MzsJCWlnYi0mZ3Q7cnhfdGFpbCA9IChpZ2ItJmd0O3J4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIGlnYi0mZ3Q7cnhfdGFpbCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCBpZ2ItJmd0O3R4X3RhaWwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZAomIzQzOyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWAomIzQzOyAqIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LCBzbyByZS1hcm0gdGhlIHRyaWdnZXIKJiM0MzsgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWQKJiM0MzsgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuCiYjNDM7ICoKJiM0MzsgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0CiYjNDM7ICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyAmIzM0O2VxdWl2YWxlbnQgdG8gYSBEMC0mZ3Q7RDMtJmd0O0QwIHRyYW5zaXRpb24mIzM0OyksIHNvCiYjNDM7ICogRUlNUyBhbmQgRUlDUiBjb21lIGJhY2sgYXMgMCBmcm9tIHRoZWlyIHJlZ2lzdGVyLWRlZmluZWQgaW5pdGlhbAomIzQzOyAqIHZhbHVlcywgYW5kIGlnYl9od19pbml0KCkgcmVzZXRzIHR4X3RhaWwvcnhfdGFpbCB0byAwLiAgVGhlIG5leHQKJiM0MzsgKiBpZ2JfbWVtY3B5X3N0YXJ0KCkgd2lsbCBtZW1zZXQgZWFjaCBkZXNjcmlwdG9yIGl0IHRvdWNoZXMgYmVmb3JlCiYjNDM7ICogc3VibWlzc2lvbiwgc28gbm8gZXhwbGljaXQgSU1DL0VJQ1Igd3JpdGVzIG9yIHJpbmcgbWVtc2V0cyBhcmUKJiM0MzsgKiBuZWVkZWQgaGVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZ2JfZXJyb3JfcmVzZXRfYW5kX3JlaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwl2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTsKJiM0MzsJdmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTsKJiM0MzsJaWdiX2h3X2luaXQoZGV2aWNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpZ2JfbWVtY3B5X3dhaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CXN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7CiYjNDM7CXUzMiBzdGF0dXMgPSAwOwomIzQzOwl1MzIgcHJldl90YWlsOwomIzQzOwlpbnQgcmV0cmllczsKJiM0MzsKJiM0MzsJcHJldl90YWlsID0gKGlnYi0mZ3Q7cnhfdGFpbCAmIzQzOyBSSU5HX1NJWkUgLSAxKSAlIFJJTkdfU0laRTsKJiM0MzsJcnggPSAmYW1wO2lnYi0mZ3Q7cnhfcmluZ1twcmV2X3RhaWxdOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWFsIDgyNTc2IGhhcmR3YXJlIHByb2Nlc3NlcyB0aGUgZGVzY3JpcHRvciByaW5nIGF0IGxpbmUgcmF0ZS4KJiM0MzsJICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsCiYjNDM7CSAqIHNwbGl0IGludG8gNDA5NSAxIEtCIGZyYW1lcy4gIEF0IDEgR2IvcyAofjEyNSBNQi9zKSB0aGUgd29yc3QKJiM0MzsJICogdmFsaWQgbWVtY3B5IHRha2VzIH4zMiBtcyBvbiB0aGUgd2lyZSwgcGx1cyBwZXItZnJhbWUgcHJlYW1ibGUsCiYjNDM7CSAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrCiYjNDM7CSAqIGxhdGVuY3kuICBXYWl0IHVwIHRvIH4yMDAgbXMgYmVmb3JlIGRlY2xhcmluZyB0aGUgZGV2aWNlIGh1bmc7CiYjNDM7CSAqIH42eCB0aGUgbGluZS1yYXRlIGZsb29yIGxlYXZlcyBjb21mb3J0YWJsZSBoZWFkcm9vbSBmb3IgaG9zdAomIzQzOwkgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQQomIzQzOwkgKiB0ZXN0cyBib3VuZGVkLgomIzQzOwkgKi8KJiM0MzsJcmV0cmllcyA9IDIwMDsKJiM0MzsJd2hpbGUgKHJldHJpZXMtLSAmZ3Q7IDApIHsKJiM0MzsJCXN0YXR1cyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShyeC0mZ3Q7d2Iuc3RhdHVzX2Vycm9yKSk7CiYjNDM7CQlpZiAoc3RhdHVzICZhbXA7IDEpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl1c2xlZXAoMTAwMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHN0YXR1cyAmYW1wOyAxKQomIzQzOwkJLyoKJiM0MzsJCSAqIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGRvZXNuJiMzOTt0IHNwZWN1bGF0aXZlbHkgcmVhZCB0aGUgRE1BCiYjNDM7CQkgKiBkZXN0aW5hdGlvbiBidWZmZXIgYmVmb3JlIHdlIGhhdmUgdmVyaWZpZWQgdGhhdCB0aGUKJiM0MzsJCSAqIGRlc2NyaXB0b3Igd3JpdGViYWNrIGlzIGNvbXBsZXRlLgomIzQzOwkJICovCiYjNDM7CQlybWIoKTsKJiM0MzsKJiM0MzsJaWdiX2lycV9jbGVhcihpZ2IpOwomIzQzOwomIzQzOwlpZ2JfaXJxX2VuYWJsZShpZ2IpOwomIzQzOwomIzQzOwlpZiAoc3RhdHVzICZhbXA7IDEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzCiYjNDM7CSAqIHR5cGljYWxseSBmb2xsb3dzIGEgRE1BLXJlYWQgZmF1bHQgZnJvbSBvbmUgb2YgdGhlIGludGVudGlvbmFsCiYjNDM7CSAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lCiYjNDM7CSAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZQomIzQzOwkgKiByZWluaXRpYWxpemVzIHRoZSBxdWV1ZSByZWdpc3RlcnMgYnV0IGxlYXZlcyB0aGUgZW5naW5lIHdlZGdlZAomIzQzOwkgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpCiYjNDM7CSAqIGlzIHJlcXVpcmVkLgomIzQzOwkgKgomIzQzOwkgKiBEZWxheSBiZWZvcmUgcmVxdWVzdGluZyByZXNldCBzbyBQQ0llL0lPTU1VL0FFUiBlcnJvciBoYW5kbGluZwomIzQzOwkgKiB0cmlnZ2VyZWQgYnkgdGhlIGp1c3Qtb2JzZXJ2ZWQgRE1BIGZhdWx0IGNhbiByZWxlYXNlIHRoZSBkZXZpY2UKJiM0MzsJICogbG9jayBWRklPX0RFVklDRV9SRVNFVCBjb250ZW5kcyBmb3IuICBUaGUgMTAgbXMgdmFsdWUgaXMKJiM0MzsJICogaGV1cmlzdGljLiAgVGhlIGN1cnJlbnQgbWVtY3B5IHN0aWxsIGZhaWxzIHdpdGggLUVUSU1FRE9VVDsKJiM0MzsJICogcmVjb3Zlcnkgb25seSBlbnN1cmVzIHRoZSBuZXh0IG1lbWNweSBzdGFydHMgZnJvbSBhIHVzYWJsZSBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CXVzbGVlcCgxMDAwMCk7CiYjNDM7CWlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRVRJTUVET1VUOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtpZ2ImIzM0OywKJiM0MzsJLnByb2JlID0gaWdiX3Byb2JlLAomIzQzOwkuaW5pdCA9IGlnYl9pbml0LAomIzQzOwkucmVtb3ZlID0gaWdiX3JlbW92ZSwKJiM0MzsJLm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsCiYjNDM7CS5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCwKJiM0MzsJLnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLAomIzQzO307CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKaW5kZXggMjg1ODg4NWE4OWJiYmYuLjJlNjdhZmMwZDU4MDk4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oCkBAIC02OCw2ICYjNDM7NjgsOCBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLAogdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAogCQkJIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7CiB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KTsKJiM0Mzt2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwKJiM0MzsJCQkgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpOwogdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmY250bF9zZXRfbm9uYmxvY2soaW50IGZkKQpAQCAtOTIsNiAmIzQzOzk0LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiAJdmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAomIzQzOwkJCQkJIHUzMiB2ZWN0b3IsIGludCBjb3VudCkKJiM0Mzt7CiYjNDM7CXZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsCiAJCQkJCXUzMiB2ZWN0b3IsIGludCBjb3VudCkKIHsKQEAgLTEwMyw2ICYjNDM7MTExLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQogCXZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAomIzQzOwkJCQkJICB1MzIgdmVjdG9yLCBpbnQgY291bnQpCiYjNDM7ewomIzQzOwl2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSkKIHsKIAlyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtJmd0O2lvbW11LCB2YWRkciwgaW92YSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawppbmRleCA5ZjQ3YmNlZWQxNmY0Yy4uMWYxM2NjYTA0MzQ4YjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawpAQCAtMTIsNiAmIzQzOzEyLDcgQEAgTElCVkZJT19DICYjNDM7PSB2ZmlvX3BjaV9kcml2ZXIuYwogaWZlcSAoJChBUkNIOng4Nl82ND14ODYpLHg4NikKIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pb2F0L2lvYXQuYwogTElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2RzYS9kc2EuYwomIzQzO0xJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pZ2IvaWdiLmMKIGVuZGlmCiAKIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jCmluZGV4IGZjNzVlMDRlZjAxMGNmLi43YjgzOTRkMGFjNTA3NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKQEAgLTEwNiw2ICYjNDM7MTA2LDI4IEBAIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpCiAJdmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCAwLCAwLCBOVUxMKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogUmUtaXNzdWUgVkZJT19ERVZJQ0VfU0VUX0lSUVMgZm9yIGFuIGFscmVhZHktZW5hYmxlZCB2ZWN0b3IgcmFuZ2UgdXNpbmcKJiM0MzsgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZQomIzQzOyAqIGludGVycnVwdHMgYWZ0ZXIgYSBWRklPX0RFVklDRV9SRVNFVCwgd2hpY2ggdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUKJiM0MzsgKiBJUlEgdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QuICBSZWNyZWF0aW5nIHRoZQomIzQzOyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXMKJiM0MzsgKiBoZWxwZXIgZGVsaWJlcmF0ZWx5IHByZXNlcnZlcyB0aGVtLgomIzQzOyAqLwomIzQzO3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAomIzQzOwkJCSAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwljaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gdmVjdG9yOyBpICZsdDsgdmVjdG9yICYjNDM7IGNvdW50OyBpJiM0MzsmIzQzOykKJiM0MzsJCVZGSU9fQVNTRVJUX0dFKGRldmljZS0mZ3Q7bXNpX2V2ZW50ZmRzW2ldLCAwLAomIzQzOwkJCSAgICAgICAmIzM0O3ZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcbiYjMzQ7LCBpKTsKJiM0MzsKJiM0MzsJdmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtJmd0O21zaV9ldmVudGZkcyAmIzQzOyB2ZWN0b3IpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsCiAJCQkgICAgIHN0cnVjdCB2ZmlvX2lycV9pbmZvICppcnFfaW5mbykKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMKaW5kZXggNjgyN2Y0YTZmZWJlOTkuLmE1ZDA1NDcxMzJjNDA1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwpAQCAtNSwxMiAmIzQzOzUsMTQgQEAKICNpZmRlZiBfX3g4Nl82NF9fCiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgZHNhX29wczsKIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wczsKJiM0MztleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wczsKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHsKICNpZmRlZiBfX3g4Nl82NF9fCiAJJmFtcDtkc2Ffb3BzLAogCSZhbXA7aW9hdF9vcHMsCiYjNDM7CSZhbXA7aWdiX29wcywKICNlbmRpZgogfTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk5MgoJCQkJCQkJb3V0cHV0OiA4OQoJCQkJCQkJdGhvdWdodHM6IDc1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3Qgb24gS2VybmVsIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFkZGluZyBhbiBgaWdiYCBkcml2ZXIgdG8gdGhlIGB2ZmlvYCBzZWxmdGVzdHMuIEZpcnN0IGdsYW5jZSwgaXQmIzM5O3MgbW9kaWZ5aW5nIGZpbGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9gIGFuZCBhIGZldyBvdGhlciByZWxhdGVkIGZpbGVzIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2AgZGlyZWN0b3J5LiBObyBrZXJuZWwgc291cmNlIGNvZGUgY2hhbmdlcywgdGhhdCYjMzk7cyB0aGUga2V5LiBJIGhhZCB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgbGlzdCBvZiBjaGFuZ2VkIGZpbGVzIHRob3VnaCwganVzdCB0byBiZSBjZXJ0YWluLiBZZXMsIGBlMTAwMF84MjU3NS5oYCwgYGUxMDAwX2RlZmluZXMuaGAsIGFuZCBgZTEwMDBfcmVncy5oYCBhcmUgc3ltbGlua3MgYW5kIHRoYXQgaGVscHMgc29saWRpZnkgdGhhdCB0aGlzIGlzIGEgc2VsZnRlc3QgYWRkaXRpb24uCgpUaGlzIGlzIHN0cmljdGx5IGEgdXNlci1zcGFjZSBzZWxmdGVzdCBhZGRpdGlvbi4gSXQmIzM5O3MgKm5vdCogdG91Y2hpbmcgYW55dGhpbmcgaW4gdGhlIGNvcmUga2VybmVsLCBubyBkcml2ZXJzLCBubyBhcmNoaXRlY3R1cmVzLiBTbywgZG9lcyBpdCBtZWV0IHRoZSBjcml0ZXJpYSBmb3IgZnV6emluZz8gTGV0IG1lIHJldmlldyB0aGUgZ3VpZGFuY2UgYWdhaW4uIFdlJiMzOTtyZSBsb29raW5nIGZvciBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbC4uLiBNb2RpZmljYXRpb25zIHRvIGBEb2N1bWVudGF0aW9uL2AsIGBLY29uZmlnYCBmaWxlcywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgY29uc3RhbnRzIHdpdGhvdXQgZnVuY3Rpb25hbCBpbXBhY3QsIHVucmVhY2hhYmxlIGNvZGUuLi4gTm8sIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgZmFsbCBpbnRvIGFueSBvZiB0aG9zZSBjYXRlZ29yaWVzLgoKVGhlIGNydXggb2YgdGhlIHF1ZXN0aW9uOiBpcyBtb2RpZnlpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AgY29uc2lkZXJlZCBhICYjMzQ7ZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCYjMzQ7PyBObywgYWJzb2x1dGVseSBub3QuIFNlbGZ0ZXN0cyBhcmUgdXNlci1zcGFjZSBwcm9ncmFtcy4gVGhleSBhcmUgZm9yIHRlc3RpbmcgdGhlIGtlcm5lbCwgYnV0IHRoZXkgYXJlICpub3QqIHBhcnQgb2YgdGhlIGtlcm5lbCYjMzk7cyBleGVjdXRpb24gcGF0aC4gRnV6emluZyB0aGUga2VybmVsIGJhc2VkIG9uIGNoYW5nZXMgdG8gc2VsZnRlc3RzIGlzIHBvaW50bGVzcyBzaW5jZSB0aGUga2VybmVsIGl0c2VsZiBoYXNuJiMzOTt0IGNoYW5nZWQuCgpJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBUaGUgcHJvbXB0IHNwZWNpZmllczogJiMzNDtJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLiYjMzQ7IFRoaXMgb25seSBtb2RpZmllcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYC4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgKm5vdCogbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByYXRpb25hbGUgaXMgdGhhdCB0aGlzIHBhdGNoICpvbmx5KiBhZGRzIGEgbmV3IGRyaXZlciB0byB0aGUgVkZJTyBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYC4gSXQgZG9lc24mIzM5O3QgdG91Y2ggY29yZSBrZXJuZWwgY29kZSwgc28gbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgZm9yIGZ1enppbmcuCkFscmlnaHQsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBuZXcgZHJpdmVyIHRvIHRoZSBWRklPIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLy4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgY2FuIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgdG8gdGhlIFZGSU8gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA3OjA1OjI0LjAwMDAwMTAwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzcxMTQ0Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgYSBuZXcgZHJpdmVyIHRvIHRoZSBWRklPIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLy4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA3OjA1OjI0LjAwMDAwOTE5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc4MTkwNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzBkMTQwZDMxN2MyOTA4NGQyMzJjODMzYWQyNTU2Zjc5YzcxYmJjOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxNSAwNzowNToyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI4NGFmZmRlYzU1OThlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmhcXG5AQCAtMCwwICsxIEBAXFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF84MjU3NS5oXFxuXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxcbkBAIC0wLDAgKzEgQEBcXG4rLi4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX2RlZmluZXMuaFxcblxcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcXG5AQCAtMCwwICsxIEBAXFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmhcXG5cXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY1MGQ0NTBkM2U5NDk1XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jXFxuQEAgLTAsMCArMSw1NjQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpX3JlZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaV9pZHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9iYXJyaWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9taWkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiZTEwMDBfcmVncy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZTEwMDBfZGVmaW5lcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZTEwMDBfODI1NzUuaFxcXCJcXG4rXFxuKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzlcXG4rI2RlZmluZSBJR0JfTUFYX0NIVU5LX1NJWkUgMTAyNFxcbisjZGVmaW5lIE1TSVhfVkVDVE9SIDBcXG4rI2RlZmluZSBNU0lYX1ZFQ1RPUl9NQVNLICgxIFxcdTAwM2NcXHUwMDNjIE1TSVhfVkVDVE9SKVxcbisjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovXFxuK1xcbitzdHJ1Y3QgaWdiX3R4X2Rlc2Mge1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHU2NCBidWZmZXJfYWRkcjsgLyogQWRkcmVzcyBvZiBkZXNjcmlwdG9yJ3MgZGF0YSBidWZmZXIgKi9cXG4rXFx0XFx0XFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xcbitcXHRcXHRcXHR1MzIgb2xpbmZvX3N0YXR1czsgLyogQ29udGV4dC9CdWZmZXIgaW5mbyAqL1xcbitcXHRcXHR9IHJlYWQ7XFxuK1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovXFxuK1xcdFxcdFxcdHUzMiBueHRzZXFfc2VlZDsgLyogTmV4dCBzZXF1ZW5jZSBzZWVkICovXFxuK1xcdFxcdFxcdHUzMiBzdGF0dXM7ICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi9cXG4rXFx0XFx0fSB3YjtcXG4rXFx0fTtcXG4rfTtcXG4rXFxuK3N0cnVjdCBpZ2JfcnhfZGVzYyB7XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTY0IHBrdF9hZGRyOyAvKiBQYWNrZXQgYnVmZmVyIGFkZHJlc3MgKi9cXG4rXFx0XFx0XFx0dTY0IGhkcl9hZGRyOyAvKiBIZWFkZXIgYnVmZmVyIGFkZHJlc3MgKi9cXG4rXFx0XFx0fSByZWFkO1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1MTYgcGt0X2luZm87ICAgICAvKiBSU1MgdHlwZSwgUGFja2V0IHR5cGUgKi9cXG4rXFx0XFx0XFx0dTE2IGhkcl9pbmZvOyAgICAgLyogU3BsaXQgSGVhZCwgYnVmIGxlbiAqL1xcbitcXHRcXHRcXHR1MzIgcnNzOyAgICAgICAgICAvKiBSU1MgSGFzaCAqL1xcbitcXHRcXHRcXHR1MzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovXFxuK1xcdFxcdFxcdHUxNiBsZW5ndGg7ICAgICAgIC8qIFBhY2tldCBsZW5ndGggKi9cXG4rXFx0XFx0XFx0dTE2IHZsYW47ICAgICAgICAgLyogVkxBTiB0YWcgKi9cXG4rXFx0XFx0fSB3YjsgLyogd3JpdGViYWNrICovXFxuK1xcdH07XFxuK307XFxuK1xcbitzdHJ1Y3QgaWdiIHtcXG4rXFx0dm9pZCAqYmFyMDtcXG4rXFx0dTMyIHR4X3RhaWw7XFxuK1xcdHUzMiByeF90YWlsO1xcbitcXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xcbitcXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgcnhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xcbit9O1xcbitcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaWdiICp0b19pZ2Jfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHJldHVybiAoc3RydWN0IGlnYiAqKWRldmljZS1cXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcXG4re1xcbitcXHR3cml0ZWwodmFsLCBpZ2ItXFx1MDAzZWJhcjAgKyByZWcpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHUzMiBpZ2JfcmVhZDMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZylcXG4re1xcbitcXHRyZXR1cm4gcmVhZGwoaWdiLVxcdTAwM2ViYXIwICsgcmVnKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpZ2Jfd3JpdGVfcGh5KHN0cnVjdCBpZ2IgKmlnYiwgdTMyIG9mZnNldCwgdTE2IGRhdGEpXFxuK3tcXG4rXFx0dTMyIG1kaWM7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxcbitcXHQgKlxcbitcXHQgKiBBIHByb2R1Y3Rpb24gZHJpdmVyIHdvdWxkIGhvbGQgdGhlIFNXL0ZXIHNlbWFwaG9yZSAoU1dTTS5TV0VTTUJJICsgdGhlXFxuK1xcdCAqIFNXX0ZXX1NZTkMgUEhZIGJpdCkgYWNyb3NzIHRoZSBNRElPIHRyYW5zYWN0aW9uIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHRoZVxcbitcXHQgKiBkZXZpY2UncyBtYW5hZ2VtZW50IGZpcm13YXJlLiAgVGhlIHNlbGZ0ZXN0IG93bnMgdGhlIGFzc2lnbmVkIGZ1bmN0aW9uXFxuK1xcdCAqIGV4Y2x1c2l2ZWx5IG9uIGEgZGVkaWNhdGVkIHRlc3QgZGV2aWNlIHdpdGggbm8gYWN0aXZlIG1hbmFnZWFiaWxpdHlcXG4rXFx0ICogY29udGVuZGluZyBmb3IgdGhlIFBIWSwgc28gdGhlIHN5bmMgaXMgb21pdHRlZDsgaXQgc2hvdWxkIGJlIGFkZGVkIGhlcmVcXG4rXFx0ICogaWYgdGhpcyBldmVyIG5lZWRzIHRvIHJ1biBvbiBhIG1hbmFnZWFiaWxpdHktZW5hYmxlZCBOSUMuXFxuK1xcdCAqL1xcbitcXHRtZGljID0gKCgodTMyKWRhdGEpIHxcXG4rXFx0XFx0KG9mZnNldCBcXHUwMDNjXFx1MDAzYyBFMTAwMF9NRElDX1JFR19TSElGVCkgfFxcbitcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBFMTAwMF9NRElDX1BIWV9TSElGVCkgfFxcbitcXHRcXHRFMTAwMF9NRElDX09QX1dSSVRFKTtcXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfTURJQywgbWRpYyk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMTAwMDsgaSsrKSB7XFxuK1xcdFxcdHVzbGVlcCg1MCk7XFxuK1xcdFxcdG1kaWMgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfTURJQyk7XFxuK1xcdFxcdGlmIChtZGljIFxcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghKG1kaWMgXFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0aWYgKG1kaWMgXFx1MDAyNiBFMTAwMF9NRElDX0VSUk9SKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogQ29uZmlndXJlIHRoZSBkZXZpY2UgZm9yIFBIWSBpbnRlcm5hbCBsb29wYmFjayBwZXIgODI1NzYgZGF0YXNoZWV0XFxuKyAqIHNlY3Rpb24gMy41LjYuMy4xLiAgRm9yY2UgdGhlIFBIWSB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxvb3BiYWNrXFxuKyAqIGVuYWJsZWQsIHRoZW4gZm9yY2UgdGhlIE1BQyBsaW5rIHN0YXRlIHRvIG1hdGNoLiAgSW50ZXJuYWwgbG9vcGJhY2tcXG4rICogd3JhcHMgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBQSFkgZGF0YXBhdGggKHNlY3Rpb24gMy41LjYuMyksIHNvIHRoZVxcbisgKiBwaHlzaWNhbCBsaW5rIHN0YXRlIGlzIGlycmVsZXZhbnQuXFxuKyAqXFxuKyAqIFNlY3Rpb24gMy41LjYuMSBkaXJlY3RzIHRvIFxcXCJVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrXFxuKyAqIG9uIHRoZSA4MjU3NlxcXCIsIGFuZCBzZWN0aW9uIDMuNS42LjIgc3RhdGVzIFxcXCJNQUMgTG9vcGJhY2sgaXMgbm90IHVzZWRcXG4rICogb24gdGhpcyBkZXZpY2UuXFxcIiAgUkNUTC5MQk1fTUFDIGlzIHN0aWxsIHNldCBlbHNld2hlcmUgYXMgYSBRRU1VLW9ubHlcXG4rICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZVxcbisgKiByYXRpb25hbGUuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKVxcbit7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlclxcbitcXHQgKiBRRU1VJ3MgaWdiIGVtdWxhdGlvbjogUUVNVSBvbmx5IHVwZGF0ZXMgU1RBVFVTLkxVIHZpYSBpdHNcXG4rXFx0ICogYXV0b25lZy1kb25lIHRpbWVyLCBhbmQgd2l0aG91dCBMVSBzZXQgaXRzIHJlY2VpdmUgcGF0aFxcbitcXHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxcbitcXHQgKiBoYXJkd2FyZSBhdXRvbmVnIGNhbm5vdCBjb21wbGV0ZSBiZWZvcmUgdGhlIG5leHQgUEhZIHdyaXRlXFxuK1xcdCAqIGJlbG93IGNsZWFycyB0aGUgYXV0b25lZy1lbmFibGUgYml0LCBzbyB0aGlzIGlzIGVmZmVjdGl2ZWx5IGFcXG4rXFx0ICogbm8tb3AgdGhlcmUuXFxuK1xcdCAqL1xcbitcXHQodm9pZClpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsXFxuK1xcdFxcdFxcdCAgICBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpO1xcbitcXG4rXFx0LyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICsgMUdiL3MgZnVsbCBkdXBsZXgsIGF1dG9uZWcgZGlzYWJsZWQuICovXFxuK1xcdHJldCA9IGlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcXG4rXFx0XFx0XFx0ICAgIEJNQ1JfTE9PUEJBQ0sgfFxcbitcXHRcXHRcXHQgICAgQk1DUl9TUEVFRDEwMDAgfFxcbitcXHRcXHRcXHQgICAgQk1DUl9GVUxMRFBMWCk7XFxuK1xcdFZGSU9fQVNTRVJUX0VRKHJldCwgMCwgXFxcIkZhaWxlZCB0byB3cml0ZSBQSFkgY29udHJvbCByZWdpc3RlclxcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQnJpZWYgZGVsYXkgYmVmb3JlIGZvcmNpbmcgdGhlIE1BQywgbWlycm9yaW5nIHRoZSBrZXJuZWwgZXRodG9vbFxcbitcXHQgKiBzZWxmdGVzdCBpbiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnkgdGhlXFxuK1xcdCAqIGRhdGFzaGVldCwgYnV0IGVtcGlyaWNhbGx5IHJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwgZHJpdmVyLlxcbitcXHQgKi9cXG4rXFx0dXNsZWVwKDUwMDAwKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZvcmNlIHRoZSBNQUMgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsaW5rIHVwLiAgV2l0aG91dCBmb3JjaW5nXFxuK1xcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXFxuK1xcdCAqIG5vcm1hbGx5IHdhaXRzIGZvciBhIHJlYWwgbmVnb3RpYXRlZCBsaW5rLlxcbitcXHQgKi9cXG4rXFx0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcXG4rXFx0Y3RybCBcXHUwMDI2PSB+RTEwMDBfQ1RSTF9TUERfU0VMO1xcbitcXHRjdHJsIHw9IEUxMDAwX0NUUkxfRlJDU1BEIHxcXG4rXFx0XFx0RTEwMDBfQ1RSTF9GUkNEUFggfFxcbitcXHRcXHRFMTAwMF9DVFJMX1NQRF8xMDAwIHxcXG4rXFx0XFx0RTEwMDBfQ1RSTF9GRCB8XFxuK1xcdFxcdEUxMDAwX0NUUkxfU0xVO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU2V0dGxpbmcgZGVsYXkgbWF0Y2hpbmcgdGhlIGtlcm5lbCBldGh0b29sIHNlbGZ0ZXN0J3MgbXNsZWVwKDUwMClcXG4rXFx0ICogYXQgdGhlIHRhaWwgb2YgaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5XFxuK1xcdCAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLlxcbitcXHQgKi9cXG4rXFx0dXNsZWVwKDUwMDAwMCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWdiX3Byb2JlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRpZiAoIXZmaW9fcGNpX2RldmljZV9tYXRjaChkZXZpY2UsIFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfcmVzZXQoc3RydWN0IGlnYiAqaWdiKVxcbit7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xcbitcXHQvKlxcbitcXHQgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlXFxuK1xcdCAqIGNoZWNraW5nIGlmIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIHVzZWQgKDgyNTc2IGRhdGFzaGVldCBzZWN0aW9uXFxuK1xcdCAqIDQuMi4xLjYuMSkuXFxuK1xcdCAqL1xcbitcXHR1c2xlZXAoMjAwMCk7XFxuK1xcdFZGSU9fQVNTRVJUX0VRKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSBcXHUwMDI2IEUxMDAwX0NUUkxfUlNULCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JTUMsIDB4RkZGRkZGRkYpO1xcbit9XFxuK1xcbisvKlxcbisgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0XFxuKyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXRcXG4rICogQ1RSTC5SU1QgY2xlYXJzLiAgRXhwZWN0cyBiYXIwIHRvIGJlIG1hcHBlZCBhbmQgTVNJLVggYWxyZWFkeSBlbmFibGVkXFxuKyAqIHZpYSBWRklPLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaWdiX2h3X2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXHR1NjQgaW92YV90eCwgaW92YV9yeDtcXG4rXFx0dTMyIGN0cmwsIHJjdGw7XFxuK1xcdHUxNiBjbWRfcmVnO1xcbitcXHRpbnQgcmV0cmllcztcXG4rXFxuK1xcdGlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLVxcdTAwM2V0eF9yaW5nKTtcXG4rXFx0aW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXFx1MDAzZXJ4X3JpbmcpO1xcbitcXG4rXFxuK1xcbitcXHQvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcXG4rXFx0Y3RybCB8PSBFMTAwMF9DVFJMX0VYVF9EUlZfTE9BRDtcXG4rXFx0Y3RybCBcXHUwMDI2PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpO1xcbitcXG4rXFx0LyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqL1xcbitcXHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xcbitcXHRpZiAoKGNtZF9yZWcgXFx1MDAyNiAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT1cXG4rXFx0ICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7XFxuK1xcdFxcdGNtZF9yZWcgfD0gKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSk7XFxuK1xcdFxcdHZmaW9fcGNpX2NvbmZpZ193cml0ZXcoZGV2aWNlLCBQQ0lfQ09NTUFORCwgY21kX3JlZyk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXFxuK1xcdGlnYl9zZXR1cF9sb29wYmFjayhpZ2IpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRGlzYWJsZSBETUEgcmUtc2VuZCBvbiBQQ0llIGNvbXBsZXRpb24gdGltZW91dCAoODI1NzYgZGF0YXNoZWV0XFxuK1xcdCAqIHNlY3Rpb24gOC42LjEsIEdDUi5Db21wbGV0aW9uX1RpbWVvdXRfUmVzZW5kLCBiaXQgMTYpLiAgVGhlXFxuK1xcdCAqIG1peF9hbmRfbWF0Y2ggdGVzdCBpbnRlbnRpb25hbGx5IHN1Ym1pdHMgZGVzY3JpcHRvcnMgdGFyZ2V0aW5nXFxuK1xcdCAqIHVubWFwcGVkIElPVkFzOyB3aXRoIHRoZSBkZWZhdWx0IChzZXQpIHZhbHVlLCB0aGUgZGV2aWNlIGtlZXBzXFxuK1xcdCAqIHJldHJ5aW5nIHRoZSBmYWlsZWQgcmVhZCBpbmRlZmluaXRlbHksIHdoaWNoIGtlZXBzIFBDSWUgQUVSIGFuZFxcbitcXHQgKiBJT01NVSBlcnJvciBoYW5kbGluZyBidXN5IGFuZCBpbnRlcmZlcmVzIHdpdGggcmVzZXQgcmVjb3ZlcnkuXFxuK1xcdCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0dDUik7XFxuK1xcdGN0cmwgXFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpO1xcbitcXG4rXFx0LyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggXFx1MDAzZVxcdTAwM2UgMzIpKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UWERDVEwoMCksIEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBTCgwKSwgKHUzMilpb3ZhX3J4KTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcXHUwMDNlXFx1MDAzZSAzMikpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU2VsZWN0IHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyIGRlc2NyaXB0b3IgZm9ybWF0LiAgUGVyIDgyNTc2XFxuK1xcdCAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6IFxcXCJTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxcbitcXHQgKiB2YWx1ZSBvdGhlciB0aGFuIDAwMGIgZm9yIHRoZSA4MjU3NiB0byB3cml0ZSBiYWNrIHRoZSBzcGVjaWFsXFxuK1xcdCAqIGRlc2NyaXB0b3JzLlxcXCIgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXFxuK1xcdCAqIHdyaXRlYmFjayBsYXlvdXQgKHNlY3Rpb24gNy4xLjUuMiksIHNvIHBvbGxpbmcgcngud2Iuc3RhdHVzX2Vycm9yXFxuK1xcdCAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGRpcmVjdCB3cml0ZSBhbHNvIHplcm9lcyBTUlJDVEwuQlNJWkVQQUNLRVQsIHdoaWNoIGlzXFxuK1xcdCAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvXFxuK1xcdCAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDhcXG4rXFx0ICogYnl0ZXMgLS0gYW1wbGUgZm9yIHRoZSBsb29wYmFjayBmcmFtZXMgaGVyZS5cXG4rXFx0ICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi9cXG4rXFx0cmV0cmllcyA9IDIwMDA7XFxuK1xcdHdoaWxlIChyZXRyaWVzLS0gXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGlmICgoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSkgXFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpIFxcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR1c2xlZXAoMTApO1xcbitcXHR9XFxuK1xcdFZGSU9fQVNTRVJUX0dFKHJldHJpZXMsIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRW5hYmxlIFJlY2VpdmVyIGFuZCBUcmFuc21pdHRlci4gIFJDVEwuTEJNX01BQyBpcyBzZXQgaW4gYWRkaXRpb25cXG4rXFx0ICogdG8gUEhZIGxvb3BiYWNrIGFzIGEgUUVNVS1vbmx5IGFjY29tbW9kYXRpb246IFFFTVUncyBlbXVsYXRlZCBpZ2JcXG4rXFx0ICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZFxcbitcXHQgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlhcXG4rXFx0ICogcXVldWUuICBEYXRhc2hlZXQgOC4xMC4xIChSQ1RMIHJlZ2lzdGVyKSBhZHZpc2VzIFxcXCJXaGVuIHVzaW5nIHRoZVxcbitcXHQgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGJcXFwiLCBzbyBzZXR0aW5nIExCTV9NQUNcXG4rXFx0ICogaGVyZSBkZXZpYXRlcyBmcm9tIGRhdGFzaGVldCBndWlkYW5jZTsgZW1waXJpY2FsbHkgdGhlIGJpdCBoYXNcXG4rXFx0ICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFja1xcbitcXHQgKiBpcyBub3QgaW1wbGVtZW50ZWQgKGRhdGFzaGVldCAzLjUuNi4yKS4gIFNldHRpbmcgYm90aCBsZXRzIHRoZVxcbitcXHQgKiBzZWxmdGVzdCB3b3JrIG9uIGJvdGggcmVhbCBoYXJkd2FyZSBhbmQgUUVNVSB3aXRob3V0IGNvbmRpdGlvbmFsXFxuK1xcdCAqIGNvZGUgcGF0aHMuXFxuK1xcdCAqL1xcbitcXHRyY3RsID0gRTEwMDBfUkNUTF9FTiB8ICAgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX01QRSB8ICAgICAgLyogTXVsdGljYXN0IFByb21pc2N1b3VzICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX0JBTSB8ICAgICAgLyogQnJvYWRjYXN0IEFjY2VwdCBNb2RlICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi9cXG4rXFx0ICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIHJjdGwpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUHJvZ3JhbSBNU0ktWCBpbnRlcnJ1cHQgcm91dGluZyBwZXIgODI1NzYgZGF0YXNoZWV0OlxcbitcXHQgKlxcbitcXHQgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0b1xcbitcXHQgKiByb3V0ZSBpbnRlcnJ1cHQgY2F1c2VzIHRocm91Z2ggSVZBUiBtYXBwaW5nLCBhbmQgRUlBTUUgKGJpdCAzMClcXG4rXFx0ICogdG8gYXBwbHkgRUlBTSBvbiBNU0ktWCBhc3NlcnRpb24gKHdpdGhvdXQgRUlBTUUsIEVJQU0gb25seVxcbitcXHQgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuXFxuK1xcdCAqXFxuK1xcdCAqIEVJQUMgKHNlY3Rpb24gOC44LjUpOiBlbmFibGUgYXV0by1jbGVhciBvZiBFSUNSIGZvciB2ZWN0b3IgMC5cXG4rXFx0ICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZVxcbitcXHQgKiB0ZXN0IGNhbiBzZWUgc3B1cmlvdXMgaW50ZXJydXB0cyBvbiB0aGUgbmV4dCBtZW1jcHkgYmF0Y2guXFxuK1xcdCAqXFxuK1xcdCAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uXFxuK1xcdCAqIE1TSS1YIGFzc2VydGlvbiAoZWZmZWN0aXZlIGJlY2F1c2UgRUlBTUUgaXMgc2V0KSwgc28gYSBzaW5nbGVcXG4rXFx0ICogaW50ZXJydXB0IGlzIGRlbGl2ZXJlZCBwZXIgbWVtY3B5IGJhdGNoIGV2ZW4gaWYgdGhlIGNhdXNlXFxuK1xcdCAqIHJlLWFzc2VydHMgYmVmb3JlIHNvZnR3YXJlIHJlLWVuYWJsZXMgdGhlIG1hc2suXFxuK1xcdCAqXFxuK1xcdCAqIElWQVIgKHNlY3Rpb24gNy4zLjEuMiwgcmVnaXN0ZXIgZGVmaW5pdGlvbiBpbiA4LjguMTMpOiBtYXAgUlhcXG4rXFx0ICogY2F1c2UgMCB0byBNU0ktWCB2ZWN0b3IgMCBhbmQgbWFyayB0aGUgZW50cnkgdmFsaWQuXFxuK1xcdCAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwgRTEwMDBfR1BJRV9FSUFNRSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBQywgTVNJWF9WRUNUT1JfTUFTSyk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgTVNJWF9WRUNUT1JfTUFTSyk7XFxuK1xcbitcXHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JVkFSMCwgRTEwMDBfSVZBUl9WQUxJRCk7XFxuK1xcbitcXHQvKiBFbmFibGUgaW50ZXJydXB0cyBvbiB2ZWN0b3IgMCAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xcbitcXG4rXFx0LyogSW5pdGlhbGl6ZSBkcml2ZXIgc3RhdGUgYW5kIGNhcGFiaWxpdHkgbGltaXRzICovXFxuK1xcdGlnYi1cXHUwMDNldHhfdGFpbCA9IDA7XFxuK1xcdGlnYi1cXHUwMDNlcnhfdGFpbCA9IDA7XFxuK1xcbitcXHRkZXZpY2UtXFx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7XFxuK1xcdGRldmljZS1cXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxO1xcbitcXHRkZXZpY2UtXFx1MDAzZWRyaXZlci5tc2kgPSBNU0lYX1ZFQ1RPUjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVxcdTAwM2Vkcml2ZXIucmVnaW9uLnNpemUsIHNpemVvZihzdHJ1Y3QgaWdiKSk7XFxuK1xcbitcXHRpZ2ItXFx1MDAzZWJhcjAgPSBkZXZpY2UtXFx1MDAzZWJhcnNbMF0udmFkZHI7XFxuK1xcbitcXHRpZ2JfcmVzZXQoaWdiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEVuYWJsZSBNU0ktWCB2aWEgVkZJTyBiZWZvcmUgZGV2aWNlLXNpZGUgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcuXFxuK1xcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxcbitcXHQgKiBQQ0kgTVNJLVggY2FwYWJpbGl0eSB2aWEgY29uZmlnIHNwYWNlOyBpdCBoYXMgbm8gb3JkZXJpbmdcXG4rXFx0ICogZGVwZW5kZW5jeSBvbiB0aGUgZGV2aWNlLXNpZGUgd3JpdGVzIHBlcmZvcm1lZCBieSBpZ2JfaHdfaW5pdCgpLlxcbitcXHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxcbitcXHQgKiByZWNvdmVyeSBwYXRoICh3aGljaCBjYWxscyB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBpbnN0ZWFkKS5cXG4rXFx0ICovXFxuK1xcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xcbitcXG4rXFx0aWdiX2h3X2luaXQoZGV2aWNlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX3JlbW92ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIDApO1xcbitcXHRpZ2JfcmVzZXQoaWdiKTtcXG4rXFxuK1xcdHZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxcbit7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgTVNJWF9WRUNUT1JfTUFTSyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9pcnFfZW5hYmxlKHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2NsZWFyKHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDXFxuK1xcdCAqIHByb2dyYW1tZWQsIHNlY3Rpb24gOC44LjUgZXhwbGljaXRseSBzdGF0ZXMgXFxcIklmIGFueSBiaXRzIGFyZSBzZXRcXG4rXFx0ICogaW4gRUlBQywgdGhlIEVJQ1IgcmVnaXN0ZXIgc2hvdWxkIG5vdCBiZSByZWFkXFxcIiwgd2hpY2ggcnVsZXMgb3V0XFxuK1xcdCAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsXFxuK1xcdCAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLlxcbitcXHQgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsXFxuK1xcdFxcdFxcdCAgICAgaW92YV90IGRzdCwgdTY0IHNpemUsIHU2NCBjb3VudClcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFx0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcXG4rXFx0c3RydWN0IGlnYl90eF9kZXNjICp0eDtcXG4rXFx0dTMyIGk7XFxuK1xcbitcXHRpZ2JfaXJxX2Rpc2FibGUoaWdiKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudDsgaSsrKSB7XFxuK1xcdFxcdHR4ID0gXFx1MDAyNmlnYi1cXHUwMDNldHhfcmluZ1tpZ2ItXFx1MDAzZXR4X3RhaWxdO1xcbitcXHRcXHRyeCA9IFxcdTAwMjZpZ2ItXFx1MDAzZXJ4X3JpbmdbaWdiLVxcdTAwM2VyeF90YWlsXTtcXG4rXFxuK1xcdFxcdG1lbXNldCh0eCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xcbitcXHRcXHRtZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcXG4rXFxuK1xcdFxcdHJ4LVxcdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcXG4rXFx0XFx0cngtXFx1MDAzZXJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTtcXG4rXFxuK1xcdFxcdHR4LVxcdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQnVpbGQgYW4gYWR2YW5jZWQgZGF0YSBkZXNjcmlwdG9yIHBlciA4MjU3NiBkYXRhc2hlZXRcXG4rXFx0XFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxcbitcXHRcXHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxcbitcXHRcXHQgKiBkZXNjcmlwdG9yOyBJRkNTIGFza3MgdGhlIE1BQyB0byBhcHBlbmQgdGhlIEV0aGVybmV0XFxuK1xcdFxcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xcbitcXHRcXHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxcbitcXHRcXHQgKiBpbiBiaXRzIDE1OjAgb2YgY21kX3R5cGVfbGVuLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dHgtXFx1MDAzZXJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHxcXG4rXFx0XFx0XFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XFxuK1xcdFxcdFxcdEUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRENNRF9FT1ApO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQQVlMRU4gKHNlY3Rpb24gNy4yLjIuMy4xMSkgaXMgdGhlIHRvdGFsIHBheWxvYWQgc2l6ZVxcbitcXHRcXHQgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHR4LVxcdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxcbitcXHRcXHRcXHRjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSBcXHUwMDNjXFx1MDAzYyBFMTAwMF9BRFZUWERfUEFZTEVOX1NISUZUKTtcXG4rXFxuK1xcdFxcdGlnYi1cXHUwMDNldHhfdGFpbCA9IChpZ2ItXFx1MDAzZXR4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcXG4rXFx0XFx0aWdiLVxcdTAwM2VyeF90YWlsID0gKGlnYi1cXHUwMDNlcnhfdGFpbCArIDEpICUgUklOR19TSVpFO1xcbitcXHR9XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLVxcdTAwM2VyeF90YWlsKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi1cXHUwMDNldHhfdGFpbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxcbisgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVhcXG4rICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlclxcbisgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcXG4rICogZXZlbnRmZCByZW1haW5zIHZhbGlkLlxcbisgKlxcbisgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XFxuKyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgXFxcImVxdWl2YWxlbnQgdG8gYSBEMC1cXHUwMDNlRDMtXFx1MDAzZUQwIHRyYW5zaXRpb25cXFwiKSwgc29cXG4rICogRUlNUyBhbmQgRUlDUiBjb21lIGJhY2sgYXMgMCBmcm9tIHRoZWlyIHJlZ2lzdGVyLWRlZmluZWQgaW5pdGlhbFxcbisgKiB2YWx1ZXMsIGFuZCBpZ2JfaHdfaW5pdCgpIHJlc2V0cyB0eF90YWlsL3J4X3RhaWwgdG8gMC4gIFRoZSBuZXh0XFxuKyAqIGlnYl9tZW1jcHlfc3RhcnQoKSB3aWxsIG1lbXNldCBlYWNoIGRlc2NyaXB0b3IgaXQgdG91Y2hlcyBiZWZvcmVcXG4rICogc3VibWlzc2lvbiwgc28gbm8gZXhwbGljaXQgSU1DL0VJQ1Igd3JpdGVzIG9yIHJpbmcgbWVtc2V0cyBhcmVcXG4rICogbmVlZGVkIGhlcmUuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpZ2JfZXJyb3JfcmVzZXRfYW5kX3JlaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0dmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7XFxuK1xcdHZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XFxuK1xcdGlnYl9od19pbml0KGRldmljZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWdiX21lbWNweV93YWl0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFx0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcXG4rXFx0dTMyIHN0YXR1cyA9IDA7XFxuK1xcdHUzMiBwcmV2X3RhaWw7XFxuK1xcdGludCByZXRyaWVzO1xcbitcXG4rXFx0cHJldl90YWlsID0gKGlnYi1cXHUwMDNlcnhfdGFpbCArIFJJTkdfU0laRSAtIDEpICUgUklOR19TSVpFO1xcbitcXHRyeCA9IFxcdTAwMjZpZ2ItXFx1MDAzZXJ4X3JpbmdbcHJldl90YWlsXTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxcbitcXHQgKiBtYXhfbWVtY3B5X3NpemUgPSAoUklOR19TSVpFIC0gMSkgKiBJR0JfTUFYX0NIVU5LX1NJWkUgfj0gNCBNQixcXG4rXFx0ICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdFxcbitcXHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcXG4rXFx0ICogU0ZELCBJRkcgYW5kIEZDUyBvdmVyaGVhZCAofjMlKSBhbmQgZGVzY3JpcHRvciBmZXRjaC93cml0ZWJhY2tcXG4rXFx0ICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZztcXG4rXFx0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XFxuK1xcdCAqIHNjaGVkdWxpbmcgaml0dGVyIHdoaWxlIGtlZXBpbmcgdGhlIGludGVudGlvbmFsIGludmFsaWQtRE1BXFxuK1xcdCAqIHRlc3RzIGJvdW5kZWQuXFxuK1xcdCAqL1xcbitcXHRyZXRyaWVzID0gMjAwO1xcbitcXHR3aGlsZSAocmV0cmllcy0tIFxcdTAwM2UgMCkge1xcbitcXHRcXHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtXFx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xcbitcXHRcXHRpZiAoc3RhdHVzIFxcdTAwMjYgMSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdHVzbGVlcCgxMDAwKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDI2IDEpXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGRvZXNuJ3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUFcXG4rXFx0XFx0ICogZGVzdGluYXRpb24gYnVmZmVyIGJlZm9yZSB3ZSBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlXFxuK1xcdFxcdCAqIGRlc2NyaXB0b3Igd3JpdGViYWNrIGlzIGNvbXBsZXRlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cm1iKCk7XFxuK1xcbitcXHRpZ2JfaXJxX2NsZWFyKGlnYik7XFxuK1xcbitcXHRpZ2JfaXJxX2VuYWJsZShpZ2IpO1xcbitcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDI2IDEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzXFxuK1xcdCAqIHR5cGljYWxseSBmb2xsb3dzIGEgRE1BLXJlYWQgZmF1bHQgZnJvbSBvbmUgb2YgdGhlIGludGVudGlvbmFsXFxuK1xcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXFxuK1xcdCAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZVxcbitcXHQgKiByZWluaXRpYWxpemVzIHRoZSBxdWV1ZSByZWdpc3RlcnMgYnV0IGxlYXZlcyB0aGUgZW5naW5lIHdlZGdlZFxcbitcXHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXFxuK1xcdCAqIGlzIHJlcXVpcmVkLlxcbitcXHQgKlxcbitcXHQgKiBEZWxheSBiZWZvcmUgcmVxdWVzdGluZyByZXNldCBzbyBQQ0llL0lPTU1VL0FFUiBlcnJvciBoYW5kbGluZ1xcbitcXHQgKiB0cmlnZ2VyZWQgYnkgdGhlIGp1c3Qtb2JzZXJ2ZWQgRE1BIGZhdWx0IGNhbiByZWxlYXNlIHRoZSBkZXZpY2VcXG4rXFx0ICogbG9jayBWRklPX0RFVklDRV9SRVNFVCBjb250ZW5kcyBmb3IuICBUaGUgMTAgbXMgdmFsdWUgaXNcXG4rXFx0ICogaGV1cmlzdGljLiAgVGhlIGN1cnJlbnQgbWVtY3B5IHN0aWxsIGZhaWxzIHdpdGggLUVUSU1FRE9VVDtcXG4rXFx0ICogcmVjb3Zlcnkgb25seSBlbnN1cmVzIHRoZSBuZXh0IG1lbWNweSBzdGFydHMgZnJvbSBhIHVzYWJsZSBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdHVzbGVlcCgxMDAwMCk7XFxuK1xcdGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX3NlbmRfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgTVNJWF9WRUNUT1JfTUFTSyk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7XFxuK1xcdC5uYW1lID0gXFxcImlnYlxcXCIsXFxuK1xcdC5wcm9iZSA9IGlnYl9wcm9iZSxcXG4rXFx0LmluaXQgPSBpZ2JfaW5pdCxcXG4rXFx0LnJlbW92ZSA9IGlnYl9yZW1vdmUsXFxuK1xcdC5tZW1jcHlfc3RhcnQgPSBpZ2JfbWVtY3B5X3N0YXJ0LFxcbitcXHQubWVtY3B5X3dhaXQgPSBpZ2JfbWVtY3B5X3dhaXQsXFxuK1xcdC5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXFxuaW5kZXggMjg1ODg4NWE4OWJiYmYuLjJlNjdhZmMwZDU4MDk4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbkBAIC02OCw2ICs2OCw4IEBAIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXFxuIHZvaWQgdmZpb19wY2lfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcXG4gXFx0XFx0XFx0IHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XFxuIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpO1xcbit2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcXG4rXFx0XFx0XFx0ICAgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZmNudGxfc2V0X25vbmJsb2NrKGludCBmZClcXG5AQCAtOTIsNiArOTQsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4gXFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXFxuK1xcdFxcdFxcdFxcdFxcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXFxuIFxcdFxcdFxcdFxcdFxcdHUzMiB2ZWN0b3IsIGludCBjb3VudClcXG4ge1xcbkBAIC0xMDMsNiArMTExLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbiBcXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxcbitcXHRcXHRcXHRcXHRcXHQgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcXG4re1xcbitcXHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgaW50IF9fdG9faW92YShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHZvaWQgKnZhZGRyLCBpb3ZhX3QgKmlvdmEpXFxuIHtcXG4gXFx0cmV0dXJuIF9faW9tbXVfaHZhMmlvdmEoZGV2aWNlLVxcdTAwM2Vpb21tdSwgdmFkZHIsIGlvdmEpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xcbmluZGV4IDlmNDdiY2VlZDE2ZjRjLi4xZjEzY2NhMDQzNDhiNCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xcbkBAIC0xMiw2ICsxMiw3IEBAIExJQlZGSU9fQyArPSB2ZmlvX3BjaV9kcml2ZXIuY1xcbiBpZmVxICgkKEFSQ0g6eDg2XzY0PXg4NikseDg2KVxcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9pb2F0L2lvYXQuY1xcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9kc2EvZHNhLmNcXG4rTElCVkZJT19DICs9IGRyaXZlcnMvaWdiL2lnYi5jXFxuIGVuZGlmXFxuIFxcbiBMSUJWRklPX09VVFBVVCA6PSAkKE9VVFBVVCkvbGlidmZpb1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXFxuaW5kZXggZmM3NWUwNGVmMDEwY2YuLjdiODM5NGQwYWM1MDc2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcXG5AQCAtMTA2LDYgKzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxcbiBcXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xcbisgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZVxcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXFxuKyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXFxuKyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXNcXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cXG4rICovXFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcXG4rXFxuK1xcdGZvciAoaSA9IHZlY3RvcjsgaSBcXHUwMDNjIHZlY3RvciArIGNvdW50OyBpKyspXFxuK1xcdFxcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cXHUwMDNlbXNpX2V2ZW50ZmRzW2ldLCAwLFxcbitcXHRcXHRcXHQgICAgICAgXFxcInZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXFxcblxcXCIsIGkpO1xcbitcXG4rXFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXFx1MDAzZW1zaV9ldmVudGZkcyArIHZlY3Rvcik7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcXG5pbmRleCA2ODI3ZjRhNmZlYmU5OS4uYTVkMDU0NzEzMmM0MDUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xcbkBAIC01LDEyICs1LDE0IEBAXFxuICNpZmRlZiBfX3g4Nl82NF9fXFxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xcbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaW9hdF9vcHM7XFxuK2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xcbiAjZW5kaWZcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0ge1xcbiAjaWZkZWYgX194ODZfNjRfX1xcbiBcXHRcXHUwMDI2ZHNhX29wcyxcXG4gXFx0XFx1MDAyNmlvYXRfb3BzLFxcbitcXHRcXHUwMDI2aWdiX29wcyxcXG4gI2VuZGlmXFxuIH07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNzowNToyNC42NzkzMjkzNDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2OTE4MDY2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgdG8gdGhlIFZGSU8gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MGQxNDBkMzE3YzI5MDg0ZDIzMmM4MzNhZDI1NTZmNzljNzFiYmM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMDc6MDU6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCArMSBAQFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF84MjU3NS5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbkBAIC0wLDAgKzEgQEBcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmM3MzM2MzQxNzFiYjEzXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbkBAIC0wLDAgKzEgQEBcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mNTBkNDUwZDNlOTQ5NVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgKzEsNTY0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfaWRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vYmFycmllci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWlpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJlMTAwMF9yZWdzLmhcIlxuKyNpbmNsdWRlIFwiZTEwMDBfZGVmaW5lcy5oXCJcbisjaW5jbHVkZSBcImUxMDAwXzgyNTc1LmhcIlxuK1xuKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzlcbisjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0XG4rI2RlZmluZSBNU0lYX1ZFQ1RPUiAwXG4rI2RlZmluZSBNU0lYX1ZFQ1RPUl9NQVNLICgxIFx1MDAzY1x1MDAzYyBNU0lYX1ZFQ1RPUilcbisjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovXG4rXG4rc3RydWN0IGlnYl90eF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovXG4rXHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuK1x0XHRcdHUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovXG4rXHRcdH0gcmVhZDtcbitcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovXG4rXHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbitcdFx0XHR1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovXG4rXHRcdH0gd2I7XG4rXHR9O1xuK307XG4rXG4rc3RydWN0IGlnYl9yeF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuK1x0XHRcdHU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovXG4rXHRcdH0gcmVhZDtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1MTYgcGt0X2luZm87ICAgICAvKiBSU1MgdHlwZSwgUGFja2V0IHR5cGUgKi9cbitcdFx0XHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXG4rXHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbitcdFx0XHR1MzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovXG4rXHRcdFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xuK1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4rXHRcdH0gd2I7IC8qIHdyaXRlYmFjayAqL1xuK1x0fTtcbit9O1xuK1xuK3N0cnVjdCBpZ2Ige1xuK1x0dm9pZCAqYmFyMDtcbitcdHUzMiB0eF90YWlsO1xuK1x0dTMyIHJ4X3RhaWw7XG4rXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuK1x0c3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbit7XG4rXHR3cml0ZWwodmFsLCBpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuK3tcbitcdHJldHVybiByZWFkbChpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuK3tcbitcdHUzMiBtZGljO1xuK1x0aW50IGk7XG4rXG4rXHQvKlxuK1x0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxuK1x0ICpcbitcdCAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgKyB0aGVcbitcdCAqIFNXX0ZXX1NZTkMgUEhZIGJpdCkgYWNyb3NzIHRoZSBNRElPIHRyYW5zYWN0aW9uIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHRoZVxuK1x0ICogZGV2aWNlJ3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxuK1x0ICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eVxuK1x0ICogY29udGVuZGluZyBmb3IgdGhlIFBIWSwgc28gdGhlIHN5bmMgaXMgb21pdHRlZDsgaXQgc2hvdWxkIGJlIGFkZGVkIGhlcmVcbitcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxuK1x0ICovXG4rXHRtZGljID0gKCgodTMyKWRhdGEpIHxcbitcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbitcdFx0KDEgXHUwMDNjXHUwMDNjIEUxMDAwX01ESUNfUEhZX1NISUZUKSB8XG4rXHRcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9NRElDLCBtZGljKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkrKykge1xuK1x0XHR1c2xlZXAoNTApO1xuK1x0XHRtZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpO1xuK1x0XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogQ29uZmlndXJlIHRoZSBkZXZpY2UgZm9yIFBIWSBpbnRlcm5hbCBsb29wYmFjayBwZXIgODI1NzYgZGF0YXNoZWV0XG4rICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcbisgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4rICogd3JhcHMgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBQSFkgZGF0YXBhdGggKHNlY3Rpb24gMy41LjYuMyksIHNvIHRoZVxuKyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cbisgKlxuKyAqIFNlY3Rpb24gMy41LjYuMSBkaXJlY3RzIHRvIFwiVXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xuKyAqIG9uIHRoZSA4MjU3NlwiLCBhbmQgc2VjdGlvbiAzLjUuNi4yIHN0YXRlcyBcIk1BQyBMb29wYmFjayBpcyBub3QgdXNlZFxuKyAqIG9uIHRoaXMgZGV2aWNlLlwiICBSQ1RMLkxCTV9NQUMgaXMgc3RpbGwgc2V0IGVsc2V3aGVyZSBhcyBhIFFFTVUtb25seVxuKyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcbisgKiByYXRpb25hbGUuXG4rICovXG4rc3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHR1MzIgY3RybDtcbitcdGludCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlclxuK1x0ICogUUVNVSdzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzXG4rXHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXG4rXHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuK1x0ICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZVxuK1x0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxuK1x0ICogbm8tb3AgdGhlcmUuXG4rXHQgKi9cbitcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbitcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbitcbitcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayArIDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuK1x0cmV0ID0gaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuK1x0XHRcdCAgICBCTUNSX0xPT1BCQUNLIHxcbitcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuK1x0XHRcdCAgICBCTUNSX0ZVTExEUExYKTtcbitcdFZGSU9fQVNTRVJUX0VRKHJldCwgMCwgXCJGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcIik7XG4rXG4rXHQvKlxuK1x0ICogQnJpZWYgZGVsYXkgYmVmb3JlIGZvcmNpbmcgdGhlIE1BQywgbWlycm9yaW5nIHRoZSBrZXJuZWwgZXRodG9vbFxuK1x0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxuK1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMCk7XG4rXG4rXHQvKlxuK1x0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcbitcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4rXHQgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay5cbitcdCAqL1xuK1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbitcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9TUERfU0VMO1xuK1x0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XG4rXHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbitcdFx0RTEwMDBfQ1RSTF9TUERfMTAwMCB8XG4rXHRcdEUxMDAwX0NUUkxfRkQgfFxuK1x0XHRFMTAwMF9DVFJMX1NMVTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7XG4rXG4rXHQvKlxuK1x0ICogU2V0dGxpbmcgZGVsYXkgbWF0Y2hpbmcgdGhlIGtlcm5lbCBldGh0b29sIHNlbGZ0ZXN0J3MgbXNsZWVwKDUwMClcbitcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuK1x0ICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMDApO1xuK31cbitcbitzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX3Jlc2V0KHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSB8IEUxMDAwX0NUUkxfUlNUKTtcbitcdC8qXG4rXHQgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlXG4rXHQgKiBjaGVja2luZyBpZiB0aGlzIGRldmljZSBpcyByZWFkeSB0byBiZSB1c2VkICg4MjU3NiBkYXRhc2hlZXQgc2VjdGlvblxuK1x0ICogNC4yLjEuNi4xKS5cbitcdCAqL1xuK1x0dXNsZWVwKDIwMDApO1xuK1x0VkZJT19BU1NFUlRfRVEoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIFx1MDAyNiBFMTAwMF9DVFJMX1JTVCwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XG4rfVxuK1xuKy8qXG4rICogUHJvZ3JhbSB0aGUgZGV2aWNlIGludG8gYSB1c2FibGUgc3RhdGUuICBTcGxpdCBvdXQgb2YgaWdiX2luaXQoKSBzbyBpdFxuKyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXRcbisgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcbisgKiB2aWEgVkZJTy5cbisgKi9cbitzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXHR1NjQgaW92YV90eCwgaW92YV9yeDtcbitcdHUzMiBjdHJsLCByY3RsO1xuK1x0dTE2IGNtZF9yZWc7XG4rXHRpbnQgcmV0cmllcztcbitcbitcdGlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLVx1MDAzZXR4X3JpbmcpO1xuK1x0aW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNlcnhfcmluZyk7XG4rXG4rXG4rXG4rXHQvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqL1xuK1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCk7XG4rXHRjdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEO1xuK1x0Y3RybCBcdTAwMjY9IH5FMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSztcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpO1xuK1xuK1x0LyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqL1xuK1x0Y21kX3JlZyA9IHZmaW9fcGNpX2NvbmZpZ19yZWFkdyhkZXZpY2UsIFBDSV9DT01NQU5EKTtcbitcdGlmICgoY21kX3JlZyBcdTAwMjYgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9XG4rXHQgICAgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpIHtcbitcdFx0Y21kX3JlZyB8PSAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTtcbitcdFx0dmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTtcbitcdH1cbitcbitcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXG4rXHRpZ2Jfc2V0dXBfbG9vcGJhY2soaWdiKTtcbitcbitcdC8qXG4rXHQgKiBEaXNhYmxlIERNQSByZS1zZW5kIG9uIFBDSWUgY29tcGxldGlvbiB0aW1lb3V0ICg4MjU3NiBkYXRhc2hlZXRcbitcdCAqIHNlY3Rpb24gOC42LjEsIEdDUi5Db21wbGV0aW9uX1RpbWVvdXRfUmVzZW5kLCBiaXQgMTYpLiAgVGhlXG4rXHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xuK1x0ICogdW5tYXBwZWQgSU9WQXM7IHdpdGggdGhlIGRlZmF1bHQgKHNldCkgdmFsdWUsIHRoZSBkZXZpY2Uga2VlcHNcbitcdCAqIHJldHJ5aW5nIHRoZSBmYWlsZWQgcmVhZCBpbmRlZmluaXRlbHksIHdoaWNoIGtlZXBzIFBDSWUgQUVSIGFuZFxuK1x0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxuK1x0ICovXG4rXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0dDUik7XG4rXHRjdHJsIFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTtcbitcbitcdC8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBTCgwKSwgKHUzMilpb3ZhX3R4KTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggXHUwMDNlXHUwMDNlIDMyKSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFMKDApLCAodTMyKWlvdmFfcngpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcdTAwM2VcdTAwM2UgMzIpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTtcbitcbitcdC8qXG4rXHQgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzZcbitcdCAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6IFwiU1JSQ1RMW25dLkRFU0NUWVBFIG11c3QgYmUgc2V0IHRvIGFcbitcdCAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWxcbitcdCAqIGRlc2NyaXB0b3JzLlwiICBzdHJ1Y3QgaWdiX3J4X2Rlc2MgbWF0Y2hlcyB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlclxuK1x0ICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3JcbitcdCAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS5cbitcdCAqXG4rXHQgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXNcbitcdCAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvXG4rXHQgKiB0aGUgUkNUTC5CU0laRSBidWZmZXIgc2l6ZSwgd2hvc2UgcmVzZXQgZGVmYXVsdCAoMDBiKSBpcyAyMDQ4XG4rXHQgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLlxuK1x0ICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpO1xuK1xuK1x0LyogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkICovXG4rXHRyZXRyaWVzID0gMjAwMDtcbitcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDApIHtcbitcdFx0aWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSkgXHUwMDI2IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR1c2xlZXAoMTApO1xuK1x0fVxuK1x0VkZJT19BU1NFUlRfR0UocmV0cmllcywgMCk7XG4rXG4rXHQvKlxuK1x0ICogRW5hYmxlIFJlY2VpdmVyIGFuZCBUcmFuc21pdHRlci4gIFJDVEwuTEJNX01BQyBpcyBzZXQgaW4gYWRkaXRpb25cbitcdCAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJ3MgZW11bGF0ZWQgaWdiXG4rXHQgKiBkb2VzIG5vdCBob25vciBQSFkgcmVnaXN0ZXIgMCBiaXQgMTQgKFBIWSBpbnRlcm5hbCBsb29wYmFjaykgYW5kXG4rXHQgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlhcbitcdCAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyBcIldoZW4gdXNpbmcgdGhlXG4rXHQgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGJcIiwgc28gc2V0dGluZyBMQk1fTUFDXG4rXHQgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhc1xuK1x0ICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFja1xuK1x0ICogaXMgbm90IGltcGxlbWVudGVkIChkYXRhc2hlZXQgMy41LjYuMikuICBTZXR0aW5nIGJvdGggbGV0cyB0aGVcbitcdCAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWxcbitcdCAqIGNvZGUgcGF0aHMuXG4rXHQgKi9cbitcdHJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9NUEUgfCAgICAgIC8qIE11bHRpY2FzdCBQcm9taXNjdW91cyAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfQkFNIHwgICAgICAvKiBCcm9hZGNhc3QgQWNjZXB0IE1vZGUgKi9cbitcdCAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi9cbitcdCAgICAgICBFMTAwMF9SQ1RMX1NFQ1JDOyAgICAgLyogU3RyaXAgQ1JDIChuZWVkZWQgZm9yIG1lbWNtcCkgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4pO1xuK1xuK1x0LypcbitcdCAqIFByb2dyYW0gTVNJLVggaW50ZXJydXB0IHJvdXRpbmcgcGVyIDgyNTc2IGRhdGFzaGVldDpcbitcdCAqXG4rXHQgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0b1xuK1x0ICogcm91dGUgaW50ZXJydXB0IGNhdXNlcyB0aHJvdWdoIElWQVIgbWFwcGluZywgYW5kIEVJQU1FIChiaXQgMzApXG4rXHQgKiB0byBhcHBseSBFSUFNIG9uIE1TSS1YIGFzc2VydGlvbiAod2l0aG91dCBFSUFNRSwgRUlBTSBvbmx5XG4rXHQgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuXG4rXHQgKlxuK1x0ICogRUlBQyAoc2VjdGlvbiA4LjguNSk6IGVuYWJsZSBhdXRvLWNsZWFyIG9mIEVJQ1IgZm9yIHZlY3RvciAwLlxuK1x0ICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZVxuK1x0ICogdGVzdCBjYW4gc2VlIHNwdXJpb3VzIGludGVycnVwdHMgb24gdGhlIG5leHQgbWVtY3B5IGJhdGNoLlxuK1x0ICpcbitcdCAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uXG4rXHQgKiBNU0ktWCBhc3NlcnRpb24gKGVmZmVjdGl2ZSBiZWNhdXNlIEVJQU1FIGlzIHNldCksIHNvIGEgc2luZ2xlXG4rXHQgKiBpbnRlcnJ1cHQgaXMgZGVsaXZlcmVkIHBlciBtZW1jcHkgYmF0Y2ggZXZlbiBpZiB0aGUgY2F1c2VcbitcdCAqIHJlLWFzc2VydHMgYmVmb3JlIHNvZnR3YXJlIHJlLWVuYWJsZXMgdGhlIG1hc2suXG4rXHQgKlxuK1x0ICogSVZBUiAoc2VjdGlvbiA3LjMuMS4yLCByZWdpc3RlciBkZWZpbml0aW9uIGluIDguOC4xMyk6IG1hcCBSWFxuK1x0ICogY2F1c2UgMCB0byBNU0ktWCB2ZWN0b3IgMCBhbmQgbWFyayB0aGUgZW50cnkgdmFsaWQuXG4rXHQgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR1BJRSwgRTEwMDBfR1BJRV9NU0lYX01PREUgfCBFMTAwMF9HUElFX0VJQU1FKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBQywgTVNJWF9WRUNUT1JfTUFTSyk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIE1TSVhfVkVDVE9SX01BU0spO1xuK1xuK1x0LyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTtcbitcbitcdC8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIHZlY3RvciAwICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xuK1xuK1x0LyogSW5pdGlhbGl6ZSBkcml2ZXIgc3RhdGUgYW5kIGNhcGFiaWxpdHkgbGltaXRzICovXG4rXHRpZ2ItXHUwMDNldHhfdGFpbCA9IDA7XG4rXHRpZ2ItXHUwMDNlcnhfdGFpbCA9IDA7XG4rXG4rXHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfc2l6ZSA9IElHQl9NQVhfQ0hVTktfU0laRTtcbitcdGRldmljZS1cdTAwM2Vkcml2ZXIubWF4X21lbWNweV9jb3VudCA9IFJJTkdfU0laRSAtIDE7XG4rXHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1zaSA9IE1TSVhfVkVDVE9SO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXG4rXHRWRklPX0FTU0VSVF9HRShkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpO1xuK1xuK1x0aWdiLVx1MDAzZWJhcjAgPSBkZXZpY2UtXHUwMDNlYmFyc1swXS52YWRkcjtcbitcbitcdGlnYl9yZXNldChpZ2IpO1xuK1xuK1x0LypcbitcdCAqIEVuYWJsZSBNU0ktWCB2aWEgVkZJTyBiZWZvcmUgZGV2aWNlLXNpZGUgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcuXG4rXHQgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGVcbitcdCAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZ1xuK1x0ICogZGVwZW5kZW5jeSBvbiB0aGUgZGV2aWNlLXNpZGUgd3JpdGVzIHBlcmZvcm1lZCBieSBpZ2JfaHdfaW5pdCgpLlxuK1x0ICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXRcbitcdCAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLlxuK1x0ICovXG4rXHR2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbitcbitcdGlnYl9od19pbml0KGRldmljZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XG4rXHRpZ2JfcmVzZXQoaWdiKTtcbitcbitcdHZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxuK3tcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgTVNJWF9WRUNUT1JfTUFTSyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pcnFfZW5hYmxlKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2NsZWFyKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHQvKlxuK1x0ICogVXNlIHdyaXRlLXRvLWNsZWFyIChkYXRhc2hlZXQgNy4zLjQuMikuICBJbiBNU0ktWCBtb2RlIHdpdGggRUlBQ1xuK1x0ICogcHJvZ3JhbW1lZCwgc2VjdGlvbiA4LjguNSBleHBsaWNpdGx5IHN0YXRlcyBcIklmIGFueSBiaXRzIGFyZSBzZXRcbitcdCAqIGluIEVJQUMsIHRoZSBFSUNSIHJlZ2lzdGVyIHNob3VsZCBub3QgYmUgcmVhZFwiLCB3aGljaCBydWxlcyBvdXRcbitcdCAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsXG4rXHQgKiBjbGVhcmVkIGJ5IHdyaXRpbmcgMS5cbitcdCAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsXG4rXHRcdFx0ICAgICBpb3ZhX3QgZHN0LCB1NjQgc2l6ZSwgdTY0IGNvdW50KVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1x0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcbitcdHN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7XG4rXHR1MzIgaTtcbitcbitcdGlnYl9pcnFfZGlzYWJsZShpZ2IpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkrKykge1xuK1x0XHR0eCA9IFx1MDAyNmlnYi1cdTAwM2V0eF9yaW5nW2lnYi1cdTAwM2V0eF90YWlsXTtcbitcdFx0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1tpZ2ItXHUwMDNlcnhfdGFpbF07XG4rXG4rXHRcdG1lbXNldCh0eCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xuK1x0XHRtZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbitcbitcdFx0cngtXHUwMDNlcmVhZC5wa3RfYWRkciA9IGNwdV90b19sZTY0KGRzdCk7XG4rXHRcdHJ4LVx1MDAzZXJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTtcbitcbitcdFx0dHgtXHUwMDNlcmVhZC5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KHNyYyk7XG4rXHRcdC8qXG4rXHRcdCAqIEJ1aWxkIGFuIGFkdmFuY2VkIGRhdGEgZGVzY3JpcHRvciBwZXIgODI1NzYgZGF0YXNoZWV0XG4rXHRcdCAqIHNlY3Rpb24gNy4yLjIuMy4gIERFWFQgbWFya3MgdGhlIGRlc2NyaXB0b3IgYXMgYWR2YW5jZWRcbitcdFx0ICogKHJlcXVpcmVkIGJ5IGhhcmR3YXJlKTsgRFRZUD1kYXRhIHNlbGVjdHMgdGhlIGRhdGFcbitcdFx0ICogZGVzY3JpcHRvcjsgSUZDUyBhc2tzIHRoZSBNQUMgdG8gYXBwZW5kIHRoZSBFdGhlcm5ldFxuK1x0XHQgKiBGQ1MgKHdpdGhvdXQgaXQgdGhlIGZyYW1lIGlzIGRyb3BwZWQgYXMgbWFsZm9ybWVkKTtcbitcdFx0ICogRU9QIG1hcmtzIGVuZCBvZiBwYWNrZXQuICBEVEFMRU4gaXMgdGhlIGJ1ZmZlciBsZW5ndGhcbitcdFx0ICogaW4gYml0cyAxNTowIG9mIGNtZF90eXBlX2xlbi5cbitcdFx0ICovXG4rXHRcdHR4LVx1MDAzZXJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfFxuK1x0XHRcdEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfFxuK1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0RFWFQgfFxuK1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfFxuK1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7XG4rXHRcdC8qXG4rXHRcdCAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplXG4rXHRcdCAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLlxuK1x0XHQgKi9cbitcdFx0dHgtXHUwMDNlcmVhZC5vbGluZm9fc3RhdHVzID1cbitcdFx0XHRjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSBcdTAwM2NcdTAwM2MgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVCk7XG4rXG4rXHRcdGlnYi1cdTAwM2V0eF90YWlsID0gKGlnYi1cdTAwM2V0eF90YWlsICsgMSkgJSBSSU5HX1NJWkU7XG4rXHRcdGlnYi1cdTAwM2VyeF90YWlsID0gKGlnYi1cdTAwM2VyeF90YWlsICsgMSkgJSBSSU5HX1NJWkU7XG4rXHR9XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLVx1MDAzZXJ4X3RhaWwpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi1cdTAwM2V0eF90YWlsKTtcbit9XG4rXG4rLypcbisgKiBSZXNldCB0aGUgZGV2aWNlIHZpYSBWRklPX0RFVklDRV9SRVNFVCAoUENJZSBGTFIgb24gdGhlIDgyNTc2KSBhbmRcbisgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVhcbisgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyXG4rICogdmlhIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGJlZm9yZSByZXByb2dyYW1taW5nIHNvIGFueSBjYWxsZXItY2FjaGVkXG4rICogZXZlbnRmZCByZW1haW5zIHZhbGlkLlxuKyAqXG4rICogRkxSIGNsZWFycyBkZXZpY2Utc2lkZSBzdGF0ZSB0byBwb3dlci1vbiByZXNldCB2YWx1ZXMgKGRhdGFzaGVldFxuKyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgXCJlcXVpdmFsZW50IHRvIGEgRDAtXHUwMDNlRDMtXHUwMDNlRDAgdHJhbnNpdGlvblwiKSwgc29cbisgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsXG4rICogdmFsdWVzLCBhbmQgaWdiX2h3X2luaXQoKSByZXNldHMgdHhfdGFpbC9yeF90YWlsIHRvIDAuICBUaGUgbmV4dFxuKyAqIGlnYl9tZW1jcHlfc3RhcnQoKSB3aWxsIG1lbXNldCBlYWNoIGRlc2NyaXB0b3IgaXQgdG91Y2hlcyBiZWZvcmVcbisgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZVxuKyAqIG5lZWRlZCBoZXJlLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHR2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcbitcdHZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XG4rXHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuK31cbitcbitzdGF0aWMgaW50IGlnYl9tZW1jcHlfd2FpdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuK1x0dTMyIHN0YXR1cyA9IDA7XG4rXHR1MzIgcHJldl90YWlsO1xuK1x0aW50IHJldHJpZXM7XG4rXG4rXHRwcmV2X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgKyBSSU5HX1NJWkUgLSAxKSAlIFJJTkdfU0laRTtcbitcdHJ4ID0gXHUwMDI2aWdiLVx1MDAzZXJ4X3JpbmdbcHJldl90YWlsXTtcbitcbitcdC8qXG4rXHQgKiBSZWFsIDgyNTc2IGhhcmR3YXJlIHByb2Nlc3NlcyB0aGUgZGVzY3JpcHRvciByaW5nIGF0IGxpbmUgcmF0ZS5cbitcdCAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLFxuK1x0ICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdFxuK1x0ICogdmFsaWQgbWVtY3B5IHRha2VzIH4zMiBtcyBvbiB0aGUgd2lyZSwgcGx1cyBwZXItZnJhbWUgcHJlYW1ibGUsXG4rXHQgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFja1xuK1x0ICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZztcbitcdCAqIH42eCB0aGUgbGluZS1yYXRlIGZsb29yIGxlYXZlcyBjb21mb3J0YWJsZSBoZWFkcm9vbSBmb3IgaG9zdFxuK1x0ICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUFcbitcdCAqIHRlc3RzIGJvdW5kZWQuXG4rXHQgKi9cbitcdHJldHJpZXMgPSAyMDA7XG4rXHR3aGlsZSAocmV0cmllcy0tIFx1MDAzZSAwKSB7XG4rXHRcdHN0YXR1cyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShyeC1cdTAwM2V3Yi5zdGF0dXNfZXJyb3IpKTtcbitcdFx0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbitcdFx0XHRicmVhaztcbitcdFx0dXNsZWVwKDEwMDApO1xuK1x0fVxuK1xuK1x0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbitcdFx0LypcbitcdFx0ICogRW5zdXJlIHRoZSB0ZXN0IGNvZGUgZG9lc24ndCBzcGVjdWxhdGl2ZWx5IHJlYWQgdGhlIERNQVxuK1x0XHQgKiBkZXN0aW5hdGlvbiBidWZmZXIgYmVmb3JlIHdlIGhhdmUgdmVyaWZpZWQgdGhhdCB0aGVcbitcdFx0ICogZGVzY3JpcHRvciB3cml0ZWJhY2sgaXMgY29tcGxldGUuXG4rXHRcdCAqL1xuK1x0XHRybWIoKTtcbitcbitcdGlnYl9pcnFfY2xlYXIoaWdiKTtcbitcbitcdGlnYl9pcnFfZW5hYmxlKGlnYik7XG4rXG4rXHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qXG4rXHQgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXNcbitcdCAqIHR5cGljYWxseSBmb2xsb3dzIGEgRE1BLXJlYWQgZmF1bHQgZnJvbSBvbmUgb2YgdGhlIGludGVudGlvbmFsXG4rXHQgKiB1bm1hcHBlZC1JT1ZBIHRlc3RzOyB0aGUgZmF1bHQgbGVhdmVzIHRoZSBkZXNjcmlwdG9yIGVuZ2luZVxuK1x0ICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lXG4rXHQgKiByZWluaXRpYWxpemVzIHRoZSBxdWV1ZSByZWdpc3RlcnMgYnV0IGxlYXZlcyB0aGUgZW5naW5lIHdlZGdlZFxuK1x0ICogZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MsIHNvIGEgYnJvYWRlciBWRklPX0RFVklDRV9SRVNFVCAoRkxSKVxuK1x0ICogaXMgcmVxdWlyZWQuXG4rXHQgKlxuK1x0ICogRGVsYXkgYmVmb3JlIHJlcXVlc3RpbmcgcmVzZXQgc28gUENJZS9JT01NVS9BRVIgZXJyb3IgaGFuZGxpbmdcbitcdCAqIHRyaWdnZXJlZCBieSB0aGUganVzdC1vYnNlcnZlZCBETUEgZmF1bHQgY2FuIHJlbGVhc2UgdGhlIGRldmljZVxuK1x0ICogbG9jayBWRklPX0RFVklDRV9SRVNFVCBjb250ZW5kcyBmb3IuICBUaGUgMTAgbXMgdmFsdWUgaXNcbitcdCAqIGhldXJpc3RpYy4gIFRoZSBjdXJyZW50IG1lbWNweSBzdGlsbCBmYWlscyB3aXRoIC1FVElNRURPVVQ7XG4rXHQgKiByZWNvdmVyeSBvbmx5IGVuc3VyZXMgdGhlIG5leHQgbWVtY3B5IHN0YXJ0cyBmcm9tIGEgdXNhYmxlIHN0YXRlLlxuK1x0ICovXG4rXHR1c2xlZXAoMTAwMDApO1xuK1x0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcbitcbitcdHJldHVybiAtRVRJTUVET1VUO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcbitcdC5uYW1lID0gXCJpZ2JcIixcbitcdC5wcm9iZSA9IGlnYl9wcm9iZSxcbitcdC5pbml0ID0gaWdiX2luaXQsXG4rXHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcbitcdC5tZW1jcHlfc3RhcnQgPSBpZ2JfbWVtY3B5X3N0YXJ0LFxuK1x0Lm1lbWNweV93YWl0ID0gaWdiX21lbWNweV93YWl0LFxuK1x0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG5pbmRleCAyODU4ODg1YTg5YmJiZi4uMmU2N2FmYzBkNTgwOTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuQEAgLTY4LDYgKzY4LDggQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcbiB2b2lkIHZmaW9fcGNpX2lycV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4gXHRcdFx0IHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCk7XG4rdm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4rXHRcdFx0ICAgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcbiB2b2lkIHZmaW9fcGNpX2lycV90cmlnZ2VyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LCB1MzIgdmVjdG9yKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgZmNudGxfc2V0X25vbmJsb2NrKGludCBmZClcbkBAIC05Miw2ICs5NCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuIFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4rXHRcdFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4re1xuK1x0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4gXHRcdFx0XHRcdHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiB7XG5AQCAtMTAzLDYgKzExMSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4rXHRcdFx0XHRcdCAgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuK3tcbitcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcbiB7XG4gXHRyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtXHUwMDNlaW9tbXUsIHZhZGRyLCBpb3ZhKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuaW5kZXggOWY0N2JjZWVkMTZmNGMuLjFmMTNjY2EwNDM0OGI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuQEAgLTEyLDYgKzEyLDcgQEAgTElCVkZJT19DICs9IHZmaW9fcGNpX2RyaXZlci5jXG4gaWZlcSAoJChBUkNIOng4Nl82ND14ODYpLHg4NilcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9pb2F0L2lvYXQuY1xuIExJQlZGSU9fQyArPSBkcml2ZXJzL2RzYS9kc2EuY1xuK0xJQlZGSU9fQyArPSBkcml2ZXJzL2lnYi9pZ2IuY1xuIGVuZGlmXG4gXG4gTElCVkZJT19PVVRQVVQgOj0gJChPVVRQVVQpL2xpYnZmaW9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5pbmRleCBmYzc1ZTA0ZWYwMTBjZi4uN2I4Mzk0ZDBhYzUwNzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbkBAIC0xMDYsNiArMTA2LDI4IEBAIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpXG4gXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xuIH1cbiBcbisvKlxuKyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXG4rICogdGhlIGV4aXN0aW5nIGV2ZW50ZmRzLiAgSW50ZW5kZWQgZm9yIGRyaXZlcnMgdGhhdCBuZWVkIHRvIHJlLWFybSBkZXZpY2VcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXG4rICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcbisgKiBldmVudGZkcyB3b3VsZCBpbnZhbGlkYXRlIGFueSB0ZXN0LWZpeHR1cmUgY2FjaGUgb2YgdGhlIGZkLCBzbyB0aGlzXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cbisgKi9cbit2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbitcdFx0XHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcbitcbitcdGZvciAoaSA9IHZlY3RvcjsgaSBcdTAwM2MgdmVjdG9yICsgY291bnQ7IGkrKylcbitcdFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkc1tpXSwgMCxcbitcdFx0XHQgICAgICAgXCJ2ZWN0b3IgJWQgZXZlbnRmZCBub3QgYWxsb2NhdGVkXFxuXCIsIGkpO1xuK1xuK1x0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXHUwMDNlbXNpX2V2ZW50ZmRzICsgdmVjdG9yKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgICAgIHN0cnVjdCB2ZmlvX2lycV9pbmZvICppcnFfaW5mbylcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuaW5kZXggNjgyN2Y0YTZmZWJlOTkuLmE1ZDA1NDcxMzJjNDA1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG5AQCAtNSwxMiArNSwxNCBAQFxuICNpZmRlZiBfX3g4Nl82NF9fXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGRzYV9vcHM7XG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzO1xuK2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xuICNlbmRpZlxuIFxuIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0ge1xuICNpZmRlZiBfX3g4Nl82NF9fXG4gXHRcdTAwMjZkc2Ffb3BzLFxuIFx0XHUwMDI2aW9hdF9vcHMsXG4rXHRcdTAwMjZpZ2Jfb3BzLFxuICNlbmRpZlxuIH07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNzowNToyNC42NzkzMzIyMzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjkxNzY0OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgSW1wYWN0IG9uIEtlcm5lbCBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgYWRkaW5nIGFuIGBpZ2JgIGRyaXZlciB0byB0aGUgYHZmaW9gIHNlbGZ0ZXN0cy4gRmlyc3QgZ2xhbmNlLCBpdCdzIG1vZGlmeWluZyBmaWxlcyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvYCBhbmQgYSBmZXcgb3RoZXIgcmVsYXRlZCBmaWxlcyB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9gIGRpcmVjdG9yeS4gTm8ga2VybmVsIHNvdXJjZSBjb2RlIGNoYW5nZXMsIHRoYXQncyB0aGUga2V5LiBJIGhhZCB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgbGlzdCBvZiBjaGFuZ2VkIGZpbGVzIHRob3VnaCwganVzdCB0byBiZSBjZXJ0YWluLiBZZXMsIGBlMTAwMF84MjU3NS5oYCwgYGUxMDAwX2RlZmluZXMuaGAsIGFuZCBgZTEwMDBfcmVncy5oYCBhcmUgc3ltbGlua3MgYW5kIHRoYXQgaGVscHMgc29saWRpZnkgdGhhdCB0aGlzIGlzIGEgc2VsZnRlc3QgYWRkaXRpb24uXG5cblRoaXMgaXMgc3RyaWN0bHkgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGFkZGl0aW9uLiBJdCdzICpub3QqIHRvdWNoaW5nIGFueXRoaW5nIGluIHRoZSBjb3JlIGtlcm5lbCwgbm8gZHJpdmVycywgbm8gYXJjaGl0ZWN0dXJlcy4gU28sIGRvZXMgaXQgbWVldCB0aGUgY3JpdGVyaWEgZm9yIGZ1enppbmc/IExldCBtZSByZXZpZXcgdGhlIGd1aWRhbmNlIGFnYWluLiBXZSdyZSBsb29raW5nIGZvciBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbC4uLiBNb2RpZmljYXRpb25zIHRvIGBEb2N1bWVudGF0aW9uL2AsIGBLY29uZmlnYCBmaWxlcywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgY29uc3RhbnRzIHdpdGhvdXQgZnVuY3Rpb25hbCBpbXBhY3QsIHVucmVhY2hhYmxlIGNvZGUuLi4gTm8sIHRoaXMgcGF0Y2ggZG9lc24ndCBmYWxsIGludG8gYW55IG9mIHRob3NlIGNhdGVnb3JpZXMuXG5cblRoZSBjcnV4IG9mIHRoZSBxdWVzdGlvbjogaXMgbW9kaWZ5aW5nIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gIGNvbnNpZGVyZWQgYSBcImZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWxcIj8gTm8sIGFic29sdXRlbHkgbm90LiBTZWxmdGVzdHMgYXJlIHVzZXItc3BhY2UgcHJvZ3JhbXMuIFRoZXkgYXJlIGZvciB0ZXN0aW5nIHRoZSBrZXJuZWwsIGJ1dCB0aGV5IGFyZSAqbm90KiBwYXJ0IG9mIHRoZSBrZXJuZWwncyBleGVjdXRpb24gcGF0aC4gRnV6emluZyB0aGUga2VybmVsIGJhc2VkIG9uIGNoYW5nZXMgdG8gc2VsZnRlc3RzIGlzIHBvaW50bGVzcyBzaW5jZSB0aGUga2VybmVsIGl0c2VsZiBoYXNuJ3QgY2hhbmdlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gVGhlIHByb21wdCBzcGVjaWZpZXM6IFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIiBUaGlzIG9ubHkgbW9kaWZpZXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzICpub3QqIG1vZGlmeSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByYXRpb25hbGUgaXMgdGhhdCB0aGlzIHBhdGNoICpvbmx5KiBhZGRzIGEgbmV3IGRyaXZlciB0byB0aGUgVkZJTyBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYC4gSXQgZG9lc24ndCB0b3VjaCBjb3JlIGtlcm5lbCBjb2RlLCBzbyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBmb3IgZnV6emluZy5cbkFscmlnaHQsIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5OTIsIk91dHB1dFRva2VucyI6ODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNzowNTozNC4zNzEwOTk4NThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgdG8gdGhlIFZGSU8gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IGRyaXZlciB0byB0aGUgVkZJTyBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8uIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIGFuZCB0aGVyZWZvcmUgZG9lcyBub3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowscmch[1] Phase: Running StartedAt: 2026-07-15 07:05:45 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscmch[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-15 07:05:45 +0000 UTC FinishedAt: 2026-07-15 07:05:52 +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,}