Name: series-workflowckbxz Phase: Failed StartedAt: 2026-09-07 01:29:11 +0000 UTC FinishedAt: 2026-09-07 01:53:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbxz[0] Phase: Succeeded StartedAt: 2026-09-07 01:29:11 +0000 UTC FinishedAt: 2026-09-07 01:53:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbxz[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 01:29:11 +0000 UTC FinishedAt: 2026-09-07 01:53:30 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTUFJTlRBSU5FUlMsIHRoZSBNZWRpYVRlayBNVDc2MjggU29DIGVtYmVkZGVkIHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYyksIGFuZCBpdHMgYXNzb2NpYXRlZCBEU0EgdGFnIGRyaXZlciAobmV0L2RzYS90YWdfbXQ3NjI4LmMpLiBNVDc2MjggaXMgYSBwbGF0Zm9ybS9Tb0Mtc3BlY2lmaWMgRXRoZXJuZXQgc3dpdGNoIGZvciBNSVBTLWJhc2VkIE1lZGlhVGVrIFNvQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gQmVjYXVzZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBkZXZpY2UgY2Fubm90IHByb2JlIGFuZCB0aGUgdGFnIHByb3RvY29sIGlzIG9ubHkgdXNlZCBieSB0aGlzIHN3aXRjaCwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA0YjcxNmIxYTlmYTYxOTEwY2RkODE2MzIyZjI4ODAwNThmNDNjOTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAxOjUyOjIwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGIyM2ZiNmYyZjRlZjQuLjk1ZTM2MWY1ZDBlZGUgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0xNjc4MSw2ICYjNDM7MTY3ODEsMTUgQEAgUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy9tZWRpYXRlayxtdDc2MjEtaTJjLnlhbWxcbiBGOlx0ZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdDc2MjEuY1xuIFxuJiM0MztNRURJQVRFSyBNVDc2MjggU1dJVENIIERSSVZFUlxuJiM0MztNOlx0Sm9yaXMgVmFpc3ZpbGEgXHUwMDNjam9leUB0aW55aXNyLmNvbVx1MDAzZVxuJiM0MztMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuJiM0MztTOlx0TWFpbnRhaW5lZFxuJiM0MztGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NjI4LWVzdy55YW1sXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmNcbiYjNDM7RjpcdGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZmUtc29jLmNcbiYjNDM7RjpcdG5ldC9kc2EvdGFnX210NzYyOC5jXG4mIzQzO1xuIE1FRElBVEVLIE1UTUlQUyBDTE9DSyBEUklWRVJcbiBNOlx0U2VyZ2lvIFBhcmFjdWVsbG9zIFx1MDAzY3Nlcmdpby5wYXJhY3VlbGxvc0BnbWFpbC5jb21cdTAwM2VcbiBTOlx0TWFpbnRhaW5lZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguYyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguY1xuaW5kZXggZmI2M2Y2ZjY0NGI5ZS4uNjI5ZGJmOTY4YTE3MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL210NzYyOC5jXG5AQCAtMzQsNiAmIzQzOzM0LDcgQEBcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1ZVQih2bGFuKSAoMHgxMDAgJiM0MzsgNCAqICgodmxhbikgLyA0KSlcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1NPQ1BDIDB4OGNcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1BPQzAgMHg5MFxuJiM0MzsjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1BPQzEgMHg5NFxuICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfUE9DMiAweDk4XG4gI2RlZmluZSBNVDc2MjhfRVNXX1JFR19TR0MgMHg5Y1xuICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfUENSMCAweGMwXG5AQCAtOTIsNiAmIzQzOzkzLDkgQEBcbiBcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUE9DMF9QT1JUX0RJU0FCTEUgR0VOTUFTSygyOSwgMjMpXG4gXG4mIzQzOyNkZWZpbmUgTVQ3NjI4X0VTV19QT0MxX1BPUlRfQkxPQ0tJTkdfU1RBVEUgR0VOTUFTSygyMiwgMTYpXG4mIzQzOyNkZWZpbmUgTVQ3NjI4X0VTV19QT0MxX1BPUlRfRElTX0xFQVJOSU5HIEdFTk1BU0soMTQsIDgpXG4mIzQzO1xuICNkZWZpbmUgTVQ3NjI4X0VTV19QT0MyX1BFUl9WTEFOX1VOVEFHX0VOIEJJVCgxNSlcbiBcbiAjZGVmaW5lIE1UNzYyOF9FU1dfU0dDX0FHSU5HX0lOVEVSVkFMIEdFTk1BU0soMywgMClcbkBAIC0xMzgsNiAmIzQzOzE0Miw3IEBAXG4gI2RlZmluZSBNVDc2MjhfRVNXX1BPUlRTX0NQVSBCSVQoNilcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUE9SVFNfQUxMIEdFTk1BU0soNiwgMClcbiBcbiYjNDM7I2RlZmluZSBNVDc2MjhfRVNXX05VTV9VU0VSX1BPUlRTIDVcbiAjZGVmaW5lIE1UNzYyOF9FU1dfTlVNX1BPUlRTIDdcbiAjZGVmaW5lIE1UNzYyOF9OVU1fVkxBTlMgMTZcbiBcbkBAIC0xNTEsOCAmIzQzOzE1NiwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgbXQ3NjI4X2Vzd19yZWdtYXBfY2ZnID0ge1xuIFx0LnZhbF9mb3JtYXRfZW5kaWFuID0gUkVHTUFQX0VORElBTl9MSVRUTEUsXG4gfTtcbiBcbiYjNDM7ZW51bSB7XG4mIzQzO1x0TVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSxcbiYjNDM7XHRNVDc2MjhfVkxBTl9UWVBFX1VOQVdBUkUsXG4mIzQzO1x0TVQ3NjI4X1ZMQU5fVFlQRV9OVU0sXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBtdDc2MjhfdmxhbiB7XG4tXHRib29sIGFjdGl2ZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdHlwZTtcbiBcdHU4IG1lbWJlcnM7XG4gXHR1OCB1bnRhZztcbiBcdHUxNiB2aWQ7XG5AQCAtMTYzLDkgJiM0MzsxNzQsMTAgQEAgc3RydWN0IG10NzYyOF9lc3cge1xuIFx0c3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdF9lc3c7XG4gXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4gXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG4tXHR1MTYgdGFnXzgwMjFxX3B2aWRbTVQ3NjI4X0VTV19OVU1fUE9SVFNdO1xuJiM0MztcdHUxNiBwdmlkW01UNzYyOF9WTEFOX1RZUEVfTlVNXVtNVDc2MjhfRVNXX05VTV9QT1JUU107XG4gXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gdmxhbnNbTVQ3NjI4X05VTV9WTEFOU107XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4mIzQzO1x0dTggdmxhbl9maWx0ZXJpbmc7XG4gfTtcbiBcbiBzdGF0aWMgaW50IG10NzYyOF9taWlfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcbkBAIC0zODMsMjEgJiM0MzszOTUsMTI3IEBAIHN0YXRpYyB2b2lkIG10NzYyOF9lc3dfc2V0X3Z1YihzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3LCB1bnNpZ25lZCBpbnQgdmxhbixcbiBcdFx0XHQgICBNVDc2MjhfRVNXX1ZVQl9QUkVQKHZsYW4sIHZ1YikpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBtdDc2MjhfdmxhbiAqbXQ3NjI4X2ZpbmRfdmxhbl9ibG9jayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgdTE2IHZpZCwgdW5zaWduZWQgaW50IHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW47XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1UNzYyOF9OVU1fVkxBTlM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR2bGFuID0gXHUwMDI2ZXN3LVx1MDAzZXZsYW5zW2ldO1xuJiM0MztcdFx0aWYgKHZsYW4tXHUwMDNldmlkID09IHZpZCBcdTAwMjZcdTAwMjYgdmxhbi1cdTAwM2V0eXBlID09IHR5cGUpXG4mIzQzO1x0XHRcdHJldHVybiB2bGFuO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBtdDc2MjhfdmxhbiAqbXQ3NjI4X2FsbG9jX3ZsYW5fYmxvY2soc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuJiM0MztcdFx0XHRcdFx0XHQgICB1MTYgdmlkLCB1bnNpZ25lZCBpbnQgdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtdDc2MjhfZXN3ICplc3cgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbjtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X05VTV9WTEFOUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHZsYW4gPSBcdTAwMjZlc3ctXHUwMDNldmxhbnNbaV07XG4mIzQzO1x0XHRpZiAodmxhbi1cdTAwM2V2aWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHZsYW4tXHUwMDNldHlwZSAhPSB0eXBlKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHZsYW4tXHUwMDNldmlkID0gdmlkO1xuJiM0MztcdFx0cmV0dXJuIHZsYW47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtdDc2MjhfcG9ydF9qb2luX3ZsYW5fYmxvY2soc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTE2IHZpZCxcbiYjNDM7XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IHR5cGUsIHUxNiBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IG10NzYyOF9maW5kX3ZsYW5fYmxvY2soZHMsIHZpZCwgdHlwZSk7XG4mIzQzO1x0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmICghdmxhbilcbiYjNDM7XHRcdHZsYW4gPSBtdDc2MjhfYWxsb2Nfdmxhbl9ibG9jayhkcywgdmlkLCB0eXBlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF2bGFuKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1xuJiM0MztcdHZsYW4tXHUwMDNlbWVtYmVycyB8PSBCSVQocG9ydCk7XG4mIzQzO1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19QVklEKVxuJiM0MztcdFx0ZXN3LVx1MDAzZXB2aWRbdHlwZV1bcG9ydF0gPSB2aWQ7XG4mIzQzO1x0ZWxzZSBpZiAoZXN3LVx1MDAzZXB2aWRbdHlwZV1bcG9ydF0gPT0gdmlkKVxuJiM0MztcdFx0ZXN3LVx1MDAzZXB2aWRbdHlwZV1bcG9ydF0gPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fVU5UQUdHRUQpXG4mIzQzO1x0XHR2bGFuLVx1MDAzZXVudGFnIHw9IEJJVChwb3J0KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2bGFuLVx1MDAzZXVudGFnIFx1MDAyNj0gfkJJVChwb3J0KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtdDc2MjhfcG9ydF9sZWF2ZV92bGFuX2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0XHR1MTYgdmlkLCB1bnNpZ25lZCBpbnQgdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IG10NzYyOF9maW5kX3ZsYW5fYmxvY2soZHMsIHZpZCwgdHlwZSk7XG4mIzQzO1x0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmICghdmxhbilcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcbiYjNDM7XHRpZiAoZXN3LVx1MDAzZXB2aWRbdHlwZV1bcG9ydF0gPT0gdmlkKVxuJiM0MztcdFx0ZXN3LVx1MDAzZXB2aWRbdHlwZV1bcG9ydF0gPSAwO1xuJiM0MztcdHZsYW4tXHUwMDNlbWVtYmVycyBcdTAwMjY9IH5CSVQocG9ydCk7XG4mIzQzO1x0dmxhbi1cdTAwM2V1bnRhZyBcdTAwMjY9IH5CSVQocG9ydCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGcmVlIHRoZSB2bGFuIGlmIHdlJiMzOTtyZSB0aGUgbGFzdCBtZW1iZXIgb2YgaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCF2bGFuLVx1MDAzZW1lbWJlcnMpXG4mIzQzO1x0XHR2bGFuLVx1MDAzZXZpZCA9IDA7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgbXQ3NjI4X3ZsYW5fc3luYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X05VTV9WTEFOUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IG10NzYyOF92bGFuICp2bGFuID0gXHUwMDI2ZXN3LVx1MDAzZXZsYW5zW2ldO1xuJiM0MztcdFx0dTggbWVtYmVyX21hc2s7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHZsYW4tXHUwMDNldHlwZSA9PSBNVDc2MjhfVkxBTl9UWVBFX0FXQVJFKVxuJiM0MztcdFx0XHRtZW1iZXJfbWFzayA9IGVzdy1cdTAwM2V2bGFuX2ZpbHRlcmluZztcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bWVtYmVyX21hc2sgPSB+ZXN3LVx1MDAzZXZsYW5fZmlsdGVyaW5nO1xuJiM0MztcdFx0bWVtYmVyX21hc2sgfD0gTVQ3NjI4X0VTV19QT1JUU19DUFU7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUHV0IFZMQU4gZmlsdGVyaW5nIHBvcnRzIG9ubHkgaW50byBWTEFOIGF3YXJlIFZMQU5zIGFuZFxuJiM0MztcdFx0ICogbm9uIFZMQU4gZmlsdGVyaW5nIHBvcnRzIGludG8gVkxBTiB1bmF3YXJlIFZMQU5zLlxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIENQVSBtYXkgbm90IGJlIHJlbW92ZWQgZnJvbSBhbnkgVkxBTiwgYXMgVkxBTiBmaWx0ZXJpbmdcbiYjNDM7XHRcdCAqIGFwcGxpZXMgb25seSB0byB1c2VyIHBvcnRzLlxuJiM0MztcdFx0ICovXG4gXG4tXHRcdG10NzYyOF9lc3dfc2V0X3Ztc2MoZXN3LCBpLCB2bGFuLVx1MDAzZW1lbWJlcnMpO1xuIFx0XHRtdDc2MjhfZXN3X3NldF92bGFuX2lkKGVzdywgaSwgdmxhbi1cdTAwM2V2aWQpO1xuLVx0XHRtdDc2MjhfZXN3X3NldF92dWIoZXN3LCBpLCB2bGFuLVx1MDAzZXVudGFnKTtcbiYjNDM7XHRcdG10NzYyOF9lc3dfc2V0X3Ztc2MoZXN3LCBpLCB2bGFuLVx1MDAzZW1lbWJlcnMgXHUwMDI2IG1lbWJlcl9tYXNrKTtcbiYjNDM7XHRcdG10NzYyOF9lc3dfc2V0X3Z1Yihlc3csIGksIHZsYW4tXHUwMDNldW50YWcgXHUwMDI2IG1lbWJlcl9tYXNrKTtcbiYjNDM7XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkcy1cdTAwM2VudW1fcG9ydHM7IGkmIzQzOyYjNDM7KVxuLVx0XHRtdDc2MjhfZXN3X3NldF9wdmlkKGVzdywgaSwgZXN3LVx1MDAzZXRhZ184MDIxcV9wdmlkW2ldKTtcbiYjNDM7XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCB0eXBlID0gQklUKGRwLVx1MDAzZWluZGV4KSBcdTAwMjYgZXN3LVx1MDAzZXZsYW5fZmlsdGVyaW5nID9cbiYjNDM7XHRcdCAgICBNVDc2MjhfVkxBTl9UWVBFX0FXQVJFIDogTVQ3NjI4X1ZMQU5fVFlQRV9VTkFXQVJFO1xuJiM0MztcdFx0bXQ3NjI4X2Vzd19zZXRfcHZpZChlc3csIGRwLVx1MDAzZWluZGV4LCBlc3ctXHUwMDNlcHZpZFt0eXBlXVtkcC1cdTAwM2VpbmRleF0pO1xuJiM0MztcdH1cbiYjNDM7XHRyZWdtYXBfdXBkYXRlX2JpdHMoZXN3LVx1MDAzZXJlZ21hcCwgTVQ3NjI4X0VTV19SRUdfU0dDMixcbiYjNDM7XHRcdFx0ICAgTVQ3NjI4X0VTV19TR0MyX0RPVUJMRV9UQUdfRU4sXG4mIzQzO1x0XHRcdCAgIEZJRUxEX1BSRVAoTVQ3NjI4X0VTV19TR0MyX0RPVUJMRV9UQUdfRU4sXG4mIzQzO1x0XHRcdFx0ICAgICAgTVQ3NjI4X0VTV19QT1JUU19OT0NQVSBcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgICB+ZXN3LVx1MDAzZXZsYW5fZmlsdGVyaW5nKSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbXQ3NjI4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbkBAIC00MjUsNiAmIzQzOzU0MywxOSBAQCBzdGF0aWMgaW50IG10NzYyOF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogRGVkaWNhdGUgdGhlIGZpcnN0IG51bV91c2VyX3BvcnRzICYjNDM7IDEgVkxBTiBzbG90cyBmb3IgdGFnXzgwMjFxLlxuJiM0MztcdCAqIFNpbmNlIGJyaWRnZXMgYXJlIG9ubHkgb2ZmbG9hZGVkIHdoZW4gdGhleSBoYXZlIGF0IGxlYXN0IG9uZSBtZW1iZXJcbiYjNDM7XHQgKiBwb3J0LCB0aGUgd29yc3QgY2FzZSBlbnRyeSByZXF1aXJlbWVudCBpcyAxIHBlciBwb3J0LiBUaGUgZXh0cmEgc2xvdFxuJiM0MztcdCAqIGlzIG5lZWRlZCBiZWNhdXNlIHdoZW4gY2hhbmdpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIHRhZ184MDIxcSBhZGRzIGFcbiYjNDM7XHQgKiBuZXcgVkxBTiBiZWZvcmUgcmVtb3ZpbmcgdGhlIG9sZCBvbmUuIFRoZSByZXN0IG9mIHRoZSBWTEFOIHNsb3RzIGNhblxuJiM0MztcdCAqIGJlIHVzZWQgZm9yIGZpbHRlcmluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X0VTV19OVU1fVVNFUl9QT1JUUyAmIzQzOyAxOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGVzdy1cdTAwM2V2bGFuc1tpXS50eXBlID0gTVQ3NjI4X1ZMQU5fVFlQRV9VTkFXQVJFO1xuJiM0MztcbiYjNDM7XHRkcy1cdTAwM2VtYXhfbnVtX2JyaWRnZXMgPSBEU0FfVEFHXzgwMjFRX01BWF9OVU1fQlJJREdFUztcbiYjNDM7XG4gXHRydG5sX2xvY2soKTtcbiBcdHJldCA9IGRzYV90YWdfODAyMXFfcmVnaXN0ZXIoZHMsIGh0b25zKEVUSF9QXzgwMjFRKSk7XG4gXHRydG5sX3VubG9jaygpO1xuQEAgLTQ3OSw3MSAmIzQzOzYxMCw5NyBAQCBzdGF0aWMgdm9pZCBtdDc2MjhfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIHN0YXRpYyBpbnQgbXQ3NjI4X2RzYV84MDIxcV92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHRcdFx0ICAgICB1MTYgdmlkLCB1MTYgZmxhZ3MpXG4ge1xuLVx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVx1MDAzZXByaXY7XG4tXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW4gPSBOVUxMO1xuLVx0aW50IGk7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNVDc2MjhfTlVNX1ZMQU5TOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKmNoZWNrX3ZsYW4gPSBcdTAwMjZlc3ctXHUwMDNldmxhbnNbaV07XG4tXG4tXHRcdGlmICghY2hlY2tfdmxhbi1cdTAwM2VhY3RpdmUgXHUwMDI2XHUwMDI2ICF2bGFuKVxuLVx0XHRcdHZsYW4gPSBjaGVja192bGFuO1xuLVxuLVx0XHRpZiAoY2hlY2tfdmxhbi1cdTAwM2VhY3RpdmUgXHUwMDI2XHUwMDI2IGNoZWNrX3ZsYW4tXHUwMDNldmlkID09IHZpZCkge1xuLVx0XHRcdHZsYW4gPSBjaGVja192bGFuO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHRpZiAoIXZsYW4pXG4tXHRcdHJldHVybiAtRU5PU1BDO1xuLVxuLVx0dmxhbi1cdTAwM2V2aWQgPSB2aWQ7XG4tXHR2bGFuLVx1MDAzZWFjdGl2ZSA9IHRydWU7XG4tXHR2bGFuLVx1MDAzZW1lbWJlcnMgfD0gQklUKHBvcnQpO1xuLVxuLVx0aWYgKGZsYWdzIFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1BWSUQpXG4tXHRcdGVzdy1cdTAwM2V0YWdfODAyMXFfcHZpZFtwb3J0XSA9IHZpZDtcbi1cbi1cdGlmIChmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRClcbi1cdFx0dmxhbi1cdTAwM2V1bnRhZyB8PSBCSVQocG9ydCk7XG4tXG4mIzQzO1x0aW50IHJldCA9XG4mIzQzO1x0ICAgIG10NzYyOF9wb3J0X2pvaW5fdmxhbl9ibG9jayhkcywgcG9ydCwgdmlkLCBNVDc2MjhfVkxBTl9UWVBFX1VOQVdBUkUsXG4mIzQzO1x0XHRcdFx0XHRmbGFncyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHRtdDc2Mjhfdmxhbl9zeW5jKGRzKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IG10NzYyOF9kc2FfODAyMXFfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTE2IHZpZClcbiB7XG4tXHRzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtXHUwMDNlcHJpdjtcbi1cdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IE5VTEw7XG4tXHRpbnQgaTtcbiYjNDM7XHRpbnQgcmV0ID0gbXQ3NjI4X3BvcnRfbGVhdmVfdmxhbl9ibG9jayhkcywgcG9ydCwgdmlkLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIE1UNzYyOF9WTEFOX1RZUEVfVU5BV0FSRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0bXQ3NjI4X3ZsYW5fc3luYyhkcyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1UNzYyOF9OVU1fVkxBTlM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBtdDc2MjhfdmxhbiAqY2hlY2tfdmxhbiA9IFx1MDAyNmVzdy1cdTAwM2V2bGFuc1tpXTtcbiYjNDM7c3RhdGljIGludCBtdDc2MjhfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgIGJvb2wgdmxhbl9maWx0ZXJpbmcsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVx1MDAzZXByaXY7XG4gXG4tXHRcdGlmICghY2hlY2tfdmxhbi1cdTAwM2VhY3RpdmUgfHwgY2hlY2tfdmxhbi1cdTAwM2V2aWQgIT0gdmlkKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR2bGFuID0gY2hlY2tfdmxhbjtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXHRpZiAoIXZsYW4pXG4tXHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcdGlmICh2bGFuX2ZpbHRlcmluZylcbiYjNDM7XHRcdGVzdy1cdTAwM2V2bGFuX2ZpbHRlcmluZyB8PSBCSVQocG9ydCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXN3LVx1MDAzZXZsYW5fZmlsdGVyaW5nIFx1MDAyNj0gfkJJVChwb3J0KTtcbiYjNDM7XHRtdDc2Mjhfdmxhbl9zeW5jKGRzKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuIFxuLVx0aWYgKGVzdy1cdTAwM2V0YWdfODAyMXFfcHZpZFtwb3J0XSA9PSB2aWQpXG4tXHRcdGVzdy1cdTAwM2V0YWdfODAyMXFfcHZpZFtwb3J0XSA9IDA7XG4mIzQzO3N0YXRpYyBpbnQgbXQ3NjI4X3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4sXG4mIzQzO1x0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG10NzYyOF92bGFuICp2bGFuX2Jsb2NrO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqb3RoZXJfZHA7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuLVx0dmxhbi1cdTAwM2VtZW1iZXJzIFx1MDAyNj0gfkJJVChwb3J0KTtcbi1cdHZsYW4tXHUwMDNldW50YWcgXHUwMDI2PSB+QklUKHBvcnQpO1xuJiM0MztcdGlmICh2aWRfaXNfZHNhXzgwMjFxKHZsYW4tXHUwMDNldmlkKSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtSYW5nZSAzMDcyLTQwOTUgcmVzZXJ2ZWQgZm9yIGRzYV84MDIxcSBvcGVyYXRpb25cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4gXG4tXHRpZiAoIXZsYW4tXHUwMDNlbWVtYmVycykge1xuLVx0XHR2bGFuLVx1MDAzZWFjdGl2ZSA9IGZhbHNlO1xuLVx0XHR2bGFuLVx1MDAzZXZpZCA9IDA7XG4mIzQzO1x0dmxhbl9ibG9jayA9XG4mIzQzO1x0ICAgIG10NzYyOF9maW5kX3ZsYW5fYmxvY2soZHMsIHZsYW4tXHUwMDNldmlkLCBNVDc2MjhfVkxBTl9UWVBFX0FXQVJFKTtcbiYjNDM7XHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENQVSBwb3J0IGNhbiBiZSBhZGRlZCB0byBhbnkgVkxBTnMsIGJ1dCB1c2VyIHBvcnRzIG5lZWQgdG8gZW5zdXJlLFxuJiM0MztcdCAqIHRoYXQgaWYgdGhlIFZMQU4gYWxyZWFkeSBleGlzdHMgaXQmIzM5O3Mgbm90IHVzZWQgYnkgYSBicmlkZ2Ugd2UmIzM5O3JlIG5vdFxuJiM0MztcdCAqIGEgbWVtYmVyIG9mLCBiZWNhdXNlIFZMQU5zIGFyZSB0aGUgb25seSBmb3JtIG9mIGZvcndhcmRpbmcgY29udHJvbFxuJiM0MztcdCAqIHdlIGhhdmUgb24gdGhpcyBzd2l0Y2guXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHZsYW5fYmxvY2sgXHUwMDI2XHUwMDI2ICFkc2FfcG9ydF9pc19jcHUoZHApKSB7XG4mIzQzO1x0XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChvdGhlcl9kcCwgZHMpIHtcbiYjNDM7XHRcdFx0aWYgKG90aGVyX2RwID09IGRwKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRpZiAob3RoZXJfZHAtXHUwMDNlYnJpZGdlID09IGRwLVx1MDAzZWJyaWRnZSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0aWYgKCEodmxhbl9ibG9jay1cdTAwM2VtZW1iZXJzIFx1MDAyNiBCSVQob3RoZXJfZHAtXHUwMDNlaW5kZXgpKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O1ZMQU4gSUQgdXNlZCBvbiBhbm90aGVyIGJyaWRnZVwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0XHR9XG4gXHR9XG4mIzQzO1x0cmV0ID1cbiYjNDM7XHQgICAgbXQ3NjI4X3BvcnRfam9pbl92bGFuX2Jsb2NrKGRzLCBwb3J0LCB2bGFuLVx1MDAzZXZpZCxcbiYjNDM7XHRcdFx0XHRcdE1UNzYyOF9WTEFOX1RZUEVfQVdBUkUsIHZsYW4tXHUwMDNlZmxhZ3MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0bXQ3NjI4X3ZsYW5fc3luYyhkcyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbXQ3NjI4X3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gbXQ3NjI4X3BvcnRfbGVhdmVfdmxhbl9ibG9jayhkcywgcG9ydCwgdmxhbi1cdTAwM2V2aWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgTVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0bXQ3NjI4X3ZsYW5fc3luYyhkcyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgbXQ3NjI4X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRydG5sX2xvY2soKTtcbkBAIC01NTEsNiAmIzQzOzcwOCw0MCBAQCBzdGF0aWMgdm9pZCBtdDc2MjhfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0cnRubF91bmxvY2soKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG10NzYyOF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHU4IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0Ym9vbCBmb3J3YXJkX2Rpc2FibGU7XG4mIzQzO1x0Ym9vbCBsZWFybl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0Y2FzZSBCUl9TVEFURV9ESVNBQkxFRDpcbiYjNDM7XHRjYXNlIEJSX1NUQVRFX0JMT0NLSU5HOlxuJiM0MztcdGNhc2UgQlJfU1RBVEVfTElTVEVOSU5HOlxuJiM0MztcdFx0Zm9yd2FyZF9kaXNhYmxlID0gdHJ1ZTtcbiYjNDM7XHRcdGxlYXJuX2Rpc2FibGUgPSB0cnVlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUl9TVEFURV9MRUFSTklORzpcbiYjNDM7XHRcdGZvcndhcmRfZGlzYWJsZSA9IHRydWU7XG4mIzQzO1x0XHRsZWFybl9kaXNhYmxlID0gZmFsc2U7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJSX1NUQVRFX0ZPUldBUkRJTkc6XG4mIzQzO1x0XHRmb3J3YXJkX2Rpc2FibGUgPSBmYWxzZTtcbiYjNDM7XHRcdGxlYXJuX2Rpc2FibGUgPSBmYWxzZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRkZXZfZXJyKGRzLVx1MDAzZWRldiwgXCYjMzQ7aW52YWxpZCBTVFAgc3RhdGU6ICVkXFxuXCYjMzQ7LCBzdGF0ZSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZWdtYXBfYXNzaWduX2JpdHMoZXN3LVx1MDAzZXJlZ21hcCwgTVQ3NjI4X0VTV19SRUdfUE9DMSxcbiYjNDM7XHRcdFx0ICAgRklFTERfUFJFUChNVDc2MjhfRVNXX1BPQzFfUE9SVF9ESVNfTEVBUk5JTkcsXG4mIzQzO1x0XHRcdFx0ICAgICAgQklUKHBvcnQpKSwgbGVhcm5fZGlzYWJsZSk7XG4mIzQzO1x0cmVnbWFwX2Fzc2lnbl9iaXRzKGVzdy1cdTAwM2VyZWdtYXAsIE1UNzYyOF9FU1dfUkVHX1BPQzEsXG4mIzQzO1x0XHRcdCAgIEZJRUxEX1BSRVAoTVQ3NjI4X0VTV19QT0MxX1BPUlRfQkxPQ0tJTkdfU1RBVEUsXG4mIzQzO1x0XHRcdFx0ICAgICAgQklUKHBvcnQpKSwgZm9yd2FyZF9kaXNhYmxlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG10NzYyOF9zd2l0Y2hfb3BzID0ge1xuIFx0LmdldF90YWdfcHJvdG9jb2wgPSBtdDc2MjhfZ2V0X3RhZ19wcm90byxcbiBcdC5zZXR1cCA9IG10NzYyOF9zZXR1cCxcbkBAIC01NjAsNiAmIzQzOzc1MSwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG10NzYyOF9zd2l0Y2hfb3BzID0ge1xuIFx0LnBoeWxpbmtfZ2V0X2NhcHMgPSBtdDc2MjhfcGh5bGlua19nZXRfY2FwcyxcbiBcdC50YWdfODAyMXFfdmxhbl9hZGQgPSBtdDc2MjhfZHNhXzgwMjFxX3ZsYW5fYWRkLFxuIFx0LnRhZ184MDIxcV92bGFuX2RlbCA9IG10NzYyOF9kc2FfODAyMXFfdmxhbl9kZWwsXG4mIzQzO1x0LnBvcnRfYnJpZGdlX2pvaW4gPSBkc2FfdGFnXzgwMjFxX2JyaWRnZV9qb2luLFxuJiM0MztcdC5wb3J0X2JyaWRnZV9sZWF2ZSA9IGRzYV90YWdfODAyMXFfYnJpZGdlX2xlYXZlLFxuJiM0MztcdC5wb3J0X3N0cF9zdGF0ZV9zZXQgPSBtdDc2Mjhfc3RwX3N0YXRlX3NldCxcbiYjNDM7XHQucG9ydF92bGFuX2ZpbHRlcmluZyA9IG10NzYyOF9wb3J0X3ZsYW5fZmlsdGVyaW5nLFxuJiM0MztcdC5wb3J0X3ZsYW5fYWRkID0gbXQ3NjI4X3BvcnRfdmxhbl9hZGQsXG4mIzQzO1x0LnBvcnRfdmxhbl9kZWwgPSBtdDc2MjhfcG9ydF92bGFuX2RlbCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbXQ3NjI4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfbXQ3NjI4LmMgYi9uZXQvZHNhL3RhZ19tdDc2MjguY1xuaW5kZXggODBiNTBmZjA4ZTUzZi4uN2M3MWU4YjA4NjQ4MSAxMDA2NDRcbi0tLSBhL25ldC9kc2EvdGFnX210NzYyOC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL3RhZ19tdDc2MjguY1xuQEAgLTYsNiAmIzQzOzYsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kc2EvODAyMXEuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDt0YWcuaFwmIzM0O1xuQEAgLTE1LDEzICYjNDM7MTYsMTYgQEBcbiAgKiBPbiBUWCB0aGUgbG93ZXIgNiBiaXRzIGVuY29kZSB0aGUgZGVzdGluYXRpb24gcG9ydCBiaXRtYXNrLlxuICAqIE9uIFJYIHRoZSBsb3dlciAzIGJpdHMgZW5jb2RlIHRoZSBzb3VyY2UgcG9ydCBudW1iZXIuXG4gICpcbi0gKiBUaGUgc3dpdGNoIGhhcmR3YXJlIHdpbGwgbm90IG1vZGlmeSB0aGUgVFBJRCBvZiBhbiBpbmNvbWluZyBwYWNrZXQgaWYgaXQgaXNcbi0gKiBhbHJlYWR5IFZMQU4gdGFnZ2VkLiBUbyB3b3JrIGFyb3VuZCB0aGlzIHRoZSBzd2l0Y2ggaXMgY29uZmlndXJlZCB0byBhbHdheXNcbi0gKiBhcHBlbmQgYSB0YWdfODAyMXEgc3RhbmRhbG9uZSBWTEFOIHRhZyBmb3IgZWFjaCBwb3J0LiBUaGF0IG1lYW5zIHdlIGNhblxuLSAqIHNhZmVseSBzdHJpcCB0aGUgb3V0ZXIgVkxBTiB0YWcgYWZ0ZXIgcGFyc2luZyBpdC5cbiYjNDM7ICogVGhlIHN3aXRjaCBjYW4gb25seSB1c2UgVkxBTnMgZm9yIGZvcndhcmRpbmcgY29udHJvbC4gVkxBTi11bmF3YXJlIGJyaWRnZXNcbiYjNDM7ICogYXJlIHNpbXVsYXRlZCB1c2luZyB0YWdfODAyMXEgYW5kIGRvdWJsZSB0YWdnaW5nLCB3aGlsZSBWTEFOLWF3YXJlIGJyaWRnZXNcbiYjNDM7ICogdXNlIHRoZSBWTEFOcyBjb25maWd1cmVkIGJ5IHRoZSBicmlkZ2UgZGlyZWN0bHkuXG4gICpcbi0gKiBBIFZMQU4gdGFnIGlzIGNvbnN0cnVjdGVkIG9uIGVncmVzcyB0byB0YXJnZXQgdGhlIHN0YW5kYWxvbmUgVkxBTiBhbmRcbi0gKiBkZXN0aW5hdGlvbiBwb3J0LlxuJiM0MzsgKiBPbiBlZ3Jlc3MsIHRoZSB0YWdnZXIgZWl0aGVyIGFkZHMgYSBuZXcgTVQ3NjI4IHRhZyB0aGF0IGNvbnRhaW5zIHRoZVxuJiM0MzsgKiBzdGFuZGFsb25lIG9yIGJyaWRnZSB0YWdfODAyMXEgVkxBTiBhbmQgZGVzdGluYXRpb24gcG9ydCBtYXNrLCBvciBtb2RpZmllc1xuJiM0MzsgKiBhbiBleGlzdGluZyBWTEFOIHRhZyB0byBjb250YWluIHRoZSBkZXN0aW5hdGlvbiBwb3J0IG1hc2suXG4mIzQzOyAqXG4mIzQzOyAqIE9uIGluZ3Jlc3MsIHRoZSBWTEFOIHRhZyBpcyByZXN0b3JlZCBhZnRlciBzdHJpcHBpbmcgdGhlIE1UNzYyOCB0YWcsIGlmIGl0XG4mIzQzOyAqIGlzIG5vdCBhIHRhZ184MDIxcSBWTEFOLlxuICAqL1xuIFxuICNkZWZpbmUgTVQ3NjI4X1RBR19OQU1FIFwmIzM0O210NzYyOFwmIzM0O1xuQEAgLTM0LDIwICYjNDM7MzgsMzUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0dTE2IHhtaXRfdHBpZDtcbiBcdHUxNiB4bWl0X3ZsYW47XG4gXHRfX2JlMTYgKnRhZztcbiBcbiYjNDM7XHR4bWl0X3RwaWQgPVxuJiM0MztcdCAgICBFVEhfUF84MDIxUSB8IEZJRUxEX1BSRVAoTVQ3NjI4X1RBR19UWF9QT1JULFxuJiM0MztcdFx0XHRcdCAgICAgZHNhX3htaXRfcG9ydF9tYXNrKHNrYiwgZGV2KSk7XG4gXHRkcCA9IGRzYV91c2VyX3RvX3BvcnQoZGV2KTtcbi1cdHhtaXRfdmxhbiA9IGRzYV90YWdfODAyMXFfc3RhbmRhbG9uZV92aWQoZHApO1xuJiM0MztcdGlmIChza2ItXHUwMDNlb2ZmbG9hZF9md2RfbWFyayBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgYnJfdmxhbl9lbmFibGVkKGRzYV9wb3J0X2JyaWRnZV9kZXZfZ2V0KGRwKSkpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBPbiBWTEFOIGF3YXJlIHBvcnRzIG9ubHkgbW9kaWZ5IHRoZSBUUElEIHRvIGNvbnRhaW4gdGhlXG4mIzQzO1x0XHQgKiBNVDc2MjggZWdyZXNzIHBvcnQgbWV0YWRhdGEsIGluc3RlYWQgb2YgYWRkaW5nIGEgbmV3IHZsYW4gdGFnXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3R4KHNrYik7XG4mIzQzO1x0XHR0YWdbMF0gPSBodG9ucyh4bWl0X3RwaWQpO1xuJiM0MztcdFx0cmV0dXJuIHNrYjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHhtaXRfdmxhbiA9IHNrYi1cdTAwM2VvZmZsb2FkX2Z3ZF9tYXJrID9cbiYjNDM7XHQgICAgZHNhX3RhZ184MDIxcV9icmlkZ2VfdmlkKGRzYV9wb3J0X2JyaWRnZV9udW1fZ2V0KGRwKSkgOlxuJiM0MztcdCAgICBkc2FfdGFnXzgwMjFxX3N0YW5kYWxvbmVfdmlkKGRwKTtcbiBcbiBcdHNrYl9wdXNoKHNrYiwgTVQ3NjI4X1RBR19MRU4pO1xuIFx0ZHNhX2FsbG9jX2V0eXBlX2hlYWRlcihza2IsIE1UNzYyOF9UQUdfTEVOKTtcbiBcbiBcdHRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3R4KHNrYik7XG4gXG4tXHR0YWdbMF0gPSBodG9ucyhFVEhfUF84MDIxUSB8XG4tXHRcdCAgICAgICBGSUVMRF9QUkVQKE1UNzYyOF9UQUdfVFhfUE9SVCxcbi1cdFx0XHRcdCAgZHNhX3htaXRfcG9ydF9tYXNrKHNrYiwgZGV2KSkpO1xuJiM0MztcdHRhZ1swXSA9IGh0b25zKHhtaXRfdHBpZCk7XG4gXHR0YWdbMV0gPSBodG9ucyh4bWl0X3ZsYW4pO1xuIFxuIFx0cmV0dXJuIHNrYjtcbkBAIC01Niw3ICYjNDM7NzUsMTAgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm10NzYyOF90YWdfcmN2KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc291cmNlX3BvcnQ7XG4mIzQzO1x0Ym9vbCBpc19kc2FfODAyMXE7XG4gXHRfX2JlMTYgKnBoZHI7XG4mIzQzO1x0dTE2IHRjaSwgdmlkO1xuIFxuIFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgTVQ3NjI4X1RBR19MRU4pKSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbkBAIC02NCw5ICYjNDM7ODYsMjMgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fVxuIFxuIFx0cGhkciA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3J4KHNrYik7XG4tXHRza2ItXHUwMDNlZGV2ID1cbi1cdCAgICBkc2FfY29uZHVpdF9maW5kX3VzZXIoZGV2LCAwLFxuLVx0XHRcdFx0ICBGSUVMRF9HRVQoTVQ3NjI4X1RBR19SWF9QT1JULCBudG9ocygqcGhkcikpKTtcbiYjNDM7XHRzb3VyY2VfcG9ydCA9IEZJRUxEX0dFVChNVDc2MjhfVEFHX1JYX1BPUlQsIG50b2hzKCpwaGRyKSk7XG4mIzQzO1x0dGNpID0gbnRvaHMocGhkclsxXSk7XG4mIzQzO1x0dmlkID0gdGNpIFx1MDAyNiBWTEFOX1ZJRF9NQVNLO1xuJiM0MztcdGlzX2RzYV84MDIxcSA9IHZpZF9pc19kc2FfODAyMXEodmlkKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgc291cmNlIHBvcnQgaW5mbyBpcyBvbmx5IGVuY29kZWQgaW4gdGhlIFRQSUQgZmllbGQgZm9yIHBhY2tldHNcbiYjNDM7XHQgKiB3aGVyZSB0aGUgVkxBTiB0YWcgaXMgaW5zZXJ0ZWQgYnkgdGhlIFBWSUQgbWVjaGFuaXNtLiBXaXRoIFZMQU5cbiYjNDM7XHQgKiBmaWx0ZXJpbmcgZW5hYmxlZCwgVkxBTi10YWdnZWQgaW5ncmVzcyBwYWNrZXRzIGFwcGVhciBhcyBpZiB0aGV5JiMzOTtyZVxuJiM0MztcdCAqIG9yaWdpbmF0aW5nIG9uIHBvcnQgMC4gVXNlIHRoZSBWSUQgdG8gaWRlbnRpZnkgdGhlIGJyaWRnZSBwb3J0IGluXG4mIzQzO1x0ICogdGhpcyBjYXNlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzb3VyY2VfcG9ydCA9PSAwIFx1MDAyNlx1MDAyNiAhaXNfZHNhXzgwMjFxKVxuJiM0MztcdFx0c2tiLVx1MDAzZWRldiA9IGRzYV9maW5kX2Rlc2lnbmF0ZWRfYnJpZGdlX3BvcnRfYnlfdmlkKGRldiwgdmlkKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRza2ItXHUwMDNlZGV2ID0gZHNhX2NvbmR1aXRfZmluZF91c2VyKGRldiwgMCwgc291cmNlX3BvcnQpO1xuJiM0MztcbiBcdGlmICghc2tiLVx1MDAzZWRldikge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtNzUsNiAmIzQzOzExMSwxMCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm10NzYyOF90YWdfcmN2KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRza2JfcHVsbF9yY3N1bShza2IsIE1UNzYyOF9UQUdfTEVOKTtcbiBcdGRzYV9zdHJpcF9ldHlwZV9oZWFkZXIoc2tiLCBNVDc2MjhfVEFHX0xFTik7XG4gXHRkc2FfZGVmYXVsdF9vZmZsb2FkX2Z3ZF9tYXJrKHNrYik7XG4mIzQzO1xuJiM0MztcdGlmICghaXNfZHNhXzgwMjFxKVxuJiM0MztcdFx0X192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIGh0b25zKEVUSF9QXzgwMjFRKSwgdGNpKTtcbiYjNDM7XG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBNQUlOVEFJTkVSUywgdGhlIE1lZGlhVGVrIE1UNzYyOCBTb0MgZW1iZWRkZWQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzYyOC5jKSwgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWcgZHJpdmVyIChuZXQvZHNhL3RhZ19tdDc2MjguYykuIE1UNzYyOCBpcyBhIHBsYXRmb3JtL1NvQy1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZm9yIE1JUFMtYmFzZWQgTWVkaWFUZWsgU29DcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldmljZSBjYW5ub3QgcHJvYmUgYW5kIHRoZSB0YWcgcHJvdG9jb2wgaXMgb25seSB1c2VkIGJ5IHRoaXMgc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDRiNzE2YjFhOWZhNjE5MTBjZGQ4MTYzMjJmMjg4MDA1OGY0M2M5OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDE6NTI6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGIyM2ZiNmYyZjRlZjQuLjk1ZTM2MWY1ZDBlZGUgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xNjc4MSw2ICYjNDM7MTY3ODEsMTUgQEAgUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy9tZWRpYXRlayxtdDc2MjEtaTJjLnlhbWwKIEY6CWRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXQ3NjIxLmMKIAomIzQzO01FRElBVEVLIE1UNzYyOCBTV0lUQ0ggRFJJVkVSCiYjNDM7TToJSm9yaXMgVmFpc3ZpbGEgJmx0O2pvZXlAdGlueWlzci5jb20mZ3Q7CiYjNDM7TDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwomIzQzO1M6CU1haW50YWluZWQKJiM0MztGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc2MjgtZXN3LnlhbWwKJiM0MztGOglkcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMKJiM0MztGOglkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWZlLXNvYy5jCiYjNDM7RjoJbmV0L2RzYS90YWdfbXQ3NjI4LmMKJiM0MzsKIE1FRElBVEVLIE1UTUlQUyBDTE9DSyBEUklWRVIKIE06CVNlcmdpbyBQYXJhY3VlbGxvcyAmbHQ7c2VyZ2lvLnBhcmFjdWVsbG9zQGdtYWlsLmNvbSZndDsKIFM6CU1haW50YWluZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguYyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguYwppbmRleCBmYjYzZjZmNjQ0YjllLi42MjlkYmY5NjhhMTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL210NzYyOC5jCkBAIC0zNCw2ICYjNDM7MzQsNyBAQAogI2RlZmluZSBNVDc2MjhfRVNXX1JFR19WVUIodmxhbikgKDB4MTAwICYjNDM7IDQgKiAoKHZsYW4pIC8gNCkpCiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1NPQ1BDIDB4OGMKICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfUE9DMCAweDkwCiYjNDM7I2RlZmluZSBNVDc2MjhfRVNXX1JFR19QT0MxIDB4OTQKICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfUE9DMiAweDk4CiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1NHQyAweDljCiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1BDUjAgMHhjMApAQCAtOTIsNiAmIzQzOzkzLDkgQEAKIAogI2RlZmluZSBNVDc2MjhfRVNXX1BPQzBfUE9SVF9ESVNBQkxFIEdFTk1BU0soMjksIDIzKQogCiYjNDM7I2RlZmluZSBNVDc2MjhfRVNXX1BPQzFfUE9SVF9CTE9DS0lOR19TVEFURSBHRU5NQVNLKDIyLCAxNikKJiM0MzsjZGVmaW5lIE1UNzYyOF9FU1dfUE9DMV9QT1JUX0RJU19MRUFSTklORyBHRU5NQVNLKDE0LCA4KQomIzQzOwogI2RlZmluZSBNVDc2MjhfRVNXX1BPQzJfUEVSX1ZMQU5fVU5UQUdfRU4gQklUKDE1KQogCiAjZGVmaW5lIE1UNzYyOF9FU1dfU0dDX0FHSU5HX0lOVEVSVkFMIEdFTk1BU0soMywgMCkKQEAgLTEzOCw2ICYjNDM7MTQyLDcgQEAKICNkZWZpbmUgTVQ3NjI4X0VTV19QT1JUU19DUFUgQklUKDYpCiAjZGVmaW5lIE1UNzYyOF9FU1dfUE9SVFNfQUxMIEdFTk1BU0soNiwgMCkKIAomIzQzOyNkZWZpbmUgTVQ3NjI4X0VTV19OVU1fVVNFUl9QT1JUUyA1CiAjZGVmaW5lIE1UNzYyOF9FU1dfTlVNX1BPUlRTIDcKICNkZWZpbmUgTVQ3NjI4X05VTV9WTEFOUyAxNgogCkBAIC0xNTEsOCAmIzQzOzE1NiwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgbXQ3NjI4X2Vzd19yZWdtYXBfY2ZnID0gewogCS52YWxfZm9ybWF0X2VuZGlhbiA9IFJFR01BUF9FTkRJQU5fTElUVExFLAogfTsKIAomIzQzO2VudW0gewomIzQzOwlNVDc2MjhfVkxBTl9UWVBFX0FXQVJFLAomIzQzOwlNVDc2MjhfVkxBTl9UWVBFX1VOQVdBUkUsCiYjNDM7CU1UNzYyOF9WTEFOX1RZUEVfTlVNLAomIzQzO307CiYjNDM7CiBzdHJ1Y3QgbXQ3NjI4X3ZsYW4gewotCWJvb2wgYWN0aXZlOwomIzQzOwl1bnNpZ25lZCBpbnQgdHlwZTsKIAl1OCBtZW1iZXJzOwogCXU4IHVudGFnOwogCXUxNiB2aWQ7CkBAIC0xNjMsOSAmIzQzOzE3NCwxMCBAQCBzdHJ1Y3QgbXQ3NjI4X2VzdyB7CiAJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdF9lc3c7CiAJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwogCXN0cnVjdCBkc2Ffc3dpdGNoICpkczsKLQl1MTYgdGFnXzgwMjFxX3B2aWRbTVQ3NjI4X0VTV19OVU1fUE9SVFNdOwomIzQzOwl1MTYgcHZpZFtNVDc2MjhfVkxBTl9UWVBFX05VTV1bTVQ3NjI4X0VTV19OVU1fUE9SVFNdOwogCXN0cnVjdCBtdDc2MjhfdmxhbiB2bGFuc1tNVDc2MjhfTlVNX1ZMQU5TXTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiYjNDM7CXU4IHZsYW5fZmlsdGVyaW5nOwogfTsKIAogc3RhdGljIGludCBtdDc2MjhfbWlpX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0pCkBAIC0zODMsMjEgJiM0MzszOTUsMTI3IEBAIHN0YXRpYyB2b2lkIG10NzYyOF9lc3dfc2V0X3Z1YihzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3LCB1bnNpZ25lZCBpbnQgdmxhbiwKIAkJCSAgIE1UNzYyOF9FU1dfVlVCX1BSRVAodmxhbiwgdnViKSk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IG10NzYyOF92bGFuICptdDc2MjhfZmluZF92bGFuX2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKJiM0MzsJCQkJCQkgIHUxNiB2aWQsIHVuc2lnbmVkIGludCB0eXBlKQomIzQzO3sKJiM0MzsJc3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW47CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTVQ3NjI4X05VTV9WTEFOUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXZsYW4gPSAmYW1wO2Vzdy0mZ3Q7dmxhbnNbaV07CiYjNDM7CQlpZiAodmxhbi0mZ3Q7dmlkID09IHZpZCAmYW1wOyZhbXA7IHZsYW4tJmd0O3R5cGUgPT0gdHlwZSkKJiM0MzsJCQlyZXR1cm4gdmxhbjsKJiM0MzsJfQomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBtdDc2MjhfdmxhbiAqbXQ3NjI4X2FsbG9jX3ZsYW5fYmxvY2soc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCQkJCSAgIHUxNiB2aWQsIHVuc2lnbmVkIGludCB0eXBlKQomIzQzO3sKJiM0MzsJc3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW47CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTVQ3NjI4X05VTV9WTEFOUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXZsYW4gPSAmYW1wO2Vzdy0mZ3Q7dmxhbnNbaV07CiYjNDM7CQlpZiAodmxhbi0mZ3Q7dmlkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKHZsYW4tJmd0O3R5cGUgIT0gdHlwZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXZsYW4tJmd0O3ZpZCA9IHZpZDsKJiM0MzsJCXJldHVybiB2bGFuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG10NzYyOF9wb3J0X2pvaW5fdmxhbl9ibG9jayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MTYgdmlkLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgaW50IHR5cGUsIHUxNiBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IG10NzYyOF9maW5kX3ZsYW5fYmxvY2soZHMsIHZpZCwgdHlwZSk7CiYjNDM7CXN0cnVjdCBtdDc2MjhfZXN3ICplc3cgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKCF2bGFuKQomIzQzOwkJdmxhbiA9IG10NzYyOF9hbGxvY192bGFuX2Jsb2NrKGRzLCB2aWQsIHR5cGUpOwomIzQzOwomIzQzOwlpZiAoIXZsYW4pCiYjNDM7CQlyZXR1cm4gLUVOT1NQQzsKJiM0MzsKJiM0MzsJdmxhbi0mZ3Q7bWVtYmVycyB8PSBCSVQocG9ydCk7CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBCUklER0VfVkxBTl9JTkZPX1BWSUQpCiYjNDM7CQllc3ctJmd0O3B2aWRbdHlwZV1bcG9ydF0gPSB2aWQ7CiYjNDM7CWVsc2UgaWYgKGVzdy0mZ3Q7cHZpZFt0eXBlXVtwb3J0XSA9PSB2aWQpCiYjNDM7CQllc3ctJmd0O3B2aWRbdHlwZV1bcG9ydF0gPSAwOwomIzQzOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRCkKJiM0MzsJCXZsYW4tJmd0O3VudGFnIHw9IEJJVChwb3J0KTsKJiM0MzsJZWxzZQomIzQzOwkJdmxhbi0mZ3Q7dW50YWcgJmFtcDs9IH5CSVQocG9ydCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG10NzYyOF9wb3J0X2xlYXZlX3ZsYW5fYmxvY2soc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkJCXUxNiB2aWQsIHVuc2lnbmVkIGludCB0eXBlKQomIzQzO3sKJiM0MzsJc3RydWN0IG10NzYyOF92bGFuICp2bGFuID0gbXQ3NjI4X2ZpbmRfdmxhbl9ibG9jayhkcywgdmlkLCB0eXBlKTsKJiM0MzsJc3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAoIXZsYW4pCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJaWYgKGVzdy0mZ3Q7cHZpZFt0eXBlXVtwb3J0XSA9PSB2aWQpCiYjNDM7CQllc3ctJmd0O3B2aWRbdHlwZV1bcG9ydF0gPSAwOwomIzQzOwl2bGFuLSZndDttZW1iZXJzICZhbXA7PSB+QklUKHBvcnQpOwomIzQzOwl2bGFuLSZndDt1bnRhZyAmYW1wOz0gfkJJVChwb3J0KTsKJiM0MzsJLyoKJiM0MzsJICogRnJlZSB0aGUgdmxhbiBpZiB3ZSYjMzk7cmUgdGhlIGxhc3QgbWVtYmVyIG9mIGl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKCF2bGFuLSZndDttZW1iZXJzKQomIzQzOwkJdmxhbi0mZ3Q7dmlkID0gMDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbXQ3NjI4X3ZsYW5fc3luYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiB7CiAJc3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE1UNzYyOF9OVU1fVkxBTlM7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9ICZhbXA7ZXN3LSZndDt2bGFuc1tpXTsKJiM0MzsJCXU4IG1lbWJlcl9tYXNrOwomIzQzOwomIzQzOwkJaWYgKHZsYW4tJmd0O3R5cGUgPT0gTVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSkKJiM0MzsJCQltZW1iZXJfbWFzayA9IGVzdy0mZ3Q7dmxhbl9maWx0ZXJpbmc7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWVtYmVyX21hc2sgPSB+ZXN3LSZndDt2bGFuX2ZpbHRlcmluZzsKJiM0MzsJCW1lbWJlcl9tYXNrIHw9IE1UNzYyOF9FU1dfUE9SVFNfQ1BVOwomIzQzOwkJLyoKJiM0MzsJCSAqIFB1dCBWTEFOIGZpbHRlcmluZyBwb3J0cyBvbmx5IGludG8gVkxBTiBhd2FyZSBWTEFOcyBhbmQKJiM0MzsJCSAqIG5vbiBWTEFOIGZpbHRlcmluZyBwb3J0cyBpbnRvIFZMQU4gdW5hd2FyZSBWTEFOcy4KJiM0MzsJCSAqCiYjNDM7CQkgKiBDUFUgbWF5IG5vdCBiZSByZW1vdmVkIGZyb20gYW55IFZMQU4sIGFzIFZMQU4gZmlsdGVyaW5nCiYjNDM7CQkgKiBhcHBsaWVzIG9ubHkgdG8gdXNlciBwb3J0cy4KJiM0MzsJCSAqLwogCi0JCW10NzYyOF9lc3dfc2V0X3Ztc2MoZXN3LCBpLCB2bGFuLSZndDttZW1iZXJzKTsKIAkJbXQ3NjI4X2Vzd19zZXRfdmxhbl9pZChlc3csIGksIHZsYW4tJmd0O3ZpZCk7Ci0JCW10NzYyOF9lc3dfc2V0X3Z1Yihlc3csIGksIHZsYW4tJmd0O3VudGFnKTsKJiM0MzsJCW10NzYyOF9lc3dfc2V0X3Ztc2MoZXN3LCBpLCB2bGFuLSZndDttZW1iZXJzICZhbXA7IG1lbWJlcl9tYXNrKTsKJiM0MzsJCW10NzYyOF9lc3dfc2V0X3Z1Yihlc3csIGksIHZsYW4tJmd0O3VudGFnICZhbXA7IG1lbWJlcl9tYXNrKTsKJiM0MzsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgZHMtJmd0O251bV9wb3J0czsgaSYjNDM7JiM0MzspCi0JCW10NzYyOF9lc3dfc2V0X3B2aWQoZXN3LCBpLCBlc3ctJmd0O3RhZ184MDIxcV9wdmlkW2ldKTsKJiM0MzsJZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIGRzKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgdHlwZSA9IEJJVChkcC0mZ3Q7aW5kZXgpICZhbXA7IGVzdy0mZ3Q7dmxhbl9maWx0ZXJpbmcgPwomIzQzOwkJICAgIE1UNzYyOF9WTEFOX1RZUEVfQVdBUkUgOiBNVDc2MjhfVkxBTl9UWVBFX1VOQVdBUkU7CiYjNDM7CQltdDc2MjhfZXN3X3NldF9wdmlkKGVzdywgZHAtJmd0O2luZGV4LCBlc3ctJmd0O3B2aWRbdHlwZV1bZHAtJmd0O2luZGV4XSk7CiYjNDM7CX0KJiM0MzsJcmVnbWFwX3VwZGF0ZV9iaXRzKGVzdy0mZ3Q7cmVnbWFwLCBNVDc2MjhfRVNXX1JFR19TR0MyLAomIzQzOwkJCSAgIE1UNzYyOF9FU1dfU0dDMl9ET1VCTEVfVEFHX0VOLAomIzQzOwkJCSAgIEZJRUxEX1BSRVAoTVQ3NjI4X0VTV19TR0MyX0RPVUJMRV9UQUdfRU4sCiYjNDM7CQkJCSAgICAgIE1UNzYyOF9FU1dfUE9SVFNfTk9DUFUgJmFtcDsKJiM0MzsJCQkJICAgICAgfmVzdy0mZ3Q7dmxhbl9maWx0ZXJpbmcpKTsKIH0KIAogc3RhdGljIGludCBtdDc2Mjhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQpAQCAtNDI1LDYgJiM0Mzs1NDMsMTkgQEAgc3RhdGljIGludCBtdDc2Mjhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogRGVkaWNhdGUgdGhlIGZpcnN0IG51bV91c2VyX3BvcnRzICYjNDM7IDEgVkxBTiBzbG90cyBmb3IgdGFnXzgwMjFxLgomIzQzOwkgKiBTaW5jZSBicmlkZ2VzIGFyZSBvbmx5IG9mZmxvYWRlZCB3aGVuIHRoZXkgaGF2ZSBhdCBsZWFzdCBvbmUgbWVtYmVyCiYjNDM7CSAqIHBvcnQsIHRoZSB3b3JzdCBjYXNlIGVudHJ5IHJlcXVpcmVtZW50IGlzIDEgcGVyIHBvcnQuIFRoZSBleHRyYSBzbG90CiYjNDM7CSAqIGlzIG5lZWRlZCBiZWNhdXNlIHdoZW4gY2hhbmdpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIHRhZ184MDIxcSBhZGRzIGEKJiM0MzsJICogbmV3IFZMQU4gYmVmb3JlIHJlbW92aW5nIHRoZSBvbGQgb25lLiBUaGUgcmVzdCBvZiB0aGUgVkxBTiBzbG90cyBjYW4KJiM0MzsJICogYmUgdXNlZCBmb3IgZmlsdGVyaW5nLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBNVDc2MjhfRVNXX05VTV9VU0VSX1BPUlRTICYjNDM7IDE7IGkmIzQzOyYjNDM7KQomIzQzOwkJZXN3LSZndDt2bGFuc1tpXS50eXBlID0gTVQ3NjI4X1ZMQU5fVFlQRV9VTkFXQVJFOwomIzQzOwomIzQzOwlkcy0mZ3Q7bWF4X251bV9icmlkZ2VzID0gRFNBX1RBR184MDIxUV9NQVhfTlVNX0JSSURHRVM7CiYjNDM7CiAJcnRubF9sb2NrKCk7CiAJcmV0ID0gZHNhX3RhZ184MDIxcV9yZWdpc3RlcihkcywgaHRvbnMoRVRIX1BfODAyMVEpKTsKIAlydG5sX3VubG9jaygpOwpAQCAtNDc5LDcxICYjNDM7NjEwLDk3IEBAIHN0YXRpYyB2b2lkIG10NzYyOF9waHlsaW5rX2dldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiBzdGF0aWMgaW50IG10NzYyOF9kc2FfODAyMXFfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJCQkgICAgIHUxNiB2aWQsIHUxNiBmbGFncykKIHsKLQlzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtJmd0O3ByaXY7Ci0Jc3RydWN0IG10NzYyOF92bGFuICp2bGFuID0gTlVMTDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBNVDc2MjhfTlVNX1ZMQU5TOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKmNoZWNrX3ZsYW4gPSAmYW1wO2Vzdy0mZ3Q7dmxhbnNbaV07Ci0KLQkJaWYgKCFjaGVja192bGFuLSZndDthY3RpdmUgJmFtcDsmYW1wOyAhdmxhbikKLQkJCXZsYW4gPSBjaGVja192bGFuOwotCi0JCWlmIChjaGVja192bGFuLSZndDthY3RpdmUgJmFtcDsmYW1wOyBjaGVja192bGFuLSZndDt2aWQgPT0gdmlkKSB7Ci0JCQl2bGFuID0gY2hlY2tfdmxhbjsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCF2bGFuKQotCQlyZXR1cm4gLUVOT1NQQzsKLQotCXZsYW4tJmd0O3ZpZCA9IHZpZDsKLQl2bGFuLSZndDthY3RpdmUgPSB0cnVlOwotCXZsYW4tJmd0O21lbWJlcnMgfD0gQklUKHBvcnQpOwotCi0JaWYgKGZsYWdzICZhbXA7IEJSSURHRV9WTEFOX0lORk9fUFZJRCkKLQkJZXN3LSZndDt0YWdfODAyMXFfcHZpZFtwb3J0XSA9IHZpZDsKLQotCWlmIChmbGFncyAmYW1wOyBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEKQotCQl2bGFuLSZndDt1bnRhZyB8PSBCSVQocG9ydCk7Ci0KJiM0MzsJaW50IHJldCA9CiYjNDM7CSAgICBtdDc2MjhfcG9ydF9qb2luX3ZsYW5fYmxvY2soZHMsIHBvcnQsIHZpZCwgTVQ3NjI4X1ZMQU5fVFlQRV9VTkFXQVJFLAomIzQzOwkJCQkJZmxhZ3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKIAltdDc2Mjhfdmxhbl9zeW5jKGRzKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBtdDc2MjhfZHNhXzgwMjFxX3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHUxNiB2aWQpCiB7Ci0Jc3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLSZndDtwcml2OwotCXN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IE5VTEw7Ci0JaW50IGk7CiYjNDM7CWludCByZXQgPSBtdDc2MjhfcG9ydF9sZWF2ZV92bGFuX2Jsb2NrKGRzLCBwb3J0LCB2aWQsCiYjNDM7CQkJCQkgICAgICAgTVQ3NjI4X1ZMQU5fVFlQRV9VTkFXQVJFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CW10NzYyOF92bGFuX3N5bmMoZHMpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgTVQ3NjI4X05VTV9WTEFOUzsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IG10NzYyOF92bGFuICpjaGVja192bGFuID0gJmFtcDtlc3ctJmd0O3ZsYW5zW2ldOwomIzQzO3N0YXRpYyBpbnQgbXQ3NjI4X3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkJICAgICAgYm9vbCB2bGFuX2ZpbHRlcmluZywKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLSZndDtwcml2OwogCi0JCWlmICghY2hlY2tfdmxhbi0mZ3Q7YWN0aXZlIHx8IGNoZWNrX3ZsYW4tJmd0O3ZpZCAhPSB2aWQpCi0JCQljb250aW51ZTsKLQkJdmxhbiA9IGNoZWNrX3ZsYW47Ci0JCWJyZWFrOwotCX0KLQlpZiAoIXZsYW4pCi0JCXJldHVybiAtRU5PRU5UOwomIzQzOwlpZiAodmxhbl9maWx0ZXJpbmcpCiYjNDM7CQllc3ctJmd0O3ZsYW5fZmlsdGVyaW5nIHw9IEJJVChwb3J0KTsKJiM0MzsJZWxzZQomIzQzOwkJZXN3LSZndDt2bGFuX2ZpbHRlcmluZyAmYW1wOz0gfkJJVChwb3J0KTsKJiM0MzsJbXQ3NjI4X3ZsYW5fc3luYyhkcyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KIAotCWlmIChlc3ctJmd0O3RhZ184MDIxcV9wdmlkW3BvcnRdID09IHZpZCkKLQkJZXN3LSZndDt0YWdfODAyMXFfcHZpZFtwb3J0XSA9IDA7CiYjNDM7c3RhdGljIGludCBtdDc2MjhfcG9ydF92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCQljb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4sCiYjNDM7CQkJCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbl9ibG9jazsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpvdGhlcl9kcDsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsJaW50IHJldDsKIAotCXZsYW4tJmd0O21lbWJlcnMgJmFtcDs9IH5CSVQocG9ydCk7Ci0Jdmxhbi0mZ3Q7dW50YWcgJmFtcDs9IH5CSVQocG9ydCk7CiYjNDM7CWlmICh2aWRfaXNfZHNhXzgwMjFxKHZsYW4tJmd0O3ZpZCkpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7UmFuZ2UgMzA3Mi00MDk1IHJlc2VydmVkIGZvciBkc2FfODAyMXEgb3BlcmF0aW9uJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsJfQogCi0JaWYgKCF2bGFuLSZndDttZW1iZXJzKSB7Ci0JCXZsYW4tJmd0O2FjdGl2ZSA9IGZhbHNlOwotCQl2bGFuLSZndDt2aWQgPSAwOwomIzQzOwl2bGFuX2Jsb2NrID0KJiM0MzsJICAgIG10NzYyOF9maW5kX3ZsYW5fYmxvY2soZHMsIHZsYW4tJmd0O3ZpZCwgTVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSk7CiYjNDM7CWRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpOwomIzQzOwkvKgomIzQzOwkgKiBDUFUgcG9ydCBjYW4gYmUgYWRkZWQgdG8gYW55IFZMQU5zLCBidXQgdXNlciBwb3J0cyBuZWVkIHRvIGVuc3VyZSwKJiM0MzsJICogdGhhdCBpZiB0aGUgVkxBTiBhbHJlYWR5IGV4aXN0cyBpdCYjMzk7cyBub3QgdXNlZCBieSBhIGJyaWRnZSB3ZSYjMzk7cmUgbm90CiYjNDM7CSAqIGEgbWVtYmVyIG9mLCBiZWNhdXNlIFZMQU5zIGFyZSB0aGUgb25seSBmb3JtIG9mIGZvcndhcmRpbmcgY29udHJvbAomIzQzOwkgKiB3ZSBoYXZlIG9uIHRoaXMgc3dpdGNoLgomIzQzOwkgKi8KJiM0MzsJaWYgKHZsYW5fYmxvY2sgJmFtcDsmYW1wOyAhZHNhX3BvcnRfaXNfY3B1KGRwKSkgewomIzQzOwkJZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQob3RoZXJfZHAsIGRzKSB7CiYjNDM7CQkJaWYgKG90aGVyX2RwID09IGRwKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlpZiAob3RoZXJfZHAtJmd0O2JyaWRnZSA9PSBkcC0mZ3Q7YnJpZGdlKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlpZiAoISh2bGFuX2Jsb2NrLSZndDttZW1iZXJzICZhbXA7IEJJVChvdGhlcl9kcC0mZ3Q7aW5kZXgpKSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICYjMzQ7VkxBTiBJRCB1c2VkIG9uIGFub3RoZXIgYnJpZGdlJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUJVU1k7CiYjNDM7CQl9CiAJfQomIzQzOwlyZXQgPQomIzQzOwkgICAgbXQ3NjI4X3BvcnRfam9pbl92bGFuX2Jsb2NrKGRzLCBwb3J0LCB2bGFuLSZndDt2aWQsCiYjNDM7CQkJCQlNVDc2MjhfVkxBTl9UWVBFX0FXQVJFLCB2bGFuLSZndDtmbGFncyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJbXQ3NjI4X3ZsYW5fc3luYyhkcyk7CiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG10NzYyOF9wb3J0X3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSBtdDc2MjhfcG9ydF9sZWF2ZV92bGFuX2Jsb2NrKGRzLCBwb3J0LCB2bGFuLSZndDt2aWQsCiYjNDM7CQkJCQkgICAgICAgTVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwltdDc2Mjhfdmxhbl9zeW5jKGRzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbXQ3NjI4X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKIAlydG5sX2xvY2soKTsKQEAgLTU1MSw2ICYjNDM7NzA4LDQwIEBAIHN0YXRpYyB2b2lkIG10NzYyOF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJcnRubF91bmxvY2soKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG10NzYyOF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHU4IHN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLSZndDtwcml2OwomIzQzOwlib29sIGZvcndhcmRfZGlzYWJsZTsKJiM0MzsJYm9vbCBsZWFybl9kaXNhYmxlOwomIzQzOwomIzQzOwlzd2l0Y2ggKHN0YXRlKSB7CiYjNDM7CWNhc2UgQlJfU1RBVEVfRElTQUJMRUQ6CiYjNDM7CWNhc2UgQlJfU1RBVEVfQkxPQ0tJTkc6CiYjNDM7CWNhc2UgQlJfU1RBVEVfTElTVEVOSU5HOgomIzQzOwkJZm9yd2FyZF9kaXNhYmxlID0gdHJ1ZTsKJiM0MzsJCWxlYXJuX2Rpc2FibGUgPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlJfU1RBVEVfTEVBUk5JTkc6CiYjNDM7CQlmb3J3YXJkX2Rpc2FibGUgPSB0cnVlOwomIzQzOwkJbGVhcm5fZGlzYWJsZSA9IGZhbHNlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlJfU1RBVEVfRk9SV0FSRElORzoKJiM0MzsJCWZvcndhcmRfZGlzYWJsZSA9IGZhbHNlOwomIzQzOwkJbGVhcm5fZGlzYWJsZSA9IGZhbHNlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlkZXZfZXJyKGRzLSZndDtkZXYsICYjMzQ7aW52YWxpZCBTVFAgc3RhdGU6ICVkXG4mIzM0Oywgc3RhdGUpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlZ21hcF9hc3NpZ25fYml0cyhlc3ctJmd0O3JlZ21hcCwgTVQ3NjI4X0VTV19SRUdfUE9DMSwKJiM0MzsJCQkgICBGSUVMRF9QUkVQKE1UNzYyOF9FU1dfUE9DMV9QT1JUX0RJU19MRUFSTklORywKJiM0MzsJCQkJICAgICAgQklUKHBvcnQpKSwgbGVhcm5fZGlzYWJsZSk7CiYjNDM7CXJlZ21hcF9hc3NpZ25fYml0cyhlc3ctJmd0O3JlZ21hcCwgTVQ3NjI4X0VTV19SRUdfUE9DMSwKJiM0MzsJCQkgICBGSUVMRF9QUkVQKE1UNzYyOF9FU1dfUE9DMV9QT1JUX0JMT0NLSU5HX1NUQVRFLAomIzQzOwkJCQkgICAgICBCSVQocG9ydCkpLCBmb3J3YXJkX2Rpc2FibGUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXQ3NjI4X3N3aXRjaF9vcHMgPSB7CiAJLmdldF90YWdfcHJvdG9jb2wgPSBtdDc2MjhfZ2V0X3RhZ19wcm90bywKIAkuc2V0dXAgPSBtdDc2Mjhfc2V0dXAsCkBAIC01NjAsNiAmIzQzOzc1MSwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG10NzYyOF9zd2l0Y2hfb3BzID0gewogCS5waHlsaW5rX2dldF9jYXBzID0gbXQ3NjI4X3BoeWxpbmtfZ2V0X2NhcHMsCiAJLnRhZ184MDIxcV92bGFuX2FkZCA9IG10NzYyOF9kc2FfODAyMXFfdmxhbl9hZGQsCiAJLnRhZ184MDIxcV92bGFuX2RlbCA9IG10NzYyOF9kc2FfODAyMXFfdmxhbl9kZWwsCiYjNDM7CS5wb3J0X2JyaWRnZV9qb2luID0gZHNhX3RhZ184MDIxcV9icmlkZ2Vfam9pbiwKJiM0MzsJLnBvcnRfYnJpZGdlX2xlYXZlID0gZHNhX3RhZ184MDIxcV9icmlkZ2VfbGVhdmUsCiYjNDM7CS5wb3J0X3N0cF9zdGF0ZV9zZXQgPSBtdDc2Mjhfc3RwX3N0YXRlX3NldCwKJiM0MzsJLnBvcnRfdmxhbl9maWx0ZXJpbmcgPSBtdDc2MjhfcG9ydF92bGFuX2ZpbHRlcmluZywKJiM0MzsJLnBvcnRfdmxhbl9hZGQgPSBtdDc2MjhfcG9ydF92bGFuX2FkZCwKJiM0MzsJLnBvcnRfdmxhbl9kZWwgPSBtdDc2MjhfcG9ydF92bGFuX2RlbCwKIH07CiAKIHN0YXRpYyBpbnQgbXQ3NjI4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19tdDc2MjguYyBiL25ldC9kc2EvdGFnX210NzYyOC5jCmluZGV4IDgwYjUwZmYwOGU1M2YuLjdjNzFlOGIwODY0ODEgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdGFnX210NzYyOC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdGFnX210NzYyOC5jCkBAIC02LDYgJiM0Mzs2LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aGVyZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZHNhLzgwMjFxLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZHNhLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7dGFnLmgmIzM0OwpAQCAtMTUsMTMgJiM0MzsxNiwxNiBAQAogICogT24gVFggdGhlIGxvd2VyIDYgYml0cyBlbmNvZGUgdGhlIGRlc3RpbmF0aW9uIHBvcnQgYml0bWFzay4KICAqIE9uIFJYIHRoZSBsb3dlciAzIGJpdHMgZW5jb2RlIHRoZSBzb3VyY2UgcG9ydCBudW1iZXIuCiAgKgotICogVGhlIHN3aXRjaCBoYXJkd2FyZSB3aWxsIG5vdCBtb2RpZnkgdGhlIFRQSUQgb2YgYW4gaW5jb21pbmcgcGFja2V0IGlmIGl0IGlzCi0gKiBhbHJlYWR5IFZMQU4gdGFnZ2VkLiBUbyB3b3JrIGFyb3VuZCB0aGlzIHRoZSBzd2l0Y2ggaXMgY29uZmlndXJlZCB0byBhbHdheXMKLSAqIGFwcGVuZCBhIHRhZ184MDIxcSBzdGFuZGFsb25lIFZMQU4gdGFnIGZvciBlYWNoIHBvcnQuIFRoYXQgbWVhbnMgd2UgY2FuCi0gKiBzYWZlbHkgc3RyaXAgdGhlIG91dGVyIFZMQU4gdGFnIGFmdGVyIHBhcnNpbmcgaXQuCiYjNDM7ICogVGhlIHN3aXRjaCBjYW4gb25seSB1c2UgVkxBTnMgZm9yIGZvcndhcmRpbmcgY29udHJvbC4gVkxBTi11bmF3YXJlIGJyaWRnZXMKJiM0MzsgKiBhcmUgc2ltdWxhdGVkIHVzaW5nIHRhZ184MDIxcSBhbmQgZG91YmxlIHRhZ2dpbmcsIHdoaWxlIFZMQU4tYXdhcmUgYnJpZGdlcwomIzQzOyAqIHVzZSB0aGUgVkxBTnMgY29uZmlndXJlZCBieSB0aGUgYnJpZGdlIGRpcmVjdGx5LgogICoKLSAqIEEgVkxBTiB0YWcgaXMgY29uc3RydWN0ZWQgb24gZWdyZXNzIHRvIHRhcmdldCB0aGUgc3RhbmRhbG9uZSBWTEFOIGFuZAotICogZGVzdGluYXRpb24gcG9ydC4KJiM0MzsgKiBPbiBlZ3Jlc3MsIHRoZSB0YWdnZXIgZWl0aGVyIGFkZHMgYSBuZXcgTVQ3NjI4IHRhZyB0aGF0IGNvbnRhaW5zIHRoZQomIzQzOyAqIHN0YW5kYWxvbmUgb3IgYnJpZGdlIHRhZ184MDIxcSBWTEFOIGFuZCBkZXN0aW5hdGlvbiBwb3J0IG1hc2ssIG9yIG1vZGlmaWVzCiYjNDM7ICogYW4gZXhpc3RpbmcgVkxBTiB0YWcgdG8gY29udGFpbiB0aGUgZGVzdGluYXRpb24gcG9ydCBtYXNrLgomIzQzOyAqCiYjNDM7ICogT24gaW5ncmVzcywgdGhlIFZMQU4gdGFnIGlzIHJlc3RvcmVkIGFmdGVyIHN0cmlwcGluZyB0aGUgTVQ3NjI4IHRhZywgaWYgaXQKJiM0MzsgKiBpcyBub3QgYSB0YWdfODAyMXEgVkxBTi4KICAqLwogCiAjZGVmaW5lIE1UNzYyOF9UQUdfTkFNRSAmIzM0O210NzYyOCYjMzQ7CkBAIC0zNCwyMCAmIzQzOzM4LDM1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXQ3NjI4X3RhZ194bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsJdTE2IHhtaXRfdHBpZDsKIAl1MTYgeG1pdF92bGFuOwogCV9fYmUxNiAqdGFnOwogCiYjNDM7CXhtaXRfdHBpZCA9CiYjNDM7CSAgICBFVEhfUF84MDIxUSB8IEZJRUxEX1BSRVAoTVQ3NjI4X1RBR19UWF9QT1JULAomIzQzOwkJCQkgICAgIGRzYV94bWl0X3BvcnRfbWFzayhza2IsIGRldikpOwogCWRwID0gZHNhX3VzZXJfdG9fcG9ydChkZXYpOwotCXhtaXRfdmxhbiA9IGRzYV90YWdfODAyMXFfc3RhbmRhbG9uZV92aWQoZHApOwomIzQzOwlpZiAoc2tiLSZndDtvZmZsb2FkX2Z3ZF9tYXJrICZhbXA7JmFtcDsKJiM0MzsJICAgIGJyX3ZsYW5fZW5hYmxlZChkc2FfcG9ydF9icmlkZ2VfZGV2X2dldChkcCkpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogT24gVkxBTiBhd2FyZSBwb3J0cyBvbmx5IG1vZGlmeSB0aGUgVFBJRCB0byBjb250YWluIHRoZQomIzQzOwkJICogTVQ3NjI4IGVncmVzcyBwb3J0IG1ldGFkYXRhLCBpbnN0ZWFkIG9mIGFkZGluZyBhIG5ldyB2bGFuIHRhZwomIzQzOwkJICovCiYjNDM7CQl0YWcgPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc190eChza2IpOwomIzQzOwkJdGFnWzBdID0gaHRvbnMoeG1pdF90cGlkKTsKJiM0MzsJCXJldHVybiBza2I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJeG1pdF92bGFuID0gc2tiLSZndDtvZmZsb2FkX2Z3ZF9tYXJrID8KJiM0MzsJICAgIGRzYV90YWdfODAyMXFfYnJpZGdlX3ZpZChkc2FfcG9ydF9icmlkZ2VfbnVtX2dldChkcCkpIDoKJiM0MzsJICAgIGRzYV90YWdfODAyMXFfc3RhbmRhbG9uZV92aWQoZHApOwogCiAJc2tiX3B1c2goc2tiLCBNVDc2MjhfVEFHX0xFTik7CiAJZHNhX2FsbG9jX2V0eXBlX2hlYWRlcihza2IsIE1UNzYyOF9UQUdfTEVOKTsKIAogCXRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3R4KHNrYik7CiAKLQl0YWdbMF0gPSBodG9ucyhFVEhfUF84MDIxUSB8Ci0JCSAgICAgICBGSUVMRF9QUkVQKE1UNzYyOF9UQUdfVFhfUE9SVCwKLQkJCQkgIGRzYV94bWl0X3BvcnRfbWFzayhza2IsIGRldikpKTsKJiM0MzsJdGFnWzBdID0gaHRvbnMoeG1pdF90cGlkKTsKIAl0YWdbMV0gPSBodG9ucyh4bWl0X3ZsYW4pOwogCiAJcmV0dXJuIHNrYjsKQEAgLTU2LDcgJiM0Mzs3NSwxMCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm10NzYyOF90YWdfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiYjNDM7CXVuc2lnbmVkIGludCBzb3VyY2VfcG9ydDsKJiM0MzsJYm9vbCBpc19kc2FfODAyMXE7CiAJX19iZTE2ICpwaGRyOwomIzQzOwl1MTYgdGNpLCB2aWQ7CiAKIAlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBNVDc2MjhfVEFHX0xFTikpKSB7CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtNjQsOSAmIzQzOzg2LDIzIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXQ3NjI4X3RhZ19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl9CiAKIAlwaGRyID0gZHNhX2V0eXBlX2hlYWRlcl9wb3Nfcngoc2tiKTsKLQlza2ItJmd0O2RldiA9Ci0JICAgIGRzYV9jb25kdWl0X2ZpbmRfdXNlcihkZXYsIDAsCi0JCQkJICBGSUVMRF9HRVQoTVQ3NjI4X1RBR19SWF9QT1JULCBudG9ocygqcGhkcikpKTsKJiM0MzsJc291cmNlX3BvcnQgPSBGSUVMRF9HRVQoTVQ3NjI4X1RBR19SWF9QT1JULCBudG9ocygqcGhkcikpOwomIzQzOwl0Y2kgPSBudG9ocyhwaGRyWzFdKTsKJiM0MzsJdmlkID0gdGNpICZhbXA7IFZMQU5fVklEX01BU0s7CiYjNDM7CWlzX2RzYV84MDIxcSA9IHZpZF9pc19kc2FfODAyMXEodmlkKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHNvdXJjZSBwb3J0IGluZm8gaXMgb25seSBlbmNvZGVkIGluIHRoZSBUUElEIGZpZWxkIGZvciBwYWNrZXRzCiYjNDM7CSAqIHdoZXJlIHRoZSBWTEFOIHRhZyBpcyBpbnNlcnRlZCBieSB0aGUgUFZJRCBtZWNoYW5pc20uIFdpdGggVkxBTgomIzQzOwkgKiBmaWx0ZXJpbmcgZW5hYmxlZCwgVkxBTi10YWdnZWQgaW5ncmVzcyBwYWNrZXRzIGFwcGVhciBhcyBpZiB0aGV5JiMzOTtyZQomIzQzOwkgKiBvcmlnaW5hdGluZyBvbiBwb3J0IDAuIFVzZSB0aGUgVklEIHRvIGlkZW50aWZ5IHRoZSBicmlkZ2UgcG9ydCBpbgomIzQzOwkgKiB0aGlzIGNhc2UuCiYjNDM7CSAqLwomIzQzOwlpZiAoc291cmNlX3BvcnQgPT0gMCAmYW1wOyZhbXA7ICFpc19kc2FfODAyMXEpCiYjNDM7CQlza2ItJmd0O2RldiA9IGRzYV9maW5kX2Rlc2lnbmF0ZWRfYnJpZGdlX3BvcnRfYnlfdmlkKGRldiwgdmlkKTsKJiM0MzsJZWxzZQomIzQzOwkJc2tiLSZndDtkZXYgPSBkc2FfY29uZHVpdF9maW5kX3VzZXIoZGV2LCAwLCBzb3VyY2VfcG9ydCk7CiYjNDM7CiAJaWYgKCFza2ItJmd0O2RldikgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC03NSw2ICYjNDM7MTExLDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXQ3NjI4X3RhZ19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlza2JfcHVsbF9yY3N1bShza2IsIE1UNzYyOF9UQUdfTEVOKTsKIAlkc2Ffc3RyaXBfZXR5cGVfaGVhZGVyKHNrYiwgTVQ3NjI4X1RBR19MRU4pOwogCWRzYV9kZWZhdWx0X29mZmxvYWRfZndkX21hcmsoc2tiKTsKJiM0MzsKJiM0MzsJaWYgKCFpc19kc2FfODAyMXEpCiYjNDM7CQlfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLCB0Y2kpOwomIzQzOwogCXJldHVybiBza2I7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNzMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGlzIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIHNlcmllcy4gTXkgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kIOKAkyB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIG1vZGlmaWVkPyBJIHNlZSB0aHJlZSBmaWxlcyB3ZXJlIHRvdWNoZWQ6IGBNQUlOVEFJTkVSU2AsIGBkcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmNgLCBhbmQgYG5ldC9kc2EvdGFnX210NzYyOC5jYC4KClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgbXQ3NjI4YCBEU0Egc3dpdGNoIGRyaXZlci4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBoYXJkd2FyZSByZWFjaGFiaWxpdHkgYW5kIHRoZSBkcml2ZXImIzM5O3MgdHlwZSDigJMgd2hhdCBraW5kIG9mIHRhZ3MgYXJlIHdlIHRhbGtpbmcgYWJvdXQgaW4gYG5ldC9kc2EvdGFnX210NzYyOC5jYD8gVGhhdCYjMzk7cyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gVGhlbiwgSSBuZWVkIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZXQvZHNhL210NzYyOC5jYCBpdHNlbGYuIEkmIzM5O2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgS2NvbmZpZyBvcHRpb25zIGFuZCBwbGF0Zm9ybSBiaW5kaW5ncy4gVGhhdCYjMzk7bGwgdGVsbCBtZSBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCwgaXRzIGRlcGVuZGVuY2llcywgYW5kIHdoYXQgaGFyZHdhcmUgaXQmIzM5O3MgbWVhbnQgdG8gc3VwcG9ydC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBpZiB0aGlzIGFsbCBjaGVja3Mgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19ORVRfRFNBX01UNzYyOCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzBfTU1JTykgJiM0Mzs9IG10NzUzMC1tbWlvLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19ORVRfRFNBX01UNzYyOCkgJiM0Mzs9IG10NzYyOC5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX05FVF9EU0FfTVY4OEU2MDYwKSAmIzQzOz0gbXY4OGU2MDYwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSBvbiB0aGUgTVQ3NjI4IHN1cHBvcnQgd2l0aGluIHRoZSBEU0EgZHJpdmVyIGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgZGVmaW5pdGlvbnMuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L2RzYS9LY29uZmlnYCBmb3IgdGhlIGBORVRfRFNBX01UNzYyOGAgc3ltYm9sLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBzdXBwb3J0IGZvciB0aGUgaGFyZHdhcmUgaXMgZGVmaW5lZC4gVGhlbiwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgYmVjYXVzZSBpdCYjMzk7cyBhbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIGNyb3NzLXJlZmVyZW5jZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBJIHNob3VsZCBhbHNvIGltbWVkaWF0ZWx5IGxvb2sgaW4gYG5ldC9kc2EvS2NvbmZpZ2AuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyB0aGVyZSBmb3IgYE5FVF9EU0FfVEFHX01UNzYyOGAuIFRoaXMgdGFnIG1pZ2h0IGJlIHNwZWNpZmljIHRvIHRoZSBNVDc2MjgmIzM5O3MgcGFydGljdWxhciB0YWdnaW5nIHNjaGVtZSwgc28gSSBzaG91bGQgc2VlIGlmIGl0IGV4aXN0cy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIGhvdyBpdCYjMzk7cyBlbmFibGVkIGFuZCBjb25maWd1cmVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBEU0Egc3lzdGVtLiBJJiMzOTtsbCBnZXQgYSBjbGVhciBwaWN0dXJlIGJ5IGNoZWNraW5nIHRoZXNlIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FVF9EU0FfTVQ3NjI4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnPTU0PWNvbmZpZyBORVRfRFNBX01UNzUzMF9NTUlPXG4tLVxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctNjUtXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZzo2Njpjb25maWcgTkVUX0RTQV9NVDc2MjhcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTY3LVx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ3NjI4IEVtYmVkZGVkIEV0aGVybmV0IHN3aXRjaCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NTMwX01NSU8pICYjNDM7PSBtdDc1MzAtbW1pby5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc2MjgpICYjNDM7PSBtdDc2Mjgub1xuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19ORVRfRFNBX01WODhFNjA2MCkgJiM0Mzs9IG12ODhlNjA2MC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRFNBIEtjb25maWcgZm9yIENvbmZpZ3VyYXRpb24gSW5zaWdodHMqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IGBkcml2ZXJzL25ldC9kc2EvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2Ni4gVGhhdCBhcmVhJiMzOTtzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGZvciBjb3JlIERTQSBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBhbHNvIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9kc2EvS2NvbmZpZ2AgZmlsZSBpbiB0aGUgcm9vdCBuZXQgZGlyZWN0b3J5IGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgc29tZSBicm9hZGVyIERTQSBzZXR0aW5ncyB0aGVyZSwgb3Igc29tZSBpbmNsdWRlcyB0aGF0IHdpbGwgZGlyZWN0IG1lIHRvIHRoZSBjb3JyZWN0IHBsYWNlLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmFibGUgbW9kdWxlcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHBvdGVudGlhbGx5IGludGVyZXN0aW5nIG9wdGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxlLiBGcm9tIGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0LWluIEV0aGVybmV0IHN3aXRjaCBmb3VuZFxuICA2MTpcdFx0ICBpbiB0aGUgTWVkaWFUZWsgTVQ3OTg4IFNvQy5cbiAgNjI6XHRcdCAgVGhlIHN3aXRjaCBpcyBhIHNpbWlsYXIgZGVzaWduIGFzIE1UNzUzMSwgYnV0IHRoZSBzd2l0Y2ggcmVnaXN0ZXJzXG4gIDYzOlx0XHQgIGFyZSBkaXJlY3RseSBtYXBwZWQgaW50byB0aGUgU29DcyByZWdpc3RlciBzcGFjZSByYXRoZXIgdGhhbiBiZWluZ1xuICA2NDpcdFx0ICBhY2Nlc3NpYmxlIHZpYSBNRElPLlxuICA2NTpcdFxuICA2NjpcdGNvbmZpZyBORVRfRFNBX01UNzYyOFxuICA2NzpcdFx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ3NjI4IEVtYmVkZGVkIEV0aGVybmV0IHN3aXRjaCBzdXBwb3J0XCYjMzQ7XG4gIDY4Olx0XHRkZXBlbmRzIG9uIEhBU19JT01FTSBcdTAwMjZcdTAwMjYgKFNPQ19NVDc2MjAgfHwgQ09NUElMRV9URVNUKVxuICA2OTpcdFx0c2VsZWN0IE5FVF9EU0FfVEFHX01UNzYyOFxuICA3MDpcdFx0c2VsZWN0IE1FRElBVEVLX0ZFX1NPQ19QSFlcbiAgNzE6XHRcdHNlbGVjdCBSRUdNQVBfTU1JT1xuICA3MjpcdFx0aGVscFxuICA3MzpcdFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0LWluIEV0aGVybmV0IHN3aXRjaCBmb3VuZFxuICA3NDpcdFx0ICBpbiB0aGUgTVQ3NjI4IFNvQy5cbiAgNzU6XHRcbiAgNzY6XHRjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcbiAgNzc6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgODhFNjA2MCBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCYjMzQ7XG4gIDc4Olx0XHRzZWxlY3QgTkVUX0RTQV9UQUdfVFJBSUxFUlxuICA3OTpcdFx0aGVscFxuICA4MDpcdFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1hcnZlbGwgODhFNjA2MCBldGhlcm5ldCBzd2l0Y2hcbiAgODE6XHRcdCAgY2hpcC5cbiAgODI6XHRcbiAgODM6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnXCYjMzQ7XG4gIDg0Olx0XG4gIDg1Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1wmIzM0O1xuICA4NjpcdFxuICA4NzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L0tjb25maWdcJiMzNDtcbiAgODg6XHRcbiAgODk6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE4MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBNVDc2MjggRFNBIFRhZ2dlcioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIE1UNzYyOCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgRFNBIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIGFjdGlvbiBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBgbmV0L2RzYS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IOKAkyB0aGUgS2NvbmZpZyBsaWtlbHkgZGVmaW5lcyB0aGUgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoaXMgc3BlY2lmaWMgdGFnZ2VyLCBgTkVUX0RTQV9UQUdfTVQ3NjI4YC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBob3cgaXQmIzM5O3MgZW5hYmxlZCwgd2hhdCBvdGhlciBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBicmllZiBkb2N1bWVudGF0aW9uIHNuaXBwZXRzIGlmIEkmIzM5O20gbHVja3kuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaXRzIG92ZXJhbGwgcm9sZSBpbiB0aGUgYnJvYWRlciBEU0EgYXJjaGl0ZWN0dXJlLiBUaGlzIGluaXRpYWwgS2NvbmZpZyBpbnNwZWN0aW9uIHdpbGwgcXVpY2tseSBpbmZvcm0gbWUgYWJvdXQgdGhlIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBjb21wbGV4aXR5IHN1cnJvdW5kaW5nIHRoZSBNVDc2MjgmIzM5O3MgaW50ZWdyYXRpb24uIEFmdGVyIHRoaXMsIEkmIzM5O2xsIGtub3cgd2hhdCB0byBsb29rIGZvciBuZXh0LiBJJiMzOTttIGtlZW4gdG8gZ3Jhc3AgdGhlIHVuZGVybHlpbmcgRFNBIHRhZ2dlciBmdW5jdGlvbmFsaXR5IGF0IHBsYXkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VEFHX01UNzYyOCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kc2EmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2RzYS9LY29uZmlnPTk0PWNvbmZpZyBORVRfRFNBX1RBR19FRFNBXG4tLVxubmV0L2RzYS9LY29uZmlnLTEwMC1cbm5ldC9kc2EvS2NvbmZpZzoxMDE6Y29uZmlnIE5FVF9EU0FfVEFHX01UNzYyOFxubmV0L2RzYS9LY29uZmlnLTEwMi1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIHRoZSBNVDc2MjggZW1iZWRkZWQgc3dpdGNoXCYjMzQ7XG4tLVxubmV0L2RzYS9NYWtlZmlsZT0yOT1vYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTEFOOTMwMykgJiM0Mzs9IHRhZ19sYW45MzAzLm9cbm5ldC9kc2EvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX01UNzYyOCkgJiM0Mzs9IHRhZ19tdDc2Mjgub1xubmV0L2RzYS9NYWtlZmlsZS0zMS1vYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTVRLKSAmIzQzOz0gdGFnX210ay5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBEU0EgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBmaXJzdCBwbGFjZSBteSBicmFpbiBuYXR1cmFsbHkgZ29lcyBpcyB0aGUgYG5ldC9kc2EvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgemVyb2luZyBpbiBhcm91bmQgbGluZSAxMDEg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIHJlYXNvbiwgaWYgSSByZWNhbGwuIFByb2JhYmx5IHNvbWUgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkIHRoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZHNhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDk1Olx0XHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNYXJ2ZWxsIHN3aXRjaGVzIHVzaW5nIEV0aGVyVHlwZSBEU0EgaGVhZGVyc1wmIzM0O1xuICA5NjpcdFx0c2VsZWN0IE5FVF9EU0FfVEFHX0RTQV9DT01NT05cbiAgOTc6XHRcdGhlbHBcbiAgOTg6XHRcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yIHRoZVxuICA5OTpcdFx0ICBNYXJ2ZWxsIHN3aXRjaGVzIHdoaWNoIHVzZSBFdGhlclR5cGUgRFNBIGhlYWRlcnMuXG4gMTAwOlx0XG4gMTAxOlx0Y29uZmlnIE5FVF9EU0FfVEFHX01UNzYyOFxuIDEwMjpcdFx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgdGhlIE1UNzYyOCBlbWJlZGRlZCBzd2l0Y2hcJiMzNDtcbiAxMDM6XHRcdGhlbHBcbiAxMDQ6XHRcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yIHRoZVxuIDEwNTpcdFx0ICBzd2l0Y2ggZW1iZWRkZWQgaW4gdGhlIE1UNzYyOCBTb0MuXG4gMTA2Olx0XG4gMTA3Olx0Y29uZmlnIE5FVF9EU0FfVEFHX01US1xuIDEwODpcdFx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWVkaWF0ZWsgc3dpdGNoZXNcJiMzNDtcbiAxMDk6XHRcdGhlbHBcbiAxMTA6XHRcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yXG4gMTExOlx0XHQgIE1lZGlhdGVrIHN3aXRjaGVzLlxuIDExMjpcdFxuIDExMzpcdGNvbmZpZyBORVRfRFNBX1RBR19NWExfODYyWFhcbiAxMTQ6XHRcdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE1heExpbmVhciBNeEw4NjJ4eCBzd2l0Y2hlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTVQ3NjI4IGFuZCBWaXJ0dWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBgZHJpdmVycy9uZXQvZHNhL210NzYyOC5jYCBmaWxlLiBSaWdodCwgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciB0aGUgTVQ3NjI4IFNvQyYjMzk7cyBlbWJlZGRlZCBzd2l0Y2guIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogY2FuIEkgcmVhbGlzdGljYWxseSBsZXZlcmFnZSBEU0Egc3dpdGNoZXMgb3IgdGFnZ2VycywgbGlrZSB0aGUgb25lIHRoaXMgZHJpdmVyIGxpa2VseSBtYW5hZ2VzLCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJJiMzOTttIHRoaW5raW5nIFFFTVUgb3IgYSB0eXBpY2FsIGFtZDY0IHNldHVwLiBUaGF0JiMzOTtzIHRoZSByZWFsIGNoYWxsZW5nZSBoZXJlLiBCZWZvcmUgSSBqdW1wIHRvbyBmYXIgZG93biB0aGF0IHJhYmJpdCBob2xlLCBob2xkIG9uLi4uIGlzIHRoaXMgdHJ1bHkgYSBwbGF0Zm9ybSBkcml2ZXI/IEJlc3QgdG8gZG91YmxlLWNoZWNrIGFnYWluc3QgdGhlIGNvbnRlbnRzIG9mIGBtdDc2MjguY2AgZGlyZWN0bHkgdG8gYmUgc3VyZS4gSXQmIzM5O3MgZWFzeSB0byBhc3N1bWUsIGJ1dCBtYWtpbmcgdGhhdCBhc3N1bXB0aW9uIHdvdWxkIGxlYWQgbWUgYXN0cmF5LiBMZXQmIzM5O3MgbWFrZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbGF0Zm9ybV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL210NzYyOC5jPTgzMz1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdDc2Mjhfb2ZfbWF0Y2gpO1xuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jLTgzNC1cbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzo4MzU6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXQ3NjI4X2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy04MzYtXHQuZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy04NDQtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmM6ODQ1Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobXQ3NjI4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtODQ2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzcyNgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBNVDc2MjggRFNBIERyaXZlcioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGUgTVQ3NjI4IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBEU0EgZnJhbWV3b3JrLiBNeSBpbW1lZGlhdGUgdGFyZ2V0IGlzIHRoZSBgZHJpdmVycy9uZXQvZHNhL210NzYyOC5jYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGBtdDc2MjhfcHJvYmVgIGZ1bmN0aW9uIC0gdGhhdCYjMzk7cyB3aGVyZSB0aGUgaW5pdGlhbCBkZXZpY2Ugc2V0dXAgaGFwcGVucywgcmlnaHQ/IEFuZCBJIHNob3VsZCBwcm9iYWJseSByZXZpZXcgYG10NzYyOF9vZl9tYXRjaGAgYXMgd2VsbCwganVzdCB0byBiZSBjZXJ0YWluIEkgdW5kZXJzdGFuZCB0aGUgZGV2aWNlIHRyZWUgYmluZGluZyBhbmQgaG93IHRoZSBzeXN0ZW0gaWRlbnRpZmllcyB0aGUgTVQ3NjI4IGhhcmR3YXJlIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhpcyYjMzk7bGwgcHJvYmFibHkgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGFueSBwb3dlci1vbiBpc3N1ZXMgYW5kIGluaXRpYWwgaGFyZHdhcmUgc2V0dXAgYW5kIGhvdyB0aGlzIGRyaXZlciBpcyBiZWluZyBjYWxsZWQgYnkgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODE1Olx0fVxuIDgxNjpcdFxuIDgxNzpcdHN0YXRpYyB2b2lkIG10NzYyOF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIDgxODpcdHtcbiA4MTk6XHRcdHN0cnVjdCBtdDc2MjhfZXN3ICplc3cgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiA4MjA6XHRcbiA4MjE6XHRcdGlmICghZXN3KVxuIDgyMjpcdFx0XHRyZXR1cm47XG4gODIzOlx0XG4gODI0Olx0XHRkc2Ffc3dpdGNoX3NodXRkb3duKGVzdy1cdTAwM2Vkcyk7XG4gODI1Olx0XHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYsIE5VTEwpO1xuIDgyNjpcdH1cbiA4Mjc6XHRcbiA4Mjg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc2Mjhfb2ZfbWF0Y2hbXSA9IHtcbiA4Mjk6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttZWRpYXRlayxtdDc2MjgtZXN3XCYjMzQ7IH0sXG4gODMwOlx0XHR7fVxuIDgzMTpcdH07XG4gODMyOlx0XG4gODMzOlx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXQ3NjI4X29mX21hdGNoKTtcbiA4MzQ6XHRcbiA4MzU6XHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdDc2MjhfZHJpdmVyID0ge1xuIDgzNjpcdFx0LmRyaXZlciA9IHtcbiA4Mzc6XHRcdFx0ICAgLm5hbWUgPSBcJiMzNDttdDc2MjgtZXN3XCYjMzQ7LFxuIDgzODpcdFx0XHQgICAub2ZfbWF0Y2hfdGFibGUgPSBtdDc2Mjhfb2ZfbWF0Y2gsXG4gODM5Olx0XHRcdCAgICB9LFxuIDg0MDpcdFx0LnByb2JlID0gbXQ3NjI4X3Byb2JlLFxuIDg0MTpcdFx0LnJlbW92ZSA9IG10NzYyOF9yZW1vdmUsXG4gODQyOlx0XHQuc2h1dGRvd24gPSBtdDc2Mjhfc2h1dGRvd24sXG4gODQzOlx0fTtcbiA4NDQ6XHRcbiA4NDU6XHRtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG10NzYyOF9kcml2ZXIpO1xuIDg0NjpcdFxuIDg0NzpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7Sm9yaXMgVmFpc3ZpbGEgXHUwMDNjam9leUB0aW55aXNyLmNvbVx1MDAzZVwmIzM0Oyk7XG4gODQ4Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0RyaXZlciBmb3IgTWVkaWF0ZWsgTVQ3NjI4IGVtYmVkZGVkIHN3aXRjaFwmIzM0Oyk7XG4gODQ5Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NDQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYG10NzYyOGAgUGxhdGZvcm0gRHJpdmVyIGFuZCBEU0EgVGFnZ2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBtdDc2MjhgIHRoaW5nLiBGcm9tIHdoYXQgSSBzZWUsIGl0JiMzOTtzIHVzaW5nIHRoZSBgJiMzNDttZWRpYXRlayxtdDc2MjgtZXN3JiMzNDtgIG9mX2RldmljZV9pZC4gTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBEU0Egc3R1ZmYsIHNwZWNpZmljYWxseSBpbiBgdGFnX210NzYyOC5jYCwgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHR3ZWFrZWQgZnJvbSB1c2VyIHNwYWNlPyBDb3VsZCBzb21lb25lIG1hbmlwdWxhdGUgaXQgdmlhIGEgbW9jayBEU0Egc2V0dXAsIE5ldGxpbmssIG9yIGV2ZW4gc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyPyBUaGF0JiMzOTtzIHRoZSByZWFsIHF1ZXN0aW9uLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIERTQSB0YWdnZXIgaXRzZWxmIGlzIGxvYWRhYmxlLCBpZiB0aGVyZSYjMzk7cyBhIHNlbGVjdGlvbiBtZWNoYW5pc20gYXQgcGxheSBoZXJlLiBUaGlzIG1ha2VzIG1lIGNvbnNpZGVyIGhvdyBEU0EgdGFnZ2luZyAqYWN0dWFsbHkqIHdvcmtzIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIERTQSB0YWdnaW5nIHByb3RvY29scyB0aGVtc2VsdmVzLCBJIHN1cHBvc2UuIEdvdHRhIGdldCBhIHNvbGlkIGhhbmRsZSBvbiBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RFNBX1RBR19QUk9UT19NVDc2MjgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL210NzYyOC5jPTU4OD1tdDc2MjhfZ2V0X3RhZ19wcm90byhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtNTg5LXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzo1OTA6XHRyZXR1cm4gRFNBX1RBR19QUk9UT19NVDc2Mjg7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtNTkxLX1cbi0tXG5pbmNsdWRlL25ldC9kc2EuaD0yNj1zdHJ1Y3QgdGNfYWN0aW9uO1xuLS1cbmluY2x1ZGUvbmV0L2RzYS5oLTYyLSNkZWZpbmUgRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFXHRcdDM0XG5pbmNsdWRlL25ldC9kc2EuaDo2MzojZGVmaW5lIERTQV9UQUdfUFJPVE9fTVQ3NjI4X1ZBTFVFXHRcdDM1XG5pbmNsdWRlL25ldC9kc2EuaC02NC1cbmluY2x1ZGUvbmV0L2RzYS5oPTY1PWVudW0gZHNhX3RhZ19wcm90b2NvbCB7XG4tLVxuaW5jbHVkZS9uZXQvZHNhLmgtMTAwLVx0RFNBX1RBR19QUk9UT19LU1o4NDYzXHRcdD0gRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFLFxuaW5jbHVkZS9uZXQvZHNhLmg6MTAxOlx0RFNBX1RBR19QUk9UT19NVDc2MjhcdFx0PSBEU0FfVEFHX1BST1RPX01UNzYyOF9WQUxVRSxcbmluY2x1ZGUvbmV0L2RzYS5oLTEwMi19O1xuLS1cbm5ldC9kc2EvdGFnX210NzYyOC5jPTEyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIG10NzYyOF90YWdfb3BzID0ge1xubmV0L2RzYS90YWdfbXQ3NjI4LmMtMTIyLVx0Lm5hbWUgPSBNVDc2MjhfVEFHX05BTUUsXG5uZXQvZHNhL3RhZ19tdDc2MjguYzoxMjM6XHQucHJvdG8gPSBEU0FfVEFHX1BST1RPX01UNzYyOCxcbm5ldC9kc2EvdGFnX210NzYyOC5jLTEyNC1cdC54bWl0ID0gbXQ3NjI4X3RhZ194bWl0LFxuLS1cbm5ldC9kc2EvdGFnX210NzYyOC5jPTEyOT1tb2R1bGVfZHNhX3RhZ19kcml2ZXIobXQ3NjI4X3RhZ19vcHMpO1xubmV0L2RzYS90YWdfbXQ3NjI4LmMtMTMwLVxubmV0L2RzYS90YWdfbXQ3NjI4LmM6MTMxOk1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX01UNzYyOCwgTVQ3NjI4X1RBR19OQU1FKTtcbm5ldC9kc2EvdGFnX210NzYyOC5jLTEzMi1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7RFNBIHRhZyBkcml2ZXIgZm9yIE1UNzYyOCBzd2l0Y2hcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUxOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRFNBIFRhZ2dpbmcgUHJvdG9jb2wgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgYW5kIEkmIzM5O20gd29uZGVyaW5nOiBjYW4gSSAqZHluYW1pY2FsbHkqIG1hbmlwdWxhdGUgdGhlIERTQSB0YWdnaW5nIHByb3RvY29sPyBDYW4gSSBkbyB0aGlzIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzIOKAkyBzeXNmcywgbmV0bGluaywgZXRodG9vbCwgb3IgZXZlbiBhdCB0aGUgbmV0ZGV2IGxldmVsPyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHNjZW5hcmlvcyB3aGVyZSBJIG1pZ2h0IG5lZWQgYSBEU0EgbW9jayBpbnRlcmZhY2UsIGEgZHVtbXkgc2V0dXAsIGEgbG9vcGJhY2ssIG9yIGV2ZW4gc29tZXRoaW5nIGxpa2UgbmV0a2l0IGZvciB0ZXN0aW5nLgoKVGhlIGNvcmUgcXVlc3Rpb24gaXMsIGhvdyAqZXhhY3RseSogZG9lcyB0aGUgc3lzdGVtIGRlY2lkZSB3aGljaCBEU0EgdGFnIHByb3RvY29sIHRvIHVzZSwgYW5kLCBjcnVjaWFsbHksIGNhbiBJICppbmZsdWVuY2UqIHRoYXQgc2VsZWN0aW9uIG9yIGV2ZW4gZm9yY2UgYSBjaGFuZ2UgYXQgcnVudGltZT8gVGltZSB0byBmaXJlIHVwIHRoZSBzZWFyY2ggZW5naW5lIGFuZCBkZWx2ZSBpbnRvIGhvdyBEU0EgdGFnIHByb3RvY29scyBhcmUgY2hvc2VuIGFuZCBpZiB0aGF0IGNob2ljZSBpcyBtb2RpZmlhYmxlIG9uIHRoZSBmbHkuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgY29tbXVuaXR5IGRpc2N1c3Npb25zIGhhdmUgdG8gc2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFuZ2VfdGFnX3Byb3RvY29sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2RzYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL2RzYS5jPTU3MD1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfc2V0dXBfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5uZXQvZHNhL2RzYS5jLTU3OS1cdHJ0bmxfbG9jaygpO1xubmV0L2RzYS9kc2EuYzo1ODA6XHRlcnIgPSBkcy1cdTAwM2VvcHMtXHUwMDNlY2hhbmdlX3RhZ19wcm90b2NvbChkcywgdGFnX29wcy1cdTAwM2Vwcm90byk7XG5uZXQvZHNhL2RzYS5jLTU4MS1cdHJ0bmxfdW5sb2NrKCk7XG4tLVxubmV0L2RzYS9kc2EuYz0xMTU1PXN0YXRpYyBpbnQgZHNhX3BvcnRfcGFyc2VfY3B1KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxuLS1cbm5ldC9kc2EvZHNhLmMtMTE3Ni1cdGlmICh1c2VyX3Byb3RvY29sKSB7XG5uZXQvZHNhL2RzYS5jOjExNzc6XHRcdGlmICghZHMtXHUwMDNlb3BzLVx1MDAzZWNoYW5nZV90YWdfcHJvdG9jb2wpIHtcbm5ldC9kc2EvZHNhLmMtMTE3OC1cdFx0XHRkZXZfZXJyKGRzLVx1MDAzZWRldiwgXCYjMzQ7VGFnIHByb3RvY29sIGNhbm5vdCBiZSBtb2RpZmllZFxcblwmIzM0Oyk7XG4tLVxubmV0L2RzYS9kc2EuYy0xMjMwLVx0ICogZHNhX3N3aXRjaF9zZXR1cF90YWdfcHJvdG9jb2wgb25jZSAuc2V0dXAgaGFzIHJ1biBhbmQgdGhlXG5uZXQvZHNhL2RzYS5jOjEyMzE6XHQgKiBkcml2ZXIgaXMgcmVhZHkgdG8gYWNjZXB0IGNhbGxzIHRvIC5jaGFuZ2VfdGFnX3Byb3RvY29sLiBJZlxubmV0L2RzYS9kc2EuYy0xMjMyLVx0ICogdGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjdXN0b20gcHJvdG9jb2wgYXQgdGhhdFxuLS1cbm5ldC9kc2Evc3dpdGNoLmM9ODczPXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9jaGFuZ2VfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbi0tXG5uZXQvZHNhL3N3aXRjaC5jLTg3OS1cbm5ldC9kc2Evc3dpdGNoLmM6ODgwOlx0aWYgKCFkcy1cdTAwM2VvcHMtXHUwMDNlY2hhbmdlX3RhZ19wcm90b2NvbClcbm5ldC9kc2Evc3dpdGNoLmMtODgxLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2RzYS9zd2l0Y2guYy04ODQtXG5uZXQvZHNhL3N3aXRjaC5jOjg4NTpcdGVyciA9IGRzLVx1MDAzZW9wcy1cdTAwM2VjaGFuZ2VfdGFnX3Byb3RvY29sKGRzLCB0YWdfb3BzLVx1MDAzZXByb3RvKTtcbm5ldC9kc2Evc3dpdGNoLmMtODg2LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIGBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG9gIENhbGxlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG9gLiBUaGUga2V5IHF1ZXN0aW9uIGlzLCAqd2hlcmUqIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgaW52b2tlZD8gSXMgdGhpcyBzb21ldGhpbmcgdHJpZ2dlcmVkIGJ5IGEgdXNlciBzcGFjZSBpbnRlcmFjdGlvbiwgbGlrZSBhIHN5c2ZzIGVudHJ5LCBhIG5ldGxpbmsgbWVzc2FnZSwgb3IgbWF5YmUgZXZlbiBzb21ldGhpbmcgbW9yZSBkZXYtb3JpZW50ZWQgbGlrZSBkZWJ1Z2ZzPyBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjYWxsIGdyYXBoLiBOZWVkIHRvIGZpbmQgb3V0IGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjYWxsIGBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG9gLiBUaGlzJiMzOTtsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIHR5cGljYWwgdXNhZ2Ugc2NlbmFyaW8gYW5kIHBvdGVudGlhbGx5IGV4cG9zZSBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgb3Igc3VidGxlIGRlcGVuZGVuY2llcyBpbiB0aGUgRFNBIHN1YnN5c3RlbS4gSG9wZWZ1bGx5LCB0aGUgY2FsbCBzdGFjayB3aWxsIGJlIGVhc3kgdG8gdHJhY2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RzYV9zd2l0Y2hfY2hhbmdlX3RhZ19wcm90byYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kc2EmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2RzYS9zd2l0Y2guYz04NTM9c3RhdGljIGludCBkc2Ffc3dpdGNoX2hvc3Rfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuLS1cbm5ldC9kc2Evc3dpdGNoLmMtODcyLVxubmV0L2RzYS9zd2l0Y2guYzo4NzM6c3RhdGljIGludCBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxubmV0L2RzYS9zd2l0Y2guYy04NzQtXHRcdFx0XHQgICAgICAgc3RydWN0IGRzYV9ub3RpZmllcl90YWdfcHJvdG9faW5mbyAqaW5mbylcbi0tXG5uZXQvZHNhL3N3aXRjaC5jPTk3ND1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5uZXQvZHNhL3N3aXRjaC5jLTEwNDQtXHRjYXNlIERTQV9OT1RJRklFUl9UQUdfUFJPVE86XG5uZXQvZHNhL3N3aXRjaC5jOjEwNDU6XHRcdGVyciA9IGRzYV9zd2l0Y2hfY2hhbmdlX3RhZ19wcm90byhkcywgaW5mbyk7XG5uZXQvZHNhL3N3aXRjaC5jLTEwNDYtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgwMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBEU0EgVGFnIFByb3RvY29sIE5vdGlmaWVyKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBgRFNBX05PVElGSUVSX1RBR19QUk9UT2AgZXZlbnQuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IGEgZmV3IGRpZmZlcmVudCBzb3VyY2VzIOKAkyBzcGVjaWZpY2FsbHksIGBkc2FfcG9ydF9jaGFuZ2VfdGFnX3Byb3RvYCwgYGRzYV9jb25kdWl0X3NldHVwYCwgb3IgcG90ZW50aWFsbHksIHNvbWV0aGluZyBoYXBwZW5pbmcgdGhyb3VnaCBzeXNmcy4gTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGlnIGRpcmVjdGx5IGludG8gdGhlIGBEU0FfTk9USUZJRVJfVEFHX1BST1RPYCBkZWZpbml0aW9uIGl0c2VsZi4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYW5zd2VycyBhcmUgZ29pbmcgdG8gbGllLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IGNhdXNlIHRoYXQgbm90aWZpZXIgdG8gZmlyZSBhbmQgd2hhdCBkYXRhIGl0JiMzOTtzIHBhc3NpbmcgYWxvbmcuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEU0FfTk9USUZJRVJfVEFHX1BST1RPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2RzYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL2RzYS5jPTk0OD1zdGF0aWMgaW50IGRzYV90cmVlX2JpbmRfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcbi0tXG5uZXQvZHNhL2RzYS5jLTk2MC1cdGluZm8udGFnX29wcyA9IHRhZ19vcHM7XG5uZXQvZHNhL2RzYS5jOjk2MTpcdGVyciA9IGRzYV90cmVlX25vdGlmeShkc3QsIERTQV9OT1RJRklFUl9UQUdfUFJPVE9fQ09OTkVDVCwgXHUwMDI2aW5mbyk7XG5uZXQvZHNhL2RzYS5jLTk2Mi1cdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUClcbi0tXG5uZXQvZHNhL2RzYS5jLTk2Ni1cdGluZm8udGFnX29wcyA9IG9sZF90YWdfb3BzO1xubmV0L2RzYS9kc2EuYzo5Njc6XHRkc2FfdHJlZV9ub3RpZnkoZHN0LCBEU0FfTk9USUZJRVJfVEFHX1BST1RPX0RJU0NPTk5FQ1QsIFx1MDAyNmluZm8pO1xubmV0L2RzYS9kc2EuYy05NjgtXG4tLVxubmV0L2RzYS9kc2EuYy05NzItXHRpbmZvLnRhZ19vcHMgPSB0YWdfb3BzO1xubmV0L2RzYS9kc2EuYzo5NzM6XHRkc2FfdHJlZV9ub3RpZnkoZHN0LCBEU0FfTk9USUZJRVJfVEFHX1BST1RPX0RJU0NPTk5FQ1QsIFx1MDAyNmluZm8pO1xubmV0L2RzYS9kc2EuYy05NzQtXHRkc3QtXHUwMDNldGFnX29wcyA9IG9sZF90YWdfb3BzO1xuLS1cbm5ldC9kc2EvZHNhLmM9OTgzPWludCBkc2FfdHJlZV9jaGFuZ2VfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcbi0tXG5uZXQvZHNhL2RzYS5jLTEwMDgtXHRpbmZvLnRhZ19vcHMgPSB0YWdfb3BzO1xubmV0L2RzYS9kc2EuYzoxMDA5Olx0ZXJyID0gZHNhX3RyZWVfbm90aWZ5KGRzdCwgRFNBX05PVElGSUVSX1RBR19QUk9UTywgXHUwMDI2aW5mbyk7XG5uZXQvZHNhL2RzYS5jLTEwMTAtXHRpZiAoZXJyKVxuLS1cbm5ldC9kc2EvZHNhLmMtMTAyMi1cdGluZm8udGFnX29wcyA9IG9sZF90YWdfb3BzO1xubmV0L2RzYS9kc2EuYzoxMDIzOlx0ZHNhX3RyZWVfbm90aWZ5KGRzdCwgRFNBX05PVElGSUVSX1RBR19QUk9UTywgXHUwMDI2aW5mbyk7XG5uZXQvZHNhL2RzYS5jLTEwMjQtb3V0X3VubG9jazpcbi0tXG5uZXQvZHNhL3N3aXRjaC5jPTk3ND1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5uZXQvZHNhL3N3aXRjaC5jLTEwNDMtXHRcdGJyZWFrO1xubmV0L2RzYS9zd2l0Y2guYzoxMDQ0Olx0Y2FzZSBEU0FfTk9USUZJRVJfVEFHX1BST1RPOlxubmV0L2RzYS9zd2l0Y2guYy0xMDQ1LVx0XHRlcnIgPSBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG8oZHMsIGluZm8pO1xubmV0L2RzYS9zd2l0Y2guYy0xMDQ2LVx0XHRicmVhaztcbm5ldC9kc2Evc3dpdGNoLmM6MTA0NzpcdGNhc2UgRFNBX05PVElGSUVSX1RBR19QUk9UT19DT05ORUNUOlxubmV0L2RzYS9zd2l0Y2guYy0xMDQ4LVx0XHRlcnIgPSBkc2Ffc3dpdGNoX2Nvbm5lY3RfdGFnX3Byb3RvKGRzLCBpbmZvKTtcbm5ldC9kc2Evc3dpdGNoLmMtMTA0OS1cdFx0YnJlYWs7XG5uZXQvZHNhL3N3aXRjaC5jOjEwNTA6XHRjYXNlIERTQV9OT1RJRklFUl9UQUdfUFJPVE9fRElTQ09OTkVDVDpcbm5ldC9kc2Evc3dpdGNoLmMtMTA1MS1cdFx0ZXJyID0gZHNhX3N3aXRjaF9kaXNjb25uZWN0X3RhZ19wcm90byhkcywgaW5mbyk7XG4tLVxubmV0L2RzYS9zd2l0Y2guaD0xMD1lbnVtIHtcbi0tXG5uZXQvZHNhL3N3aXRjaC5oLTMxLVx0RFNBX05PVElGSUVSX01UVSxcbm5ldC9kc2Evc3dpdGNoLmg6MzI6XHREU0FfTk9USUZJRVJfVEFHX1BST1RPLFxubmV0L2RzYS9zd2l0Y2guaDozMzpcdERTQV9OT1RJRklFUl9UQUdfUFJPVE9fQ09OTkVDVCxcbm5ldC9kc2Evc3dpdGNoLmg6MzQ6XHREU0FfTk9USUZJRVJfVEFHX1BST1RPX0RJU0NPTk5FQ1QsXG5uZXQvZHNhL3N3aXRjaC5oLTM1LVx0RFNBX05PVElGSUVSX1RBR184MDIxUV9WTEFOX0FERCxcbi0tXG5uZXQvZHNhL3N3aXRjaC5oPTkyPXN0cnVjdCBkc2Ffbm90aWZpZXJfbXR1X2luZm8ge1xuLS1cbm5ldC9kc2Evc3dpdGNoLmgtOTYtXG5uZXQvZHNhL3N3aXRjaC5oOjk3Oi8qIERTQV9OT1RJRklFUl9UQUdfUFJPVE9fKiAqL1xubmV0L2RzYS9zd2l0Y2guaC05OC1zdHJ1Y3QgZHNhX25vdGlmaWVyX3RhZ19wcm90b19pbmZvIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMDUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIENhbGwgU2l0ZXMgb2YgYGRzYV90cmVlX2NoYW5nZV90YWdfcHJvdG9gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYGRzYV90cmVlX2NoYW5nZV90YWdfcHJvdG9gLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCwgb2YgY291cnNlLCBpcyB0byBmaWd1cmUgb3V0ICp3aGVyZSogaXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgdXNlZC4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzLiBXaGF0IG1vZHVsZXMgb3IgZnVuY3Rpb25zIGFyZSBjYWxsaW5nIGludG8gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uPyAgSXMgaXQgYSBjb3JlIGxpYnJhcnkgY2FsbCwgYSB1c2VyLXNwYWNlIHV0aWxpdHksIHNvbWV0aGluZyBpbiB0aGUgbWlkZGxlPyBUaGlzIHdpbGwgZ2l2ZSBtZSBpbW1lZGlhdGUgaW5zaWdodCBpbnRvIHdoYXQgZGVwZW5kcyBvbiBpdCBhbmQgaG93IGNoYW5naW5nIGl0IG1pZ2h0IGJyZWFrIHRoaW5ncy4gSSBuZWVkIHRvIGZpbmQgdGhlIGNhbGxpbmcgY29udGV4dCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCwgcG90ZW50aWFsbHksIGl0cyBsaW1pdGF0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RzYV90cmVlX2NoYW5nZV90YWdfcHJvdG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZHNhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kc2EvY29uZHVpdC5jPTM1MD1zdGF0aWMgc3NpemVfdCB0YWdnaW5nX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbm5ldC9kc2EvY29uZHVpdC5jLTM4MC1cbm5ldC9kc2EvY29uZHVpdC5jOjM4MTpcdGVyciA9IGRzYV90cmVlX2NoYW5nZV90YWdfcHJvdG8oY3B1X2RwLVx1MDAzZWRzLVx1MDAzZWRzdCwgbmV3X3RhZ19vcHMsXG5uZXQvZHNhL2NvbmR1aXQuYy0zODItXHRcdFx0XHRcdG9sZF90YWdfb3BzKTtcbi0tXG5uZXQvZHNhL2RzYS5jPTk0OD1zdGF0aWMgaW50IGRzYV90cmVlX2JpbmRfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcbi0tXG5uZXQvZHNhL2RzYS5jLTk4Mi0gKi9cbm5ldC9kc2EvZHNhLmM6OTgzOmludCBkc2FfdHJlZV9jaGFuZ2VfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcbm5ldC9kc2EvZHNhLmMtOTg0LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyAqdGFnX29wcyxcbi0tXG5uZXQvZHNhL2RzYS5oPTI0PXN0cnVjdCBuZXRfZGV2aWNlICpkc2FfdHJlZV9maW5kX2ZpcnN0X2NvbmR1aXQoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KTtcbm5ldC9kc2EvZHNhLmg6MjU6aW50IGRzYV90cmVlX2NoYW5nZV90YWdfcHJvdG8oc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0LFxubmV0L2RzYS9kc2EuaC0yNi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgKnRhZ19vcHMsXG4tLVxubmV0L2RzYS9zd2l0Y2guYz04NzM9c3RhdGljIGludCBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuLS1cbm5ldC9kc2Evc3dpdGNoLmMtOTAwLVxubmV0L2RzYS9zd2l0Y2guYzo5MDE6XHRcdC8qIHJ0bmxfbXV0ZXggaXMgaGVsZCBpbiBkc2FfdHJlZV9jaGFuZ2VfdGFnX3Byb3RvICovXG5uZXQvZHNhL3N3aXRjaC5jLTkwMi1cdFx0ZHNhX3VzZXJfY2hhbmdlX210dSh1c2VyLCB1c2VyLVx1MDAzZW10dSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODA3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIERTQSBJbnF1aXJ5KioKCkhtbSwgd2FpdCBhIG1pbnV0ZS4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGFueXRoaW5nIGludm9sdmluZyBEU0EsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBtYWtlIHN1cmUgSSYjMzk7bSBncm91bmRlZCBpbiB0aGUgZXNzZW50aWFscy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7RG8gd2UgZXZlbiBoYXZlIGEgdmlydHVhbCBvciBtb2NrIERTQSBzd2l0Y2ggcmVwcmVzZW50YXRpb24gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgaXRzZWxmPyYjMzQ7IEkgbmVlZCB0byB2ZXJpZnkgd2hhdCB0aGUga2VybmVsIG9mZmVycyBhcyBhIGZvdW5kYXRpb24uIEl0JiMzOTtzIHRvbyBlYXN5IHRvIGFzc3VtZSwgYW5kIEkmIzM5O3ZlIGJlZW4gY2F1Z2h0IG91dCBieSBhc3N1bXB0aW9ucyBiZWZvcmUuCgpTbywgbGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIG9idmlvdXMgcGxhY2UgdG8gbG9vayBmb3IgRFNBIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMgaXMgdW5kZXIgYGRyaXZlcnMvbmV0L2RzYWAuIFRoYXQgZGlyZWN0b3J5IGlzIHRoZSBsb2dpY2FsIGxvY2F0aW9uIGZvciBhbGwgdGhpbmdzIERTQS4gSeKAmWxsIHN0YXJ0IHRoZXJlLCBhbmQgaG9wZSBJIGNhbiBxdWlja2x5IGZpbmQgYW55IHNpZ24gb2YgdmlydHVhbCBvciBtb2NrIHN3aXRjaCBkcml2ZXJzLiBUaGlzIGluaXRpYWwgc2VhcmNoIHNob3VsZCBxdWlja2x5IGNsZWFyIHRoZSBncm91bmQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGVjayBiZWZvcmUgY29uc2lkZXJpbmcgYW55IGtpbmQgb2Ygc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2JjbV9zZjIuYyYjMzQ7LAogICAgJiMzNDtiY21fc2YyLmgmIzM0OywKICAgICYjMzQ7YmNtX3NmMl9jZnAuYyYjMzQ7LAogICAgJiMzNDtiY21fc2YyX3JlZ3MuaCYjMzQ7LAogICAgJiMzNDtkc2FfbG9vcC5jJiMzNDssCiAgICAmIzM0O2tzODk5NS5jJiMzNDssCiAgICAmIzM0O2xhbjkzMDMtY29yZS5jJiMzNDssCiAgICAmIzM0O2xhbjkzMDMuaCYjMzQ7LAogICAgJiMzNDtsYW45MzAzX2kyYy5jJiMzNDssCiAgICAmIzM0O2xhbjkzMDNfbWRpby5jJiMzNDssCiAgICAmIzM0O210NzUzMC1tZGlvLmMmIzM0OywKICAgICYjMzQ7bXQ3NTMwLW1taW8uYyYjMzQ7LAogICAgJiMzNDttdDc1MzAuYyYjMzQ7LAogICAgJiMzNDttdDc1MzAuaCYjMzQ7LAogICAgJiMzNDttdDc2MjguYyYjMzQ7LAogICAgJiMzNDttdjg4ZTYwNjAuYyYjMzQ7LAogICAgJiMzNDttdjg4ZTYwNjAuaCYjMzQ7LAogICAgJiMzNDtyem4xX2E1cHN3LmMmIzM0OywKICAgICYjMzQ7cnpuMV9hNXBzdy5oJiMzNDssCiAgICAmIzM0O3ZpdGVzc2UtdnNjNzN4eC1jb3JlLmMmIzM0OywKICAgICYjMzQ7dml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLmMmIzM0OywKICAgICYjMzQ7dml0ZXNzZS12c2M3M3h4LXNwaS5jJiMzNDssCiAgICAmIzM0O3ZpdGVzc2UtdnNjNzN4eC5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0O2I1MyYjMzQ7LAogICAgJiMzNDtoaXJzY2htYW5uJiMzNDssCiAgICAmIzM0O2xhbnRpcSYjMzQ7LAogICAgJiMzNDttaWNyb2NoaXAmIzM0OywKICAgICYjMzQ7bW90b3Jjb21tJiMzNDssCiAgICAmIzM0O212ODhlNnh4eCYjMzQ7LAogICAgJiMzNDtteGw4NjJ4eCYjMzQ7LAogICAgJiMzNDtuZXRjJiMzNDssCiAgICAmIzM0O29jZWxvdCYjMzQ7LAogICAgJiMzNDtxY2EmIzM0OywKICAgICYjMzQ7cmVhbHRlayYjMzQ7LAogICAgJiMzNDtzamExMTA1JiMzNDssCiAgICAmIzM0O3hyczcwMHgmIzM0OwogIF0KfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ1OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgZHNhX2xvb3AuY2AqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gYGRzYV9sb29wLmNgLiBUaGF0IGZpbGUgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgcGFydGljdWxhciBhcmVhLCBzbyBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvZiBpdHMgbG9naWMgYW5kIGltcGxlbWVudGF0aW9uLiBSaWdodCBub3csICp0aGF0KiBpcyB0aGUgY29kZSBJIG5lZWQgdG8gYW5hbHl6ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHNhX2xvb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlPTM9YmNtLXNmMi1vYmpzXHRcdFx0Oj0gYmNtX3NmMi5vIGJjbV9zZjJfY2ZwLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfRFNBX0xPT1ApXHQmIzQzOz0gZHNhX2xvb3Aub1xuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlLTUtb2JqLSQoQ09ORklHX05FVF9EU0FfS1M4OTk1KSBcdCYjNDM7PSBrczg5OTUub1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjU6c3RydWN0IGRzYV9sb29wX3ZsYW4ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjYtXHR1MTYgbWVtYmVycztcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yOS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMwOnN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEtXHRjaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1OmVudW0gZHNhX2xvb3BfbWliX2NvdW50ZXJzIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2LVx0RFNBX0xPT1BfUEhZX1JFQURfT0ssXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzpzdHJ1Y3QgZHNhX2xvb3BfcG9ydCB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDpcdHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgbWliW19fRFNBX0xPT1BfQ05UX01BWF07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NS1cdHUxNiBwdmlkO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk6c3RydWN0IGRzYV9sb29wX3ByaXYge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAtXHRzdHJ1Y3QgbWlpX2J1c1x0KmJ1cztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxLVx0dW5zaWduZWQgaW50XHRwb3J0X2Jhc2U7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MjpcdHN0cnVjdCBkc2FfbG9vcF92bGFuIHZsYW5zW1ZMQU5fTl9WSURdO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTMtXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTQ6XHRzdHJ1Y3QgZHNhX2xvb3BfcG9ydCBwb3J0c1tEU0FfTUFYX1BPUlRTXTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTU1LX07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU3OnN0cnVjdCBkc2FfbG9vcF9wZGF0YSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01OC1cdC8qIE11c3QgYmUgZmlyc3QsIHN1Y2ggdGhhdCBkc2FfcmVnaXN0ZXJfc3dpdGNoKCkgY2FuIGFjY2VzcyB0aGlzXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo2NzpzdGF0aWMgc3RydWN0IGRzYV9sb29wX21pYl9lbnRyeSBkc2FfbG9vcF9taWJzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy02OC1cdFtEU0FfTE9PUF9QSFlfUkVBRF9PS11cdD0geyBcJiMzNDtwaHlfcmVhZF9va1wmIzM0OywgfSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz03NT1zdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlICpzd2l0Y2hfbWRpb2RldjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Nzc6ZW51bSBkc2FfbG9vcF9kZXZsaW5rX3Jlc291cmNlX2lkIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc4LVx0RFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9OT05FLCAgLyogREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QICovXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODEtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4MjpzdGF0aWMgdTY0IGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCh2b2lkICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODMte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODQ6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODUtXHR1bnNpZ25lZCBpbnQgaSwgY291bnQgPSAwO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODY6XHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy04Ny1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy05Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjk3OnN0YXRpYyBpbnQgZHNhX2xvb3Bfc2V0dXBfZGV2bGlua19yZXNvdXJjZXMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTgte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTktXHRzdHJ1Y3QgZGV2bGlua19yZXNvdXJjZV9zaXplX3BhcmFtcyBzaXplX3BhcmFtcztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEwMDpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMDEtXHRpbnQgZXJyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNS1cdFx0XHRcdFx0ICAgICAgRFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9WVFUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMTY6XHRcdFx0XHRcdCAgICAgIGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCwgcHMpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTE3LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTEyNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMjYtXHRcdFx0XHRcdFx0ICAgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTMzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTM0OnN0YXRpYyBpbnQgZHNhX2xvb3Bfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTM1LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNjpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzctXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkcy1cdTAwM2VudW1fcG9ydHM7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQwOlx0XHRtZW1jcHkocHMtXHUwMDNlcG9ydHNbaV0ubWliLCBkc2FfbG9vcF9taWJzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQxOlx0XHQgICAgICAgc2l6ZW9mKGRzYV9sb29wX21pYnMpKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Mi1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDU6XHRyZXR1cm4gZHNhX2xvb3Bfc2V0dXBfZGV2bGlua19yZXNvdXJjZXMoZHMpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTQ2LX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ny1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE0ODpzdGF0aWMgdm9pZCBkc2FfbG9vcF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE1Mi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE1MzpzdGF0aWMgaW50IGRzYV9sb29wX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTU0LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjAtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2Mi1cdFx0XHRcdCB1MzIgc3RyaW5nc2V0LCB1aW50OF90ICpkYXRhKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYzLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE2NDpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjUtXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNzMtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzQ6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3NS1cdFx0XHRcdCAgICAgICB1aW50NjRfdCAqZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3Ni17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzc6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc4LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTgzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTg0OnN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3JlYWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE4NS17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxODY6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg3LVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBzLVx1MDAzZWJ1cztcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xOTgtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxOTk6c3RhdGljIGludCBkc2FfbG9vcF9waHlfd3JpdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMC1cdFx0XHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDEte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjAyOlx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMy1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjE1OnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE2LVx0XHRcdFx0ICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI1LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMjctXHRcdFx0XHQgICAgICAgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzMi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIzMzpzdGF0aWMgdm9pZCBkc2FfbG9vcF9wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzNC1cdFx0XHRcdFx0dTggc3RhdGUpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjM5LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjQwOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjQxLVx0XHRcdFx0XHRib29sIHZsYW5fZmlsdGVyaW5nLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0OS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1MDpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1MS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF92bGFuICp2bGFuLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1NS1cdGJvb2wgcHZpZCA9IHZsYW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1NjpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNTctXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHMtXHUwMDNlYnVzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjU4Olx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU5LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4Mi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4MzpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4NC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF92bGFuICp2bGFuKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4Ni1cdGJvb2wgdW50YWdnZWQgPSB2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mjg3Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4OC1cdHUxNiBwdmlkID0gcHMtXHUwMDNlcG9ydHNbcG9ydF0ucHZpZDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4OS1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyOTA6XHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yOTEtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzExOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTItXHRcdFx0XHQgICAgaW50IG5ld19tdHUpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTMte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzE0Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzE1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyMC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMyMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzIyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjUtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjY6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHNhLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyNy1cdFx0XHRcdCAgICAgIHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMzMy1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNDpzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGRzYV9sb29wX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNTpcdC5nZXRfdGFnX3Byb3RvY29sXHQ9IGRzYV9sb29wX2dldF9wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNjpcdC5zZXR1cFx0XHRcdD0gZHNhX2xvb3Bfc2V0dXAsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzc6XHQudGVhcmRvd25cdFx0PSBkc2FfbG9vcF90ZWFyZG93bixcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzODpcdC5nZXRfc3RyaW5nc1x0XHQ9IGRzYV9sb29wX2dldF9zdHJpbmdzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM5Olx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQwOlx0LmdldF9zc2V0X2NvdW50XHRcdD0gZHNhX2xvb3BfZ2V0X3NzZXRfY291bnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDE6XHQuZ2V0X2V0aHRvb2xfcGh5X3N0YXRzXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQyOlx0LnBoeV9yZWFkXHRcdD0gZHNhX2xvb3BfcGh5X3JlYWQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDM6XHQucGh5X3dyaXRlXHRcdD0gZHNhX2xvb3BfcGh5X3dyaXRlLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ0Olx0LnBvcnRfYnJpZGdlX2pvaW5cdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbixcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NTpcdC5wb3J0X2JyaWRnZV9sZWF2ZVx0PSBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NjpcdC5wb3J0X3N0cF9zdGF0ZV9zZXRcdD0gZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ3Olx0LnBvcnRfdmxhbl9maWx0ZXJpbmdcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0ODpcdC5wb3J0X3ZsYW5fYWRkXHRcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2FkZCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0OTpcdC5wb3J0X3ZsYW5fZGVsXHRcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2RlbCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MDpcdC5wb3J0X2NoYW5nZV9tdHVcdD0gZHNhX2xvb3BfcG9ydF9jaGFuZ2VfbXR1LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzUxOlx0LnBvcnRfbWF4X210dVx0XHQ9IGRzYV9sb29wX3BvcnRfbWF4X210dSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MjpcdC5waHlsaW5rX2dldF9jYXBzXHQ9IGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTMtfTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM1NC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NTpzdGF0aWMgaW50IGRzYV9sb29wX2Rydl9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTYte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU3Olx0c3RydWN0IGRzYV9sb29wX3BkYXRhICpwZGF0YSA9IG1kaW9kZXYtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTg6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTktXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzgyLVx0ZHMtXHUwMDNlZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODM6XHRkcy1cdTAwM2VvcHMgPSBcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODQtXHRkcy1cdTAwM2Vwcml2ID0gcHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk4LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OS1cdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MDA6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MDEtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDEwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDExOnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyMi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyNC1cdC5tZGlvZHJ2LmRyaXZlclx0PSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDI2LVx0fSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyNzpcdC5wcm9iZVx0PSBkc2FfbG9vcF9kcnZfcHJvYmUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjg6XHQucmVtb3ZlXHQ9IGRzYV9sb29wX2Rydl9yZW1vdmUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjk6XHQuc2h1dGRvd24gPSBkc2FfbG9vcF9kcnZfc2h1dGRvd24sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzAtfTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzMS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzMjpzdGF0aWMgaW50IGRzYV9sb29wX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzMtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzNC17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzU6XHRyZXR1cm4gZHJ2ID09IFx1MDAyNmRzYV9sb29wX2Rydi5tZGlvZHJ2LmRyaXZlcjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzNi19XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzctXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mzg6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00Mzkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0NS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0NjpzdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYodm9pZClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDg6XHRzdGF0aWMgc3RydWN0IGRzYV9sb29wX3BkYXRhIGRzYV9sb29wX3BkYXRhID0ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ5LVx0XHQuY2QgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDcwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDcxOlx0c3dpdGNoX21kaW9kZXYtXHUwMDNlYnVzX21hdGNoID0gZHNhX2xvb3BfYnVzX21hdGNoO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDcyOlx0c3dpdGNoX21kaW9kZXYtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGEgPSBcdTAwMjZkc2FfbG9vcF9wZGF0YTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3My1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODEtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODI6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDgzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODc6XHRyZXQgPSBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYoKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk0Olx0cmV0ID0gbWRpb19kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5NS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NjpcdFx0ZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTctXHRcdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAyLX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwMzptb2R1bGVfaW5pdChkc2FfbG9vcF9pbml0KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNTpzdGF0aWMgdm9pZCBfX2V4aXQgZHNhX2xvb3BfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTA2LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcdG1kaW9fZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwODpcdGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3RlcigpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTA5LVx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MTEtfVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTEyOm1vZHVsZV9leGl0KGRzYV9sb29wX2V4aXQpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjE0OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIERTQSBUYWcgUHJvdG9jb2wgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYGRzYV9sb29wLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGl0IGhhbmRsZXMgdGFnIHByb3RvY29scy4gVGhlIGNvZGUgdXNlcyBgZHNhX2xvb3BfZ2V0X3Byb3RvY29sYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCByZXR1cm5zIHNvbWV0aGluZyBsaWtlIGBEU0FfVEFHX1BST1RPX0xPT1BgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgZG9lcyBgZHNhX2xvb3BgIGltcGxlbWVudCBhIGBjaGFuZ2VfdGFnX3Byb3RvY29sYCBmdW5jdGlvbj8gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBoZXJlLCBiZWNhdXNlIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgbW9kdWxlIGNhbiBkeW5hbWljYWxseSBhZGp1c3QgaXRzIHRhZ2dpbmcgbWV0aG9kLgoKU28sIEkgZGl2ZSBiYWNrIGludG8gYGRzYV9sb29wLmNgIHRvIGV4YW1pbmUgdGhlIGBkc2FfbG9vcF9kcml2ZXJgIHN0cnVjdHVyZS4gSSYjMzk7bSBjaGVja2luZyBzcGVjaWZpY2FsbHkgZm9yIHRoZSBwcmVzZW5jZSBvZiBgLmNoYW5nZV90YWdfcHJvdG9jb2xgLiBBaCwgcmlnaHQsIG5vLCBpdCYjMzk7cyBub3QgdGhlcmUhIEl0IHNlZW1zIGBkc2FfbG9vcGAgZG9lc24mIzM5O3QgcHJvdmlkZSBpdHMgb3duIGZ1bmN0aW9uIHRvIGNoYW5nZSB0aGUgdGFnIHByb3RvY29sLgoKTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gYnJvYWRlbiB0aGUgc2NvcGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIG90aGVyIERTQSBzd2l0Y2ggZHJpdmVycyAqZG8qIGltcGxlbWVudCBgY2hhbmdlX3RhZ19wcm90b2NvbGAuIFRpbWUgdG8gY29uc3VsdCB0aGUgYnJvYWRlciBjb2RlYmFzZSBhbmQgc2VlIHdoZXJlIHRoaXMgY2FwYWJpbGl0eSBhY3R1YWxseSByZXNpZGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5jaGFuZ2VfdGFnX3Byb3RvY29sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTcxODc9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdjg4ZTZ4eHhfc3dpdGNoX29wcyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTcxODgtXHQuZ2V0X3RhZ19wcm90b2NvbFx0PSBtdjg4ZTZ4eHhfZ2V0X3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjcxODk6XHQuY2hhbmdlX3RhZ19wcm90b2NvbFx0PSBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTcxOTAtXHQuc2V0dXBcdFx0XHQ9IG12ODhlNnh4eF9zZXR1cCxcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM9MjMwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGZlbGl4X3N3aXRjaF9vcHMgPSB7XG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwNy1cdC5nZXRfdGFnX3Byb3RvY29sXHRcdD0gZmVsaXhfZ2V0X3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYzoyMzA4Olx0LmNoYW5nZV90YWdfcHJvdG9jb2xcdFx0PSBmZWxpeF9jaGFuZ2VfdGFnX3Byb3RvY29sLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzMDktXHQuY29ubmVjdF90YWdfcHJvdG9jb2xcdFx0PSBmZWxpeF9jb25uZWN0X3RhZ19wcm90b2NvbCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jPTMyODU9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBydGw4MzY1bWJfc3dpdGNoX29wcyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMtMzI4Ni1cdC5nZXRfdGFnX3Byb3RvY29sID0gcnRsODM2NW1iX2dldF90YWdfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jOjMyODc6XHQuY2hhbmdlX3RhZ19wcm90b2NvbCA9IHJ0bDgzNjVtYl9jaGFuZ2VfdGFnX3Byb3RvY29sLFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0zMjg4LVx0LnNldHVwID0gcnRsODM2NW1iX3NldHVwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzA5MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRFNBIFRhZyBQcm90b2NvbHMgYW5kIHRoZSBNVDc2MjggRXRoZXJuZXQgU3dpdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2UgRFNBIHRhZyBwcm90b2NvbHMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlOiBgbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2xgLCBgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbGAsIGFuZCBgcnRsODM2NW1iX2NoYW5nZV90YWdfcHJvdG9jb2xgLiBJJiMzOTttIGNoZWNraW5nIHRoZWlyIHN1cHBvcnRlZCBwcm90b2NvbHMuIGBtdjg4ZTZ4eHhgIGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHN0aWNraW5nIHdpdGggRURTQS9EU0EuIFRoZW4gYGZlbGl4YCBvZmZlcnMgb2NlbG90IHZhcmlhbnRzLiBgcnRsODM2NW1iYC4uLiB0aGF0JiMzOTtzIFJUTC1zcGVjaWZpYy4KCk5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgaW52ZXN0aWdhdGUgYGRyaXZlcnMvbmV0L2RzYS9tdDc2MjguY2AuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgd2hhdCB0aGUgYG10NzYyOGAgZGV2aWNlIGlzIGFsbCBhYm91dC4gQWgsIGl0JiMzOTtzIHRoZSBidWlsdC1pbiBFdGhlcm5ldCBzd2l0Y2ggd2l0aGluIHRoZSBNZWRpYVRlayBNVDc2MjggU29DLCBhIE1JUFMgU29DLiBUaGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIHdoYXQgSSYjMzk7ZCBleHBlY3Q6IGBIQVNfSU9NRU1gIGFuZCBlaXRoZXIgYFNPQ19NVDc2MjBgIG9yIGBDT01QSUxFX1RFU1RgLiBJdCYjMzk7cyBhIERldmljZSBUcmVlIHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IG9uIHRoZSBNVDc2MjggU29DLgoKSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBgbXQ3NjI4X2RyaXZlcmAsIHBhcnRpY3VsYXJseSB0aGUgcHJvYmUgZnVuY3Rpb24gYG10NzYyOF9wcm9iZWAuIFRoZSBkcml2ZXIgdXNlcyB0aGUgYCYjMzQ7bWVkaWF0ZWssbXQ3NjI4LWVzdyYjMzQ7YCBjb21wYXRpYmxlIHN0cmluZy4gT2theSwgYW5kIGBuZXQvZHNhL3RhZ19tdDc2MjguY2AgaXMgdGhlIHRhZyBkcml2ZXIgZm9yIGBEU0FfVEFHX1BST1RPX01UNzYyOGAuIFRoZSBwcm90b2NvbCBpcyB1c2VkIGV4Y2x1c2l2ZWx5IGJ5IGBtdDc2MjguY2AgdmlhIHRoZSBgbXQ3NjI4X2dldF90YWdfcHJvdG8oKWAgZnVuY3Rpb24uCgpOb3csIEkmIzM5O20gZ2V0dGluZyBzdXNwaWNpb3VzLiBJcyBgRFNBX1RBR19QUk9UT19NVDc2MjhgIG9ubHkgdXNlZCAqaGVyZSo/IEkgbmVlZCBhIG11Y2ggYnJvYWRlciB2aWV3LiBJJiMzOTttIGdvaW5nIHRvIHNlYXJjaCB0aGUgZW50aXJlIGtlcm5lbCBjb2RlYmFzZS4gVGltZSB0byBgZ3JlcGAgZm9yIGBEU0FfVEFHX1BST1RPX01UNzYyOGAgYW5kIGB0YWdfbXQ3NjI4YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzbiYjMzk7dCByZWZlcmVuY2VkIGVsc2V3aGVyZSwgb3IgdGhhdCBJIGFtIG1pc3Npbmcgc29tZXRoaW5nLiBJIHdhbnQgdG8gc2VlIHRoaXMgd2l0aGluIHRoZSBsYXJnZXIgZnJhbWV3b3JrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoRFNBX1RBR19QUk9UT19NVDc2Mjh8dGFnX210NzYyOCkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7TUFJTlRBSU5FUlM9MTY3OTA9RjpcdGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZmUtc29jLmNcbk1BSU5UQUlORVJTOjE2NzkxOkY6XHRuZXQvZHNhL3RhZ19tdDc2MjguY1xuTUFJTlRBSU5FUlMtMTY3OTItXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jPTU4OD1tdDc2MjhfZ2V0X3RhZ19wcm90byhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtNTg5LXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzo1OTA6XHRyZXR1cm4gRFNBX1RBR19QUk9UT19NVDc2Mjg7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtNTkxLX1cbi0tXG5pbmNsdWRlL25ldC9kc2EuaD0yNj1zdHJ1Y3QgdGNfYWN0aW9uO1xuLS1cbmluY2x1ZGUvbmV0L2RzYS5oLTYyLSNkZWZpbmUgRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFXHRcdDM0XG5pbmNsdWRlL25ldC9kc2EuaDo2MzojZGVmaW5lIERTQV9UQUdfUFJPVE9fTVQ3NjI4X1ZBTFVFXHRcdDM1XG5pbmNsdWRlL25ldC9kc2EuaC02NC1cbmluY2x1ZGUvbmV0L2RzYS5oPTY1PWVudW0gZHNhX3RhZ19wcm90b2NvbCB7XG4tLVxuaW5jbHVkZS9uZXQvZHNhLmgtMTAwLVx0RFNBX1RBR19QUk9UT19LU1o4NDYzXHRcdD0gRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFLFxuaW5jbHVkZS9uZXQvZHNhLmg6MTAxOlx0RFNBX1RBR19QUk9UT19NVDc2MjhcdFx0PSBEU0FfVEFHX1BST1RPX01UNzYyOF9WQUxVRSxcbmluY2x1ZGUvbmV0L2RzYS5oLTEwMi19O1xuLS1cbm5ldC9kc2EvTWFrZWZpbGU9Mjk9b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX0xBTjkzMDMpICYjNDM7PSB0YWdfbGFuOTMwMy5vXG5uZXQvZHNhL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19NVDc2MjgpICYjNDM7PSB0YWdfbXQ3NjI4Lm9cbm5ldC9kc2EvTWFrZWZpbGUtMzEtb2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX01USykgJiM0Mzs9IHRhZ19tdGsub1xuLS1cbm5ldC9kc2EvdGFnX210NzYyOC5jPTEyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIG10NzYyOF90YWdfb3BzID0ge1xubmV0L2RzYS90YWdfbXQ3NjI4LmMtMTIyLVx0Lm5hbWUgPSBNVDc2MjhfVEFHX05BTUUsXG5uZXQvZHNhL3RhZ19tdDc2MjguYzoxMjM6XHQucHJvdG8gPSBEU0FfVEFHX1BST1RPX01UNzYyOCxcbm5ldC9kc2EvdGFnX210NzYyOC5jLTEyNC1cdC54bWl0ID0gbXQ3NjI4X3RhZ194bWl0LFxuLS1cbm5ldC9kc2EvdGFnX210NzYyOC5jPTEyOT1tb2R1bGVfZHNhX3RhZ19kcml2ZXIobXQ3NjI4X3RhZ19vcHMpO1xubmV0L2RzYS90YWdfbXQ3NjI4LmMtMTMwLVxubmV0L2RzYS90YWdfbXQ3NjI4LmM6MTMxOk1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX01UNzYyOCwgTVQ3NjI4X1RBR19OQU1FKTtcbm5ldC9kc2EvdGFnX210NzYyOC5jLTEzMi1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7RFNBIHRhZyBkcml2ZXIgZm9yIE1UNzYyOCBzd2l0Y2hcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODg4NQoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiA4NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLiBUaGUgZGlmZiBzaG93cyBtb2RpZmljYXRpb25zIHRvIGBNQUlOVEFJTkVSU2AsIGEgZHJpdmVyIChgZHJpdmVycy9uZXQvZHNhL210NzYyOC5jYCkgZm9yIHRoZSBNZWRpYVRlayBNVDc2MjggU29DIGVtYmVkZGVkIEV0aGVybmV0IHN3aXRjaCwgYW5kIGl0cyBhc3NvY2lhdGVkIHRhZyBkcml2ZXIgKGBuZXQvZHNhL3RhZ19tdDc2MjguY2ApLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NC4KCk5vdywgSSYjMzk7bSBjaGVja2luZyBhZ2FpbnN0IHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhlIHByb21wdCBjbGVhcmx5IGRlZmluZXMgc2l0dWF0aW9ucyB3aGVyZSBmdXp6aW5nIGlzbiYjMzk7dCB2YWx1YWJsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yOiBub24ta2VybmVsL25vbi1leGVjdXRhYmxlIGNoYW5nZXMsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLgoKQ29uc2lkZXJpbmcgdGhlIE1UNzYyOCBTb0MsIG15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQgaXQmIzM5O3MgbGlrZWx5IGEgY2FzZSBvZiB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gTGV0IG1lIGNvbmZpcm06IHRoZSBkcml2ZXImIzM5O3MgZGVwZW5kZW5jaWVzLCBiYXNlZCBvbiBgbXQ3NjI4LmNgLCBpbmNsdWRlIGBIQVNfSU9NRU1gIGFuZCBlaXRoZXIgYFNPQ19NVDc2MjBgIG9yIGBDT01QSUxFX1RFU1RgLiBJdCBpcyBhbiBgb2ZfZGV2aWNlYCAoRGV2aWNlIFRyZWUpIG1hdGNoaW5nIGBtZWRpYXRlayxtdDc2MjgtZXN3YC4gSG93ZXZlciwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSBzZXR1cHMsIHRoZXJlJiMzOTtzIG5vIERldmljZSBUcmVlIG5vZGUgZm9yIHRoZSBNZWRpYVRlayBNVDc2MjggZW1iZWRkZWQgc3dpdGNoIGhhcmR3YXJlLiBUaGUgTVQ3NjIwL01UNzYyOCBpcyBhIE1JUFMgYXJjaGl0ZWN0dXJlIFNvQy4gRXZlbiB3aXRoIGBDT01QSUxFX1RFU1RgIGVuYWJsZWQgb24geDg2XzY0LCB0aGUgZHJpdmVyICpyZXF1aXJlcyogcGh5c2ljYWwgU29DIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzIGFuZCB0aGUgZGV2aWNlIHRyZWUgbm9kZSB0byBwcm9iZS4gTm8gdmlydHVhbCBkZXZpY2Ugb3IgUUVNVSBlbXVsYXRpb24gZXhpc3RzIGZvciBpdC4KCkZ1cnRoZXJtb3JlLCBgbmV0L2RzYS90YWdfbXQ3NjI4LmNgIGlzIGV4Y2x1c2l2ZWx5IGxpbmtlZCB0byB0aGUgYERTQV9UQUdfUFJPVE9fTVQ3NjI4YCBwcm90b2NvbCwgd2hpY2ggaXMgKm9ubHkqIHVzZWQgd2hlbiBgbXQ3NjI4LmNgIHByb2JlcyBhbmQgYXR0YWNoZXMgaXRzIERTQSBzd2l0Y2guIFNpbmNlIHRoZSBzd2l0Y2ggZHJpdmVyIGNhbiYjMzk7dCBwcm9iZSBvbiBhbWQ2NCBpbiBRRU1VLCB0aGUgYG10NzYyOF90YWdfb3BzYCBmdW5jdGlvbnMgYXJlIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUuIFRoZXkgd2lsbCBuZXZlciBiZSBpbnN0YW50aWF0ZWQgb3IgZXhlY3V0ZWQuCgpUaGVyZWZvcmUsICphbGwqIHRoZSBtb2RpZmllZCBjb2RlIGZhbGxzIGludG8gdGhlICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgY2F0ZWdvcnkgYW5kIHRoZSBub24tZXhlY3V0YWJsZSBkb2N1bWVudGF0aW9uIGZpbGUgYE1BSU5UQUlORVJTYC4gSXQmIzM5O3MgZWl0aGVyIGEgbm9uLWV4ZWN1dGFibGUgbWV0YWRhdGEgZmlsZSBvciBjb2RlIHRoYXQgcmVsaWVzIG9uIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHRoZSB0YXJnZXQgUUVNVSBlbnZpcm9ubWVudC4KCkhlbmNlLCBJIGNhbiBjb25maWRlbnRseSBjb25jbHVkZTogYFdvcnRoRnV6emluZz1mYWxzZWAuIE5vIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBvciBzcGVjaWZpYyBzeW1ib2xzIG5lZWQgdG8gYmUgZm9jdXNlZCBvbi4gSSYjMzk7bGwgc3VtbWFyaXplIGl0IGFzIGEgY29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgdmVyZGljdCwgYW5kIHRoZW4gcHJvY2VlZC4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBNQUlOVEFJTkVSUywgdGhlIE1lZGlhVGVrIE1UNzYyOCBTb0MgZW1iZWRkZWQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzYyOC5jKSwgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWcgZHJpdmVyIChuZXQvZHNhL3RhZ19tdDc2MjguYykuIE1UNzYyOCBpcyBhIHBsYXRmb3JtL1NvQy1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZm9yIE1JUFMtYmFzZWQgTWVkaWFUZWsgU29DcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldmljZSBjYW5ub3QgcHJvYmUgYW5kIHRoZSB0YWcgcHJvdG9jb2wgaXMgb25seSB1c2VkIGJ5IHRoaXMgc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBNQUlOVEFJTkVSUywgdGhlIE1lZGlhVGVrIE1UNzYyOCBTb0MgZW1iZWRkZWQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzYyOC5jKSwgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWcgZHJpdmVyIChuZXQvZHNhL3RhZ19tdDc2MjguYykuIE1UNzYyOCBpcyBhIHBsYXRmb3JtL1NvQy1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZm9yIE1JUFMtYmFzZWQgTWVkaWFUZWsgU29DcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldmljZSBjYW5ub3QgcHJvYmUgYW5kIHRoZSB0YWcgcHJvdG9jb2wgaXMgb25seSB1c2VkIGJ5IHRoaXMgc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTI6MjIuMDMyNjYyMTk3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyOTg4MzAwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNQUlOVEFJTkVSUywgdGhlIE1lZGlhVGVrIE1UNzYyOCBTb0MgZW1iZWRkZWQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzYyOC5jKSwgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWcgZHJpdmVyIChuZXQvZHNhL3RhZ19tdDc2MjguYykuIE1UNzYyOCBpcyBhIHBsYXRmb3JtL1NvQy1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZm9yIE1JUFMtYmFzZWQgTWVkaWFUZWsgU29DcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldmljZSBjYW5ub3QgcHJvYmUgYW5kIHRoZSB0YWcgcHJvdG9jb2wgaXMgb25seSB1c2VkIGJ5IHRoaXMgc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjoyMi4wMzI2Njg1MjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNjEzNDgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA0YjcxNmIxYTlmYTYxOTEwY2RkODE2MzIyZjI4ODAwNThmNDNjOTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAwMTo1MjoyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggYjIzZmI2ZjJmNGVmNC4uOTVlMzYxZjVkMGVkZSAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE2NzgxLDYgKzE2NzgxLDE1IEBAIFM6XFx0TWFpbnRhaW5lZFxcbiBGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvbWVkaWF0ZWssbXQ3NjIxLWkyYy55YW1sXFxuIEY6XFx0ZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdDc2MjEuY1xcbiBcXG4rTUVESUFURUsgTVQ3NjI4IFNXSVRDSCBEUklWRVJcXG4rTTpcXHRKb3JpcyBWYWlzdmlsYSBcXHUwMDNjam9leUB0aW55aXNyLmNvbVxcdTAwM2VcXG4rTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuK1M6XFx0TWFpbnRhaW5lZFxcbitGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzYyOC1lc3cueWFtbFxcbitGOlxcdGRyaXZlcnMvbmV0L2RzYS9tdDc2MjguY1xcbitGOlxcdGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZmUtc29jLmNcXG4rRjpcXHRuZXQvZHNhL3RhZ19tdDc2MjguY1xcbitcXG4gTUVESUFURUsgTVRNSVBTIENMT0NLIERSSVZFUlxcbiBNOlxcdFNlcmdpbyBQYXJhY3VlbGxvcyBcXHUwMDNjc2VyZ2lvLnBhcmFjdWVsbG9zQGdtYWlsLmNvbVxcdTAwM2VcXG4gUzpcXHRNYWludGFpbmVkXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguYyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguY1xcbmluZGV4IGZiNjNmNmY2NDRiOWUuLjYyOWRiZjk2OGExNzEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL210NzYyOC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL210NzYyOC5jXFxuQEAgLTM0LDYgKzM0LDcgQEBcXG4gI2RlZmluZSBNVDc2MjhfRVNXX1JFR19WVUIodmxhbikgKDB4MTAwICsgNCAqICgodmxhbikgLyA0KSlcXG4gI2RlZmluZSBNVDc2MjhfRVNXX1JFR19TT0NQQyAweDhjXFxuICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfUE9DMCAweDkwXFxuKyNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfUE9DMSAweDk0XFxuICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfUE9DMiAweDk4XFxuICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfU0dDIDB4OWNcXG4gI2RlZmluZSBNVDc2MjhfRVNXX1JFR19QQ1IwIDB4YzBcXG5AQCAtOTIsNiArOTMsOSBAQFxcbiBcXG4gI2RlZmluZSBNVDc2MjhfRVNXX1BPQzBfUE9SVF9ESVNBQkxFIEdFTk1BU0soMjksIDIzKVxcbiBcXG4rI2RlZmluZSBNVDc2MjhfRVNXX1BPQzFfUE9SVF9CTE9DS0lOR19TVEFURSBHRU5NQVNLKDIyLCAxNilcXG4rI2RlZmluZSBNVDc2MjhfRVNXX1BPQzFfUE9SVF9ESVNfTEVBUk5JTkcgR0VOTUFTSygxNCwgOClcXG4rXFxuICNkZWZpbmUgTVQ3NjI4X0VTV19QT0MyX1BFUl9WTEFOX1VOVEFHX0VOIEJJVCgxNSlcXG4gXFxuICNkZWZpbmUgTVQ3NjI4X0VTV19TR0NfQUdJTkdfSU5URVJWQUwgR0VOTUFTSygzLCAwKVxcbkBAIC0xMzgsNiArMTQyLDcgQEBcXG4gI2RlZmluZSBNVDc2MjhfRVNXX1BPUlRTX0NQVSBCSVQoNilcXG4gI2RlZmluZSBNVDc2MjhfRVNXX1BPUlRTX0FMTCBHRU5NQVNLKDYsIDApXFxuIFxcbisjZGVmaW5lIE1UNzYyOF9FU1dfTlVNX1VTRVJfUE9SVFMgNVxcbiAjZGVmaW5lIE1UNzYyOF9FU1dfTlVNX1BPUlRTIDdcXG4gI2RlZmluZSBNVDc2MjhfTlVNX1ZMQU5TIDE2XFxuIFxcbkBAIC0xNTEsOCArMTU2LDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBtdDc2MjhfZXN3X3JlZ21hcF9jZmcgPSB7XFxuIFxcdC52YWxfZm9ybWF0X2VuZGlhbiA9IFJFR01BUF9FTkRJQU5fTElUVExFLFxcbiB9O1xcbiBcXG4rZW51bSB7XFxuK1xcdE1UNzYyOF9WTEFOX1RZUEVfQVdBUkUsXFxuK1xcdE1UNzYyOF9WTEFOX1RZUEVfVU5BV0FSRSxcXG4rXFx0TVQ3NjI4X1ZMQU5fVFlQRV9OVU0sXFxuK307XFxuK1xcbiBzdHJ1Y3QgbXQ3NjI4X3ZsYW4ge1xcbi1cXHRib29sIGFjdGl2ZTtcXG4rXFx0dW5zaWduZWQgaW50IHR5cGU7XFxuIFxcdHU4IG1lbWJlcnM7XFxuIFxcdHU4IHVudGFnO1xcbiBcXHR1MTYgdmlkO1xcbkBAIC0xNjMsOSArMTc0LDEwIEBAIHN0cnVjdCBtdDc2MjhfZXN3IHtcXG4gXFx0c3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdF9lc3c7XFxuIFxcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcXG4gXFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzO1xcbi1cXHR1MTYgdGFnXzgwMjFxX3B2aWRbTVQ3NjI4X0VTV19OVU1fUE9SVFNdO1xcbitcXHR1MTYgcHZpZFtNVDc2MjhfVkxBTl9UWVBFX05VTV1bTVQ3NjI4X0VTV19OVU1fUE9SVFNdO1xcbiBcXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gdmxhbnNbTVQ3NjI4X05VTV9WTEFOU107XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4rXFx0dTggdmxhbl9maWx0ZXJpbmc7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IG10NzYyOF9taWlfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcXG5AQCAtMzgzLDIxICszOTUsMTI3IEBAIHN0YXRpYyB2b2lkIG10NzYyOF9lc3dfc2V0X3Z1YihzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3LCB1bnNpZ25lZCBpbnQgdmxhbixcXG4gXFx0XFx0XFx0ICAgTVQ3NjI4X0VTV19WVUJfUFJFUCh2bGFuLCB2dWIpKTtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBtdDc2MjhfdmxhbiAqbXQ3NjI4X2ZpbmRfdmxhbl9ibG9jayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgdTE2IHZpZCwgdW5zaWduZWQgaW50IHR5cGUpXFxuK3tcXG4rXFx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW47XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1UNzYyOF9OVU1fVkxBTlM7IGkrKykge1xcbitcXHRcXHR2bGFuID0gXFx1MDAyNmVzdy1cXHUwMDNldmxhbnNbaV07XFxuK1xcdFxcdGlmICh2bGFuLVxcdTAwM2V2aWQgPT0gdmlkIFxcdTAwMjZcXHUwMDI2IHZsYW4tXFx1MDAzZXR5cGUgPT0gdHlwZSlcXG4rXFx0XFx0XFx0cmV0dXJuIHZsYW47XFxuK1xcdH1cXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKm10NzYyOF9hbGxvY192bGFuX2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdTE2IHZpZCwgdW5zaWduZWQgaW50IHR5cGUpXFxuK3tcXG4rXFx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW47XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1UNzYyOF9OVU1fVkxBTlM7IGkrKykge1xcbitcXHRcXHR2bGFuID0gXFx1MDAyNmVzdy1cXHUwMDNldmxhbnNbaV07XFxuK1xcdFxcdGlmICh2bGFuLVxcdTAwM2V2aWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAodmxhbi1cXHUwMDNldHlwZSAhPSB0eXBlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0dmxhbi1cXHUwMDNldmlkID0gdmlkO1xcbitcXHRcXHRyZXR1cm4gdmxhbjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbXQ3NjI4X3BvcnRfam9pbl92bGFuX2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHUxNiB2aWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwgdTE2IGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IG10NzYyOF9maW5kX3ZsYW5fYmxvY2soZHMsIHZpZCwgdHlwZSk7XFxuK1xcdHN0cnVjdCBtdDc2MjhfZXN3ICplc3cgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlmICghdmxhbilcXG4rXFx0XFx0dmxhbiA9IG10NzYyOF9hbGxvY192bGFuX2Jsb2NrKGRzLCB2aWQsIHR5cGUpO1xcbitcXG4rXFx0aWYgKCF2bGFuKVxcbitcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4rXFxuK1xcdHZsYW4tXFx1MDAzZW1lbWJlcnMgfD0gQklUKHBvcnQpO1xcbitcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19QVklEKVxcbitcXHRcXHRlc3ctXFx1MDAzZXB2aWRbdHlwZV1bcG9ydF0gPSB2aWQ7XFxuK1xcdGVsc2UgaWYgKGVzdy1cXHUwMDNlcHZpZFt0eXBlXVtwb3J0XSA9PSB2aWQpXFxuK1xcdFxcdGVzdy1cXHUwMDNlcHZpZFt0eXBlXVtwb3J0XSA9IDA7XFxuK1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEKVxcbitcXHRcXHR2bGFuLVxcdTAwM2V1bnRhZyB8PSBCSVQocG9ydCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmxhbi1cXHUwMDNldW50YWcgXFx1MDAyNj0gfkJJVChwb3J0KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbXQ3NjI4X3BvcnRfbGVhdmVfdmxhbl9ibG9jayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHRcXHR1MTYgdmlkLCB1bnNpZ25lZCBpbnQgdHlwZSlcXG4re1xcbitcXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW4gPSBtdDc2MjhfZmluZF92bGFuX2Jsb2NrKGRzLCB2aWQsIHR5cGUpO1xcbitcXHRzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAoIXZsYW4pXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0aWYgKGVzdy1cXHUwMDNlcHZpZFt0eXBlXVtwb3J0XSA9PSB2aWQpXFxuK1xcdFxcdGVzdy1cXHUwMDNlcHZpZFt0eXBlXVtwb3J0XSA9IDA7XFxuK1xcdHZsYW4tXFx1MDAzZW1lbWJlcnMgXFx1MDAyNj0gfkJJVChwb3J0KTtcXG4rXFx0dmxhbi1cXHUwMDNldW50YWcgXFx1MDAyNj0gfkJJVChwb3J0KTtcXG4rXFx0LypcXG4rXFx0ICogRnJlZSB0aGUgdmxhbiBpZiB3ZSdyZSB0aGUgbGFzdCBtZW1iZXIgb2YgaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXZsYW4tXFx1MDAzZW1lbWJlcnMpXFxuK1xcdFxcdHZsYW4tXFx1MDAzZXZpZCA9IDA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBtdDc2Mjhfdmxhbl9zeW5jKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4ge1xcbiBcXHRzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuIFxcdGludCBpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1UNzYyOF9OVU1fVkxBTlM7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW4gPSBcXHUwMDI2ZXN3LVxcdTAwM2V2bGFuc1tpXTtcXG4rXFx0XFx0dTggbWVtYmVyX21hc2s7XFxuK1xcbitcXHRcXHRpZiAodmxhbi1cXHUwMDNldHlwZSA9PSBNVDc2MjhfVkxBTl9UWVBFX0FXQVJFKVxcbitcXHRcXHRcXHRtZW1iZXJfbWFzayA9IGVzdy1cXHUwMDNldmxhbl9maWx0ZXJpbmc7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bWVtYmVyX21hc2sgPSB+ZXN3LVxcdTAwM2V2bGFuX2ZpbHRlcmluZztcXG4rXFx0XFx0bWVtYmVyX21hc2sgfD0gTVQ3NjI4X0VTV19QT1JUU19DUFU7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFB1dCBWTEFOIGZpbHRlcmluZyBwb3J0cyBvbmx5IGludG8gVkxBTiBhd2FyZSBWTEFOcyBhbmRcXG4rXFx0XFx0ICogbm9uIFZMQU4gZmlsdGVyaW5nIHBvcnRzIGludG8gVkxBTiB1bmF3YXJlIFZMQU5zLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBDUFUgbWF5IG5vdCBiZSByZW1vdmVkIGZyb20gYW55IFZMQU4sIGFzIFZMQU4gZmlsdGVyaW5nXFxuK1xcdFxcdCAqIGFwcGxpZXMgb25seSB0byB1c2VyIHBvcnRzLlxcbitcXHRcXHQgKi9cXG4gXFxuLVxcdFxcdG10NzYyOF9lc3dfc2V0X3Ztc2MoZXN3LCBpLCB2bGFuLVxcdTAwM2VtZW1iZXJzKTtcXG4gXFx0XFx0bXQ3NjI4X2Vzd19zZXRfdmxhbl9pZChlc3csIGksIHZsYW4tXFx1MDAzZXZpZCk7XFxuLVxcdFxcdG10NzYyOF9lc3dfc2V0X3Z1Yihlc3csIGksIHZsYW4tXFx1MDAzZXVudGFnKTtcXG4rXFx0XFx0bXQ3NjI4X2Vzd19zZXRfdm1zYyhlc3csIGksIHZsYW4tXFx1MDAzZW1lbWJlcnMgXFx1MDAyNiBtZW1iZXJfbWFzayk7XFxuK1xcdFxcdG10NzYyOF9lc3dfc2V0X3Z1Yihlc3csIGksIHZsYW4tXFx1MDAzZXVudGFnIFxcdTAwMjYgbWVtYmVyX21hc2spO1xcbitcXG4gXFx0fVxcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRzLVxcdTAwM2VudW1fcG9ydHM7IGkrKylcXG4tXFx0XFx0bXQ3NjI4X2Vzd19zZXRfcHZpZChlc3csIGksIGVzdy1cXHUwMDNldGFnXzgwMjFxX3B2aWRbaV0pO1xcbitcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHR5cGUgPSBCSVQoZHAtXFx1MDAzZWluZGV4KSBcXHUwMDI2IGVzdy1cXHUwMDNldmxhbl9maWx0ZXJpbmcgP1xcbitcXHRcXHQgICAgTVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSA6IE1UNzYyOF9WTEFOX1RZUEVfVU5BV0FSRTtcXG4rXFx0XFx0bXQ3NjI4X2Vzd19zZXRfcHZpZChlc3csIGRwLVxcdTAwM2VpbmRleCwgZXN3LVxcdTAwM2VwdmlkW3R5cGVdW2RwLVxcdTAwM2VpbmRleF0pO1xcbitcXHR9XFxuK1xcdHJlZ21hcF91cGRhdGVfYml0cyhlc3ctXFx1MDAzZXJlZ21hcCwgTVQ3NjI4X0VTV19SRUdfU0dDMixcXG4rXFx0XFx0XFx0ICAgTVQ3NjI4X0VTV19TR0MyX0RPVUJMRV9UQUdfRU4sXFxuK1xcdFxcdFxcdCAgIEZJRUxEX1BSRVAoTVQ3NjI4X0VTV19TR0MyX0RPVUJMRV9UQUdfRU4sXFxuK1xcdFxcdFxcdFxcdCAgICAgIE1UNzYyOF9FU1dfUE9SVFNfTk9DUFUgXFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgICB+ZXN3LVxcdTAwM2V2bGFuX2ZpbHRlcmluZykpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG10NzYyOF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuQEAgLTQyNSw2ICs1NDMsMTkgQEAgc3RhdGljIGludCBtdDc2Mjhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4rXFx0LypcXG4rXFx0ICogRGVkaWNhdGUgdGhlIGZpcnN0IG51bV91c2VyX3BvcnRzICsgMSBWTEFOIHNsb3RzIGZvciB0YWdfODAyMXEuXFxuK1xcdCAqIFNpbmNlIGJyaWRnZXMgYXJlIG9ubHkgb2ZmbG9hZGVkIHdoZW4gdGhleSBoYXZlIGF0IGxlYXN0IG9uZSBtZW1iZXJcXG4rXFx0ICogcG9ydCwgdGhlIHdvcnN0IGNhc2UgZW50cnkgcmVxdWlyZW1lbnQgaXMgMSBwZXIgcG9ydC4gVGhlIGV4dHJhIHNsb3RcXG4rXFx0ICogaXMgbmVlZGVkIGJlY2F1c2Ugd2hlbiBjaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbiwgdGFnXzgwMjFxIGFkZHMgYVxcbitcXHQgKiBuZXcgVkxBTiBiZWZvcmUgcmVtb3ZpbmcgdGhlIG9sZCBvbmUuIFRoZSByZXN0IG9mIHRoZSBWTEFOIHNsb3RzIGNhblxcbitcXHQgKiBiZSB1c2VkIGZvciBmaWx0ZXJpbmcuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIE1UNzYyOF9FU1dfTlVNX1VTRVJfUE9SVFMgKyAxOyBpKyspXFxuK1xcdFxcdGVzdy1cXHUwMDNldmxhbnNbaV0udHlwZSA9IE1UNzYyOF9WTEFOX1RZUEVfVU5BV0FSRTtcXG4rXFxuK1xcdGRzLVxcdTAwM2VtYXhfbnVtX2JyaWRnZXMgPSBEU0FfVEFHXzgwMjFRX01BWF9OVU1fQlJJREdFUztcXG4rXFxuIFxcdHJ0bmxfbG9jaygpO1xcbiBcXHRyZXQgPSBkc2FfdGFnXzgwMjFxX3JlZ2lzdGVyKGRzLCBodG9ucyhFVEhfUF84MDIxUSkpO1xcbiBcXHRydG5sX3VubG9jaygpO1xcbkBAIC00NzksNzEgKzYxMCw5NyBAQCBzdGF0aWMgdm9pZCBtdDc2MjhfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBzdGF0aWMgaW50IG10NzYyOF9kc2FfODAyMXFfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0XFx0XFx0XFx0ICAgICB1MTYgdmlkLCB1MTYgZmxhZ3MpXFxuIHtcXG4tXFx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVxcdTAwM2Vwcml2O1xcbi1cXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW4gPSBOVUxMO1xcbi1cXHRpbnQgaTtcXG4tXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNVDc2MjhfTlVNX1ZMQU5TOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IG10NzYyOF92bGFuICpjaGVja192bGFuID0gXFx1MDAyNmVzdy1cXHUwMDNldmxhbnNbaV07XFxuLVxcbi1cXHRcXHRpZiAoIWNoZWNrX3ZsYW4tXFx1MDAzZWFjdGl2ZSBcXHUwMDI2XFx1MDAyNiAhdmxhbilcXG4tXFx0XFx0XFx0dmxhbiA9IGNoZWNrX3ZsYW47XFxuLVxcbi1cXHRcXHRpZiAoY2hlY2tfdmxhbi1cXHUwMDNlYWN0aXZlIFxcdTAwMjZcXHUwMDI2IGNoZWNrX3ZsYW4tXFx1MDAzZXZpZCA9PSB2aWQpIHtcXG4tXFx0XFx0XFx0dmxhbiA9IGNoZWNrX3ZsYW47XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghdmxhbilcXG4tXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLVxcbi1cXHR2bGFuLVxcdTAwM2V2aWQgPSB2aWQ7XFxuLVxcdHZsYW4tXFx1MDAzZWFjdGl2ZSA9IHRydWU7XFxuLVxcdHZsYW4tXFx1MDAzZW1lbWJlcnMgfD0gQklUKHBvcnQpO1xcbi1cXG4tXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19QVklEKVxcbi1cXHRcXHRlc3ctXFx1MDAzZXRhZ184MDIxcV9wdmlkW3BvcnRdID0gdmlkO1xcbi1cXG4tXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRClcXG4tXFx0XFx0dmxhbi1cXHUwMDNldW50YWcgfD0gQklUKHBvcnQpO1xcbi1cXG4rXFx0aW50IHJldCA9XFxuK1xcdCAgICBtdDc2MjhfcG9ydF9qb2luX3ZsYW5fYmxvY2soZHMsIHBvcnQsIHZpZCwgTVQ3NjI4X1ZMQU5fVFlQRV9VTkFXQVJFLFxcbitcXHRcXHRcXHRcXHRcXHRmbGFncyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdG10NzYyOF92bGFuX3N5bmMoZHMpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBtdDc2MjhfZHNhXzgwMjFxX3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHUxNiB2aWQpXFxuIHtcXG4tXFx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVxcdTAwM2Vwcml2O1xcbi1cXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW4gPSBOVUxMO1xcbi1cXHRpbnQgaTtcXG4rXFx0aW50IHJldCA9IG10NzYyOF9wb3J0X2xlYXZlX3ZsYW5fYmxvY2soZHMsIHBvcnQsIHZpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIE1UNzYyOF9WTEFOX1RZUEVfVU5BV0FSRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdG10NzYyOF92bGFuX3N5bmMoZHMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1UNzYyOF9OVU1fVkxBTlM7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKmNoZWNrX3ZsYW4gPSBcXHUwMDI2ZXN3LVxcdTAwM2V2bGFuc1tpXTtcXG4rc3RhdGljIGludCBtdDc2MjhfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgICBib29sIHZsYW5fZmlsdGVyaW5nLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXG4tXFx0XFx0aWYgKCFjaGVja192bGFuLVxcdTAwM2VhY3RpdmUgfHwgY2hlY2tfdmxhbi1cXHUwMDNldmlkICE9IHZpZClcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdHZsYW4gPSBjaGVja192bGFuO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0fVxcbi1cXHRpZiAoIXZsYW4pXFxuLVxcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHRpZiAodmxhbl9maWx0ZXJpbmcpXFxuK1xcdFxcdGVzdy1cXHUwMDNldmxhbl9maWx0ZXJpbmcgfD0gQklUKHBvcnQpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGVzdy1cXHUwMDNldmxhbl9maWx0ZXJpbmcgXFx1MDAyNj0gfkJJVChwb3J0KTtcXG4rXFx0bXQ3NjI4X3ZsYW5fc3luYyhkcyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuIFxcbi1cXHRpZiAoZXN3LVxcdTAwM2V0YWdfODAyMXFfcHZpZFtwb3J0XSA9PSB2aWQpXFxuLVxcdFxcdGVzdy1cXHUwMDNldGFnXzgwMjFxX3B2aWRbcG9ydF0gPSAwO1xcbitzdGF0aWMgaW50IG10NzYyOF9wb3J0X3ZsYW5fYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbl9ibG9jaztcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpvdGhlcl9kcDtcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdHZsYW4tXFx1MDAzZW1lbWJlcnMgXFx1MDAyNj0gfkJJVChwb3J0KTtcXG4tXFx0dmxhbi1cXHUwMDNldW50YWcgXFx1MDAyNj0gfkJJVChwb3J0KTtcXG4rXFx0aWYgKHZpZF9pc19kc2FfODAyMXEodmxhbi1cXHUwMDNldmlkKSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwiUmFuZ2UgMzA3Mi00MDk1IHJlc2VydmVkIGZvciBkc2FfODAyMXEgb3BlcmF0aW9uXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdH1cXG4gXFxuLVxcdGlmICghdmxhbi1cXHUwMDNlbWVtYmVycykge1xcbi1cXHRcXHR2bGFuLVxcdTAwM2VhY3RpdmUgPSBmYWxzZTtcXG4tXFx0XFx0dmxhbi1cXHUwMDNldmlkID0gMDtcXG4rXFx0dmxhbl9ibG9jayA9XFxuK1xcdCAgICBtdDc2MjhfZmluZF92bGFuX2Jsb2NrKGRzLCB2bGFuLVxcdTAwM2V2aWQsIE1UNzYyOF9WTEFOX1RZUEVfQVdBUkUpO1xcbitcXHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcXG4rXFx0LypcXG4rXFx0ICogQ1BVIHBvcnQgY2FuIGJlIGFkZGVkIHRvIGFueSBWTEFOcywgYnV0IHVzZXIgcG9ydHMgbmVlZCB0byBlbnN1cmUsXFxuK1xcdCAqIHRoYXQgaWYgdGhlIFZMQU4gYWxyZWFkeSBleGlzdHMgaXQncyBub3QgdXNlZCBieSBhIGJyaWRnZSB3ZSdyZSBub3RcXG4rXFx0ICogYSBtZW1iZXIgb2YsIGJlY2F1c2UgVkxBTnMgYXJlIHRoZSBvbmx5IGZvcm0gb2YgZm9yd2FyZGluZyBjb250cm9sXFxuK1xcdCAqIHdlIGhhdmUgb24gdGhpcyBzd2l0Y2guXFxuK1xcdCAqL1xcbitcXHRpZiAodmxhbl9ibG9jayBcXHUwMDI2XFx1MDAyNiAhZHNhX3BvcnRfaXNfY3B1KGRwKSkge1xcbitcXHRcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChvdGhlcl9kcCwgZHMpIHtcXG4rXFx0XFx0XFx0aWYgKG90aGVyX2RwID09IGRwKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0aWYgKG90aGVyX2RwLVxcdTAwM2VicmlkZ2UgPT0gZHAtXFx1MDAzZWJyaWRnZSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdGlmICghKHZsYW5fYmxvY2stXFx1MDAzZW1lbWJlcnMgXFx1MDAyNiBCSVQob3RoZXJfZHAtXFx1MDAzZWluZGV4KSkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiVkxBTiBJRCB1c2VkIG9uIGFub3RoZXIgYnJpZGdlXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbitcXHRyZXQgPVxcbitcXHQgICAgbXQ3NjI4X3BvcnRfam9pbl92bGFuX2Jsb2NrKGRzLCBwb3J0LCB2bGFuLVxcdTAwM2V2aWQsXFxuK1xcdFxcdFxcdFxcdFxcdE1UNzYyOF9WTEFOX1RZUEVfQVdBUkUsIHZsYW4tXFx1MDAzZWZsYWdzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdG10NzYyOF92bGFuX3N5bmMoZHMpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBtdDc2MjhfcG9ydF92bGFuX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4pXFxuK3tcXG4rXFx0aW50IHJldCA9IG10NzYyOF9wb3J0X2xlYXZlX3ZsYW5fYmxvY2soZHMsIHBvcnQsIHZsYW4tXFx1MDAzZXZpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIE1UNzYyOF9WTEFOX1RZUEVfQVdBUkUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRtdDc2Mjhfdmxhbl9zeW5jKGRzKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIG10NzYyOF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIHtcXG4gXFx0cnRubF9sb2NrKCk7XFxuQEAgLTU1MSw2ICs3MDgsNDAgQEAgc3RhdGljIHZvaWQgbXQ3NjI4X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0cnRubF91bmxvY2soKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbXQ3NjI4X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRib29sIGZvcndhcmRfZGlzYWJsZTtcXG4rXFx0Ym9vbCBsZWFybl9kaXNhYmxlO1xcbitcXG4rXFx0c3dpdGNoIChzdGF0ZSkge1xcbitcXHRjYXNlIEJSX1NUQVRFX0RJU0FCTEVEOlxcbitcXHRjYXNlIEJSX1NUQVRFX0JMT0NLSU5HOlxcbitcXHRjYXNlIEJSX1NUQVRFX0xJU1RFTklORzpcXG4rXFx0XFx0Zm9yd2FyZF9kaXNhYmxlID0gdHJ1ZTtcXG4rXFx0XFx0bGVhcm5fZGlzYWJsZSA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJSX1NUQVRFX0xFQVJOSU5HOlxcbitcXHRcXHRmb3J3YXJkX2Rpc2FibGUgPSB0cnVlO1xcbitcXHRcXHRsZWFybl9kaXNhYmxlID0gZmFsc2U7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJSX1NUQVRFX0ZPUldBUkRJTkc6XFxuK1xcdFxcdGZvcndhcmRfZGlzYWJsZSA9IGZhbHNlO1xcbitcXHRcXHRsZWFybl9kaXNhYmxlID0gZmFsc2U7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRkZXZfZXJyKGRzLVxcdTAwM2VkZXYsIFxcXCJpbnZhbGlkIFNUUCBzdGF0ZTogJWRcXFxcblxcXCIsIHN0YXRlKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRyZWdtYXBfYXNzaWduX2JpdHMoZXN3LVxcdTAwM2VyZWdtYXAsIE1UNzYyOF9FU1dfUkVHX1BPQzEsXFxuK1xcdFxcdFxcdCAgIEZJRUxEX1BSRVAoTVQ3NjI4X0VTV19QT0MxX1BPUlRfRElTX0xFQVJOSU5HLFxcbitcXHRcXHRcXHRcXHQgICAgICBCSVQocG9ydCkpLCBsZWFybl9kaXNhYmxlKTtcXG4rXFx0cmVnbWFwX2Fzc2lnbl9iaXRzKGVzdy1cXHUwMDNlcmVnbWFwLCBNVDc2MjhfRVNXX1JFR19QT0MxLFxcbitcXHRcXHRcXHQgICBGSUVMRF9QUkVQKE1UNzYyOF9FU1dfUE9DMV9QT1JUX0JMT0NLSU5HX1NUQVRFLFxcbitcXHRcXHRcXHRcXHQgICAgICBCSVQocG9ydCkpLCBmb3J3YXJkX2Rpc2FibGUpO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG10NzYyOF9zd2l0Y2hfb3BzID0ge1xcbiBcXHQuZ2V0X3RhZ19wcm90b2NvbCA9IG10NzYyOF9nZXRfdGFnX3Byb3RvLFxcbiBcXHQuc2V0dXAgPSBtdDc2Mjhfc2V0dXAsXFxuQEAgLTU2MCw2ICs3NTEsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdDc2Mjhfc3dpdGNoX29wcyA9IHtcXG4gXFx0LnBoeWxpbmtfZ2V0X2NhcHMgPSBtdDc2MjhfcGh5bGlua19nZXRfY2FwcyxcXG4gXFx0LnRhZ184MDIxcV92bGFuX2FkZCA9IG10NzYyOF9kc2FfODAyMXFfdmxhbl9hZGQsXFxuIFxcdC50YWdfODAyMXFfdmxhbl9kZWwgPSBtdDc2MjhfZHNhXzgwMjFxX3ZsYW5fZGVsLFxcbitcXHQucG9ydF9icmlkZ2Vfam9pbiA9IGRzYV90YWdfODAyMXFfYnJpZGdlX2pvaW4sXFxuK1xcdC5wb3J0X2JyaWRnZV9sZWF2ZSA9IGRzYV90YWdfODAyMXFfYnJpZGdlX2xlYXZlLFxcbitcXHQucG9ydF9zdHBfc3RhdGVfc2V0ID0gbXQ3NjI4X3N0cF9zdGF0ZV9zZXQsXFxuK1xcdC5wb3J0X3ZsYW5fZmlsdGVyaW5nID0gbXQ3NjI4X3BvcnRfdmxhbl9maWx0ZXJpbmcsXFxuK1xcdC5wb3J0X3ZsYW5fYWRkID0gbXQ3NjI4X3BvcnRfdmxhbl9hZGQsXFxuK1xcdC5wb3J0X3ZsYW5fZGVsID0gbXQ3NjI4X3BvcnRfdmxhbl9kZWwsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IG10NzYyOF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19tdDc2MjguYyBiL25ldC9kc2EvdGFnX210NzYyOC5jXFxuaW5kZXggODBiNTBmZjA4ZTUzZi4uN2M3MWU4YjA4NjQ4MSAxMDA2NDRcXG4tLS0gYS9uZXQvZHNhL3RhZ19tdDc2MjguY1xcbisrKyBiL25ldC9kc2EvdGFnX210NzYyOC5jXFxuQEAgLTYsNiArNiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RzYS84MDIxcS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInRhZy5oXFxcIlxcbkBAIC0xNSwxMyArMTYsMTYgQEBcXG4gICogT24gVFggdGhlIGxvd2VyIDYgYml0cyBlbmNvZGUgdGhlIGRlc3RpbmF0aW9uIHBvcnQgYml0bWFzay5cXG4gICogT24gUlggdGhlIGxvd2VyIDMgYml0cyBlbmNvZGUgdGhlIHNvdXJjZSBwb3J0IG51bWJlci5cXG4gICpcXG4tICogVGhlIHN3aXRjaCBoYXJkd2FyZSB3aWxsIG5vdCBtb2RpZnkgdGhlIFRQSUQgb2YgYW4gaW5jb21pbmcgcGFja2V0IGlmIGl0IGlzXFxuLSAqIGFscmVhZHkgVkxBTiB0YWdnZWQuIFRvIHdvcmsgYXJvdW5kIHRoaXMgdGhlIHN3aXRjaCBpcyBjb25maWd1cmVkIHRvIGFsd2F5c1xcbi0gKiBhcHBlbmQgYSB0YWdfODAyMXEgc3RhbmRhbG9uZSBWTEFOIHRhZyBmb3IgZWFjaCBwb3J0LiBUaGF0IG1lYW5zIHdlIGNhblxcbi0gKiBzYWZlbHkgc3RyaXAgdGhlIG91dGVyIFZMQU4gdGFnIGFmdGVyIHBhcnNpbmcgaXQuXFxuKyAqIFRoZSBzd2l0Y2ggY2FuIG9ubHkgdXNlIFZMQU5zIGZvciBmb3J3YXJkaW5nIGNvbnRyb2wuIFZMQU4tdW5hd2FyZSBicmlkZ2VzXFxuKyAqIGFyZSBzaW11bGF0ZWQgdXNpbmcgdGFnXzgwMjFxIGFuZCBkb3VibGUgdGFnZ2luZywgd2hpbGUgVkxBTi1hd2FyZSBicmlkZ2VzXFxuKyAqIHVzZSB0aGUgVkxBTnMgY29uZmlndXJlZCBieSB0aGUgYnJpZGdlIGRpcmVjdGx5LlxcbiAgKlxcbi0gKiBBIFZMQU4gdGFnIGlzIGNvbnN0cnVjdGVkIG9uIGVncmVzcyB0byB0YXJnZXQgdGhlIHN0YW5kYWxvbmUgVkxBTiBhbmRcXG4tICogZGVzdGluYXRpb24gcG9ydC5cXG4rICogT24gZWdyZXNzLCB0aGUgdGFnZ2VyIGVpdGhlciBhZGRzIGEgbmV3IE1UNzYyOCB0YWcgdGhhdCBjb250YWlucyB0aGVcXG4rICogc3RhbmRhbG9uZSBvciBicmlkZ2UgdGFnXzgwMjFxIFZMQU4gYW5kIGRlc3RpbmF0aW9uIHBvcnQgbWFzaywgb3IgbW9kaWZpZXNcXG4rICogYW4gZXhpc3RpbmcgVkxBTiB0YWcgdG8gY29udGFpbiB0aGUgZGVzdGluYXRpb24gcG9ydCBtYXNrLlxcbisgKlxcbisgKiBPbiBpbmdyZXNzLCB0aGUgVkxBTiB0YWcgaXMgcmVzdG9yZWQgYWZ0ZXIgc3RyaXBwaW5nIHRoZSBNVDc2MjggdGFnLCBpZiBpdFxcbisgKiBpcyBub3QgYSB0YWdfODAyMXEgVkxBTi5cXG4gICovXFxuIFxcbiAjZGVmaW5lIE1UNzYyOF9UQUdfTkFNRSBcXFwibXQ3NjI4XFxcIlxcbkBAIC0zNCwyMCArMzgsMzUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0dTE2IHhtaXRfdHBpZDtcXG4gXFx0dTE2IHhtaXRfdmxhbjtcXG4gXFx0X19iZTE2ICp0YWc7XFxuIFxcbitcXHR4bWl0X3RwaWQgPVxcbitcXHQgICAgRVRIX1BfODAyMVEgfCBGSUVMRF9QUkVQKE1UNzYyOF9UQUdfVFhfUE9SVCxcXG4rXFx0XFx0XFx0XFx0ICAgICBkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBkZXYpKTtcXG4gXFx0ZHAgPSBkc2FfdXNlcl90b19wb3J0KGRldik7XFxuLVxcdHhtaXRfdmxhbiA9IGRzYV90YWdfODAyMXFfc3RhbmRhbG9uZV92aWQoZHApO1xcbitcXHRpZiAoc2tiLVxcdTAwM2VvZmZsb2FkX2Z3ZF9tYXJrIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBicl92bGFuX2VuYWJsZWQoZHNhX3BvcnRfYnJpZGdlX2Rldl9nZXQoZHApKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBPbiBWTEFOIGF3YXJlIHBvcnRzIG9ubHkgbW9kaWZ5IHRoZSBUUElEIHRvIGNvbnRhaW4gdGhlXFxuK1xcdFxcdCAqIE1UNzYyOCBlZ3Jlc3MgcG9ydCBtZXRhZGF0YSwgaW5zdGVhZCBvZiBhZGRpbmcgYSBuZXcgdmxhbiB0YWdcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3R4KHNrYik7XFxuK1xcdFxcdHRhZ1swXSA9IGh0b25zKHhtaXRfdHBpZCk7XFxuK1xcdFxcdHJldHVybiBza2I7XFxuK1xcdH1cXG4rXFxuK1xcdHhtaXRfdmxhbiA9IHNrYi1cXHUwMDNlb2ZmbG9hZF9md2RfbWFyayA/XFxuK1xcdCAgICBkc2FfdGFnXzgwMjFxX2JyaWRnZV92aWQoZHNhX3BvcnRfYnJpZGdlX251bV9nZXQoZHApKSA6XFxuK1xcdCAgICBkc2FfdGFnXzgwMjFxX3N0YW5kYWxvbmVfdmlkKGRwKTtcXG4gXFxuIFxcdHNrYl9wdXNoKHNrYiwgTVQ3NjI4X1RBR19MRU4pO1xcbiBcXHRkc2FfYWxsb2NfZXR5cGVfaGVhZGVyKHNrYiwgTVQ3NjI4X1RBR19MRU4pO1xcbiBcXG4gXFx0dGFnID0gZHNhX2V0eXBlX2hlYWRlcl9wb3NfdHgoc2tiKTtcXG4gXFxuLVxcdHRhZ1swXSA9IGh0b25zKEVUSF9QXzgwMjFRIHxcXG4tXFx0XFx0ICAgICAgIEZJRUxEX1BSRVAoTVQ3NjI4X1RBR19UWF9QT1JULFxcbi1cXHRcXHRcXHRcXHQgIGRzYV94bWl0X3BvcnRfbWFzayhza2IsIGRldikpKTtcXG4rXFx0dGFnWzBdID0gaHRvbnMoeG1pdF90cGlkKTtcXG4gXFx0dGFnWzFdID0gaHRvbnMoeG1pdF92bGFuKTtcXG4gXFxuIFxcdHJldHVybiBza2I7XFxuQEAgLTU2LDcgKzc1LDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXQ3NjI4X3RhZ194bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXQ3NjI4X3RhZ19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbitcXHR1bnNpZ25lZCBpbnQgc291cmNlX3BvcnQ7XFxuK1xcdGJvb2wgaXNfZHNhXzgwMjFxO1xcbiBcXHRfX2JlMTYgKnBoZHI7XFxuK1xcdHUxNiB0Y2ksIHZpZDtcXG4gXFxuIFxcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIE1UNzYyOF9UQUdfTEVOKSkpIHtcXG4gXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuQEAgLTY0LDkgKzg2LDIzIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXQ3NjI4X3RhZ19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0fVxcbiBcXG4gXFx0cGhkciA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3J4KHNrYik7XFxuLVxcdHNrYi1cXHUwMDNlZGV2ID1cXG4tXFx0ICAgIGRzYV9jb25kdWl0X2ZpbmRfdXNlcihkZXYsIDAsXFxuLVxcdFxcdFxcdFxcdCAgRklFTERfR0VUKE1UNzYyOF9UQUdfUlhfUE9SVCwgbnRvaHMoKnBoZHIpKSk7XFxuK1xcdHNvdXJjZV9wb3J0ID0gRklFTERfR0VUKE1UNzYyOF9UQUdfUlhfUE9SVCwgbnRvaHMoKnBoZHIpKTtcXG4rXFx0dGNpID0gbnRvaHMocGhkclsxXSk7XFxuK1xcdHZpZCA9IHRjaSBcXHUwMDI2IFZMQU5fVklEX01BU0s7XFxuK1xcdGlzX2RzYV84MDIxcSA9IHZpZF9pc19kc2FfODAyMXEodmlkKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBzb3VyY2UgcG9ydCBpbmZvIGlzIG9ubHkgZW5jb2RlZCBpbiB0aGUgVFBJRCBmaWVsZCBmb3IgcGFja2V0c1xcbitcXHQgKiB3aGVyZSB0aGUgVkxBTiB0YWcgaXMgaW5zZXJ0ZWQgYnkgdGhlIFBWSUQgbWVjaGFuaXNtLiBXaXRoIFZMQU5cXG4rXFx0ICogZmlsdGVyaW5nIGVuYWJsZWQsIFZMQU4tdGFnZ2VkIGluZ3Jlc3MgcGFja2V0cyBhcHBlYXIgYXMgaWYgdGhleSdyZVxcbitcXHQgKiBvcmlnaW5hdGluZyBvbiBwb3J0IDAuIFVzZSB0aGUgVklEIHRvIGlkZW50aWZ5IHRoZSBicmlkZ2UgcG9ydCBpblxcbitcXHQgKiB0aGlzIGNhc2UuXFxuK1xcdCAqL1xcbitcXHRpZiAoc291cmNlX3BvcnQgPT0gMCBcXHUwMDI2XFx1MDAyNiAhaXNfZHNhXzgwMjFxKVxcbitcXHRcXHRza2ItXFx1MDAzZWRldiA9IGRzYV9maW5kX2Rlc2lnbmF0ZWRfYnJpZGdlX3BvcnRfYnlfdmlkKGRldiwgdmlkKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRza2ItXFx1MDAzZWRldiA9IGRzYV9jb25kdWl0X2ZpbmRfdXNlcihkZXYsIDAsIHNvdXJjZV9wb3J0KTtcXG4rXFxuIFxcdGlmICghc2tiLVxcdTAwM2VkZXYpIHtcXG4gXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbkBAIC03NSw2ICsxMTEsMTAgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRza2JfcHVsbF9yY3N1bShza2IsIE1UNzYyOF9UQUdfTEVOKTtcXG4gXFx0ZHNhX3N0cmlwX2V0eXBlX2hlYWRlcihza2IsIE1UNzYyOF9UQUdfTEVOKTtcXG4gXFx0ZHNhX2RlZmF1bHRfb2ZmbG9hZF9md2RfbWFyayhza2IpO1xcbitcXG4rXFx0aWYgKCFpc19kc2FfODAyMXEpXFxuK1xcdFxcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHRjaSk7XFxuK1xcbiBcXHRyZXR1cm4gc2tiO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjoyMi43NTk1NDU0OTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU1NTcxOTE4OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNQUlOVEFJTkVSUywgdGhlIE1lZGlhVGVrIE1UNzYyOCBTb0MgZW1iZWRkZWQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzYyOC5jKSwgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWcgZHJpdmVyIChuZXQvZHNhL3RhZ19tdDc2MjguYykuIE1UNzYyOCBpcyBhIHBsYXRmb3JtL1NvQy1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZm9yIE1JUFMtYmFzZWQgTWVkaWFUZWsgU29DcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldmljZSBjYW5ub3QgcHJvYmUgYW5kIHRoZSB0YWcgcHJvdG9jb2wgaXMgb25seSB1c2VkIGJ5IHRoaXMgc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA0YjcxNmIxYTlmYTYxOTEwY2RkODE2MzIyZjI4ODAwNThmNDNjOTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAxOjUyOjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggYjIzZmI2ZjJmNGVmNC4uOTVlMzYxZjVkMGVkZSAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTE2NzgxLDYgKzE2NzgxLDE1IEBAIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvbWVkaWF0ZWssbXQ3NjIxLWkyYy55YW1sXG4gRjpcdGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXQ3NjIxLmNcbiBcbitNRURJQVRFSyBNVDc2MjggU1dJVENIIERSSVZFUlxuK006XHRKb3JpcyBWYWlzdmlsYSBcdTAwM2Nqb2V5QHRpbnlpc3IuY29tXHUwMDNlXG4rTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbitTOlx0TWFpbnRhaW5lZFxuK0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc2MjgtZXN3LnlhbWxcbitGOlx0ZHJpdmVycy9uZXQvZHNhL210NzYyOC5jXG4rRjpcdGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZmUtc29jLmNcbitGOlx0bmV0L2RzYS90YWdfbXQ3NjI4LmNcbitcbiBNRURJQVRFSyBNVE1JUFMgQ0xPQ0sgRFJJVkVSXG4gTTpcdFNlcmdpbyBQYXJhY3VlbGxvcyBcdTAwM2NzZXJnaW8ucGFyYWN1ZWxsb3NAZ21haWwuY29tXHUwMDNlXG4gUzpcdE1haW50YWluZWRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmNcbmluZGV4IGZiNjNmNmY2NDRiOWUuLjYyOWRiZjk2OGExNzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguY1xuQEAgLTM0LDYgKzM0LDcgQEBcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1ZVQih2bGFuKSAoMHgxMDAgKyA0ICogKCh2bGFuKSAvIDQpKVxuICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfU09DUEMgMHg4Y1xuICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfUE9DMCAweDkwXG4rI2RlZmluZSBNVDc2MjhfRVNXX1JFR19QT0MxIDB4OTRcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1BPQzIgMHg5OFxuICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfU0dDIDB4OWNcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1BDUjAgMHhjMFxuQEAgLTkyLDYgKzkzLDkgQEBcbiBcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUE9DMF9QT1JUX0RJU0FCTEUgR0VOTUFTSygyOSwgMjMpXG4gXG4rI2RlZmluZSBNVDc2MjhfRVNXX1BPQzFfUE9SVF9CTE9DS0lOR19TVEFURSBHRU5NQVNLKDIyLCAxNilcbisjZGVmaW5lIE1UNzYyOF9FU1dfUE9DMV9QT1JUX0RJU19MRUFSTklORyBHRU5NQVNLKDE0LCA4KVxuK1xuICNkZWZpbmUgTVQ3NjI4X0VTV19QT0MyX1BFUl9WTEFOX1VOVEFHX0VOIEJJVCgxNSlcbiBcbiAjZGVmaW5lIE1UNzYyOF9FU1dfU0dDX0FHSU5HX0lOVEVSVkFMIEdFTk1BU0soMywgMClcbkBAIC0xMzgsNiArMTQyLDcgQEBcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUE9SVFNfQ1BVIEJJVCg2KVxuICNkZWZpbmUgTVQ3NjI4X0VTV19QT1JUU19BTEwgR0VOTUFTSyg2LCAwKVxuIFxuKyNkZWZpbmUgTVQ3NjI4X0VTV19OVU1fVVNFUl9QT1JUUyA1XG4gI2RlZmluZSBNVDc2MjhfRVNXX05VTV9QT1JUUyA3XG4gI2RlZmluZSBNVDc2MjhfTlVNX1ZMQU5TIDE2XG4gXG5AQCAtMTUxLDggKzE1NiwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgbXQ3NjI4X2Vzd19yZWdtYXBfY2ZnID0ge1xuIFx0LnZhbF9mb3JtYXRfZW5kaWFuID0gUkVHTUFQX0VORElBTl9MSVRUTEUsXG4gfTtcbiBcbitlbnVtIHtcbitcdE1UNzYyOF9WTEFOX1RZUEVfQVdBUkUsXG4rXHRNVDc2MjhfVkxBTl9UWVBFX1VOQVdBUkUsXG4rXHRNVDc2MjhfVkxBTl9UWVBFX05VTSxcbit9O1xuK1xuIHN0cnVjdCBtdDc2MjhfdmxhbiB7XG4tXHRib29sIGFjdGl2ZTtcbitcdHVuc2lnbmVkIGludCB0eXBlO1xuIFx0dTggbWVtYmVycztcbiBcdHU4IHVudGFnO1xuIFx0dTE2IHZpZDtcbkBAIC0xNjMsOSArMTc0LDEwIEBAIHN0cnVjdCBtdDc2MjhfZXN3IHtcbiBcdHN0cnVjdCByZXNldF9jb250cm9sICpyc3RfZXN3O1xuIFx0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xuIFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzO1xuLVx0dTE2IHRhZ184MDIxcV9wdmlkW01UNzYyOF9FU1dfTlVNX1BPUlRTXTtcbitcdHUxNiBwdmlkW01UNzYyOF9WTEFOX1RZUEVfTlVNXVtNVDc2MjhfRVNXX05VTV9QT1JUU107XG4gXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gdmxhbnNbTVQ3NjI4X05VTV9WTEFOU107XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4rXHR1OCB2bGFuX2ZpbHRlcmluZztcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbXQ3NjI4X21paV9yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtKVxuQEAgLTM4MywyMSArMzk1LDEyNyBAQCBzdGF0aWMgdm9pZCBtdDc2MjhfZXN3X3NldF92dWIoc3RydWN0IG10NzYyOF9lc3cgKmVzdywgdW5zaWduZWQgaW50IHZsYW4sXG4gXHRcdFx0ICAgTVQ3NjI4X0VTV19WVUJfUFJFUCh2bGFuLCB2dWIpKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBtdDc2MjhfdmxhbiAqbXQ3NjI4X2ZpbmRfdmxhbl9ibG9jayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4rXHRcdFx0XHRcdFx0ICB1MTYgdmlkLCB1bnNpZ25lZCBpbnQgdHlwZSlcbit7XG4rXHRzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbjtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X05VTV9WTEFOUzsgaSsrKSB7XG4rXHRcdHZsYW4gPSBcdTAwMjZlc3ctXHUwMDNldmxhbnNbaV07XG4rXHRcdGlmICh2bGFuLVx1MDAzZXZpZCA9PSB2aWQgXHUwMDI2XHUwMDI2IHZsYW4tXHUwMDNldHlwZSA9PSB0eXBlKVxuK1x0XHRcdHJldHVybiB2bGFuO1xuK1x0fVxuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKm10NzYyOF9hbGxvY192bGFuX2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbitcdFx0XHRcdFx0XHQgICB1MTYgdmlkLCB1bnNpZ25lZCBpbnQgdHlwZSlcbit7XG4rXHRzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbjtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X05VTV9WTEFOUzsgaSsrKSB7XG4rXHRcdHZsYW4gPSBcdTAwMjZlc3ctXHUwMDNldmxhbnNbaV07XG4rXHRcdGlmICh2bGFuLVx1MDAzZXZpZClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKHZsYW4tXHUwMDNldHlwZSAhPSB0eXBlKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR2bGFuLVx1MDAzZXZpZCA9IHZpZDtcbitcdFx0cmV0dXJuIHZsYW47XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIGludCBtdDc2MjhfcG9ydF9qb2luX3ZsYW5fYmxvY2soc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTE2IHZpZCxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwgdTE2IGZsYWdzKVxuK3tcbitcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IG10NzYyOF9maW5kX3ZsYW5fYmxvY2soZHMsIHZpZCwgdHlwZSk7XG4rXHRzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtXHUwMDNlcHJpdjtcbitcbitcdGlmICghdmxhbilcbitcdFx0dmxhbiA9IG10NzYyOF9hbGxvY192bGFuX2Jsb2NrKGRzLCB2aWQsIHR5cGUpO1xuK1xuK1x0aWYgKCF2bGFuKVxuK1x0XHRyZXR1cm4gLUVOT1NQQztcbitcbitcdHZsYW4tXHUwMDNlbWVtYmVycyB8PSBCSVQocG9ydCk7XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRClcbitcdFx0ZXN3LVx1MDAzZXB2aWRbdHlwZV1bcG9ydF0gPSB2aWQ7XG4rXHRlbHNlIGlmIChlc3ctXHUwMDNlcHZpZFt0eXBlXVtwb3J0XSA9PSB2aWQpXG4rXHRcdGVzdy1cdTAwM2VwdmlkW3R5cGVdW3BvcnRdID0gMDtcbitcbitcdGlmIChmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRClcbitcdFx0dmxhbi1cdTAwM2V1bnRhZyB8PSBCSVQocG9ydCk7XG4rXHRlbHNlXG4rXHRcdHZsYW4tXHUwMDNldW50YWcgXHUwMDI2PSB+QklUKHBvcnQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbXQ3NjI4X3BvcnRfbGVhdmVfdmxhbl9ibG9jayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdFx0XHR1MTYgdmlkLCB1bnNpZ25lZCBpbnQgdHlwZSlcbit7XG4rXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW4gPSBtdDc2MjhfZmluZF92bGFuX2Jsb2NrKGRzLCB2aWQsIHR5cGUpO1xuK1x0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAoIXZsYW4pXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0aWYgKGVzdy1cdTAwM2VwdmlkW3R5cGVdW3BvcnRdID09IHZpZClcbitcdFx0ZXN3LVx1MDAzZXB2aWRbdHlwZV1bcG9ydF0gPSAwO1xuK1x0dmxhbi1cdTAwM2VtZW1iZXJzIFx1MDAyNj0gfkJJVChwb3J0KTtcbitcdHZsYW4tXHUwMDNldW50YWcgXHUwMDI2PSB+QklUKHBvcnQpO1xuK1x0LypcbitcdCAqIEZyZWUgdGhlIHZsYW4gaWYgd2UncmUgdGhlIGxhc3QgbWVtYmVyIG9mIGl0LlxuK1x0ICovXG4rXHRpZiAoIXZsYW4tXHUwMDNlbWVtYmVycylcbitcdFx0dmxhbi1cdTAwM2V2aWQgPSAwO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG10NzYyOF92bGFuX3N5bmMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBtdDc2MjhfZXN3ICplc3cgPSBkcy1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X05VTV9WTEFOUzsgaSsrKSB7XG4gXHRcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IFx1MDAyNmVzdy1cdTAwM2V2bGFuc1tpXTtcbitcdFx0dTggbWVtYmVyX21hc2s7XG4rXG4rXHRcdGlmICh2bGFuLVx1MDAzZXR5cGUgPT0gTVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSlcbitcdFx0XHRtZW1iZXJfbWFzayA9IGVzdy1cdTAwM2V2bGFuX2ZpbHRlcmluZztcbitcdFx0ZWxzZVxuK1x0XHRcdG1lbWJlcl9tYXNrID0gfmVzdy1cdTAwM2V2bGFuX2ZpbHRlcmluZztcbitcdFx0bWVtYmVyX21hc2sgfD0gTVQ3NjI4X0VTV19QT1JUU19DUFU7XG4rXHRcdC8qXG4rXHRcdCAqIFB1dCBWTEFOIGZpbHRlcmluZyBwb3J0cyBvbmx5IGludG8gVkxBTiBhd2FyZSBWTEFOcyBhbmRcbitcdFx0ICogbm9uIFZMQU4gZmlsdGVyaW5nIHBvcnRzIGludG8gVkxBTiB1bmF3YXJlIFZMQU5zLlxuK1x0XHQgKlxuK1x0XHQgKiBDUFUgbWF5IG5vdCBiZSByZW1vdmVkIGZyb20gYW55IFZMQU4sIGFzIFZMQU4gZmlsdGVyaW5nXG4rXHRcdCAqIGFwcGxpZXMgb25seSB0byB1c2VyIHBvcnRzLlxuK1x0XHQgKi9cbiBcbi1cdFx0bXQ3NjI4X2Vzd19zZXRfdm1zYyhlc3csIGksIHZsYW4tXHUwMDNlbWVtYmVycyk7XG4gXHRcdG10NzYyOF9lc3dfc2V0X3ZsYW5faWQoZXN3LCBpLCB2bGFuLVx1MDAzZXZpZCk7XG4tXHRcdG10NzYyOF9lc3dfc2V0X3Z1Yihlc3csIGksIHZsYW4tXHUwMDNldW50YWcpO1xuK1x0XHRtdDc2MjhfZXN3X3NldF92bXNjKGVzdywgaSwgdmxhbi1cdTAwM2VtZW1iZXJzIFx1MDAyNiBtZW1iZXJfbWFzayk7XG4rXHRcdG10NzYyOF9lc3dfc2V0X3Z1Yihlc3csIGksIHZsYW4tXHUwMDNldW50YWcgXHUwMDI2IG1lbWJlcl9tYXNrKTtcbitcbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRzLVx1MDAzZW51bV9wb3J0czsgaSsrKVxuLVx0XHRtdDc2MjhfZXN3X3NldF9wdmlkKGVzdywgaSwgZXN3LVx1MDAzZXRhZ184MDIxcV9wdmlkW2ldKTtcbitcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfdXNlcl9wb3J0KGRwLCBkcykge1xuK1x0XHR1bnNpZ25lZCBpbnQgdHlwZSA9IEJJVChkcC1cdTAwM2VpbmRleCkgXHUwMDI2IGVzdy1cdTAwM2V2bGFuX2ZpbHRlcmluZyA/XG4rXHRcdCAgICBNVDc2MjhfVkxBTl9UWVBFX0FXQVJFIDogTVQ3NjI4X1ZMQU5fVFlQRV9VTkFXQVJFO1xuK1x0XHRtdDc2MjhfZXN3X3NldF9wdmlkKGVzdywgZHAtXHUwMDNlaW5kZXgsIGVzdy1cdTAwM2VwdmlkW3R5cGVdW2RwLVx1MDAzZWluZGV4XSk7XG4rXHR9XG4rXHRyZWdtYXBfdXBkYXRlX2JpdHMoZXN3LVx1MDAzZXJlZ21hcCwgTVQ3NjI4X0VTV19SRUdfU0dDMixcbitcdFx0XHQgICBNVDc2MjhfRVNXX1NHQzJfRE9VQkxFX1RBR19FTixcbitcdFx0XHQgICBGSUVMRF9QUkVQKE1UNzYyOF9FU1dfU0dDMl9ET1VCTEVfVEFHX0VOLFxuK1x0XHRcdFx0ICAgICAgTVQ3NjI4X0VTV19QT1JUU19OT0NQVSBcdTAwMjZcbitcdFx0XHRcdCAgICAgIH5lc3ctXHUwMDNldmxhbl9maWx0ZXJpbmcpKTtcbiB9XG4gXG4gc3RhdGljIGludCBtdDc2Mjhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuQEAgLTQyNSw2ICs1NDMsMTkgQEAgc3RhdGljIGludCBtdDc2Mjhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbitcdC8qXG4rXHQgKiBEZWRpY2F0ZSB0aGUgZmlyc3QgbnVtX3VzZXJfcG9ydHMgKyAxIFZMQU4gc2xvdHMgZm9yIHRhZ184MDIxcS5cbitcdCAqIFNpbmNlIGJyaWRnZXMgYXJlIG9ubHkgb2ZmbG9hZGVkIHdoZW4gdGhleSBoYXZlIGF0IGxlYXN0IG9uZSBtZW1iZXJcbitcdCAqIHBvcnQsIHRoZSB3b3JzdCBjYXNlIGVudHJ5IHJlcXVpcmVtZW50IGlzIDEgcGVyIHBvcnQuIFRoZSBleHRyYSBzbG90XG4rXHQgKiBpcyBuZWVkZWQgYmVjYXVzZSB3aGVuIGNoYW5naW5nIHRoZSBjb25maWd1cmF0aW9uLCB0YWdfODAyMXEgYWRkcyBhXG4rXHQgKiBuZXcgVkxBTiBiZWZvcmUgcmVtb3ZpbmcgdGhlIG9sZCBvbmUuIFRoZSByZXN0IG9mIHRoZSBWTEFOIHNsb3RzIGNhblxuK1x0ICogYmUgdXNlZCBmb3IgZmlsdGVyaW5nLlxuK1x0ICovXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X0VTV19OVU1fVVNFUl9QT1JUUyArIDE7IGkrKylcbitcdFx0ZXN3LVx1MDAzZXZsYW5zW2ldLnR5cGUgPSBNVDc2MjhfVkxBTl9UWVBFX1VOQVdBUkU7XG4rXG4rXHRkcy1cdTAwM2VtYXhfbnVtX2JyaWRnZXMgPSBEU0FfVEFHXzgwMjFRX01BWF9OVU1fQlJJREdFUztcbitcbiBcdHJ0bmxfbG9jaygpO1xuIFx0cmV0ID0gZHNhX3RhZ184MDIxcV9yZWdpc3RlcihkcywgaHRvbnMoRVRIX1BfODAyMVEpKTtcbiBcdHJ0bmxfdW5sb2NrKCk7XG5AQCAtNDc5LDcxICs2MTAsOTcgQEAgc3RhdGljIHZvaWQgbXQ3NjI4X3BoeWxpbmtfZ2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBzdGF0aWMgaW50IG10NzYyOF9kc2FfODAyMXFfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHRcdCAgICAgdTE2IHZpZCwgdTE2IGZsYWdzKVxuIHtcbi1cdHN0cnVjdCBtdDc2MjhfZXN3ICplc3cgPSBkcy1cdTAwM2Vwcml2O1xuLVx0c3RydWN0IG10NzYyOF92bGFuICp2bGFuID0gTlVMTDtcbi1cdGludCBpO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X05VTV9WTEFOUzsgaSsrKSB7XG4tXHRcdHN0cnVjdCBtdDc2MjhfdmxhbiAqY2hlY2tfdmxhbiA9IFx1MDAyNmVzdy1cdTAwM2V2bGFuc1tpXTtcbi1cbi1cdFx0aWYgKCFjaGVja192bGFuLVx1MDAzZWFjdGl2ZSBcdTAwMjZcdTAwMjYgIXZsYW4pXG4tXHRcdFx0dmxhbiA9IGNoZWNrX3ZsYW47XG4tXG4tXHRcdGlmIChjaGVja192bGFuLVx1MDAzZWFjdGl2ZSBcdTAwMjZcdTAwMjYgY2hlY2tfdmxhbi1cdTAwM2V2aWQgPT0gdmlkKSB7XG4tXHRcdFx0dmxhbiA9IGNoZWNrX3ZsYW47XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdGlmICghdmxhbilcbi1cdFx0cmV0dXJuIC1FTk9TUEM7XG4tXG4tXHR2bGFuLVx1MDAzZXZpZCA9IHZpZDtcbi1cdHZsYW4tXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbi1cdHZsYW4tXHUwMDNlbWVtYmVycyB8PSBCSVQocG9ydCk7XG4tXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRClcbi1cdFx0ZXN3LVx1MDAzZXRhZ184MDIxcV9wdmlkW3BvcnRdID0gdmlkO1xuLVxuLVx0aWYgKGZsYWdzIFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEKVxuLVx0XHR2bGFuLVx1MDAzZXVudGFnIHw9IEJJVChwb3J0KTtcbi1cbitcdGludCByZXQgPVxuK1x0ICAgIG10NzYyOF9wb3J0X2pvaW5fdmxhbl9ibG9jayhkcywgcG9ydCwgdmlkLCBNVDc2MjhfVkxBTl9UWVBFX1VOQVdBUkUsXG4rXHRcdFx0XHRcdGZsYWdzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXHRtdDc2Mjhfdmxhbl9zeW5jKGRzKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IG10NzYyOF9kc2FfODAyMXFfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTE2IHZpZClcbiB7XG4tXHRzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtXHUwMDNlcHJpdjtcbi1cdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IE5VTEw7XG4tXHRpbnQgaTtcbitcdGludCByZXQgPSBtdDc2MjhfcG9ydF9sZWF2ZV92bGFuX2Jsb2NrKGRzLCBwb3J0LCB2aWQsXG4rXHRcdFx0XHRcdCAgICAgICBNVDc2MjhfVkxBTl9UWVBFX1VOQVdBUkUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdG10NzYyOF92bGFuX3N5bmMoZHMpO1xuK1x0cmV0dXJuIDA7XG4rfVxuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X05VTV9WTEFOUzsgaSsrKSB7XG4tXHRcdHN0cnVjdCBtdDc2MjhfdmxhbiAqY2hlY2tfdmxhbiA9IFx1MDAyNmVzdy1cdTAwM2V2bGFuc1tpXTtcbitzdGF0aWMgaW50IG10NzYyOF9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0XHQgICAgICBib29sIHZsYW5fZmlsdGVyaW5nLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBtdDc2MjhfZXN3ICplc3cgPSBkcy1cdTAwM2Vwcml2O1xuIFxuLVx0XHRpZiAoIWNoZWNrX3ZsYW4tXHUwMDNlYWN0aXZlIHx8IGNoZWNrX3ZsYW4tXHUwMDNldmlkICE9IHZpZClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0dmxhbiA9IGNoZWNrX3ZsYW47XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVx0aWYgKCF2bGFuKVxuLVx0XHRyZXR1cm4gLUVOT0VOVDtcbitcdGlmICh2bGFuX2ZpbHRlcmluZylcbitcdFx0ZXN3LVx1MDAzZXZsYW5fZmlsdGVyaW5nIHw9IEJJVChwb3J0KTtcbitcdGVsc2VcbitcdFx0ZXN3LVx1MDAzZXZsYW5fZmlsdGVyaW5nIFx1MDAyNj0gfkJJVChwb3J0KTtcbitcdG10NzYyOF92bGFuX3N5bmMoZHMpO1xuK1x0cmV0dXJuIDA7XG4rfVxuIFxuLVx0aWYgKGVzdy1cdTAwM2V0YWdfODAyMXFfcHZpZFtwb3J0XSA9PSB2aWQpXG4tXHRcdGVzdy1cdTAwM2V0YWdfODAyMXFfcHZpZFtwb3J0XSA9IDA7XG4rc3RhdGljIGludCBtdDc2MjhfcG9ydF92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF92bGFuICp2bGFuLFxuK1x0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbl9ibG9jaztcbitcdHN0cnVjdCBkc2FfcG9ydCAqb3RoZXJfZHA7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuK1x0aW50IHJldDtcbiBcbi1cdHZsYW4tXHUwMDNlbWVtYmVycyBcdTAwMjY9IH5CSVQocG9ydCk7XG4tXHR2bGFuLVx1MDAzZXVudGFnIFx1MDAyNj0gfkJJVChwb3J0KTtcbitcdGlmICh2aWRfaXNfZHNhXzgwMjFxKHZsYW4tXHUwMDNldmlkKSkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJSYW5nZSAzMDcyLTQwOTUgcmVzZXJ2ZWQgZm9yIGRzYV84MDIxcSBvcGVyYXRpb25cIik7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXHR9XG4gXG4tXHRpZiAoIXZsYW4tXHUwMDNlbWVtYmVycykge1xuLVx0XHR2bGFuLVx1MDAzZWFjdGl2ZSA9IGZhbHNlO1xuLVx0XHR2bGFuLVx1MDAzZXZpZCA9IDA7XG4rXHR2bGFuX2Jsb2NrID1cbitcdCAgICBtdDc2MjhfZmluZF92bGFuX2Jsb2NrKGRzLCB2bGFuLVx1MDAzZXZpZCwgTVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSk7XG4rXHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbitcdC8qXG4rXHQgKiBDUFUgcG9ydCBjYW4gYmUgYWRkZWQgdG8gYW55IFZMQU5zLCBidXQgdXNlciBwb3J0cyBuZWVkIHRvIGVuc3VyZSxcbitcdCAqIHRoYXQgaWYgdGhlIFZMQU4gYWxyZWFkeSBleGlzdHMgaXQncyBub3QgdXNlZCBieSBhIGJyaWRnZSB3ZSdyZSBub3RcbitcdCAqIGEgbWVtYmVyIG9mLCBiZWNhdXNlIFZMQU5zIGFyZSB0aGUgb25seSBmb3JtIG9mIGZvcndhcmRpbmcgY29udHJvbFxuK1x0ICogd2UgaGF2ZSBvbiB0aGlzIHN3aXRjaC5cbitcdCAqL1xuK1x0aWYgKHZsYW5fYmxvY2sgXHUwMDI2XHUwMDI2ICFkc2FfcG9ydF9pc19jcHUoZHApKSB7XG4rXHRcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfdXNlcl9wb3J0KG90aGVyX2RwLCBkcykge1xuK1x0XHRcdGlmIChvdGhlcl9kcCA9PSBkcClcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdGlmIChvdGhlcl9kcC1cdTAwM2VicmlkZ2UgPT0gZHAtXHUwMDNlYnJpZGdlKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0aWYgKCEodmxhbl9ibG9jay1cdTAwM2VtZW1iZXJzIFx1MDAyNiBCSVQob3RoZXJfZHAtXHUwMDNlaW5kZXgpKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgIFwiVkxBTiBJRCB1c2VkIG9uIGFub3RoZXIgYnJpZGdlXCIpO1xuK1x0XHRcdHJldHVybiAtRUJVU1k7XG4rXHRcdH1cbiBcdH1cbitcdHJldCA9XG4rXHQgICAgbXQ3NjI4X3BvcnRfam9pbl92bGFuX2Jsb2NrKGRzLCBwb3J0LCB2bGFuLVx1MDAzZXZpZCxcbitcdFx0XHRcdFx0TVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSwgdmxhbi1cdTAwM2VmbGFncyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0bXQ3NjI4X3ZsYW5fc3luYyhkcyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBtdDc2MjhfcG9ydF92bGFuX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF92bGFuICp2bGFuKVxuK3tcbitcdGludCByZXQgPSBtdDc2MjhfcG9ydF9sZWF2ZV92bGFuX2Jsb2NrKGRzLCBwb3J0LCB2bGFuLVx1MDAzZXZpZCxcbitcdFx0XHRcdFx0ICAgICAgIE1UNzYyOF9WTEFOX1RZUEVfQVdBUkUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdG10NzYyOF92bGFuX3N5bmMoZHMpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG10NzYyOF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0cnRubF9sb2NrKCk7XG5AQCAtNTUxLDYgKzcwOCw0MCBAQCBzdGF0aWMgdm9pZCBtdDc2MjhfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0cnRubF91bmxvY2soKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbXQ3NjI4X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpXG4re1xuK1x0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVx1MDAzZXByaXY7XG4rXHRib29sIGZvcndhcmRfZGlzYWJsZTtcbitcdGJvb2wgbGVhcm5fZGlzYWJsZTtcbitcbitcdHN3aXRjaCAoc3RhdGUpIHtcbitcdGNhc2UgQlJfU1RBVEVfRElTQUJMRUQ6XG4rXHRjYXNlIEJSX1NUQVRFX0JMT0NLSU5HOlxuK1x0Y2FzZSBCUl9TVEFURV9MSVNURU5JTkc6XG4rXHRcdGZvcndhcmRfZGlzYWJsZSA9IHRydWU7XG4rXHRcdGxlYXJuX2Rpc2FibGUgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlJfU1RBVEVfTEVBUk5JTkc6XG4rXHRcdGZvcndhcmRfZGlzYWJsZSA9IHRydWU7XG4rXHRcdGxlYXJuX2Rpc2FibGUgPSBmYWxzZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJSX1NUQVRFX0ZPUldBUkRJTkc6XG4rXHRcdGZvcndhcmRfZGlzYWJsZSA9IGZhbHNlO1xuK1x0XHRsZWFybl9kaXNhYmxlID0gZmFsc2U7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0ZGV2X2Vycihkcy1cdTAwM2VkZXYsIFwiaW52YWxpZCBTVFAgc3RhdGU6ICVkXFxuXCIsIHN0YXRlKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cmVnbWFwX2Fzc2lnbl9iaXRzKGVzdy1cdTAwM2VyZWdtYXAsIE1UNzYyOF9FU1dfUkVHX1BPQzEsXG4rXHRcdFx0ICAgRklFTERfUFJFUChNVDc2MjhfRVNXX1BPQzFfUE9SVF9ESVNfTEVBUk5JTkcsXG4rXHRcdFx0XHQgICAgICBCSVQocG9ydCkpLCBsZWFybl9kaXNhYmxlKTtcbitcdHJlZ21hcF9hc3NpZ25fYml0cyhlc3ctXHUwMDNlcmVnbWFwLCBNVDc2MjhfRVNXX1JFR19QT0MxLFxuK1x0XHRcdCAgIEZJRUxEX1BSRVAoTVQ3NjI4X0VTV19QT0MxX1BPUlRfQkxPQ0tJTkdfU1RBVEUsXG4rXHRcdFx0XHQgICAgICBCSVQocG9ydCkpLCBmb3J3YXJkX2Rpc2FibGUpO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG10NzYyOF9zd2l0Y2hfb3BzID0ge1xuIFx0LmdldF90YWdfcHJvdG9jb2wgPSBtdDc2MjhfZ2V0X3RhZ19wcm90byxcbiBcdC5zZXR1cCA9IG10NzYyOF9zZXR1cCxcbkBAIC01NjAsNiArNzUxLDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXQ3NjI4X3N3aXRjaF9vcHMgPSB7XG4gXHQucGh5bGlua19nZXRfY2FwcyA9IG10NzYyOF9waHlsaW5rX2dldF9jYXBzLFxuIFx0LnRhZ184MDIxcV92bGFuX2FkZCA9IG10NzYyOF9kc2FfODAyMXFfdmxhbl9hZGQsXG4gXHQudGFnXzgwMjFxX3ZsYW5fZGVsID0gbXQ3NjI4X2RzYV84MDIxcV92bGFuX2RlbCxcbitcdC5wb3J0X2JyaWRnZV9qb2luID0gZHNhX3RhZ184MDIxcV9icmlkZ2Vfam9pbixcbitcdC5wb3J0X2JyaWRnZV9sZWF2ZSA9IGRzYV90YWdfODAyMXFfYnJpZGdlX2xlYXZlLFxuK1x0LnBvcnRfc3RwX3N0YXRlX3NldCA9IG10NzYyOF9zdHBfc3RhdGVfc2V0LFxuK1x0LnBvcnRfdmxhbl9maWx0ZXJpbmcgPSBtdDc2MjhfcG9ydF92bGFuX2ZpbHRlcmluZyxcbitcdC5wb3J0X3ZsYW5fYWRkID0gbXQ3NjI4X3BvcnRfdmxhbl9hZGQsXG4rXHQucG9ydF92bGFuX2RlbCA9IG10NzYyOF9wb3J0X3ZsYW5fZGVsLFxuIH07XG4gXG4gc3RhdGljIGludCBtdDc2MjhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19tdDc2MjguYyBiL25ldC9kc2EvdGFnX210NzYyOC5jXG5pbmRleCA4MGI1MGZmMDhlNTNmLi43YzcxZThiMDg2NDgxIDEwMDY0NFxuLS0tIGEvbmV0L2RzYS90YWdfbXQ3NjI4LmNcbisrKyBiL25ldC9kc2EvdGFnX210NzYyOC5jXG5AQCAtNiw2ICs2LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZHNhLzgwMjFxLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInRhZy5oXCJcbkBAIC0xNSwxMyArMTYsMTYgQEBcbiAgKiBPbiBUWCB0aGUgbG93ZXIgNiBiaXRzIGVuY29kZSB0aGUgZGVzdGluYXRpb24gcG9ydCBiaXRtYXNrLlxuICAqIE9uIFJYIHRoZSBsb3dlciAzIGJpdHMgZW5jb2RlIHRoZSBzb3VyY2UgcG9ydCBudW1iZXIuXG4gICpcbi0gKiBUaGUgc3dpdGNoIGhhcmR3YXJlIHdpbGwgbm90IG1vZGlmeSB0aGUgVFBJRCBvZiBhbiBpbmNvbWluZyBwYWNrZXQgaWYgaXQgaXNcbi0gKiBhbHJlYWR5IFZMQU4gdGFnZ2VkLiBUbyB3b3JrIGFyb3VuZCB0aGlzIHRoZSBzd2l0Y2ggaXMgY29uZmlndXJlZCB0byBhbHdheXNcbi0gKiBhcHBlbmQgYSB0YWdfODAyMXEgc3RhbmRhbG9uZSBWTEFOIHRhZyBmb3IgZWFjaCBwb3J0LiBUaGF0IG1lYW5zIHdlIGNhblxuLSAqIHNhZmVseSBzdHJpcCB0aGUgb3V0ZXIgVkxBTiB0YWcgYWZ0ZXIgcGFyc2luZyBpdC5cbisgKiBUaGUgc3dpdGNoIGNhbiBvbmx5IHVzZSBWTEFOcyBmb3IgZm9yd2FyZGluZyBjb250cm9sLiBWTEFOLXVuYXdhcmUgYnJpZGdlc1xuKyAqIGFyZSBzaW11bGF0ZWQgdXNpbmcgdGFnXzgwMjFxIGFuZCBkb3VibGUgdGFnZ2luZywgd2hpbGUgVkxBTi1hd2FyZSBicmlkZ2VzXG4rICogdXNlIHRoZSBWTEFOcyBjb25maWd1cmVkIGJ5IHRoZSBicmlkZ2UgZGlyZWN0bHkuXG4gICpcbi0gKiBBIFZMQU4gdGFnIGlzIGNvbnN0cnVjdGVkIG9uIGVncmVzcyB0byB0YXJnZXQgdGhlIHN0YW5kYWxvbmUgVkxBTiBhbmRcbi0gKiBkZXN0aW5hdGlvbiBwb3J0LlxuKyAqIE9uIGVncmVzcywgdGhlIHRhZ2dlciBlaXRoZXIgYWRkcyBhIG5ldyBNVDc2MjggdGFnIHRoYXQgY29udGFpbnMgdGhlXG4rICogc3RhbmRhbG9uZSBvciBicmlkZ2UgdGFnXzgwMjFxIFZMQU4gYW5kIGRlc3RpbmF0aW9uIHBvcnQgbWFzaywgb3IgbW9kaWZpZXNcbisgKiBhbiBleGlzdGluZyBWTEFOIHRhZyB0byBjb250YWluIHRoZSBkZXN0aW5hdGlvbiBwb3J0IG1hc2suXG4rICpcbisgKiBPbiBpbmdyZXNzLCB0aGUgVkxBTiB0YWcgaXMgcmVzdG9yZWQgYWZ0ZXIgc3RyaXBwaW5nIHRoZSBNVDc2MjggdGFnLCBpZiBpdFxuKyAqIGlzIG5vdCBhIHRhZ184MDIxcSBWTEFOLlxuICAqL1xuIFxuICNkZWZpbmUgTVQ3NjI4X1RBR19OQU1FIFwibXQ3NjI4XCJcbkBAIC0zNCwyMCArMzgsMzUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXHR1MTYgeG1pdF90cGlkO1xuIFx0dTE2IHhtaXRfdmxhbjtcbiBcdF9fYmUxNiAqdGFnO1xuIFxuK1x0eG1pdF90cGlkID1cbitcdCAgICBFVEhfUF84MDIxUSB8IEZJRUxEX1BSRVAoTVQ3NjI4X1RBR19UWF9QT1JULFxuK1x0XHRcdFx0ICAgICBkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBkZXYpKTtcbiBcdGRwID0gZHNhX3VzZXJfdG9fcG9ydChkZXYpO1xuLVx0eG1pdF92bGFuID0gZHNhX3RhZ184MDIxcV9zdGFuZGFsb25lX3ZpZChkcCk7XG4rXHRpZiAoc2tiLVx1MDAzZW9mZmxvYWRfZndkX21hcmsgXHUwMDI2XHUwMDI2XG4rXHQgICAgYnJfdmxhbl9lbmFibGVkKGRzYV9wb3J0X2JyaWRnZV9kZXZfZ2V0KGRwKSkpIHtcbitcdFx0LypcbitcdFx0ICogT24gVkxBTiBhd2FyZSBwb3J0cyBvbmx5IG1vZGlmeSB0aGUgVFBJRCB0byBjb250YWluIHRoZVxuK1x0XHQgKiBNVDc2MjggZWdyZXNzIHBvcnQgbWV0YWRhdGEsIGluc3RlYWQgb2YgYWRkaW5nIGEgbmV3IHZsYW4gdGFnXG4rXHRcdCAqL1xuK1x0XHR0YWcgPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc190eChza2IpO1xuK1x0XHR0YWdbMF0gPSBodG9ucyh4bWl0X3RwaWQpO1xuK1x0XHRyZXR1cm4gc2tiO1xuK1x0fVxuK1xuK1x0eG1pdF92bGFuID0gc2tiLVx1MDAzZW9mZmxvYWRfZndkX21hcmsgP1xuK1x0ICAgIGRzYV90YWdfODAyMXFfYnJpZGdlX3ZpZChkc2FfcG9ydF9icmlkZ2VfbnVtX2dldChkcCkpIDpcbitcdCAgICBkc2FfdGFnXzgwMjFxX3N0YW5kYWxvbmVfdmlkKGRwKTtcbiBcbiBcdHNrYl9wdXNoKHNrYiwgTVQ3NjI4X1RBR19MRU4pO1xuIFx0ZHNhX2FsbG9jX2V0eXBlX2hlYWRlcihza2IsIE1UNzYyOF9UQUdfTEVOKTtcbiBcbiBcdHRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3R4KHNrYik7XG4gXG4tXHR0YWdbMF0gPSBodG9ucyhFVEhfUF84MDIxUSB8XG4tXHRcdCAgICAgICBGSUVMRF9QUkVQKE1UNzYyOF9UQUdfVFhfUE9SVCxcbi1cdFx0XHRcdCAgZHNhX3htaXRfcG9ydF9tYXNrKHNrYiwgZGV2KSkpO1xuK1x0dGFnWzBdID0gaHRvbnMoeG1pdF90cGlkKTtcbiBcdHRhZ1sxXSA9IGh0b25zKHhtaXRfdmxhbik7XG4gXG4gXHRyZXR1cm4gc2tiO1xuQEAgLTU2LDcgKzc1LDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXQ3NjI4X3RhZ194bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4rXHR1bnNpZ25lZCBpbnQgc291cmNlX3BvcnQ7XG4rXHRib29sIGlzX2RzYV84MDIxcTtcbiBcdF9fYmUxNiAqcGhkcjtcbitcdHUxNiB0Y2ksIHZpZDtcbiBcbiBcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIE1UNzYyOF9UQUdfTEVOKSkpIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG5AQCAtNjQsOSArODYsMjMgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fVxuIFxuIFx0cGhkciA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3J4KHNrYik7XG4tXHRza2ItXHUwMDNlZGV2ID1cbi1cdCAgICBkc2FfY29uZHVpdF9maW5kX3VzZXIoZGV2LCAwLFxuLVx0XHRcdFx0ICBGSUVMRF9HRVQoTVQ3NjI4X1RBR19SWF9QT1JULCBudG9ocygqcGhkcikpKTtcbitcdHNvdXJjZV9wb3J0ID0gRklFTERfR0VUKE1UNzYyOF9UQUdfUlhfUE9SVCwgbnRvaHMoKnBoZHIpKTtcbitcdHRjaSA9IG50b2hzKHBoZHJbMV0pO1xuK1x0dmlkID0gdGNpIFx1MDAyNiBWTEFOX1ZJRF9NQVNLO1xuK1x0aXNfZHNhXzgwMjFxID0gdmlkX2lzX2RzYV84MDIxcSh2aWQpO1xuK1xuK1x0LypcbitcdCAqIFRoZSBzb3VyY2UgcG9ydCBpbmZvIGlzIG9ubHkgZW5jb2RlZCBpbiB0aGUgVFBJRCBmaWVsZCBmb3IgcGFja2V0c1xuK1x0ICogd2hlcmUgdGhlIFZMQU4gdGFnIGlzIGluc2VydGVkIGJ5IHRoZSBQVklEIG1lY2hhbmlzbS4gV2l0aCBWTEFOXG4rXHQgKiBmaWx0ZXJpbmcgZW5hYmxlZCwgVkxBTi10YWdnZWQgaW5ncmVzcyBwYWNrZXRzIGFwcGVhciBhcyBpZiB0aGV5J3JlXG4rXHQgKiBvcmlnaW5hdGluZyBvbiBwb3J0IDAuIFVzZSB0aGUgVklEIHRvIGlkZW50aWZ5IHRoZSBicmlkZ2UgcG9ydCBpblxuK1x0ICogdGhpcyBjYXNlLlxuK1x0ICovXG4rXHRpZiAoc291cmNlX3BvcnQgPT0gMCBcdTAwMjZcdTAwMjYgIWlzX2RzYV84MDIxcSlcbitcdFx0c2tiLVx1MDAzZWRldiA9IGRzYV9maW5kX2Rlc2lnbmF0ZWRfYnJpZGdlX3BvcnRfYnlfdmlkKGRldiwgdmlkKTtcbitcdGVsc2VcbitcdFx0c2tiLVx1MDAzZWRldiA9IGRzYV9jb25kdWl0X2ZpbmRfdXNlcihkZXYsIDAsIHNvdXJjZV9wb3J0KTtcbitcbiBcdGlmICghc2tiLVx1MDAzZWRldikge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtNzUsNiArMTExLDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXQ3NjI4X3RhZ19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHNrYl9wdWxsX3Jjc3VtKHNrYiwgTVQ3NjI4X1RBR19MRU4pO1xuIFx0ZHNhX3N0cmlwX2V0eXBlX2hlYWRlcihza2IsIE1UNzYyOF9UQUdfTEVOKTtcbiBcdGRzYV9kZWZhdWx0X29mZmxvYWRfZndkX21hcmsoc2tiKTtcbitcbitcdGlmICghaXNfZHNhXzgwMjFxKVxuK1x0XHRfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLCB0Y2kpO1xuK1xuIFx0cmV0dXJuIHNrYjtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjoyMi43NTk1NDY4NTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzMwOTEzNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhpcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIHNlcmllcy4gTXkgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kIOKAkyB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQ/IEkgc2VlIHRocmVlIGZpbGVzIHdlcmUgdG91Y2hlZDogYE1BSU5UQUlORVJTYCwgYGRyaXZlcnMvbmV0L2RzYS9tdDc2MjguY2AsIGFuZCBgbmV0L2RzYS90YWdfbXQ3NjI4LmNgLlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIHRoZSBgbXQ3NjI4YCBEU0Egc3dpdGNoIGRyaXZlci4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBoYXJkd2FyZSByZWFjaGFiaWxpdHkgYW5kIHRoZSBkcml2ZXIncyB0eXBlIOKAkyB3aGF0IGtpbmQgb2YgdGFncyBhcmUgd2UgdGFsa2luZyBhYm91dCBpbiBgbmV0L2RzYS90YWdfbXQ3NjI4LmNgPyBUaGF0J3MgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuIFRoZW4sIEkgbmVlZCB0byBkaXZlIGludG8gYGRyaXZlcnMvbmV0L2RzYS9tdDc2MjguY2AgaXRzZWxmLiBJJ2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgS2NvbmZpZyBvcHRpb25zIGFuZCBwbGF0Zm9ybSBiaW5kaW5ncy4gVGhhdCdsbCB0ZWxsIG1lIGhvdyB0aGlzIGRyaXZlciBpcyBjb25maWd1cmVkLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgd2hhdCBoYXJkd2FyZSBpdCdzIG1lYW50IHRvIHN1cHBvcnQuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaWYgdGhpcyBhbGwgY2hlY2tzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjoyNS4wOTA0NjM1NDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU4MjM0OTg2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVUX0RTQV9NVDc2MjhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NTMwX01NSU8pICs9IG10NzUzMC1tbWlvLm9cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc2MjgpICs9IG10NzYyOC5vXFxuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19ORVRfRFNBX01WODhFNjA2MCkgKz0gbXY4OGU2MDYwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTI6MjguNjcyODE5MDc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE3MzgwMjU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSBvbiB0aGUgTVQ3NjI4IHN1cHBvcnQgd2l0aGluIHRoZSBEU0EgZHJpdmVyIGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBkZWZpbml0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayBgZHJpdmVycy9uZXQvZHNhL0tjb25maWdgIGZvciB0aGUgYE5FVF9EU0FfTVQ3NjI4YCBzeW1ib2wuIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgc3VwcG9ydCBmb3IgdGhlIGhhcmR3YXJlIGlzIGRlZmluZWQuIFRoZW4sIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGJlY2F1c2UgaXQncyBhbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIGNyb3NzLXJlZmVyZW5jZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBJIHNob3VsZCBhbHNvIGltbWVkaWF0ZWx5IGxvb2sgaW4gYG5ldC9kc2EvS2NvbmZpZ2AuIEknbGwgYmUgc2VhcmNoaW5nIHRoZXJlIGZvciBgTkVUX0RTQV9UQUdfTVQ3NjI4YC4gVGhpcyB0YWcgbWlnaHQgYmUgc3BlY2lmaWMgdG8gdGhlIE1UNzYyOCdzIHBhcnRpY3VsYXIgdGFnZ2luZyBzY2hlbWUsIHNvIEkgc2hvdWxkIHNlZSBpZiBpdCBleGlzdHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiBob3cgaXQncyBlbmFibGVkIGFuZCBjb25maWd1cmVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBEU0Egc3lzdGVtLiBJJ2xsIGdldCBhIGNsZWFyIHBpY3R1cmUgYnkgY2hlY2tpbmcgdGhlc2UgZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODk1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTI6MzAuODQ2NjI1MDgzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzEyMjYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfRFNBX01UNzYyOFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2FcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL0tjb25maWc9NTQ9Y29uZmlnIE5FVF9EU0FfTVQ3NTMwX01NSU9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTY1LVxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnOjY2OmNvbmZpZyBORVRfRFNBX01UNzYyOFxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTY3LVxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDc2MjggRW1iZWRkZWQgRXRoZXJuZXQgc3dpdGNoIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzBfTU1JTykgKz0gbXQ3NTMwLW1taW8ub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19ORVRfRFNBX01UNzYyOCkgKz0gbXQ3NjI4Lm9cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX05FVF9EU0FfTVY4OEU2MDYwKSArPSBtdjg4ZTYwNjAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjozMS4xNjk3NTQ2ODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDE1MTY2MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEU0EgS2NvbmZpZyBmb3IgQ29uZmlndXJhdGlvbiBJbnNpZ2h0cyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IGBkcml2ZXJzL25ldC9kc2EvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2Ni4gVGhhdCBhcmVhJ3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZm9yIGNvcmUgRFNBIGZ1bmN0aW9uYWxpdHkuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgdGhlIGBuZXQvZHNhL0tjb25maWdgIGZpbGUgaW4gdGhlIHJvb3QgbmV0IGRpcmVjdG9yeSBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIHNvbWUgYnJvYWRlciBEU0Egc2V0dGluZ3MgdGhlcmUsIG9yIHNvbWUgaW5jbHVkZXMgdGhhdCB3aWxsIGRpcmVjdCBtZSB0byB0aGUgY29ycmVjdCBwbGFjZS4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmFibGUgbW9kdWxlcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHBvdGVudGlhbGx5IGludGVyZXN0aW5nIG9wdGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxlLiBGcm9tIGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MzAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjozMy41ODQ5MjQ3MDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0XFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0LWluIEV0aGVybmV0IHN3aXRjaCBmb3VuZFxcbiAgNjE6XFx0XFx0ICBpbiB0aGUgTWVkaWFUZWsgTVQ3OTg4IFNvQy5cXG4gIDYyOlxcdFxcdCAgVGhlIHN3aXRjaCBpcyBhIHNpbWlsYXIgZGVzaWduIGFzIE1UNzUzMSwgYnV0IHRoZSBzd2l0Y2ggcmVnaXN0ZXJzXFxuICA2MzpcXHRcXHQgIGFyZSBkaXJlY3RseSBtYXBwZWQgaW50byB0aGUgU29DcyByZWdpc3RlciBzcGFjZSByYXRoZXIgdGhhbiBiZWluZ1xcbiAgNjQ6XFx0XFx0ICBhY2Nlc3NpYmxlIHZpYSBNRElPLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRjb25maWcgTkVUX0RTQV9NVDc2MjhcXG4gIDY3OlxcdFxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDc2MjggRW1iZWRkZWQgRXRoZXJuZXQgc3dpdGNoIHN1cHBvcnRcXFwiXFxuICA2ODpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiAoU09DX01UNzYyMCB8fCBDT01QSUxFX1RFU1QpXFxuICA2OTpcXHRcXHRzZWxlY3QgTkVUX0RTQV9UQUdfTVQ3NjI4XFxuICA3MDpcXHRcXHRzZWxlY3QgTUVESUFURUtfRkVfU09DX1BIWVxcbiAgNzE6XFx0XFx0c2VsZWN0IFJFR01BUF9NTUlPXFxuICA3MjpcXHRcXHRoZWxwXFxuICA3MzpcXHRcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgYnVpbHQtaW4gRXRoZXJuZXQgc3dpdGNoIGZvdW5kXFxuICA3NDpcXHRcXHQgIGluIHRoZSBNVDc2MjggU29DLlxcbiAgNzU6XFx0XFxuICA3NjpcXHRjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcXG4gIDc3OlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIDg4RTYwNjAgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4gIDc4OlxcdFxcdHNlbGVjdCBORVRfRFNBX1RBR19UUkFJTEVSXFxuICA3OTpcXHRcXHRoZWxwXFxuICA4MDpcXHRcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTWFydmVsbCA4OEU2MDYwIGV0aGVybmV0IHN3aXRjaFxcbiAgODE6XFx0XFx0ICBjaGlwLlxcbiAgODI6XFx0XFxuICA4MzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZ1xcXCJcXG4gIDg0OlxcdFxcbiAgODU6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcXFwiXFxuICA4NjpcXHRcXG4gIDg3OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXFxcIlxcbiAgODg6XFx0XFxuICA4OTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjozMy41ODUwNTA5MDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg1MDA2ODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE1UNzYyOCBEU0EgVGFnZ2VyKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBNVDc2MjggaXMgaGFuZGxlZCB3aXRoaW4gdGhlIERTQSBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSBhY3Rpb24gaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgYG5ldC9kc2EvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IOKAkyB0aGUgS2NvbmZpZyBsaWtlbHkgZGVmaW5lcyB0aGUgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoaXMgc3BlY2lmaWMgdGFnZ2VyLCBgTkVUX0RTQV9UQUdfTVQ3NjI4YC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGhvdyBpdCdzIGVuYWJsZWQsIHdoYXQgb3RoZXIgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgcGVyaGFwcyBldmVuIHNvbWUgYnJpZWYgZG9jdW1lbnRhdGlvbiBzbmlwcGV0cyBpZiBJJ20gbHVja3kuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byBiZXR0ZXIgdW5kZXJzdGFuZCBpdHMgb3ZlcmFsbCByb2xlIGluIHRoZSBicm9hZGVyIERTQSBhcmNoaXRlY3R1cmUuIFRoaXMgaW5pdGlhbCBLY29uZmlnIGluc3BlY3Rpb24gd2lsbCBxdWlja2x5IGluZm9ybSBtZSBhYm91dCB0aGUgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGNvbXBsZXhpdHkgc3Vycm91bmRpbmcgdGhlIE1UNzYyOCdzIGludGVncmF0aW9uLiBBZnRlciB0aGlzLCBJJ2xsIGtub3cgd2hhdCB0byBsb29rIGZvciBuZXh0LiBJJ20ga2VlbiB0byBncmFzcCB0aGUgdW5kZXJseWluZyBEU0EgdGFnZ2VyIGZ1bmN0aW9uYWxpdHkgYXQgcGxheSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTI6MzUuOTcwMDYwMTU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY3OTg0MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVEFHX01UNzYyOFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZHNhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kc2EvS2NvbmZpZz05ND1jb25maWcgTkVUX0RTQV9UQUdfRURTQVxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTEwMC1cXG5uZXQvZHNhL0tjb25maWc6MTAxOmNvbmZpZyBORVRfRFNBX1RBR19NVDc2MjhcXG5uZXQvZHNhL0tjb25maWctMTAyLVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciB0aGUgTVQ3NjI4IGVtYmVkZGVkIHN3aXRjaFxcXCJcXG4tLVxcbm5ldC9kc2EvTWFrZWZpbGU9Mjk9b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX0xBTjkzMDMpICs9IHRhZ19sYW45MzAzLm9cXG5uZXQvZHNhL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19NVDc2MjgpICs9IHRhZ19tdDc2Mjgub1xcbm5ldC9kc2EvTWFrZWZpbGUtMzEtb2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX01USykgKz0gdGFnX210ay5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjM2LjEzNjg5ODEwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjY2MDAzMDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBEU0EgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBmaXJzdCBwbGFjZSBteSBicmFpbiBuYXR1cmFsbHkgZ29lcyBpcyB0aGUgYG5ldC9kc2EvS2NvbmZpZ2AgZmlsZS4gSSdtIHNwZWNpZmljYWxseSB6ZXJvaW5nIGluIGFyb3VuZCBsaW5lIDEwMSDigJMgdGhhdCdzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSByZWFzb24sIGlmIEkgcmVjYWxsLiBQcm9iYWJseSBzb21lIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCB0aGVyZS4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTI6MzcuODAyOTA0NjU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTU5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZHNhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0XFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIE1hcnZlbGwgc3dpdGNoZXMgdXNpbmcgRXRoZXJUeXBlIERTQSBoZWFkZXJzXFxcIlxcbiAgOTY6XFx0XFx0c2VsZWN0IE5FVF9EU0FfVEFHX0RTQV9DT01NT05cXG4gIDk3OlxcdFxcdGhlbHBcXG4gIDk4OlxcdFxcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yIHRoZVxcbiAgOTk6XFx0XFx0ICBNYXJ2ZWxsIHN3aXRjaGVzIHdoaWNoIHVzZSBFdGhlclR5cGUgRFNBIGhlYWRlcnMuXFxuIDEwMDpcXHRcXG4gMTAxOlxcdGNvbmZpZyBORVRfRFNBX1RBR19NVDc2MjhcXG4gMTAyOlxcdFxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciB0aGUgTVQ3NjI4IGVtYmVkZGVkIHN3aXRjaFxcXCJcXG4gMTAzOlxcdFxcdGhlbHBcXG4gMTA0OlxcdFxcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yIHRoZVxcbiAxMDU6XFx0XFx0ICBzd2l0Y2ggZW1iZWRkZWQgaW4gdGhlIE1UNzYyOCBTb0MuXFxuIDEwNjpcXHRcXG4gMTA3OlxcdGNvbmZpZyBORVRfRFNBX1RBR19NVEtcXG4gMTA4OlxcdFxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNZWRpYXRlayBzd2l0Y2hlc1xcXCJcXG4gMTA5OlxcdFxcdGhlbHBcXG4gMTEwOlxcdFxcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yXFxuIDExMTpcXHRcXHQgIE1lZGlhdGVrIHN3aXRjaGVzLlxcbiAxMTI6XFx0XFxuIDExMzpcXHRjb25maWcgTkVUX0RTQV9UQUdfTVhMXzg2MlhYXFxuIDExNDpcXHRcXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTWF4TGluZWFyIE14TDg2Mnh4IHN3aXRjaGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjozNy44MDMwNDc3MDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ3Mjk0NjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE1UNzYyOCBhbmQgVmlydHVhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIGBkcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmNgIGZpbGUuIFJpZ2h0LCBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgdGhlIE1UNzYyOCBTb0MncyBlbWJlZGRlZCBzd2l0Y2guIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogY2FuIEkgcmVhbGlzdGljYWxseSBsZXZlcmFnZSBEU0Egc3dpdGNoZXMgb3IgdGFnZ2VycywgbGlrZSB0aGUgb25lIHRoaXMgZHJpdmVyIGxpa2VseSBtYW5hZ2VzLCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJJ20gdGhpbmtpbmcgUUVNVSBvciBhIHR5cGljYWwgYW1kNjQgc2V0dXAuIFRoYXQncyB0aGUgcmVhbCBjaGFsbGVuZ2UgaGVyZS4gQmVmb3JlIEkganVtcCB0b28gZmFyIGRvd24gdGhhdCByYWJiaXQgaG9sZSwgaG9sZCBvbi4uLiBpcyB0aGlzIHRydWx5IGEgcGxhdGZvcm0gZHJpdmVyPyBCZXN0IHRvIGRvdWJsZS1jaGVjayBhZ2FpbnN0IHRoZSBjb250ZW50cyBvZiBgbXQ3NjI4LmNgIGRpcmVjdGx5IHRvIGJlIHN1cmUuIEl0J3MgZWFzeSB0byBhc3N1bWUsIGJ1dCBtYWtpbmcgdGhhdCBhc3N1bXB0aW9uIHdvdWxkIGxlYWQgbWUgYXN0cmF5LiBMZXQncyBtYWtlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjA1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1Mjo0MC4yNzU5OTc2NThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjE5NTI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL210NzYyOC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYz04MzM9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXQ3NjI4X29mX21hdGNoKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtODM0LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzo4MzU6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXQ3NjI4X2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtODM2LVxcdC5kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtODQ0LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzo4NDU6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtdDc2MjhfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtODQ2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1Mjo0MC40MTIyMDAwNTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk0Mjc3OTg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIE1UNzYyOCBEU0EgRHJpdmVyKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIE1UNzYyOCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgRFNBIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIHRhcmdldCBpcyB0aGUgYGRyaXZlcnMvbmV0L2RzYS9tdDc2MjguY2AgZmlsZS4gSSdsbCBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGBtdDc2MjhfcHJvYmVgIGZ1bmN0aW9uIC0gdGhhdCdzIHdoZXJlIHRoZSBpbml0aWFsIGRldmljZSBzZXR1cCBoYXBwZW5zLCByaWdodD8gQW5kIEkgc2hvdWxkIHByb2JhYmx5IHJldmlldyBgbXQ3NjI4X29mX21hdGNoYCBhcyB3ZWxsLCBqdXN0IHRvIGJlIGNlcnRhaW4gSSB1bmRlcnN0YW5kIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5nIGFuZCBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIHRoZSBNVDc2MjggaGFyZHdhcmUgaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGlzJ2xsIHByb2JhYmx5IGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBhbnkgcG93ZXItb24gaXNzdWVzIGFuZCBpbml0aWFsIGhhcmR3YXJlIHNldHVwIGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgYmVpbmcgY2FsbGVkIGJ5IHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcyNiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjQyLjM1NDk4NDgwNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL210NzYyOC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgxNTpcXHR9XFxuIDgxNjpcXHRcXG4gODE3OlxcdHN0YXRpYyB2b2lkIG10NzYyOF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiA4MTg6XFx0e1xcbiA4MTk6XFx0XFx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xcbiA4MjA6XFx0XFxuIDgyMTpcXHRcXHRpZiAoIWVzdylcXG4gODIyOlxcdFxcdFxcdHJldHVybjtcXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0ZHNhX3N3aXRjaF9zaHV0ZG93bihlc3ctXFx1MDAzZWRzKTtcXG4gODI1OlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBOVUxMKTtcXG4gODI2OlxcdH1cXG4gODI3OlxcdFxcbiA4Mjg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3NjI4X29mX21hdGNoW10gPSB7XFxuIDgyOTpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1lZGlhdGVrLG10NzYyOC1lc3dcXFwiIH0sXFxuIDgzMDpcXHRcXHR7fVxcbiA4MzE6XFx0fTtcXG4gODMyOlxcdFxcbiA4MzM6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXQ3NjI4X29mX21hdGNoKTtcXG4gODM0OlxcdFxcbiA4MzU6XFx0c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXQ3NjI4X2RyaXZlciA9IHtcXG4gODM2OlxcdFxcdC5kcml2ZXIgPSB7XFxuIDgzNzpcXHRcXHRcXHQgICAubmFtZSA9IFxcXCJtdDc2MjgtZXN3XFxcIixcXG4gODM4OlxcdFxcdFxcdCAgIC5vZl9tYXRjaF90YWJsZSA9IG10NzYyOF9vZl9tYXRjaCxcXG4gODM5OlxcdFxcdFxcdCAgICB9LFxcbiA4NDA6XFx0XFx0LnByb2JlID0gbXQ3NjI4X3Byb2JlLFxcbiA4NDE6XFx0XFx0LnJlbW92ZSA9IG10NzYyOF9yZW1vdmUsXFxuIDg0MjpcXHRcXHQuc2h1dGRvd24gPSBtdDc2Mjhfc2h1dGRvd24sXFxuIDg0MzpcXHR9O1xcbiA4NDQ6XFx0XFxuIDg0NTpcXHRtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG10NzYyOF9kcml2ZXIpO1xcbiA4NDY6XFx0XFxuIDg0NzpcXHRNT0RVTEVfQVVUSE9SKFxcXCJKb3JpcyBWYWlzdmlsYSBcXHUwMDNjam9leUB0aW55aXNyLmNvbVxcdTAwM2VcXFwiKTtcXG4gODQ4OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiRHJpdmVyIGZvciBNZWRpYXRlayBNVDc2MjggZW1iZWRkZWQgc3dpdGNoXFxcIik7XFxuIDg0OTpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjQyLjM1NTEyMjg3NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzQ4NTY3NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBtdDc2MjhgIFBsYXRmb3JtIERyaXZlciBhbmQgRFNBIFRhZ2dpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG10NzYyOGAgdGhpbmcuIEZyb20gd2hhdCBJIHNlZSwgaXQncyB1c2luZyB0aGUgYFwibWVkaWF0ZWssbXQ3NjI4LWVzd1wiYCBvZl9kZXZpY2VfaWQuIE15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgRFNBIHN0dWZmLCBzcGVjaWZpY2FsbHkgaW4gYHRhZ19tdDc2MjguY2AsIHNvbWV0aGluZyB0aGF0IGNhbiBiZSB0d2Vha2VkIGZyb20gdXNlciBzcGFjZT8gQ291bGQgc29tZW9uZSBtYW5pcHVsYXRlIGl0IHZpYSBhIG1vY2sgRFNBIHNldHVwLCBOZXRsaW5rLCBvciBldmVuIHNvbWV0aGluZyBsaWtlIHN5emthbGxlcj8gVGhhdCdzIHRoZSByZWFsIHF1ZXN0aW9uLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgRFNBIHRhZ2dlciBpdHNlbGYgaXMgbG9hZGFibGUsIGlmIHRoZXJlJ3MgYSBzZWxlY3Rpb24gbWVjaGFuaXNtIGF0IHBsYXkgaGVyZS4gVGhpcyBtYWtlcyBtZSBjb25zaWRlciBob3cgRFNBIHRhZ2dpbmcgKmFjdHVhbGx5KiB3b3JrcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBEU0EgdGFnZ2luZyBwcm90b2NvbHMgdGhlbXNlbHZlcywgSSBzdXBwb3NlLiBHb3R0YSBnZXQgYSBzb2xpZCBoYW5kbGUgb24gaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTQ0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTI6NDQuNzAzNjk3ODE2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQ4NDI0Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRTQV9UQUdfUFJPVE9fTVQ3NjI4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYz01ODg9bXQ3NjI4X2dldF90YWdfcHJvdG8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy01ODkte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzo1OTA6XFx0cmV0dXJuIERTQV9UQUdfUFJPVE9fTVQ3NjI4O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy01OTEtfVxcbi0tXFxuaW5jbHVkZS9uZXQvZHNhLmg9MjY9c3RydWN0IHRjX2FjdGlvbjtcXG4tLVxcbmluY2x1ZGUvbmV0L2RzYS5oLTYyLSNkZWZpbmUgRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFXFx0XFx0MzRcXG5pbmNsdWRlL25ldC9kc2EuaDo2MzojZGVmaW5lIERTQV9UQUdfUFJPVE9fTVQ3NjI4X1ZBTFVFXFx0XFx0MzVcXG5pbmNsdWRlL25ldC9kc2EuaC02NC1cXG5pbmNsdWRlL25ldC9kc2EuaD02NT1lbnVtIGRzYV90YWdfcHJvdG9jb2wge1xcbi0tXFxuaW5jbHVkZS9uZXQvZHNhLmgtMTAwLVxcdERTQV9UQUdfUFJPVE9fS1NaODQ2M1xcdFxcdD0gRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFLFxcbmluY2x1ZGUvbmV0L2RzYS5oOjEwMTpcXHREU0FfVEFHX1BST1RPX01UNzYyOFxcdFxcdD0gRFNBX1RBR19QUk9UT19NVDc2MjhfVkFMVUUsXFxuaW5jbHVkZS9uZXQvZHNhLmgtMTAyLX07XFxuLS1cXG5uZXQvZHNhL3RhZ19tdDc2MjguYz0xMjE9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyBtdDc2MjhfdGFnX29wcyA9IHtcXG5uZXQvZHNhL3RhZ19tdDc2MjguYy0xMjItXFx0Lm5hbWUgPSBNVDc2MjhfVEFHX05BTUUsXFxubmV0L2RzYS90YWdfbXQ3NjI4LmM6MTIzOlxcdC5wcm90byA9IERTQV9UQUdfUFJPVE9fTVQ3NjI4LFxcbm5ldC9kc2EvdGFnX210NzYyOC5jLTEyNC1cXHQueG1pdCA9IG10NzYyOF90YWdfeG1pdCxcXG4tLVxcbm5ldC9kc2EvdGFnX210NzYyOC5jPTEyOT1tb2R1bGVfZHNhX3RhZ19kcml2ZXIobXQ3NjI4X3RhZ19vcHMpO1xcbm5ldC9kc2EvdGFnX210NzYyOC5jLTEzMC1cXG5uZXQvZHNhL3RhZ19tdDc2MjguYzoxMzE6TU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fTVQ3NjI4LCBNVDc2MjhfVEFHX05BTUUpO1xcbm5ldC9kc2EvdGFnX210NzYyOC5jLTEzMi1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIkRTQSB0YWcgZHJpdmVyIGZvciBNVDc2Mjggc3dpdGNoXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjQ3LjU1MjEyODUyOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjk0Njk5MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRFNBIFRhZ2dpbmcgUHJvdG9jb2wgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGFuZCBJJ20gd29uZGVyaW5nOiBjYW4gSSAqZHluYW1pY2FsbHkqIG1hbmlwdWxhdGUgdGhlIERTQSB0YWdnaW5nIHByb3RvY29sPyBDYW4gSSBkbyB0aGlzIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzIOKAkyBzeXNmcywgbmV0bGluaywgZXRodG9vbCwgb3IgZXZlbiBhdCB0aGUgbmV0ZGV2IGxldmVsPyBJJ20gdGhpbmtpbmcgYWJvdXQgc2NlbmFyaW9zIHdoZXJlIEkgbWlnaHQgbmVlZCBhIERTQSBtb2NrIGludGVyZmFjZSwgYSBkdW1teSBzZXR1cCwgYSBsb29wYmFjaywgb3IgZXZlbiBzb21ldGhpbmcgbGlrZSBuZXRraXQgZm9yIHRlc3RpbmcuXG5cblRoZSBjb3JlIHF1ZXN0aW9uIGlzLCBob3cgKmV4YWN0bHkqIGRvZXMgdGhlIHN5c3RlbSBkZWNpZGUgd2hpY2ggRFNBIHRhZyBwcm90b2NvbCB0byB1c2UsIGFuZCwgY3J1Y2lhbGx5LCBjYW4gSSAqaW5mbHVlbmNlKiB0aGF0IHNlbGVjdGlvbiBvciBldmVuIGZvcmNlIGEgY2hhbmdlIGF0IHJ1bnRpbWU/IFRpbWUgdG8gZmlyZSB1cCB0aGUgc2VhcmNoIGVuZ2luZSBhbmQgZGVsdmUgaW50byBob3cgRFNBIHRhZyBwcm90b2NvbHMgYXJlIGNob3NlbiBhbmQgaWYgdGhhdCBjaG9pY2UgaXMgbW9kaWZpYWJsZSBvbiB0aGUgZmx5LiBMZXQncyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgY29tbXVuaXR5IGRpc2N1c3Npb25zIGhhdmUgdG8gc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUxOCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjUwLjg0NjgzMTU5NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5NDc1MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoYW5nZV90YWdfcHJvdG9jb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZHNhL2RzYS5jPTU3MD1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfc2V0dXBfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbm5ldC9kc2EvZHNhLmMtNTc5LVxcdHJ0bmxfbG9jaygpO1xcbm5ldC9kc2EvZHNhLmM6NTgwOlxcdGVyciA9IGRzLVxcdTAwM2VvcHMtXFx1MDAzZWNoYW5nZV90YWdfcHJvdG9jb2woZHMsIHRhZ19vcHMtXFx1MDAzZXByb3RvKTtcXG5uZXQvZHNhL2RzYS5jLTU4MS1cXHRydG5sX3VubG9jaygpO1xcbi0tXFxubmV0L2RzYS9kc2EuYz0xMTU1PXN0YXRpYyBpbnQgZHNhX3BvcnRfcGFyc2VfY3B1KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxcbi0tXFxubmV0L2RzYS9kc2EuYy0xMTc2LVxcdGlmICh1c2VyX3Byb3RvY29sKSB7XFxubmV0L2RzYS9kc2EuYzoxMTc3OlxcdFxcdGlmICghZHMtXFx1MDAzZW9wcy1cXHUwMDNlY2hhbmdlX3RhZ19wcm90b2NvbCkge1xcbm5ldC9kc2EvZHNhLmMtMTE3OC1cXHRcXHRcXHRkZXZfZXJyKGRzLVxcdTAwM2VkZXYsIFxcXCJUYWcgcHJvdG9jb2wgY2Fubm90IGJlIG1vZGlmaWVkXFxcXG5cXFwiKTtcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTIzMC1cXHQgKiBkc2Ffc3dpdGNoX3NldHVwX3RhZ19wcm90b2NvbCBvbmNlIC5zZXR1cCBoYXMgcnVuIGFuZCB0aGVcXG5uZXQvZHNhL2RzYS5jOjEyMzE6XFx0ICogZHJpdmVyIGlzIHJlYWR5IHRvIGFjY2VwdCBjYWxscyB0byAuY2hhbmdlX3RhZ19wcm90b2NvbC4gSWZcXG5uZXQvZHNhL2RzYS5jLTEyMzItXFx0ICogdGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjdXN0b20gcHJvdG9jb2wgYXQgdGhhdFxcbi0tXFxubmV0L2RzYS9zd2l0Y2guYz04NzM9c3RhdGljIGludCBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbi0tXFxubmV0L2RzYS9zd2l0Y2guYy04NzktXFxubmV0L2RzYS9zd2l0Y2guYzo4ODA6XFx0aWYgKCFkcy1cXHUwMDNlb3BzLVxcdTAwM2VjaGFuZ2VfdGFnX3Byb3RvY29sKVxcbm5ldC9kc2Evc3dpdGNoLmMtODgxLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9kc2Evc3dpdGNoLmMtODg0LVxcbm5ldC9kc2Evc3dpdGNoLmM6ODg1OlxcdGVyciA9IGRzLVxcdTAwM2VvcHMtXFx1MDAzZWNoYW5nZV90YWdfcHJvdG9jb2woZHMsIHRhZ19vcHMtXFx1MDAzZXByb3RvKTtcXG5uZXQvZHNhL3N3aXRjaC5jLTg4Ni1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1Mjo1MS4wNTYzMTcyNDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3MzM1NDk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBgZHNhX3N3aXRjaF9jaGFuZ2VfdGFnX3Byb3RvYCBDYWxsZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGRzYV9zd2l0Y2hfY2hhbmdlX3RhZ19wcm90b2AuIFRoZSBrZXkgcXVlc3Rpb24gaXMsICp3aGVyZSogaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBpbnZva2VkPyBJcyB0aGlzIHNvbWV0aGluZyB0cmlnZ2VyZWQgYnkgYSB1c2VyIHNwYWNlIGludGVyYWN0aW9uLCBsaWtlIGEgc3lzZnMgZW50cnksIGEgbmV0bGluayBtZXNzYWdlLCBvciBtYXliZSBldmVuIHNvbWV0aGluZyBtb3JlIGRldi1vcmllbnRlZCBsaWtlIGRlYnVnZnM/IFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgZ3JhcGguIE5lZWQgdG8gZmluZCBvdXQgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGNhbGwgYGRzYV9zd2l0Y2hfY2hhbmdlX3RhZ19wcm90b2AuIFRoaXMnbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyB0eXBpY2FsIHVzYWdlIHNjZW5hcmlvIGFuZCBwb3RlbnRpYWxseSBleHBvc2Ugc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIG9yIHN1YnRsZSBkZXBlbmRlbmNpZXMgaW4gdGhlIERTQSBzdWJzeXN0ZW0uIEhvcGVmdWxseSwgdGhlIGNhbGwgc3RhY2sgd2lsbCBiZSBlYXN5IHRvIHRyYWNlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjUzLjAyOTY3NjQwOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNTkyNjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRzYV9zd2l0Y2hfY2hhbmdlX3RhZ19wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZHNhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kc2Evc3dpdGNoLmM9ODUzPXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9ob3N0X3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4tLVxcbm5ldC9kc2Evc3dpdGNoLmMtODcyLVxcbm5ldC9kc2Evc3dpdGNoLmM6ODczOnN0YXRpYyBpbnQgZHNhX3N3aXRjaF9jaGFuZ2VfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5uZXQvZHNhL3N3aXRjaC5jLTg3NC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRzYV9ub3RpZmllcl90YWdfcHJvdG9faW5mbyAqaW5mbylcXG4tLVxcbm5ldC9kc2Evc3dpdGNoLmM9OTc0PXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxubmV0L2RzYS9zd2l0Y2guYy0xMDQ0LVxcdGNhc2UgRFNBX05PVElGSUVSX1RBR19QUk9UTzpcXG5uZXQvZHNhL3N3aXRjaC5jOjEwNDU6XFx0XFx0ZXJyID0gZHNhX3N3aXRjaF9jaGFuZ2VfdGFnX3Byb3RvKGRzLCBpbmZvKTtcXG5uZXQvZHNhL3N3aXRjaC5jLTEwNDYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjUzLjIwMTI3NTQyNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDExNDY4MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgRFNBIFRhZyBQcm90b2NvbCBOb3RpZmllcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBgRFNBX05PVElGSUVSX1RBR19QUk9UT2AgZXZlbnQuIEl0IHNlZW1zIGxpa2UgaXQncyB0cmlnZ2VyZWQgYnkgYSBmZXcgZGlmZmVyZW50IHNvdXJjZXMg4oCTIHNwZWNpZmljYWxseSwgYGRzYV9wb3J0X2NoYW5nZV90YWdfcHJvdG9gLCBgZHNhX2NvbmR1aXRfc2V0dXBgLCBvciBwb3RlbnRpYWxseSwgc29tZXRoaW5nIGhhcHBlbmluZyB0aHJvdWdoIHN5c2ZzLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBkaWcgZGlyZWN0bHkgaW50byB0aGUgYERTQV9OT1RJRklFUl9UQUdfUFJPVE9gIGRlZmluaXRpb24gaXRzZWxmLiBUaGF0J3Mgd2hlcmUgdGhlIGFuc3dlcnMgYXJlIGdvaW5nIHRvIGxpZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBjYXVzZSB0aGF0IG5vdGlmaWVyIHRvIGZpcmUgYW5kIHdoYXQgZGF0YSBpdCdzIHBhc3NpbmcgYWxvbmcuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjgwMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjU1LjYxMjc0NzE3NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NDc3NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRTQV9OT1RJRklFUl9UQUdfUFJPVE9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZHNhL2RzYS5jPTk0OD1zdGF0aWMgaW50IGRzYV90cmVlX2JpbmRfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcXG4tLVxcbm5ldC9kc2EvZHNhLmMtOTYwLVxcdGluZm8udGFnX29wcyA9IHRhZ19vcHM7XFxubmV0L2RzYS9kc2EuYzo5NjE6XFx0ZXJyID0gZHNhX3RyZWVfbm90aWZ5KGRzdCwgRFNBX05PVElGSUVSX1RBR19QUk9UT19DT05ORUNULCBcXHUwMDI2aW5mbyk7XFxubmV0L2RzYS9kc2EuYy05NjItXFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBlcnIgIT0gLUVPUE5PVFNVUFApXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTk2Ni1cXHRpbmZvLnRhZ19vcHMgPSBvbGRfdGFnX29wcztcXG5uZXQvZHNhL2RzYS5jOjk2NzpcXHRkc2FfdHJlZV9ub3RpZnkoZHN0LCBEU0FfTk9USUZJRVJfVEFHX1BST1RPX0RJU0NPTk5FQ1QsIFxcdTAwMjZpbmZvKTtcXG5uZXQvZHNhL2RzYS5jLTk2OC1cXG4tLVxcbm5ldC9kc2EvZHNhLmMtOTcyLVxcdGluZm8udGFnX29wcyA9IHRhZ19vcHM7XFxubmV0L2RzYS9kc2EuYzo5NzM6XFx0ZHNhX3RyZWVfbm90aWZ5KGRzdCwgRFNBX05PVElGSUVSX1RBR19QUk9UT19ESVNDT05ORUNULCBcXHUwMDI2aW5mbyk7XFxubmV0L2RzYS9kc2EuYy05NzQtXFx0ZHN0LVxcdTAwM2V0YWdfb3BzID0gb2xkX3RhZ19vcHM7XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTk4Mz1pbnQgZHNhX3RyZWVfY2hhbmdlX3RhZ19wcm90byhzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QsXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTEwMDgtXFx0aW5mby50YWdfb3BzID0gdGFnX29wcztcXG5uZXQvZHNhL2RzYS5jOjEwMDk6XFx0ZXJyID0gZHNhX3RyZWVfbm90aWZ5KGRzdCwgRFNBX05PVElGSUVSX1RBR19QUk9UTywgXFx1MDAyNmluZm8pO1xcbm5ldC9kc2EvZHNhLmMtMTAxMC1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2RzYS9kc2EuYy0xMDIyLVxcdGluZm8udGFnX29wcyA9IG9sZF90YWdfb3BzO1xcbm5ldC9kc2EvZHNhLmM6MTAyMzpcXHRkc2FfdHJlZV9ub3RpZnkoZHN0LCBEU0FfTk9USUZJRVJfVEFHX1BST1RPLCBcXHUwMDI2aW5mbyk7XFxubmV0L2RzYS9kc2EuYy0xMDI0LW91dF91bmxvY2s6XFxuLS1cXG5uZXQvZHNhL3N3aXRjaC5jPTk3ND1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tLVxcbm5ldC9kc2Evc3dpdGNoLmMtMTA0My1cXHRcXHRicmVhaztcXG5uZXQvZHNhL3N3aXRjaC5jOjEwNDQ6XFx0Y2FzZSBEU0FfTk9USUZJRVJfVEFHX1BST1RPOlxcbm5ldC9kc2Evc3dpdGNoLmMtMTA0NS1cXHRcXHRlcnIgPSBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG8oZHMsIGluZm8pO1xcbm5ldC9kc2Evc3dpdGNoLmMtMTA0Ni1cXHRcXHRicmVhaztcXG5uZXQvZHNhL3N3aXRjaC5jOjEwNDc6XFx0Y2FzZSBEU0FfTk9USUZJRVJfVEFHX1BST1RPX0NPTk5FQ1Q6XFxubmV0L2RzYS9zd2l0Y2guYy0xMDQ4LVxcdFxcdGVyciA9IGRzYV9zd2l0Y2hfY29ubmVjdF90YWdfcHJvdG8oZHMsIGluZm8pO1xcbm5ldC9kc2Evc3dpdGNoLmMtMTA0OS1cXHRcXHRicmVhaztcXG5uZXQvZHNhL3N3aXRjaC5jOjEwNTA6XFx0Y2FzZSBEU0FfTk9USUZJRVJfVEFHX1BST1RPX0RJU0NPTk5FQ1Q6XFxubmV0L2RzYS9zd2l0Y2guYy0xMDUxLVxcdFxcdGVyciA9IGRzYV9zd2l0Y2hfZGlzY29ubmVjdF90YWdfcHJvdG8oZHMsIGluZm8pO1xcbi0tXFxubmV0L2RzYS9zd2l0Y2guaD0xMD1lbnVtIHtcXG4tLVxcbm5ldC9kc2Evc3dpdGNoLmgtMzEtXFx0RFNBX05PVElGSUVSX01UVSxcXG5uZXQvZHNhL3N3aXRjaC5oOjMyOlxcdERTQV9OT1RJRklFUl9UQUdfUFJPVE8sXFxubmV0L2RzYS9zd2l0Y2guaDozMzpcXHREU0FfTk9USUZJRVJfVEFHX1BST1RPX0NPTk5FQ1QsXFxubmV0L2RzYS9zd2l0Y2guaDozNDpcXHREU0FfTk9USUZJRVJfVEFHX1BST1RPX0RJU0NPTk5FQ1QsXFxubmV0L2RzYS9zd2l0Y2guaC0zNS1cXHREU0FfTk9USUZJRVJfVEFHXzgwMjFRX1ZMQU5fQURELFxcbi0tXFxubmV0L2RzYS9zd2l0Y2guaD05Mj1zdHJ1Y3QgZHNhX25vdGlmaWVyX210dV9pbmZvIHtcXG4tLVxcbm5ldC9kc2Evc3dpdGNoLmgtOTYtXFxubmV0L2RzYS9zd2l0Y2guaDo5NzovKiBEU0FfTk9USUZJRVJfVEFHX1BST1RPXyogKi9cXG5uZXQvZHNhL3N3aXRjaC5oLTk4LXN0cnVjdCBkc2Ffbm90aWZpZXJfdGFnX3Byb3RvX2luZm8ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1Mjo1NS43ODIyMzY1MTRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2NzIyOTM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBDYWxsIFNpdGVzIG9mIGBkc2FfdHJlZV9jaGFuZ2VfdGFnX3Byb3RvYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYGRzYV90cmVlX2NoYW5nZV90YWdfcHJvdG9gLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCwgb2YgY291cnNlLCBpcyB0byBmaWd1cmUgb3V0ICp3aGVyZSogaXQncyBhY3R1YWxseSBiZWluZyB1c2VkLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMuIFdoYXQgbW9kdWxlcyBvciBmdW5jdGlvbnMgYXJlIGNhbGxpbmcgaW50byB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24/ICBJcyBpdCBhIGNvcmUgbGlicmFyeSBjYWxsLCBhIHVzZXItc3BhY2UgdXRpbGl0eSwgc29tZXRoaW5nIGluIHRoZSBtaWRkbGU/IFRoaXMgd2lsbCBnaXZlIG1lIGltbWVkaWF0ZSBpbnNpZ2h0IGludG8gd2hhdCBkZXBlbmRzIG9uIGl0IGFuZCBob3cgY2hhbmdpbmcgaXQgbWlnaHQgYnJlYWsgdGhpbmdzLiBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbGluZyBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kLCBwb3RlbnRpYWxseSwgaXRzIGxpbWl0YXRpb25zLiBMZXQncyBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjU4LjE0OTQ2ODQ2NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MjEwNDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRzYV90cmVlX2NoYW5nZV90YWdfcHJvdG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZHNhL2NvbmR1aXQuYz0zNTA9c3RhdGljIHNzaXplX3QgdGFnZ2luZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jLTM4MC1cXG5uZXQvZHNhL2NvbmR1aXQuYzozODE6XFx0ZXJyID0gZHNhX3RyZWVfY2hhbmdlX3RhZ19wcm90byhjcHVfZHAtXFx1MDAzZWRzLVxcdTAwM2Vkc3QsIG5ld190YWdfb3BzLFxcbm5ldC9kc2EvY29uZHVpdC5jLTM4Mi1cXHRcXHRcXHRcXHRcXHRvbGRfdGFnX29wcyk7XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTk0OD1zdGF0aWMgaW50IGRzYV90cmVlX2JpbmRfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcXG4tLVxcbm5ldC9kc2EvZHNhLmMtOTgyLSAqL1xcbm5ldC9kc2EvZHNhLmM6OTgzOmludCBkc2FfdHJlZV9jaGFuZ2VfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcXG5uZXQvZHNhL2RzYS5jLTk4NC1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgKnRhZ19vcHMsXFxuLS1cXG5uZXQvZHNhL2RzYS5oPTI0PXN0cnVjdCBuZXRfZGV2aWNlICpkc2FfdHJlZV9maW5kX2ZpcnN0X2NvbmR1aXQoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KTtcXG5uZXQvZHNhL2RzYS5oOjI1OmludCBkc2FfdHJlZV9jaGFuZ2VfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcXG5uZXQvZHNhL2RzYS5oLTI2LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyAqdGFnX29wcyxcXG4tLVxcbm5ldC9kc2Evc3dpdGNoLmM9ODczPXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9jaGFuZ2VfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4tLVxcbm5ldC9kc2Evc3dpdGNoLmMtOTAwLVxcbm5ldC9kc2Evc3dpdGNoLmM6OTAxOlxcdFxcdC8qIHJ0bmxfbXV0ZXggaXMgaGVsZCBpbiBkc2FfdHJlZV9jaGFuZ2VfdGFnX3Byb3RvICovXFxubmV0L2RzYS9zd2l0Y2guYy05MDItXFx0XFx0ZHNhX3VzZXJfY2hhbmdlX210dSh1c2VyLCB1c2VyLVxcdTAwM2VtdHUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1Mjo1OC4yNTQ2ODUyMzVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwMTcyODA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIERTQSBJbnF1aXJ5KipcblxuSG1tLCB3YWl0IGEgbWludXRlLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gYW55dGhpbmcgaW52b2x2aW5nIERTQSwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIG1ha2Ugc3VyZSBJJ20gZ3JvdW5kZWQgaW4gdGhlIGVzc2VudGlhbHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkRvIHdlIGV2ZW4gaGF2ZSBhIHZpcnR1YWwgb3IgbW9jayBEU0Egc3dpdGNoIHJlcHJlc2VudGF0aW9uIHdpdGhpbiB0aGUgTGludXgga2VybmVsIGl0c2VsZj9cIiBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgdGhlIGtlcm5lbCBvZmZlcnMgYXMgYSBmb3VuZGF0aW9uLiBJdCdzIHRvbyBlYXN5IHRvIGFzc3VtZSwgYW5kIEkndmUgYmVlbiBjYXVnaHQgb3V0IGJ5IGFzc3VtcHRpb25zIGJlZm9yZS5cblxuU28sIGxldCdzIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIG9idmlvdXMgcGxhY2UgdG8gbG9vayBmb3IgRFNBIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMgaXMgdW5kZXIgYGRyaXZlcnMvbmV0L2RzYWAuIFRoYXQgZGlyZWN0b3J5IGlzIHRoZSBsb2dpY2FsIGxvY2F0aW9uIGZvciBhbGwgdGhpbmdzIERTQS4gSeKAmWxsIHN0YXJ0IHRoZXJlLCBhbmQgaG9wZSBJIGNhbiBxdWlja2x5IGZpbmQgYW55IHNpZ24gb2YgdmlydHVhbCBvciBtb2NrIHN3aXRjaCBkcml2ZXJzLiBUaGlzIGluaXRpYWwgc2VhcmNoIHNob3VsZCBxdWlja2x5IGNsZWFyIHRoZSBncm91bmQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQncyBhIGZ1bmRhbWVudGFsIGNoZWNrIGJlZm9yZSBjb25zaWRlcmluZyBhbnkga2luZCBvZiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MDcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MzowMC40NTY0MTYxMTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJiY21fc2YyLmNcIixcbiAgICBcImJjbV9zZjIuaFwiLFxuICAgIFwiYmNtX3NmMl9jZnAuY1wiLFxuICAgIFwiYmNtX3NmMl9yZWdzLmhcIixcbiAgICBcImRzYV9sb29wLmNcIixcbiAgICBcImtzODk5NS5jXCIsXG4gICAgXCJsYW45MzAzLWNvcmUuY1wiLFxuICAgIFwibGFuOTMwMy5oXCIsXG4gICAgXCJsYW45MzAzX2kyYy5jXCIsXG4gICAgXCJsYW45MzAzX21kaW8uY1wiLFxuICAgIFwibXQ3NTMwLW1kaW8uY1wiLFxuICAgIFwibXQ3NTMwLW1taW8uY1wiLFxuICAgIFwibXQ3NTMwLmNcIixcbiAgICBcIm10NzUzMC5oXCIsXG4gICAgXCJtdDc2MjguY1wiLFxuICAgIFwibXY4OGU2MDYwLmNcIixcbiAgICBcIm12ODhlNjA2MC5oXCIsXG4gICAgXCJyem4xX2E1cHN3LmNcIixcbiAgICBcInJ6bjFfYTVwc3cuaFwiLFxuICAgIFwidml0ZXNzZS12c2M3M3h4LWNvcmUuY1wiLFxuICAgIFwidml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLmNcIixcbiAgICBcInZpdGVzc2UtdnNjNzN4eC1zcGkuY1wiLFxuICAgIFwidml0ZXNzZS12c2M3M3h4LmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogW1xuICAgIFwiYjUzXCIsXG4gICAgXCJoaXJzY2htYW5uXCIsXG4gICAgXCJsYW50aXFcIixcbiAgICBcIm1pY3JvY2hpcFwiLFxuICAgIFwibW90b3Jjb21tXCIsXG4gICAgXCJtdjg4ZTZ4eHhcIixcbiAgICBcIm14bDg2Mnh4XCIsXG4gICAgXCJuZXRjXCIsXG4gICAgXCJvY2Vsb3RcIixcbiAgICBcInFjYVwiLFxuICAgIFwicmVhbHRla1wiLFxuICAgIFwic2phMTEwNVwiLFxuICAgIFwieHJzNzAweFwiXG4gIF1cbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUzOjAwLjQ1NjQ5OTQ3OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDQ5NzY5NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGRzYV9sb29wLmNgKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiBgZHNhX2xvb3AuY2AuIFRoYXQgZmlsZSBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIHBhcnRpY3VsYXIgYXJlYSwgc28gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb2YgaXRzIGxvZ2ljIGFuZCBpbXBsZW1lbnRhdGlvbi4gUmlnaHQgbm93LCAqdGhhdCogaXMgdGhlIGNvZGUgSSBuZWVkIHRvIGFuYWx5emUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDU4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUzOjAxLjkwNjI3Mjc4NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MTU0NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRzYV9sb29wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9Mz1iY20tc2YyLW9ianNcXHRcXHRcXHQ6PSBiY21fc2YyLm8gYmNtX3NmMl9jZnAub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfRFNBX0xPT1ApXFx0Kz0gZHNhX2xvb3Aub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXFx0Kz0ga3M4OTk1Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1OnN0cnVjdCBkc2FfbG9vcF92bGFuIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNi1cXHR1MTYgbWVtYmVycztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI5LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMwOnN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxLVxcdGNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzQtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU6ZW51bSBkc2FfbG9vcF9taWJfY291bnRlcnMge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2LVxcdERTQV9MT09QX1BIWV9SRUFEX09LLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM6c3RydWN0IGRzYV9sb29wX3BvcnQge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0OlxcdHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgbWliW19fRFNBX0xPT1BfQ05UX01BWF07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDUtXFx0dTE2IHB2aWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTpzdHJ1Y3QgZHNhX2xvb3BfcHJpdiB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAtXFx0c3RydWN0IG1paV9idXNcXHQqYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxLVxcdHVuc2lnbmVkIGludFxcdHBvcnRfYmFzZTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MjpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiB2bGFuc1tWTEFOX05fVklEXTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01My1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU0OlxcdHN0cnVjdCBkc2FfbG9vcF9wb3J0IHBvcnRzW0RTQV9NQVhfUE9SVFNdO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTU1LX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTc6c3RydWN0IGRzYV9sb29wX3BkYXRhIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01OC1cXHQvKiBNdXN0IGJlIGZpcnN0LCBzdWNoIHRoYXQgZHNhX3JlZ2lzdGVyX3N3aXRjaCgpIGNhbiBhY2Nlc3MgdGhpc1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Njc6c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgZHNhX2xvb3BfbWlic1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTY4LVxcdFtEU0FfTE9PUF9QSFlfUkVBRF9PS11cXHQ9IHsgXFxcInBoeV9yZWFkX29rXFxcIiwgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTc1PXN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2UgKnN3aXRjaF9tZGlvZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjc3OmVudW0gZHNhX2xvb3BfZGV2bGlua19yZXNvdXJjZV9pZCB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNzgtXFx0RFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9OT05FLCAgLyogREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy04MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4MjpzdGF0aWMgdTY0IGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCh2b2lkICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4NDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg1LVxcdHVuc2lnbmVkIGludCBpLCBjb3VudCA9IDA7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODY6XFx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6OTc6c3RhdGljIGludCBkc2FfbG9vcF9zZXR1cF9kZXZsaW5rX3Jlc291cmNlcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTgte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk5LVxcdHN0cnVjdCBkZXZsaW5rX3Jlc291cmNlX3NpemVfcGFyYW1zIHNpemVfcGFyYW1zO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEwMDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMDEtXFx0aW50IGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNS1cXHRcXHRcXHRcXHRcXHQgICAgICBEU0FfTE9PUF9ERVZMSU5LX1BBUkFNX0lEX1ZUVSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgZHNhX2xvb3BfZGV2bGlua192dHVfZ2V0LCBwcyk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTE3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTMzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNDpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzUte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNjpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzctXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRzLVxcdTAwM2VudW1fcG9ydHM7IGkrKylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDA6XFx0XFx0bWVtY3B5KHBzLVxcdTAwM2Vwb3J0c1tpXS5taWIsIGRzYV9sb29wX21pYnMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQxOlxcdFxcdCAgICAgICBzaXplb2YoZHNhX2xvb3BfbWlicykpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0NC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDU6XFx0cmV0dXJuIGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDYtfVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ny1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDg6c3RhdGljIHZvaWQgZHNhX2xvb3BfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNTItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTUzOnN0YXRpYyBpbnQgZHNhX2xvb3BfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTU0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjItXFx0XFx0XFx0XFx0IHUzMiBzdHJpbmdzZXQsIHVpbnQ4X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTY1LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTczLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE3NDpzdGF0aWMgdm9pZCBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3NS1cXHRcXHRcXHRcXHQgICAgICAgdWludDY0X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc4LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTgzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE4NDpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg1LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxODY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTk4LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE5OTpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV93cml0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMC1cXHRcXHRcXHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAxLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyMDI6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAzLVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIxNTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMTYtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMjUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI3LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjMzOnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzNC1cXHRcXHRcXHRcXHRcXHR1OCBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzOS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNDA6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjQxLVxcdFxcdFxcdFxcdFxcdGJvb2wgdmxhbl9maWx0ZXJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNDktXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjUwOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1MS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1NS1cXHRib29sIHB2aWQgPSB2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU5LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjgyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4MzpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODQtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODYtXFx0Ym9vbCB1bnRhZ2dlZCA9IHZsYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyODc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg4LVxcdHUxNiBwdmlkID0gcHMtXFx1MDAzZXBvcnRzW3BvcnRdLnB2aWQ7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg5LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI5MDpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEwLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxMi1cXHRcXHRcXHRcXHQgICAgaW50IG5ld19tdHUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMTQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjAtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzIxOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzIyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyNS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjY6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHNhLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjctXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMzMtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZHNhX2xvb3BfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNTpcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gZHNhX2xvb3BfZ2V0X3Byb3RvY29sLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNjpcXHQuc2V0dXBcXHRcXHRcXHQ9IGRzYV9sb29wX3NldHVwLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNzpcXHQudGVhcmRvd25cXHRcXHQ9IGRzYV9sb29wX3RlYXJkb3duLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzODpcXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGRzYV9sb29wX2dldF9zdHJpbmdzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzOTpcXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MDpcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGRzYV9sb29wX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MTpcXHQuZ2V0X2V0aHRvb2xfcGh5X3N0YXRzXFx0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDI6XFx0LnBoeV9yZWFkXFx0XFx0PSBkc2FfbG9vcF9waHlfcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDM6XFx0LnBoeV93cml0ZVxcdFxcdD0gZHNhX2xvb3BfcGh5X3dyaXRlLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NDpcXHQucG9ydF9icmlkZ2Vfam9pblxcdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDU6XFx0LnBvcnRfYnJpZGdlX2xlYXZlXFx0PSBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDY6XFx0LnBvcnRfc3RwX3N0YXRlX3NldFxcdD0gZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NzpcXHQucG9ydF92bGFuX2ZpbHRlcmluZ1xcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDg6XFx0LnBvcnRfdmxhbl9hZGRcXHRcXHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ5OlxcdC5wb3J0X3ZsYW5fZGVsXFx0XFx0PSBkc2FfbG9vcF9wb3J0X3ZsYW5fZGVsLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MDpcXHQucG9ydF9jaGFuZ2VfbXR1XFx0PSBkc2FfbG9vcF9wb3J0X2NoYW5nZV9tdHUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzUxOlxcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGRzYV9sb29wX3BvcnRfbWF4X210dSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTI6XFx0LnBoeWxpbmtfZ2V0X2NhcHNcXHQ9IGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzUzLX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NTpzdGF0aWMgaW50IGRzYV9sb29wX2Rydl9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTc6XFx0c3RydWN0IGRzYV9sb29wX3BkYXRhICpwZGF0YSA9IG1kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Mi1cXHRkcy1cXHUwMDNlZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODM6XFx0ZHMtXFx1MDAzZW9wcyA9IFxcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg0LVxcdGRzLVxcdTAwM2Vwcml2ID0gcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OC17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MDA6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQwMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjQtXFx0Lm1kaW9kcnYuZHJpdmVyXFx0PSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjYtXFx0fSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjc6XFx0LnByb2JlXFx0PSBkc2FfbG9vcF9kcnZfcHJvYmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI4OlxcdC5yZW1vdmVcXHQ9IGRzYV9sb29wX2Rydl9yZW1vdmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI5OlxcdC5zaHV0ZG93biA9IGRzYV9sb29wX2Rydl9zaHV0ZG93bixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzAtfTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzEtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDMyOnN0YXRpYyBpbnQgZHNhX2xvb3BfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzMtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzQte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzNTpcXHRyZXR1cm4gZHJ2ID09IFxcdTAwMjZkc2FfbG9vcF9kcnYubWRpb2Rydi5kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM2LX1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzctXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM4OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3Rlcih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzOS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ2OnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2Rldih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ4OlxcdHN0YXRpYyBzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEgZHNhX2xvb3BfcGRhdGEgPSB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ5LVxcdFxcdC5jZCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzE6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzI6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXFx1MDAyNmRzYV9sb29wX3BkYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODI6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4My17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDg3OlxcdHJldCA9IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2RldigpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NDpcXHRyZXQgPSBtZGlvX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTUtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NjpcXHRcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTctXFx0XFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwMi19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTAzOm1vZHVsZV9pbml0KGRzYV9sb29wX2luaXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDU6c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDYte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcXHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZkc2FfbG9vcF9kcnYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwODpcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDktXFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMS19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTEyOm1vZHVsZV9leGl0KGRzYV9sb29wX2V4aXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTM6MDIuMDIyNDM0ODEzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MzI5NDY2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBEU0EgVGFnIFByb3RvY29sIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBkc2FfbG9vcC5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBpdCBoYW5kbGVzIHRhZyBwcm90b2NvbHMuIFRoZSBjb2RlIHVzZXMgYGRzYV9sb29wX2dldF9wcm90b2NvbGAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgcmV0dXJucyBzb21ldGhpbmcgbGlrZSBgRFNBX1RBR19QUk9UT19MT09QYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGRvZXMgYGRzYV9sb29wYCBpbXBsZW1lbnQgYSBgY2hhbmdlX3RhZ19wcm90b2NvbGAgZnVuY3Rpb24/IFRoYXQncyB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBoZXJlLCBiZWNhdXNlIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgbW9kdWxlIGNhbiBkeW5hbWljYWxseSBhZGp1c3QgaXRzIHRhZ2dpbmcgbWV0aG9kLlxuXG5TbywgSSBkaXZlIGJhY2sgaW50byBgZHNhX2xvb3AuY2AgdG8gZXhhbWluZSB0aGUgYGRzYV9sb29wX2RyaXZlcmAgc3RydWN0dXJlLiBJJ20gY2hlY2tpbmcgc3BlY2lmaWNhbGx5IGZvciB0aGUgcHJlc2VuY2Ugb2YgYC5jaGFuZ2VfdGFnX3Byb3RvY29sYC4gQWgsIHJpZ2h0LCBubywgaXQncyBub3QgdGhlcmUhIEl0IHNlZW1zIGBkc2FfbG9vcGAgZG9lc24ndCBwcm92aWRlIGl0cyBvd24gZnVuY3Rpb24gdG8gY2hhbmdlIHRoZSB0YWcgcHJvdG9jb2wuXG5cbk5vdywgbXkgbmV4dCBtb3ZlIGlzIHRvIGJyb2FkZW4gdGhlIHNjb3BlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBvdGhlciBEU0Egc3dpdGNoIGRyaXZlcnMgKmRvKiBpbXBsZW1lbnQgYGNoYW5nZV90YWdfcHJvdG9jb2xgLiBUaW1lIHRvIGNvbnN1bHQgdGhlIGJyb2FkZXIgY29kZWJhc2UgYW5kIHNlZSB3aGVyZSB0aGlzIGNhcGFiaWxpdHkgYWN0dWFsbHkgcmVzaWRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxNDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTM6MDQuNDU1Mzg0NzU0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ3OTE3MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXC5jaGFuZ2VfdGFnX3Byb3RvY29sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz03MTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXY4OGU2eHh4X3N3aXRjaF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNzE4OC1cXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gbXY4OGU2eHh4X2dldF90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM6NzE4OTpcXHQuY2hhbmdlX3RhZ19wcm90b2NvbFxcdD0gbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNzE5MC1cXHQuc2V0dXBcXHRcXHRcXHQ9IG12ODhlNnh4eF9zZXR1cCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYz0yMzA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZmVsaXhfc3dpdGNoX29wcyA9IHtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwNy1cXHQuZ2V0X3RhZ19wcm90b2NvbFxcdFxcdD0gZmVsaXhfZ2V0X3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6MjMwODpcXHQuY2hhbmdlX3RhZ19wcm90b2NvbFxcdFxcdD0gZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwOS1cXHQuY29ubmVjdF90YWdfcHJvdG9jb2xcXHRcXHQ9IGZlbGl4X2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYz0zMjg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgcnRsODM2NW1iX3N3aXRjaF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0zMjg2LVxcdC5nZXRfdGFnX3Byb3RvY29sID0gcnRsODM2NW1iX2dldF90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYzozMjg3OlxcdC5jaGFuZ2VfdGFnX3Byb3RvY29sID0gcnRsODM2NW1iX2NoYW5nZV90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0zMjg4LVxcdC5zZXR1cCA9IHJ0bDgzNjVtYl9zZXR1cCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTM6MDQuNjUwMTg0NjQxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxODAzNDc5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERTQSBUYWcgUHJvdG9jb2xzIGFuZCB0aGUgTVQ3NjI4IEV0aGVybmV0IFN3aXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSBEU0EgdGFnIHByb3RvY29scy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYW5kc2NhcGU6IGBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbGAsIGBmZWxpeF9jaGFuZ2VfdGFnX3Byb3RvY29sYCwgYW5kIGBydGw4MzY1bWJfY2hhbmdlX3RhZ19wcm90b2NvbGAuIEknbSBjaGVja2luZyB0aGVpciBzdXBwb3J0ZWQgcHJvdG9jb2xzLiBgbXY4OGU2eHh4YCBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBzdGlja2luZyB3aXRoIEVEU0EvRFNBLiBUaGVuIGBmZWxpeGAgb2ZmZXJzIG9jZWxvdCB2YXJpYW50cy4gYHJ0bDgzNjVtYmAuLi4gdGhhdCdzIFJUTC1zcGVjaWZpYy5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGludmVzdGlnYXRlIGBkcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmNgLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHdoYXQgdGhlIGBtdDc2MjhgIGRldmljZSBpcyBhbGwgYWJvdXQuIEFoLCBpdCdzIHRoZSBidWlsdC1pbiBFdGhlcm5ldCBzd2l0Y2ggd2l0aGluIHRoZSBNZWRpYVRlayBNVDc2MjggU29DLCBhIE1JUFMgU29DLiBUaGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIHdoYXQgSSdkIGV4cGVjdDogYEhBU19JT01FTWAgYW5kIGVpdGhlciBgU09DX01UNzYyMGAgb3IgYENPTVBJTEVfVEVTVGAuIEl0J3MgYSBEZXZpY2UgVHJlZSBwbGF0Zm9ybSBkcml2ZXIsIHNwZWNpZmljYWxseSBvbiB0aGUgTVQ3NjI4IFNvQy5cblxuSSdtIHplcm9pbmcgaW4gb24gdGhlIGBtdDc2MjhfZHJpdmVyYCwgcGFydGljdWxhcmx5IHRoZSBwcm9iZSBmdW5jdGlvbiBgbXQ3NjI4X3Byb2JlYC4gVGhlIGRyaXZlciB1c2VzIHRoZSBgXCJtZWRpYXRlayxtdDc2MjgtZXN3XCJgIGNvbXBhdGlibGUgc3RyaW5nLiBPa2F5LCBhbmQgYG5ldC9kc2EvdGFnX210NzYyOC5jYCBpcyB0aGUgdGFnIGRyaXZlciBmb3IgYERTQV9UQUdfUFJPVE9fTVQ3NjI4YC4gVGhlIHByb3RvY29sIGlzIHVzZWQgZXhjbHVzaXZlbHkgYnkgYG10NzYyOC5jYCB2aWEgdGhlIGBtdDc2MjhfZ2V0X3RhZ19wcm90bygpYCBmdW5jdGlvbi5cblxuTm93LCBJJ20gZ2V0dGluZyBzdXNwaWNpb3VzLiBJcyBgRFNBX1RBR19QUk9UT19NVDc2MjhgIG9ubHkgdXNlZCAqaGVyZSo/IEkgbmVlZCBhIG11Y2ggYnJvYWRlciB2aWV3LiBJJ20gZ29pbmcgdG8gc2VhcmNoIHRoZSBlbnRpcmUga2VybmVsIGNvZGViYXNlLiBUaW1lIHRvIGBncmVwYCBmb3IgYERTQV9UQUdfUFJPVE9fTVQ3NjI4YCBhbmQgYHRhZ19tdDc2MjhgLiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXNuJ3QgcmVmZXJlbmNlZCBlbHNld2hlcmUsIG9yIHRoYXQgSSBhbSBtaXNzaW5nIHNvbWV0aGluZy4gSSB3YW50IHRvIHNlZSB0aGlzIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6MjcwOTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTM6MDguODMwNTM3MDYyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjM4NzU0NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihEU0FfVEFHX1BST1RPX01UNzYyOHx0YWdfbXQ3NjI4KVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJNQUlOVEFJTkVSUz0xNjc5MD1GOlxcdGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZmUtc29jLmNcXG5NQUlOVEFJTkVSUzoxNjc5MTpGOlxcdG5ldC9kc2EvdGFnX210NzYyOC5jXFxuTUFJTlRBSU5FUlMtMTY3OTItXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmM9NTg4PW10NzYyOF9nZXRfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtNTg5LXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmM6NTkwOlxcdHJldHVybiBEU0FfVEFHX1BST1RPX01UNzYyODtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtNTkxLX1cXG4tLVxcbmluY2x1ZGUvbmV0L2RzYS5oPTI2PXN0cnVjdCB0Y19hY3Rpb247XFxuLS1cXG5pbmNsdWRlL25ldC9kc2EuaC02Mi0jZGVmaW5lIERTQV9UQUdfUFJPVE9fS1NaODQ2M19WQUxVRVxcdFxcdDM0XFxuaW5jbHVkZS9uZXQvZHNhLmg6NjM6I2RlZmluZSBEU0FfVEFHX1BST1RPX01UNzYyOF9WQUxVRVxcdFxcdDM1XFxuaW5jbHVkZS9uZXQvZHNhLmgtNjQtXFxuaW5jbHVkZS9uZXQvZHNhLmg9NjU9ZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2RzYS5oLTEwMC1cXHREU0FfVEFHX1BST1RPX0tTWjg0NjNcXHRcXHQ9IERTQV9UQUdfUFJPVE9fS1NaODQ2M19WQUxVRSxcXG5pbmNsdWRlL25ldC9kc2EuaDoxMDE6XFx0RFNBX1RBR19QUk9UT19NVDc2MjhcXHRcXHQ9IERTQV9UQUdfUFJPVE9fTVQ3NjI4X1ZBTFVFLFxcbmluY2x1ZGUvbmV0L2RzYS5oLTEwMi19O1xcbi0tXFxubmV0L2RzYS9NYWtlZmlsZT0yOT1vYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTEFOOTMwMykgKz0gdGFnX2xhbjkzMDMub1xcbm5ldC9kc2EvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX01UNzYyOCkgKz0gdGFnX210NzYyOC5vXFxubmV0L2RzYS9NYWtlZmlsZS0zMS1vYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTVRLKSArPSB0YWdfbXRrLm9cXG4tLVxcbm5ldC9kc2EvdGFnX210NzYyOC5jPTEyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIG10NzYyOF90YWdfb3BzID0ge1xcbm5ldC9kc2EvdGFnX210NzYyOC5jLTEyMi1cXHQubmFtZSA9IE1UNzYyOF9UQUdfTkFNRSxcXG5uZXQvZHNhL3RhZ19tdDc2MjguYzoxMjM6XFx0LnByb3RvID0gRFNBX1RBR19QUk9UT19NVDc2MjgsXFxubmV0L2RzYS90YWdfbXQ3NjI4LmMtMTI0LVxcdC54bWl0ID0gbXQ3NjI4X3RhZ194bWl0LFxcbi0tXFxubmV0L2RzYS90YWdfbXQ3NjI4LmM9MTI5PW1vZHVsZV9kc2FfdGFnX2RyaXZlcihtdDc2MjhfdGFnX29wcyk7XFxubmV0L2RzYS90YWdfbXQ3NjI4LmMtMTMwLVxcbm5ldC9kc2EvdGFnX210NzYyOC5jOjEzMTpNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19NVDc2MjgsIE1UNzYyOF9UQUdfTkFNRSk7XFxubmV0L2RzYS90YWdfbXQ3NjI4LmMtMTMyLU1PRFVMRV9ERVNDUklQVElPTihcXFwiRFNBIHRhZyBkcml2ZXIgZm9yIE1UNzYyOCBzd2l0Y2hcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTM6MTIuNDY5MzAzMDAyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NjIxMTg2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gVGhlIGRpZmYgc2hvd3MgbW9kaWZpY2F0aW9ucyB0byBgTUFJTlRBSU5FUlNgLCBhIGRyaXZlciAoYGRyaXZlcnMvbmV0L2RzYS9tdDc2MjguY2ApIGZvciB0aGUgTWVkaWFUZWsgTVQ3NjI4IFNvQyBlbWJlZGRlZCBFdGhlcm5ldCBzd2l0Y2gsIGFuZCBpdHMgYXNzb2NpYXRlZCB0YWcgZHJpdmVyIChgbmV0L2RzYS90YWdfbXQ3NjI4LmNgKS4gVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQuXG5cbk5vdywgSSdtIGNoZWNraW5nIGFnYWluc3QgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBUaGUgcHJvbXB0IGNsZWFybHkgZGVmaW5lcyBzaXR1YXRpb25zIHdoZXJlIGZ1enppbmcgaXNuJ3QgdmFsdWFibGUuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yOiBub24ta2VybmVsL25vbi1leGVjdXRhYmxlIGNoYW5nZXMsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLlxuXG5Db25zaWRlcmluZyB0aGUgTVQ3NjI4IFNvQywgbXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBpdCdzIGxpa2VseSBhIGNhc2Ugb2YgdW5yZWFjaGFibGUgaGFyZHdhcmUuIExldCBtZSBjb25maXJtOiB0aGUgZHJpdmVyJ3MgZGVwZW5kZW5jaWVzLCBiYXNlZCBvbiBgbXQ3NjI4LmNgLCBpbmNsdWRlIGBIQVNfSU9NRU1gIGFuZCBlaXRoZXIgYFNPQ19NVDc2MjBgIG9yIGBDT01QSUxFX1RFU1RgLiBJdCBpcyBhbiBgb2ZfZGV2aWNlYCAoRGV2aWNlIFRyZWUpIG1hdGNoaW5nIGBtZWRpYXRlayxtdDc2MjgtZXN3YC4gSG93ZXZlciwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSBzZXR1cHMsIHRoZXJlJ3Mgbm8gRGV2aWNlIFRyZWUgbm9kZSBmb3IgdGhlIE1lZGlhVGVrIE1UNzYyOCBlbWJlZGRlZCBzd2l0Y2ggaGFyZHdhcmUuIFRoZSBNVDc2MjAvTVQ3NjI4IGlzIGEgTUlQUyBhcmNoaXRlY3R1cmUgU29DLiBFdmVuIHdpdGggYENPTVBJTEVfVEVTVGAgZW5hYmxlZCBvbiB4ODZfNjQsIHRoZSBkcml2ZXIgKnJlcXVpcmVzKiBwaHlzaWNhbCBTb0MgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMgYW5kIHRoZSBkZXZpY2UgdHJlZSBub2RlIHRvIHByb2JlLiBObyB2aXJ0dWFsIGRldmljZSBvciBRRU1VIGVtdWxhdGlvbiBleGlzdHMgZm9yIGl0LlxuXG5GdXJ0aGVybW9yZSwgYG5ldC9kc2EvdGFnX210NzYyOC5jYCBpcyBleGNsdXNpdmVseSBsaW5rZWQgdG8gdGhlIGBEU0FfVEFHX1BST1RPX01UNzYyOGAgcHJvdG9jb2wsIHdoaWNoIGlzICpvbmx5KiB1c2VkIHdoZW4gYG10NzYyOC5jYCBwcm9iZXMgYW5kIGF0dGFjaGVzIGl0cyBEU0Egc3dpdGNoLiBTaW5jZSB0aGUgc3dpdGNoIGRyaXZlciBjYW4ndCBwcm9iZSBvbiBhbWQ2NCBpbiBRRU1VLCB0aGUgYG10NzYyOF90YWdfb3BzYCBmdW5jdGlvbnMgYXJlIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUuIFRoZXkgd2lsbCBuZXZlciBiZSBpbnN0YW50aWF0ZWQgb3IgZXhlY3V0ZWQuXG5cblRoZXJlZm9yZSwgKmFsbCogdGhlIG1vZGlmaWVkIGNvZGUgZmFsbHMgaW50byB0aGUgXCJzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBjYXRlZ29yeSBhbmQgdGhlIG5vbi1leGVjdXRhYmxlIGRvY3VtZW50YXRpb24gZmlsZSBgTUFJTlRBSU5FUlNgLiBJdCdzIGVpdGhlciBhIG5vbi1leGVjdXRhYmxlIG1ldGFkYXRhIGZpbGUgb3IgY29kZSB0aGF0IHJlbGllcyBvbiBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiB0aGUgdGFyZ2V0IFFFTVUgZW52aXJvbm1lbnQuXG5cbkhlbmNlLCBJIGNhbiBjb25maWRlbnRseSBjb25jbHVkZTogYFdvcnRoRnV6emluZz1mYWxzZWAuIE5vIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBvciBzcGVjaWZpYyBzeW1ib2xzIG5lZWQgdG8gYmUgZm9jdXNlZCBvbi4gSSdsbCBzdW1tYXJpemUgaXQgYXMgYSBjb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSB2ZXJkaWN0LCBhbmQgdGhlbiBwcm9jZWVkLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODg1LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MzoxOC4zMzE0MjQ0NzVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNQUlOVEFJTkVSUywgdGhlIE1lZGlhVGVrIE1UNzYyOCBTb0MgZW1iZWRkZWQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzYyOC5jKSwgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWcgZHJpdmVyIChuZXQvZHNhL3RhZ19tdDc2MjguYykuIE1UNzYyOCBpcyBhIHBsYXRmb3JtL1NvQy1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZm9yIE1JUFMtYmFzZWQgTWVkaWFUZWsgU29DcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldmljZSBjYW5ub3QgcHJvYmUgYW5kIHRoZSB0YWcgcHJvdG9jb2wgaXMgb25seSB1c2VkIGJ5IHRoaXMgc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNQUlOVEFJTkVSUywgdGhlIE1lZGlhVGVrIE1UNzYyOCBTb0MgZW1iZWRkZWQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzYyOC5jKSwgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWcgZHJpdmVyIChuZXQvZHNhL3RhZ19tdDc2MjguYykuIE1UNzYyOCBpcyBhIHBsYXRmb3JtL1NvQy1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZm9yIE1JUFMtYmFzZWQgTWVkaWFUZWsgU29DcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldmljZSBjYW5ub3QgcHJvYmUgYW5kIHRoZSB0YWcgcHJvdG9jb2wgaXMgb25seSB1c2VkIGJ5IHRoaXMgc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MzoxOC4zMzE0NzM0MTVaIiwiU2VxIjozNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowckbxz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 01:29:11 +0000 UTC FinishedAt: 2026-09-07 01:53:20 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTUFJTlRBSU5FUlMsIHRoZSBNZWRpYVRlayBNVDc2MjggU29DIGVtYmVkZGVkIHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYyksIGFuZCBpdHMgYXNzb2NpYXRlZCBEU0EgdGFnIGRyaXZlciAobmV0L2RzYS90YWdfbXQ3NjI4LmMpLiBNVDc2MjggaXMgYSBwbGF0Zm9ybS9Tb0Mtc3BlY2lmaWMgRXRoZXJuZXQgc3dpdGNoIGZvciBNSVBTLWJhc2VkIE1lZGlhVGVrIFNvQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gQmVjYXVzZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBkZXZpY2UgY2Fubm90IHByb2JlIGFuZCB0aGUgdGFnIHByb3RvY29sIGlzIG9ubHkgdXNlZCBieSB0aGlzIHN3aXRjaCwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA0YjcxNmIxYTlmYTYxOTEwY2RkODE2MzIyZjI4ODAwNThmNDNjOTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAxOjUyOjIwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGIyM2ZiNmYyZjRlZjQuLjk1ZTM2MWY1ZDBlZGUgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0xNjc4MSw2ICYjNDM7MTY3ODEsMTUgQEAgUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy9tZWRpYXRlayxtdDc2MjEtaTJjLnlhbWxcbiBGOlx0ZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdDc2MjEuY1xuIFxuJiM0MztNRURJQVRFSyBNVDc2MjggU1dJVENIIERSSVZFUlxuJiM0MztNOlx0Sm9yaXMgVmFpc3ZpbGEgXHUwMDNjam9leUB0aW55aXNyLmNvbVx1MDAzZVxuJiM0MztMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuJiM0MztTOlx0TWFpbnRhaW5lZFxuJiM0MztGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NjI4LWVzdy55YW1sXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmNcbiYjNDM7RjpcdGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZmUtc29jLmNcbiYjNDM7RjpcdG5ldC9kc2EvdGFnX210NzYyOC5jXG4mIzQzO1xuIE1FRElBVEVLIE1UTUlQUyBDTE9DSyBEUklWRVJcbiBNOlx0U2VyZ2lvIFBhcmFjdWVsbG9zIFx1MDAzY3Nlcmdpby5wYXJhY3VlbGxvc0BnbWFpbC5jb21cdTAwM2VcbiBTOlx0TWFpbnRhaW5lZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguYyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguY1xuaW5kZXggZmI2M2Y2ZjY0NGI5ZS4uNjI5ZGJmOTY4YTE3MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL210NzYyOC5jXG5AQCAtMzQsNiAmIzQzOzM0LDcgQEBcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1ZVQih2bGFuKSAoMHgxMDAgJiM0MzsgNCAqICgodmxhbikgLyA0KSlcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1NPQ1BDIDB4OGNcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1BPQzAgMHg5MFxuJiM0MzsjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1BPQzEgMHg5NFxuICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfUE9DMiAweDk4XG4gI2RlZmluZSBNVDc2MjhfRVNXX1JFR19TR0MgMHg5Y1xuICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfUENSMCAweGMwXG5AQCAtOTIsNiAmIzQzOzkzLDkgQEBcbiBcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUE9DMF9QT1JUX0RJU0FCTEUgR0VOTUFTSygyOSwgMjMpXG4gXG4mIzQzOyNkZWZpbmUgTVQ3NjI4X0VTV19QT0MxX1BPUlRfQkxPQ0tJTkdfU1RBVEUgR0VOTUFTSygyMiwgMTYpXG4mIzQzOyNkZWZpbmUgTVQ3NjI4X0VTV19QT0MxX1BPUlRfRElTX0xFQVJOSU5HIEdFTk1BU0soMTQsIDgpXG4mIzQzO1xuICNkZWZpbmUgTVQ3NjI4X0VTV19QT0MyX1BFUl9WTEFOX1VOVEFHX0VOIEJJVCgxNSlcbiBcbiAjZGVmaW5lIE1UNzYyOF9FU1dfU0dDX0FHSU5HX0lOVEVSVkFMIEdFTk1BU0soMywgMClcbkBAIC0xMzgsNiAmIzQzOzE0Miw3IEBAXG4gI2RlZmluZSBNVDc2MjhfRVNXX1BPUlRTX0NQVSBCSVQoNilcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUE9SVFNfQUxMIEdFTk1BU0soNiwgMClcbiBcbiYjNDM7I2RlZmluZSBNVDc2MjhfRVNXX05VTV9VU0VSX1BPUlRTIDVcbiAjZGVmaW5lIE1UNzYyOF9FU1dfTlVNX1BPUlRTIDdcbiAjZGVmaW5lIE1UNzYyOF9OVU1fVkxBTlMgMTZcbiBcbkBAIC0xNTEsOCAmIzQzOzE1NiwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgbXQ3NjI4X2Vzd19yZWdtYXBfY2ZnID0ge1xuIFx0LnZhbF9mb3JtYXRfZW5kaWFuID0gUkVHTUFQX0VORElBTl9MSVRUTEUsXG4gfTtcbiBcbiYjNDM7ZW51bSB7XG4mIzQzO1x0TVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSxcbiYjNDM7XHRNVDc2MjhfVkxBTl9UWVBFX1VOQVdBUkUsXG4mIzQzO1x0TVQ3NjI4X1ZMQU5fVFlQRV9OVU0sXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBtdDc2MjhfdmxhbiB7XG4tXHRib29sIGFjdGl2ZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdHlwZTtcbiBcdHU4IG1lbWJlcnM7XG4gXHR1OCB1bnRhZztcbiBcdHUxNiB2aWQ7XG5AQCAtMTYzLDkgJiM0MzsxNzQsMTAgQEAgc3RydWN0IG10NzYyOF9lc3cge1xuIFx0c3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdF9lc3c7XG4gXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4gXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG4tXHR1MTYgdGFnXzgwMjFxX3B2aWRbTVQ3NjI4X0VTV19OVU1fUE9SVFNdO1xuJiM0MztcdHUxNiBwdmlkW01UNzYyOF9WTEFOX1RZUEVfTlVNXVtNVDc2MjhfRVNXX05VTV9QT1JUU107XG4gXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gdmxhbnNbTVQ3NjI4X05VTV9WTEFOU107XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4mIzQzO1x0dTggdmxhbl9maWx0ZXJpbmc7XG4gfTtcbiBcbiBzdGF0aWMgaW50IG10NzYyOF9taWlfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcbkBAIC0zODMsMjEgJiM0MzszOTUsMTI3IEBAIHN0YXRpYyB2b2lkIG10NzYyOF9lc3dfc2V0X3Z1YihzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3LCB1bnNpZ25lZCBpbnQgdmxhbixcbiBcdFx0XHQgICBNVDc2MjhfRVNXX1ZVQl9QUkVQKHZsYW4sIHZ1YikpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBtdDc2MjhfdmxhbiAqbXQ3NjI4X2ZpbmRfdmxhbl9ibG9jayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgdTE2IHZpZCwgdW5zaWduZWQgaW50IHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW47XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1UNzYyOF9OVU1fVkxBTlM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR2bGFuID0gXHUwMDI2ZXN3LVx1MDAzZXZsYW5zW2ldO1xuJiM0MztcdFx0aWYgKHZsYW4tXHUwMDNldmlkID09IHZpZCBcdTAwMjZcdTAwMjYgdmxhbi1cdTAwM2V0eXBlID09IHR5cGUpXG4mIzQzO1x0XHRcdHJldHVybiB2bGFuO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBtdDc2MjhfdmxhbiAqbXQ3NjI4X2FsbG9jX3ZsYW5fYmxvY2soc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuJiM0MztcdFx0XHRcdFx0XHQgICB1MTYgdmlkLCB1bnNpZ25lZCBpbnQgdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtdDc2MjhfZXN3ICplc3cgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbjtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X05VTV9WTEFOUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHZsYW4gPSBcdTAwMjZlc3ctXHUwMDNldmxhbnNbaV07XG4mIzQzO1x0XHRpZiAodmxhbi1cdTAwM2V2aWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHZsYW4tXHUwMDNldHlwZSAhPSB0eXBlKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHZsYW4tXHUwMDNldmlkID0gdmlkO1xuJiM0MztcdFx0cmV0dXJuIHZsYW47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtdDc2MjhfcG9ydF9qb2luX3ZsYW5fYmxvY2soc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTE2IHZpZCxcbiYjNDM7XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IHR5cGUsIHUxNiBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IG10NzYyOF9maW5kX3ZsYW5fYmxvY2soZHMsIHZpZCwgdHlwZSk7XG4mIzQzO1x0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmICghdmxhbilcbiYjNDM7XHRcdHZsYW4gPSBtdDc2MjhfYWxsb2Nfdmxhbl9ibG9jayhkcywgdmlkLCB0eXBlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF2bGFuKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1xuJiM0MztcdHZsYW4tXHUwMDNlbWVtYmVycyB8PSBCSVQocG9ydCk7XG4mIzQzO1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19QVklEKVxuJiM0MztcdFx0ZXN3LVx1MDAzZXB2aWRbdHlwZV1bcG9ydF0gPSB2aWQ7XG4mIzQzO1x0ZWxzZSBpZiAoZXN3LVx1MDAzZXB2aWRbdHlwZV1bcG9ydF0gPT0gdmlkKVxuJiM0MztcdFx0ZXN3LVx1MDAzZXB2aWRbdHlwZV1bcG9ydF0gPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fVU5UQUdHRUQpXG4mIzQzO1x0XHR2bGFuLVx1MDAzZXVudGFnIHw9IEJJVChwb3J0KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2bGFuLVx1MDAzZXVudGFnIFx1MDAyNj0gfkJJVChwb3J0KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtdDc2MjhfcG9ydF9sZWF2ZV92bGFuX2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0XHR1MTYgdmlkLCB1bnNpZ25lZCBpbnQgdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IG10NzYyOF9maW5kX3ZsYW5fYmxvY2soZHMsIHZpZCwgdHlwZSk7XG4mIzQzO1x0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmICghdmxhbilcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcbiYjNDM7XHRpZiAoZXN3LVx1MDAzZXB2aWRbdHlwZV1bcG9ydF0gPT0gdmlkKVxuJiM0MztcdFx0ZXN3LVx1MDAzZXB2aWRbdHlwZV1bcG9ydF0gPSAwO1xuJiM0MztcdHZsYW4tXHUwMDNlbWVtYmVycyBcdTAwMjY9IH5CSVQocG9ydCk7XG4mIzQzO1x0dmxhbi1cdTAwM2V1bnRhZyBcdTAwMjY9IH5CSVQocG9ydCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGcmVlIHRoZSB2bGFuIGlmIHdlJiMzOTtyZSB0aGUgbGFzdCBtZW1iZXIgb2YgaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCF2bGFuLVx1MDAzZW1lbWJlcnMpXG4mIzQzO1x0XHR2bGFuLVx1MDAzZXZpZCA9IDA7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgbXQ3NjI4X3ZsYW5fc3luYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X05VTV9WTEFOUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IG10NzYyOF92bGFuICp2bGFuID0gXHUwMDI2ZXN3LVx1MDAzZXZsYW5zW2ldO1xuJiM0MztcdFx0dTggbWVtYmVyX21hc2s7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHZsYW4tXHUwMDNldHlwZSA9PSBNVDc2MjhfVkxBTl9UWVBFX0FXQVJFKVxuJiM0MztcdFx0XHRtZW1iZXJfbWFzayA9IGVzdy1cdTAwM2V2bGFuX2ZpbHRlcmluZztcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bWVtYmVyX21hc2sgPSB+ZXN3LVx1MDAzZXZsYW5fZmlsdGVyaW5nO1xuJiM0MztcdFx0bWVtYmVyX21hc2sgfD0gTVQ3NjI4X0VTV19QT1JUU19DUFU7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUHV0IFZMQU4gZmlsdGVyaW5nIHBvcnRzIG9ubHkgaW50byBWTEFOIGF3YXJlIFZMQU5zIGFuZFxuJiM0MztcdFx0ICogbm9uIFZMQU4gZmlsdGVyaW5nIHBvcnRzIGludG8gVkxBTiB1bmF3YXJlIFZMQU5zLlxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIENQVSBtYXkgbm90IGJlIHJlbW92ZWQgZnJvbSBhbnkgVkxBTiwgYXMgVkxBTiBmaWx0ZXJpbmdcbiYjNDM7XHRcdCAqIGFwcGxpZXMgb25seSB0byB1c2VyIHBvcnRzLlxuJiM0MztcdFx0ICovXG4gXG4tXHRcdG10NzYyOF9lc3dfc2V0X3Ztc2MoZXN3LCBpLCB2bGFuLVx1MDAzZW1lbWJlcnMpO1xuIFx0XHRtdDc2MjhfZXN3X3NldF92bGFuX2lkKGVzdywgaSwgdmxhbi1cdTAwM2V2aWQpO1xuLVx0XHRtdDc2MjhfZXN3X3NldF92dWIoZXN3LCBpLCB2bGFuLVx1MDAzZXVudGFnKTtcbiYjNDM7XHRcdG10NzYyOF9lc3dfc2V0X3Ztc2MoZXN3LCBpLCB2bGFuLVx1MDAzZW1lbWJlcnMgXHUwMDI2IG1lbWJlcl9tYXNrKTtcbiYjNDM7XHRcdG10NzYyOF9lc3dfc2V0X3Z1Yihlc3csIGksIHZsYW4tXHUwMDNldW50YWcgXHUwMDI2IG1lbWJlcl9tYXNrKTtcbiYjNDM7XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkcy1cdTAwM2VudW1fcG9ydHM7IGkmIzQzOyYjNDM7KVxuLVx0XHRtdDc2MjhfZXN3X3NldF9wdmlkKGVzdywgaSwgZXN3LVx1MDAzZXRhZ184MDIxcV9wdmlkW2ldKTtcbiYjNDM7XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCB0eXBlID0gQklUKGRwLVx1MDAzZWluZGV4KSBcdTAwMjYgZXN3LVx1MDAzZXZsYW5fZmlsdGVyaW5nID9cbiYjNDM7XHRcdCAgICBNVDc2MjhfVkxBTl9UWVBFX0FXQVJFIDogTVQ3NjI4X1ZMQU5fVFlQRV9VTkFXQVJFO1xuJiM0MztcdFx0bXQ3NjI4X2Vzd19zZXRfcHZpZChlc3csIGRwLVx1MDAzZWluZGV4LCBlc3ctXHUwMDNlcHZpZFt0eXBlXVtkcC1cdTAwM2VpbmRleF0pO1xuJiM0MztcdH1cbiYjNDM7XHRyZWdtYXBfdXBkYXRlX2JpdHMoZXN3LVx1MDAzZXJlZ21hcCwgTVQ3NjI4X0VTV19SRUdfU0dDMixcbiYjNDM7XHRcdFx0ICAgTVQ3NjI4X0VTV19TR0MyX0RPVUJMRV9UQUdfRU4sXG4mIzQzO1x0XHRcdCAgIEZJRUxEX1BSRVAoTVQ3NjI4X0VTV19TR0MyX0RPVUJMRV9UQUdfRU4sXG4mIzQzO1x0XHRcdFx0ICAgICAgTVQ3NjI4X0VTV19QT1JUU19OT0NQVSBcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgICB+ZXN3LVx1MDAzZXZsYW5fZmlsdGVyaW5nKSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbXQ3NjI4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbkBAIC00MjUsNiAmIzQzOzU0MywxOSBAQCBzdGF0aWMgaW50IG10NzYyOF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogRGVkaWNhdGUgdGhlIGZpcnN0IG51bV91c2VyX3BvcnRzICYjNDM7IDEgVkxBTiBzbG90cyBmb3IgdGFnXzgwMjFxLlxuJiM0MztcdCAqIFNpbmNlIGJyaWRnZXMgYXJlIG9ubHkgb2ZmbG9hZGVkIHdoZW4gdGhleSBoYXZlIGF0IGxlYXN0IG9uZSBtZW1iZXJcbiYjNDM7XHQgKiBwb3J0LCB0aGUgd29yc3QgY2FzZSBlbnRyeSByZXF1aXJlbWVudCBpcyAxIHBlciBwb3J0LiBUaGUgZXh0cmEgc2xvdFxuJiM0MztcdCAqIGlzIG5lZWRlZCBiZWNhdXNlIHdoZW4gY2hhbmdpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIHRhZ184MDIxcSBhZGRzIGFcbiYjNDM7XHQgKiBuZXcgVkxBTiBiZWZvcmUgcmVtb3ZpbmcgdGhlIG9sZCBvbmUuIFRoZSByZXN0IG9mIHRoZSBWTEFOIHNsb3RzIGNhblxuJiM0MztcdCAqIGJlIHVzZWQgZm9yIGZpbHRlcmluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X0VTV19OVU1fVVNFUl9QT1JUUyAmIzQzOyAxOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGVzdy1cdTAwM2V2bGFuc1tpXS50eXBlID0gTVQ3NjI4X1ZMQU5fVFlQRV9VTkFXQVJFO1xuJiM0MztcbiYjNDM7XHRkcy1cdTAwM2VtYXhfbnVtX2JyaWRnZXMgPSBEU0FfVEFHXzgwMjFRX01BWF9OVU1fQlJJREdFUztcbiYjNDM7XG4gXHRydG5sX2xvY2soKTtcbiBcdHJldCA9IGRzYV90YWdfODAyMXFfcmVnaXN0ZXIoZHMsIGh0b25zKEVUSF9QXzgwMjFRKSk7XG4gXHRydG5sX3VubG9jaygpO1xuQEAgLTQ3OSw3MSAmIzQzOzYxMCw5NyBAQCBzdGF0aWMgdm9pZCBtdDc2MjhfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIHN0YXRpYyBpbnQgbXQ3NjI4X2RzYV84MDIxcV92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHRcdFx0ICAgICB1MTYgdmlkLCB1MTYgZmxhZ3MpXG4ge1xuLVx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVx1MDAzZXByaXY7XG4tXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW4gPSBOVUxMO1xuLVx0aW50IGk7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNVDc2MjhfTlVNX1ZMQU5TOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKmNoZWNrX3ZsYW4gPSBcdTAwMjZlc3ctXHUwMDNldmxhbnNbaV07XG4tXG4tXHRcdGlmICghY2hlY2tfdmxhbi1cdTAwM2VhY3RpdmUgXHUwMDI2XHUwMDI2ICF2bGFuKVxuLVx0XHRcdHZsYW4gPSBjaGVja192bGFuO1xuLVxuLVx0XHRpZiAoY2hlY2tfdmxhbi1cdTAwM2VhY3RpdmUgXHUwMDI2XHUwMDI2IGNoZWNrX3ZsYW4tXHUwMDNldmlkID09IHZpZCkge1xuLVx0XHRcdHZsYW4gPSBjaGVja192bGFuO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHRpZiAoIXZsYW4pXG4tXHRcdHJldHVybiAtRU5PU1BDO1xuLVxuLVx0dmxhbi1cdTAwM2V2aWQgPSB2aWQ7XG4tXHR2bGFuLVx1MDAzZWFjdGl2ZSA9IHRydWU7XG4tXHR2bGFuLVx1MDAzZW1lbWJlcnMgfD0gQklUKHBvcnQpO1xuLVxuLVx0aWYgKGZsYWdzIFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1BWSUQpXG4tXHRcdGVzdy1cdTAwM2V0YWdfODAyMXFfcHZpZFtwb3J0XSA9IHZpZDtcbi1cbi1cdGlmIChmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRClcbi1cdFx0dmxhbi1cdTAwM2V1bnRhZyB8PSBCSVQocG9ydCk7XG4tXG4mIzQzO1x0aW50IHJldCA9XG4mIzQzO1x0ICAgIG10NzYyOF9wb3J0X2pvaW5fdmxhbl9ibG9jayhkcywgcG9ydCwgdmlkLCBNVDc2MjhfVkxBTl9UWVBFX1VOQVdBUkUsXG4mIzQzO1x0XHRcdFx0XHRmbGFncyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHRtdDc2Mjhfdmxhbl9zeW5jKGRzKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IG10NzYyOF9kc2FfODAyMXFfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTE2IHZpZClcbiB7XG4tXHRzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtXHUwMDNlcHJpdjtcbi1cdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IE5VTEw7XG4tXHRpbnQgaTtcbiYjNDM7XHRpbnQgcmV0ID0gbXQ3NjI4X3BvcnRfbGVhdmVfdmxhbl9ibG9jayhkcywgcG9ydCwgdmlkLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIE1UNzYyOF9WTEFOX1RZUEVfVU5BV0FSRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0bXQ3NjI4X3ZsYW5fc3luYyhkcyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1UNzYyOF9OVU1fVkxBTlM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBtdDc2MjhfdmxhbiAqY2hlY2tfdmxhbiA9IFx1MDAyNmVzdy1cdTAwM2V2bGFuc1tpXTtcbiYjNDM7c3RhdGljIGludCBtdDc2MjhfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgIGJvb2wgdmxhbl9maWx0ZXJpbmcsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVx1MDAzZXByaXY7XG4gXG4tXHRcdGlmICghY2hlY2tfdmxhbi1cdTAwM2VhY3RpdmUgfHwgY2hlY2tfdmxhbi1cdTAwM2V2aWQgIT0gdmlkKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR2bGFuID0gY2hlY2tfdmxhbjtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXHRpZiAoIXZsYW4pXG4tXHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcdGlmICh2bGFuX2ZpbHRlcmluZylcbiYjNDM7XHRcdGVzdy1cdTAwM2V2bGFuX2ZpbHRlcmluZyB8PSBCSVQocG9ydCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXN3LVx1MDAzZXZsYW5fZmlsdGVyaW5nIFx1MDAyNj0gfkJJVChwb3J0KTtcbiYjNDM7XHRtdDc2Mjhfdmxhbl9zeW5jKGRzKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuIFxuLVx0aWYgKGVzdy1cdTAwM2V0YWdfODAyMXFfcHZpZFtwb3J0XSA9PSB2aWQpXG4tXHRcdGVzdy1cdTAwM2V0YWdfODAyMXFfcHZpZFtwb3J0XSA9IDA7XG4mIzQzO3N0YXRpYyBpbnQgbXQ3NjI4X3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4sXG4mIzQzO1x0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG10NzYyOF92bGFuICp2bGFuX2Jsb2NrO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqb3RoZXJfZHA7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuLVx0dmxhbi1cdTAwM2VtZW1iZXJzIFx1MDAyNj0gfkJJVChwb3J0KTtcbi1cdHZsYW4tXHUwMDNldW50YWcgXHUwMDI2PSB+QklUKHBvcnQpO1xuJiM0MztcdGlmICh2aWRfaXNfZHNhXzgwMjFxKHZsYW4tXHUwMDNldmlkKSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtSYW5nZSAzMDcyLTQwOTUgcmVzZXJ2ZWQgZm9yIGRzYV84MDIxcSBvcGVyYXRpb25cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4gXG4tXHRpZiAoIXZsYW4tXHUwMDNlbWVtYmVycykge1xuLVx0XHR2bGFuLVx1MDAzZWFjdGl2ZSA9IGZhbHNlO1xuLVx0XHR2bGFuLVx1MDAzZXZpZCA9IDA7XG4mIzQzO1x0dmxhbl9ibG9jayA9XG4mIzQzO1x0ICAgIG10NzYyOF9maW5kX3ZsYW5fYmxvY2soZHMsIHZsYW4tXHUwMDNldmlkLCBNVDc2MjhfVkxBTl9UWVBFX0FXQVJFKTtcbiYjNDM7XHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENQVSBwb3J0IGNhbiBiZSBhZGRlZCB0byBhbnkgVkxBTnMsIGJ1dCB1c2VyIHBvcnRzIG5lZWQgdG8gZW5zdXJlLFxuJiM0MztcdCAqIHRoYXQgaWYgdGhlIFZMQU4gYWxyZWFkeSBleGlzdHMgaXQmIzM5O3Mgbm90IHVzZWQgYnkgYSBicmlkZ2Ugd2UmIzM5O3JlIG5vdFxuJiM0MztcdCAqIGEgbWVtYmVyIG9mLCBiZWNhdXNlIFZMQU5zIGFyZSB0aGUgb25seSBmb3JtIG9mIGZvcndhcmRpbmcgY29udHJvbFxuJiM0MztcdCAqIHdlIGhhdmUgb24gdGhpcyBzd2l0Y2guXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHZsYW5fYmxvY2sgXHUwMDI2XHUwMDI2ICFkc2FfcG9ydF9pc19jcHUoZHApKSB7XG4mIzQzO1x0XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChvdGhlcl9kcCwgZHMpIHtcbiYjNDM7XHRcdFx0aWYgKG90aGVyX2RwID09IGRwKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRpZiAob3RoZXJfZHAtXHUwMDNlYnJpZGdlID09IGRwLVx1MDAzZWJyaWRnZSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0aWYgKCEodmxhbl9ibG9jay1cdTAwM2VtZW1iZXJzIFx1MDAyNiBCSVQob3RoZXJfZHAtXHUwMDNlaW5kZXgpKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O1ZMQU4gSUQgdXNlZCBvbiBhbm90aGVyIGJyaWRnZVwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0XHR9XG4gXHR9XG4mIzQzO1x0cmV0ID1cbiYjNDM7XHQgICAgbXQ3NjI4X3BvcnRfam9pbl92bGFuX2Jsb2NrKGRzLCBwb3J0LCB2bGFuLVx1MDAzZXZpZCxcbiYjNDM7XHRcdFx0XHRcdE1UNzYyOF9WTEFOX1RZUEVfQVdBUkUsIHZsYW4tXHUwMDNlZmxhZ3MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0bXQ3NjI4X3ZsYW5fc3luYyhkcyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbXQ3NjI4X3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gbXQ3NjI4X3BvcnRfbGVhdmVfdmxhbl9ibG9jayhkcywgcG9ydCwgdmxhbi1cdTAwM2V2aWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgTVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0bXQ3NjI4X3ZsYW5fc3luYyhkcyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgbXQ3NjI4X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRydG5sX2xvY2soKTtcbkBAIC01NTEsNiAmIzQzOzcwOCw0MCBAQCBzdGF0aWMgdm9pZCBtdDc2MjhfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0cnRubF91bmxvY2soKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG10NzYyOF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHU4IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0Ym9vbCBmb3J3YXJkX2Rpc2FibGU7XG4mIzQzO1x0Ym9vbCBsZWFybl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0Y2FzZSBCUl9TVEFURV9ESVNBQkxFRDpcbiYjNDM7XHRjYXNlIEJSX1NUQVRFX0JMT0NLSU5HOlxuJiM0MztcdGNhc2UgQlJfU1RBVEVfTElTVEVOSU5HOlxuJiM0MztcdFx0Zm9yd2FyZF9kaXNhYmxlID0gdHJ1ZTtcbiYjNDM7XHRcdGxlYXJuX2Rpc2FibGUgPSB0cnVlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUl9TVEFURV9MRUFSTklORzpcbiYjNDM7XHRcdGZvcndhcmRfZGlzYWJsZSA9IHRydWU7XG4mIzQzO1x0XHRsZWFybl9kaXNhYmxlID0gZmFsc2U7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJSX1NUQVRFX0ZPUldBUkRJTkc6XG4mIzQzO1x0XHRmb3J3YXJkX2Rpc2FibGUgPSBmYWxzZTtcbiYjNDM7XHRcdGxlYXJuX2Rpc2FibGUgPSBmYWxzZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRkZXZfZXJyKGRzLVx1MDAzZWRldiwgXCYjMzQ7aW52YWxpZCBTVFAgc3RhdGU6ICVkXFxuXCYjMzQ7LCBzdGF0ZSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZWdtYXBfYXNzaWduX2JpdHMoZXN3LVx1MDAzZXJlZ21hcCwgTVQ3NjI4X0VTV19SRUdfUE9DMSxcbiYjNDM7XHRcdFx0ICAgRklFTERfUFJFUChNVDc2MjhfRVNXX1BPQzFfUE9SVF9ESVNfTEVBUk5JTkcsXG4mIzQzO1x0XHRcdFx0ICAgICAgQklUKHBvcnQpKSwgbGVhcm5fZGlzYWJsZSk7XG4mIzQzO1x0cmVnbWFwX2Fzc2lnbl9iaXRzKGVzdy1cdTAwM2VyZWdtYXAsIE1UNzYyOF9FU1dfUkVHX1BPQzEsXG4mIzQzO1x0XHRcdCAgIEZJRUxEX1BSRVAoTVQ3NjI4X0VTV19QT0MxX1BPUlRfQkxPQ0tJTkdfU1RBVEUsXG4mIzQzO1x0XHRcdFx0ICAgICAgQklUKHBvcnQpKSwgZm9yd2FyZF9kaXNhYmxlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG10NzYyOF9zd2l0Y2hfb3BzID0ge1xuIFx0LmdldF90YWdfcHJvdG9jb2wgPSBtdDc2MjhfZ2V0X3RhZ19wcm90byxcbiBcdC5zZXR1cCA9IG10NzYyOF9zZXR1cCxcbkBAIC01NjAsNiAmIzQzOzc1MSwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG10NzYyOF9zd2l0Y2hfb3BzID0ge1xuIFx0LnBoeWxpbmtfZ2V0X2NhcHMgPSBtdDc2MjhfcGh5bGlua19nZXRfY2FwcyxcbiBcdC50YWdfODAyMXFfdmxhbl9hZGQgPSBtdDc2MjhfZHNhXzgwMjFxX3ZsYW5fYWRkLFxuIFx0LnRhZ184MDIxcV92bGFuX2RlbCA9IG10NzYyOF9kc2FfODAyMXFfdmxhbl9kZWwsXG4mIzQzO1x0LnBvcnRfYnJpZGdlX2pvaW4gPSBkc2FfdGFnXzgwMjFxX2JyaWRnZV9qb2luLFxuJiM0MztcdC5wb3J0X2JyaWRnZV9sZWF2ZSA9IGRzYV90YWdfODAyMXFfYnJpZGdlX2xlYXZlLFxuJiM0MztcdC5wb3J0X3N0cF9zdGF0ZV9zZXQgPSBtdDc2Mjhfc3RwX3N0YXRlX3NldCxcbiYjNDM7XHQucG9ydF92bGFuX2ZpbHRlcmluZyA9IG10NzYyOF9wb3J0X3ZsYW5fZmlsdGVyaW5nLFxuJiM0MztcdC5wb3J0X3ZsYW5fYWRkID0gbXQ3NjI4X3BvcnRfdmxhbl9hZGQsXG4mIzQzO1x0LnBvcnRfdmxhbl9kZWwgPSBtdDc2MjhfcG9ydF92bGFuX2RlbCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbXQ3NjI4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfbXQ3NjI4LmMgYi9uZXQvZHNhL3RhZ19tdDc2MjguY1xuaW5kZXggODBiNTBmZjA4ZTUzZi4uN2M3MWU4YjA4NjQ4MSAxMDA2NDRcbi0tLSBhL25ldC9kc2EvdGFnX210NzYyOC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL3RhZ19tdDc2MjguY1xuQEAgLTYsNiAmIzQzOzYsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kc2EvODAyMXEuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDt0YWcuaFwmIzM0O1xuQEAgLTE1LDEzICYjNDM7MTYsMTYgQEBcbiAgKiBPbiBUWCB0aGUgbG93ZXIgNiBiaXRzIGVuY29kZSB0aGUgZGVzdGluYXRpb24gcG9ydCBiaXRtYXNrLlxuICAqIE9uIFJYIHRoZSBsb3dlciAzIGJpdHMgZW5jb2RlIHRoZSBzb3VyY2UgcG9ydCBudW1iZXIuXG4gICpcbi0gKiBUaGUgc3dpdGNoIGhhcmR3YXJlIHdpbGwgbm90IG1vZGlmeSB0aGUgVFBJRCBvZiBhbiBpbmNvbWluZyBwYWNrZXQgaWYgaXQgaXNcbi0gKiBhbHJlYWR5IFZMQU4gdGFnZ2VkLiBUbyB3b3JrIGFyb3VuZCB0aGlzIHRoZSBzd2l0Y2ggaXMgY29uZmlndXJlZCB0byBhbHdheXNcbi0gKiBhcHBlbmQgYSB0YWdfODAyMXEgc3RhbmRhbG9uZSBWTEFOIHRhZyBmb3IgZWFjaCBwb3J0LiBUaGF0IG1lYW5zIHdlIGNhblxuLSAqIHNhZmVseSBzdHJpcCB0aGUgb3V0ZXIgVkxBTiB0YWcgYWZ0ZXIgcGFyc2luZyBpdC5cbiYjNDM7ICogVGhlIHN3aXRjaCBjYW4gb25seSB1c2UgVkxBTnMgZm9yIGZvcndhcmRpbmcgY29udHJvbC4gVkxBTi11bmF3YXJlIGJyaWRnZXNcbiYjNDM7ICogYXJlIHNpbXVsYXRlZCB1c2luZyB0YWdfODAyMXEgYW5kIGRvdWJsZSB0YWdnaW5nLCB3aGlsZSBWTEFOLWF3YXJlIGJyaWRnZXNcbiYjNDM7ICogdXNlIHRoZSBWTEFOcyBjb25maWd1cmVkIGJ5IHRoZSBicmlkZ2UgZGlyZWN0bHkuXG4gICpcbi0gKiBBIFZMQU4gdGFnIGlzIGNvbnN0cnVjdGVkIG9uIGVncmVzcyB0byB0YXJnZXQgdGhlIHN0YW5kYWxvbmUgVkxBTiBhbmRcbi0gKiBkZXN0aW5hdGlvbiBwb3J0LlxuJiM0MzsgKiBPbiBlZ3Jlc3MsIHRoZSB0YWdnZXIgZWl0aGVyIGFkZHMgYSBuZXcgTVQ3NjI4IHRhZyB0aGF0IGNvbnRhaW5zIHRoZVxuJiM0MzsgKiBzdGFuZGFsb25lIG9yIGJyaWRnZSB0YWdfODAyMXEgVkxBTiBhbmQgZGVzdGluYXRpb24gcG9ydCBtYXNrLCBvciBtb2RpZmllc1xuJiM0MzsgKiBhbiBleGlzdGluZyBWTEFOIHRhZyB0byBjb250YWluIHRoZSBkZXN0aW5hdGlvbiBwb3J0IG1hc2suXG4mIzQzOyAqXG4mIzQzOyAqIE9uIGluZ3Jlc3MsIHRoZSBWTEFOIHRhZyBpcyByZXN0b3JlZCBhZnRlciBzdHJpcHBpbmcgdGhlIE1UNzYyOCB0YWcsIGlmIGl0XG4mIzQzOyAqIGlzIG5vdCBhIHRhZ184MDIxcSBWTEFOLlxuICAqL1xuIFxuICNkZWZpbmUgTVQ3NjI4X1RBR19OQU1FIFwmIzM0O210NzYyOFwmIzM0O1xuQEAgLTM0LDIwICYjNDM7MzgsMzUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0dTE2IHhtaXRfdHBpZDtcbiBcdHUxNiB4bWl0X3ZsYW47XG4gXHRfX2JlMTYgKnRhZztcbiBcbiYjNDM7XHR4bWl0X3RwaWQgPVxuJiM0MztcdCAgICBFVEhfUF84MDIxUSB8IEZJRUxEX1BSRVAoTVQ3NjI4X1RBR19UWF9QT1JULFxuJiM0MztcdFx0XHRcdCAgICAgZHNhX3htaXRfcG9ydF9tYXNrKHNrYiwgZGV2KSk7XG4gXHRkcCA9IGRzYV91c2VyX3RvX3BvcnQoZGV2KTtcbi1cdHhtaXRfdmxhbiA9IGRzYV90YWdfODAyMXFfc3RhbmRhbG9uZV92aWQoZHApO1xuJiM0MztcdGlmIChza2ItXHUwMDNlb2ZmbG9hZF9md2RfbWFyayBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgYnJfdmxhbl9lbmFibGVkKGRzYV9wb3J0X2JyaWRnZV9kZXZfZ2V0KGRwKSkpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBPbiBWTEFOIGF3YXJlIHBvcnRzIG9ubHkgbW9kaWZ5IHRoZSBUUElEIHRvIGNvbnRhaW4gdGhlXG4mIzQzO1x0XHQgKiBNVDc2MjggZWdyZXNzIHBvcnQgbWV0YWRhdGEsIGluc3RlYWQgb2YgYWRkaW5nIGEgbmV3IHZsYW4gdGFnXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3R4KHNrYik7XG4mIzQzO1x0XHR0YWdbMF0gPSBodG9ucyh4bWl0X3RwaWQpO1xuJiM0MztcdFx0cmV0dXJuIHNrYjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHhtaXRfdmxhbiA9IHNrYi1cdTAwM2VvZmZsb2FkX2Z3ZF9tYXJrID9cbiYjNDM7XHQgICAgZHNhX3RhZ184MDIxcV9icmlkZ2VfdmlkKGRzYV9wb3J0X2JyaWRnZV9udW1fZ2V0KGRwKSkgOlxuJiM0MztcdCAgICBkc2FfdGFnXzgwMjFxX3N0YW5kYWxvbmVfdmlkKGRwKTtcbiBcbiBcdHNrYl9wdXNoKHNrYiwgTVQ3NjI4X1RBR19MRU4pO1xuIFx0ZHNhX2FsbG9jX2V0eXBlX2hlYWRlcihza2IsIE1UNzYyOF9UQUdfTEVOKTtcbiBcbiBcdHRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3R4KHNrYik7XG4gXG4tXHR0YWdbMF0gPSBodG9ucyhFVEhfUF84MDIxUSB8XG4tXHRcdCAgICAgICBGSUVMRF9QUkVQKE1UNzYyOF9UQUdfVFhfUE9SVCxcbi1cdFx0XHRcdCAgZHNhX3htaXRfcG9ydF9tYXNrKHNrYiwgZGV2KSkpO1xuJiM0MztcdHRhZ1swXSA9IGh0b25zKHhtaXRfdHBpZCk7XG4gXHR0YWdbMV0gPSBodG9ucyh4bWl0X3ZsYW4pO1xuIFxuIFx0cmV0dXJuIHNrYjtcbkBAIC01Niw3ICYjNDM7NzUsMTAgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm10NzYyOF90YWdfcmN2KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc291cmNlX3BvcnQ7XG4mIzQzO1x0Ym9vbCBpc19kc2FfODAyMXE7XG4gXHRfX2JlMTYgKnBoZHI7XG4mIzQzO1x0dTE2IHRjaSwgdmlkO1xuIFxuIFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgTVQ3NjI4X1RBR19MRU4pKSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbkBAIC02NCw5ICYjNDM7ODYsMjMgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fVxuIFxuIFx0cGhkciA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3J4KHNrYik7XG4tXHRza2ItXHUwMDNlZGV2ID1cbi1cdCAgICBkc2FfY29uZHVpdF9maW5kX3VzZXIoZGV2LCAwLFxuLVx0XHRcdFx0ICBGSUVMRF9HRVQoTVQ3NjI4X1RBR19SWF9QT1JULCBudG9ocygqcGhkcikpKTtcbiYjNDM7XHRzb3VyY2VfcG9ydCA9IEZJRUxEX0dFVChNVDc2MjhfVEFHX1JYX1BPUlQsIG50b2hzKCpwaGRyKSk7XG4mIzQzO1x0dGNpID0gbnRvaHMocGhkclsxXSk7XG4mIzQzO1x0dmlkID0gdGNpIFx1MDAyNiBWTEFOX1ZJRF9NQVNLO1xuJiM0MztcdGlzX2RzYV84MDIxcSA9IHZpZF9pc19kc2FfODAyMXEodmlkKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgc291cmNlIHBvcnQgaW5mbyBpcyBvbmx5IGVuY29kZWQgaW4gdGhlIFRQSUQgZmllbGQgZm9yIHBhY2tldHNcbiYjNDM7XHQgKiB3aGVyZSB0aGUgVkxBTiB0YWcgaXMgaW5zZXJ0ZWQgYnkgdGhlIFBWSUQgbWVjaGFuaXNtLiBXaXRoIFZMQU5cbiYjNDM7XHQgKiBmaWx0ZXJpbmcgZW5hYmxlZCwgVkxBTi10YWdnZWQgaW5ncmVzcyBwYWNrZXRzIGFwcGVhciBhcyBpZiB0aGV5JiMzOTtyZVxuJiM0MztcdCAqIG9yaWdpbmF0aW5nIG9uIHBvcnQgMC4gVXNlIHRoZSBWSUQgdG8gaWRlbnRpZnkgdGhlIGJyaWRnZSBwb3J0IGluXG4mIzQzO1x0ICogdGhpcyBjYXNlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzb3VyY2VfcG9ydCA9PSAwIFx1MDAyNlx1MDAyNiAhaXNfZHNhXzgwMjFxKVxuJiM0MztcdFx0c2tiLVx1MDAzZWRldiA9IGRzYV9maW5kX2Rlc2lnbmF0ZWRfYnJpZGdlX3BvcnRfYnlfdmlkKGRldiwgdmlkKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRza2ItXHUwMDNlZGV2ID0gZHNhX2NvbmR1aXRfZmluZF91c2VyKGRldiwgMCwgc291cmNlX3BvcnQpO1xuJiM0MztcbiBcdGlmICghc2tiLVx1MDAzZWRldikge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtNzUsNiAmIzQzOzExMSwxMCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm10NzYyOF90YWdfcmN2KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRza2JfcHVsbF9yY3N1bShza2IsIE1UNzYyOF9UQUdfTEVOKTtcbiBcdGRzYV9zdHJpcF9ldHlwZV9oZWFkZXIoc2tiLCBNVDc2MjhfVEFHX0xFTik7XG4gXHRkc2FfZGVmYXVsdF9vZmZsb2FkX2Z3ZF9tYXJrKHNrYik7XG4mIzQzO1xuJiM0MztcdGlmICghaXNfZHNhXzgwMjFxKVxuJiM0MztcdFx0X192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIGh0b25zKEVUSF9QXzgwMjFRKSwgdGNpKTtcbiYjNDM7XG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBNQUlOVEFJTkVSUywgdGhlIE1lZGlhVGVrIE1UNzYyOCBTb0MgZW1iZWRkZWQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzYyOC5jKSwgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWcgZHJpdmVyIChuZXQvZHNhL3RhZ19tdDc2MjguYykuIE1UNzYyOCBpcyBhIHBsYXRmb3JtL1NvQy1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZm9yIE1JUFMtYmFzZWQgTWVkaWFUZWsgU29DcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldmljZSBjYW5ub3QgcHJvYmUgYW5kIHRoZSB0YWcgcHJvdG9jb2wgaXMgb25seSB1c2VkIGJ5IHRoaXMgc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDRiNzE2YjFhOWZhNjE5MTBjZGQ4MTYzMjJmMjg4MDA1OGY0M2M5OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDE6NTI6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGIyM2ZiNmYyZjRlZjQuLjk1ZTM2MWY1ZDBlZGUgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xNjc4MSw2ICYjNDM7MTY3ODEsMTUgQEAgUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy9tZWRpYXRlayxtdDc2MjEtaTJjLnlhbWwKIEY6CWRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXQ3NjIxLmMKIAomIzQzO01FRElBVEVLIE1UNzYyOCBTV0lUQ0ggRFJJVkVSCiYjNDM7TToJSm9yaXMgVmFpc3ZpbGEgJmx0O2pvZXlAdGlueWlzci5jb20mZ3Q7CiYjNDM7TDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwomIzQzO1M6CU1haW50YWluZWQKJiM0MztGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc2MjgtZXN3LnlhbWwKJiM0MztGOglkcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMKJiM0MztGOglkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWZlLXNvYy5jCiYjNDM7RjoJbmV0L2RzYS90YWdfbXQ3NjI4LmMKJiM0MzsKIE1FRElBVEVLIE1UTUlQUyBDTE9DSyBEUklWRVIKIE06CVNlcmdpbyBQYXJhY3VlbGxvcyAmbHQ7c2VyZ2lvLnBhcmFjdWVsbG9zQGdtYWlsLmNvbSZndDsKIFM6CU1haW50YWluZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguYyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguYwppbmRleCBmYjYzZjZmNjQ0YjllLi42MjlkYmY5NjhhMTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL210NzYyOC5jCkBAIC0zNCw2ICYjNDM7MzQsNyBAQAogI2RlZmluZSBNVDc2MjhfRVNXX1JFR19WVUIodmxhbikgKDB4MTAwICYjNDM7IDQgKiAoKHZsYW4pIC8gNCkpCiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1NPQ1BDIDB4OGMKICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfUE9DMCAweDkwCiYjNDM7I2RlZmluZSBNVDc2MjhfRVNXX1JFR19QT0MxIDB4OTQKICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfUE9DMiAweDk4CiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1NHQyAweDljCiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1BDUjAgMHhjMApAQCAtOTIsNiAmIzQzOzkzLDkgQEAKIAogI2RlZmluZSBNVDc2MjhfRVNXX1BPQzBfUE9SVF9ESVNBQkxFIEdFTk1BU0soMjksIDIzKQogCiYjNDM7I2RlZmluZSBNVDc2MjhfRVNXX1BPQzFfUE9SVF9CTE9DS0lOR19TVEFURSBHRU5NQVNLKDIyLCAxNikKJiM0MzsjZGVmaW5lIE1UNzYyOF9FU1dfUE9DMV9QT1JUX0RJU19MRUFSTklORyBHRU5NQVNLKDE0LCA4KQomIzQzOwogI2RlZmluZSBNVDc2MjhfRVNXX1BPQzJfUEVSX1ZMQU5fVU5UQUdfRU4gQklUKDE1KQogCiAjZGVmaW5lIE1UNzYyOF9FU1dfU0dDX0FHSU5HX0lOVEVSVkFMIEdFTk1BU0soMywgMCkKQEAgLTEzOCw2ICYjNDM7MTQyLDcgQEAKICNkZWZpbmUgTVQ3NjI4X0VTV19QT1JUU19DUFUgQklUKDYpCiAjZGVmaW5lIE1UNzYyOF9FU1dfUE9SVFNfQUxMIEdFTk1BU0soNiwgMCkKIAomIzQzOyNkZWZpbmUgTVQ3NjI4X0VTV19OVU1fVVNFUl9QT1JUUyA1CiAjZGVmaW5lIE1UNzYyOF9FU1dfTlVNX1BPUlRTIDcKICNkZWZpbmUgTVQ3NjI4X05VTV9WTEFOUyAxNgogCkBAIC0xNTEsOCAmIzQzOzE1NiwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgbXQ3NjI4X2Vzd19yZWdtYXBfY2ZnID0gewogCS52YWxfZm9ybWF0X2VuZGlhbiA9IFJFR01BUF9FTkRJQU5fTElUVExFLAogfTsKIAomIzQzO2VudW0gewomIzQzOwlNVDc2MjhfVkxBTl9UWVBFX0FXQVJFLAomIzQzOwlNVDc2MjhfVkxBTl9UWVBFX1VOQVdBUkUsCiYjNDM7CU1UNzYyOF9WTEFOX1RZUEVfTlVNLAomIzQzO307CiYjNDM7CiBzdHJ1Y3QgbXQ3NjI4X3ZsYW4gewotCWJvb2wgYWN0aXZlOwomIzQzOwl1bnNpZ25lZCBpbnQgdHlwZTsKIAl1OCBtZW1iZXJzOwogCXU4IHVudGFnOwogCXUxNiB2aWQ7CkBAIC0xNjMsOSAmIzQzOzE3NCwxMCBAQCBzdHJ1Y3QgbXQ3NjI4X2VzdyB7CiAJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdF9lc3c7CiAJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwogCXN0cnVjdCBkc2Ffc3dpdGNoICpkczsKLQl1MTYgdGFnXzgwMjFxX3B2aWRbTVQ3NjI4X0VTV19OVU1fUE9SVFNdOwomIzQzOwl1MTYgcHZpZFtNVDc2MjhfVkxBTl9UWVBFX05VTV1bTVQ3NjI4X0VTV19OVU1fUE9SVFNdOwogCXN0cnVjdCBtdDc2MjhfdmxhbiB2bGFuc1tNVDc2MjhfTlVNX1ZMQU5TXTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiYjNDM7CXU4IHZsYW5fZmlsdGVyaW5nOwogfTsKIAogc3RhdGljIGludCBtdDc2MjhfbWlpX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0pCkBAIC0zODMsMjEgJiM0MzszOTUsMTI3IEBAIHN0YXRpYyB2b2lkIG10NzYyOF9lc3dfc2V0X3Z1YihzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3LCB1bnNpZ25lZCBpbnQgdmxhbiwKIAkJCSAgIE1UNzYyOF9FU1dfVlVCX1BSRVAodmxhbiwgdnViKSk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IG10NzYyOF92bGFuICptdDc2MjhfZmluZF92bGFuX2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKJiM0MzsJCQkJCQkgIHUxNiB2aWQsIHVuc2lnbmVkIGludCB0eXBlKQomIzQzO3sKJiM0MzsJc3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW47CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTVQ3NjI4X05VTV9WTEFOUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXZsYW4gPSAmYW1wO2Vzdy0mZ3Q7dmxhbnNbaV07CiYjNDM7CQlpZiAodmxhbi0mZ3Q7dmlkID09IHZpZCAmYW1wOyZhbXA7IHZsYW4tJmd0O3R5cGUgPT0gdHlwZSkKJiM0MzsJCQlyZXR1cm4gdmxhbjsKJiM0MzsJfQomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBtdDc2MjhfdmxhbiAqbXQ3NjI4X2FsbG9jX3ZsYW5fYmxvY2soc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCQkJCSAgIHUxNiB2aWQsIHVuc2lnbmVkIGludCB0eXBlKQomIzQzO3sKJiM0MzsJc3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW47CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTVQ3NjI4X05VTV9WTEFOUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXZsYW4gPSAmYW1wO2Vzdy0mZ3Q7dmxhbnNbaV07CiYjNDM7CQlpZiAodmxhbi0mZ3Q7dmlkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKHZsYW4tJmd0O3R5cGUgIT0gdHlwZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXZsYW4tJmd0O3ZpZCA9IHZpZDsKJiM0MzsJCXJldHVybiB2bGFuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG10NzYyOF9wb3J0X2pvaW5fdmxhbl9ibG9jayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MTYgdmlkLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgaW50IHR5cGUsIHUxNiBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IG10NzYyOF9maW5kX3ZsYW5fYmxvY2soZHMsIHZpZCwgdHlwZSk7CiYjNDM7CXN0cnVjdCBtdDc2MjhfZXN3ICplc3cgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKCF2bGFuKQomIzQzOwkJdmxhbiA9IG10NzYyOF9hbGxvY192bGFuX2Jsb2NrKGRzLCB2aWQsIHR5cGUpOwomIzQzOwomIzQzOwlpZiAoIXZsYW4pCiYjNDM7CQlyZXR1cm4gLUVOT1NQQzsKJiM0MzsKJiM0MzsJdmxhbi0mZ3Q7bWVtYmVycyB8PSBCSVQocG9ydCk7CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBCUklER0VfVkxBTl9JTkZPX1BWSUQpCiYjNDM7CQllc3ctJmd0O3B2aWRbdHlwZV1bcG9ydF0gPSB2aWQ7CiYjNDM7CWVsc2UgaWYgKGVzdy0mZ3Q7cHZpZFt0eXBlXVtwb3J0XSA9PSB2aWQpCiYjNDM7CQllc3ctJmd0O3B2aWRbdHlwZV1bcG9ydF0gPSAwOwomIzQzOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRCkKJiM0MzsJCXZsYW4tJmd0O3VudGFnIHw9IEJJVChwb3J0KTsKJiM0MzsJZWxzZQomIzQzOwkJdmxhbi0mZ3Q7dW50YWcgJmFtcDs9IH5CSVQocG9ydCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG10NzYyOF9wb3J0X2xlYXZlX3ZsYW5fYmxvY2soc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkJCXUxNiB2aWQsIHVuc2lnbmVkIGludCB0eXBlKQomIzQzO3sKJiM0MzsJc3RydWN0IG10NzYyOF92bGFuICp2bGFuID0gbXQ3NjI4X2ZpbmRfdmxhbl9ibG9jayhkcywgdmlkLCB0eXBlKTsKJiM0MzsJc3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAoIXZsYW4pCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJaWYgKGVzdy0mZ3Q7cHZpZFt0eXBlXVtwb3J0XSA9PSB2aWQpCiYjNDM7CQllc3ctJmd0O3B2aWRbdHlwZV1bcG9ydF0gPSAwOwomIzQzOwl2bGFuLSZndDttZW1iZXJzICZhbXA7PSB+QklUKHBvcnQpOwomIzQzOwl2bGFuLSZndDt1bnRhZyAmYW1wOz0gfkJJVChwb3J0KTsKJiM0MzsJLyoKJiM0MzsJICogRnJlZSB0aGUgdmxhbiBpZiB3ZSYjMzk7cmUgdGhlIGxhc3QgbWVtYmVyIG9mIGl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKCF2bGFuLSZndDttZW1iZXJzKQomIzQzOwkJdmxhbi0mZ3Q7dmlkID0gMDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbXQ3NjI4X3ZsYW5fc3luYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiB7CiAJc3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE1UNzYyOF9OVU1fVkxBTlM7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9ICZhbXA7ZXN3LSZndDt2bGFuc1tpXTsKJiM0MzsJCXU4IG1lbWJlcl9tYXNrOwomIzQzOwomIzQzOwkJaWYgKHZsYW4tJmd0O3R5cGUgPT0gTVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSkKJiM0MzsJCQltZW1iZXJfbWFzayA9IGVzdy0mZ3Q7dmxhbl9maWx0ZXJpbmc7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWVtYmVyX21hc2sgPSB+ZXN3LSZndDt2bGFuX2ZpbHRlcmluZzsKJiM0MzsJCW1lbWJlcl9tYXNrIHw9IE1UNzYyOF9FU1dfUE9SVFNfQ1BVOwomIzQzOwkJLyoKJiM0MzsJCSAqIFB1dCBWTEFOIGZpbHRlcmluZyBwb3J0cyBvbmx5IGludG8gVkxBTiBhd2FyZSBWTEFOcyBhbmQKJiM0MzsJCSAqIG5vbiBWTEFOIGZpbHRlcmluZyBwb3J0cyBpbnRvIFZMQU4gdW5hd2FyZSBWTEFOcy4KJiM0MzsJCSAqCiYjNDM7CQkgKiBDUFUgbWF5IG5vdCBiZSByZW1vdmVkIGZyb20gYW55IFZMQU4sIGFzIFZMQU4gZmlsdGVyaW5nCiYjNDM7CQkgKiBhcHBsaWVzIG9ubHkgdG8gdXNlciBwb3J0cy4KJiM0MzsJCSAqLwogCi0JCW10NzYyOF9lc3dfc2V0X3Ztc2MoZXN3LCBpLCB2bGFuLSZndDttZW1iZXJzKTsKIAkJbXQ3NjI4X2Vzd19zZXRfdmxhbl9pZChlc3csIGksIHZsYW4tJmd0O3ZpZCk7Ci0JCW10NzYyOF9lc3dfc2V0X3Z1Yihlc3csIGksIHZsYW4tJmd0O3VudGFnKTsKJiM0MzsJCW10NzYyOF9lc3dfc2V0X3Ztc2MoZXN3LCBpLCB2bGFuLSZndDttZW1iZXJzICZhbXA7IG1lbWJlcl9tYXNrKTsKJiM0MzsJCW10NzYyOF9lc3dfc2V0X3Z1Yihlc3csIGksIHZsYW4tJmd0O3VudGFnICZhbXA7IG1lbWJlcl9tYXNrKTsKJiM0MzsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgZHMtJmd0O251bV9wb3J0czsgaSYjNDM7JiM0MzspCi0JCW10NzYyOF9lc3dfc2V0X3B2aWQoZXN3LCBpLCBlc3ctJmd0O3RhZ184MDIxcV9wdmlkW2ldKTsKJiM0MzsJZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIGRzKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgdHlwZSA9IEJJVChkcC0mZ3Q7aW5kZXgpICZhbXA7IGVzdy0mZ3Q7dmxhbl9maWx0ZXJpbmcgPwomIzQzOwkJICAgIE1UNzYyOF9WTEFOX1RZUEVfQVdBUkUgOiBNVDc2MjhfVkxBTl9UWVBFX1VOQVdBUkU7CiYjNDM7CQltdDc2MjhfZXN3X3NldF9wdmlkKGVzdywgZHAtJmd0O2luZGV4LCBlc3ctJmd0O3B2aWRbdHlwZV1bZHAtJmd0O2luZGV4XSk7CiYjNDM7CX0KJiM0MzsJcmVnbWFwX3VwZGF0ZV9iaXRzKGVzdy0mZ3Q7cmVnbWFwLCBNVDc2MjhfRVNXX1JFR19TR0MyLAomIzQzOwkJCSAgIE1UNzYyOF9FU1dfU0dDMl9ET1VCTEVfVEFHX0VOLAomIzQzOwkJCSAgIEZJRUxEX1BSRVAoTVQ3NjI4X0VTV19TR0MyX0RPVUJMRV9UQUdfRU4sCiYjNDM7CQkJCSAgICAgIE1UNzYyOF9FU1dfUE9SVFNfTk9DUFUgJmFtcDsKJiM0MzsJCQkJICAgICAgfmVzdy0mZ3Q7dmxhbl9maWx0ZXJpbmcpKTsKIH0KIAogc3RhdGljIGludCBtdDc2Mjhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQpAQCAtNDI1LDYgJiM0Mzs1NDMsMTkgQEAgc3RhdGljIGludCBtdDc2Mjhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogRGVkaWNhdGUgdGhlIGZpcnN0IG51bV91c2VyX3BvcnRzICYjNDM7IDEgVkxBTiBzbG90cyBmb3IgdGFnXzgwMjFxLgomIzQzOwkgKiBTaW5jZSBicmlkZ2VzIGFyZSBvbmx5IG9mZmxvYWRlZCB3aGVuIHRoZXkgaGF2ZSBhdCBsZWFzdCBvbmUgbWVtYmVyCiYjNDM7CSAqIHBvcnQsIHRoZSB3b3JzdCBjYXNlIGVudHJ5IHJlcXVpcmVtZW50IGlzIDEgcGVyIHBvcnQuIFRoZSBleHRyYSBzbG90CiYjNDM7CSAqIGlzIG5lZWRlZCBiZWNhdXNlIHdoZW4gY2hhbmdpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIHRhZ184MDIxcSBhZGRzIGEKJiM0MzsJICogbmV3IFZMQU4gYmVmb3JlIHJlbW92aW5nIHRoZSBvbGQgb25lLiBUaGUgcmVzdCBvZiB0aGUgVkxBTiBzbG90cyBjYW4KJiM0MzsJICogYmUgdXNlZCBmb3IgZmlsdGVyaW5nLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBNVDc2MjhfRVNXX05VTV9VU0VSX1BPUlRTICYjNDM7IDE7IGkmIzQzOyYjNDM7KQomIzQzOwkJZXN3LSZndDt2bGFuc1tpXS50eXBlID0gTVQ3NjI4X1ZMQU5fVFlQRV9VTkFXQVJFOwomIzQzOwomIzQzOwlkcy0mZ3Q7bWF4X251bV9icmlkZ2VzID0gRFNBX1RBR184MDIxUV9NQVhfTlVNX0JSSURHRVM7CiYjNDM7CiAJcnRubF9sb2NrKCk7CiAJcmV0ID0gZHNhX3RhZ184MDIxcV9yZWdpc3RlcihkcywgaHRvbnMoRVRIX1BfODAyMVEpKTsKIAlydG5sX3VubG9jaygpOwpAQCAtNDc5LDcxICYjNDM7NjEwLDk3IEBAIHN0YXRpYyB2b2lkIG10NzYyOF9waHlsaW5rX2dldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiBzdGF0aWMgaW50IG10NzYyOF9kc2FfODAyMXFfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJCQkgICAgIHUxNiB2aWQsIHUxNiBmbGFncykKIHsKLQlzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtJmd0O3ByaXY7Ci0Jc3RydWN0IG10NzYyOF92bGFuICp2bGFuID0gTlVMTDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBNVDc2MjhfTlVNX1ZMQU5TOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKmNoZWNrX3ZsYW4gPSAmYW1wO2Vzdy0mZ3Q7dmxhbnNbaV07Ci0KLQkJaWYgKCFjaGVja192bGFuLSZndDthY3RpdmUgJmFtcDsmYW1wOyAhdmxhbikKLQkJCXZsYW4gPSBjaGVja192bGFuOwotCi0JCWlmIChjaGVja192bGFuLSZndDthY3RpdmUgJmFtcDsmYW1wOyBjaGVja192bGFuLSZndDt2aWQgPT0gdmlkKSB7Ci0JCQl2bGFuID0gY2hlY2tfdmxhbjsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCF2bGFuKQotCQlyZXR1cm4gLUVOT1NQQzsKLQotCXZsYW4tJmd0O3ZpZCA9IHZpZDsKLQl2bGFuLSZndDthY3RpdmUgPSB0cnVlOwotCXZsYW4tJmd0O21lbWJlcnMgfD0gQklUKHBvcnQpOwotCi0JaWYgKGZsYWdzICZhbXA7IEJSSURHRV9WTEFOX0lORk9fUFZJRCkKLQkJZXN3LSZndDt0YWdfODAyMXFfcHZpZFtwb3J0XSA9IHZpZDsKLQotCWlmIChmbGFncyAmYW1wOyBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEKQotCQl2bGFuLSZndDt1bnRhZyB8PSBCSVQocG9ydCk7Ci0KJiM0MzsJaW50IHJldCA9CiYjNDM7CSAgICBtdDc2MjhfcG9ydF9qb2luX3ZsYW5fYmxvY2soZHMsIHBvcnQsIHZpZCwgTVQ3NjI4X1ZMQU5fVFlQRV9VTkFXQVJFLAomIzQzOwkJCQkJZmxhZ3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKIAltdDc2Mjhfdmxhbl9zeW5jKGRzKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBtdDc2MjhfZHNhXzgwMjFxX3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHUxNiB2aWQpCiB7Ci0Jc3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLSZndDtwcml2OwotCXN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IE5VTEw7Ci0JaW50IGk7CiYjNDM7CWludCByZXQgPSBtdDc2MjhfcG9ydF9sZWF2ZV92bGFuX2Jsb2NrKGRzLCBwb3J0LCB2aWQsCiYjNDM7CQkJCQkgICAgICAgTVQ3NjI4X1ZMQU5fVFlQRV9VTkFXQVJFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CW10NzYyOF92bGFuX3N5bmMoZHMpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgTVQ3NjI4X05VTV9WTEFOUzsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IG10NzYyOF92bGFuICpjaGVja192bGFuID0gJmFtcDtlc3ctJmd0O3ZsYW5zW2ldOwomIzQzO3N0YXRpYyBpbnQgbXQ3NjI4X3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkJICAgICAgYm9vbCB2bGFuX2ZpbHRlcmluZywKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLSZndDtwcml2OwogCi0JCWlmICghY2hlY2tfdmxhbi0mZ3Q7YWN0aXZlIHx8IGNoZWNrX3ZsYW4tJmd0O3ZpZCAhPSB2aWQpCi0JCQljb250aW51ZTsKLQkJdmxhbiA9IGNoZWNrX3ZsYW47Ci0JCWJyZWFrOwotCX0KLQlpZiAoIXZsYW4pCi0JCXJldHVybiAtRU5PRU5UOwomIzQzOwlpZiAodmxhbl9maWx0ZXJpbmcpCiYjNDM7CQllc3ctJmd0O3ZsYW5fZmlsdGVyaW5nIHw9IEJJVChwb3J0KTsKJiM0MzsJZWxzZQomIzQzOwkJZXN3LSZndDt2bGFuX2ZpbHRlcmluZyAmYW1wOz0gfkJJVChwb3J0KTsKJiM0MzsJbXQ3NjI4X3ZsYW5fc3luYyhkcyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KIAotCWlmIChlc3ctJmd0O3RhZ184MDIxcV9wdmlkW3BvcnRdID09IHZpZCkKLQkJZXN3LSZndDt0YWdfODAyMXFfcHZpZFtwb3J0XSA9IDA7CiYjNDM7c3RhdGljIGludCBtdDc2MjhfcG9ydF92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCQljb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4sCiYjNDM7CQkJCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbl9ibG9jazsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpvdGhlcl9kcDsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsJaW50IHJldDsKIAotCXZsYW4tJmd0O21lbWJlcnMgJmFtcDs9IH5CSVQocG9ydCk7Ci0Jdmxhbi0mZ3Q7dW50YWcgJmFtcDs9IH5CSVQocG9ydCk7CiYjNDM7CWlmICh2aWRfaXNfZHNhXzgwMjFxKHZsYW4tJmd0O3ZpZCkpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7UmFuZ2UgMzA3Mi00MDk1IHJlc2VydmVkIGZvciBkc2FfODAyMXEgb3BlcmF0aW9uJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsJfQogCi0JaWYgKCF2bGFuLSZndDttZW1iZXJzKSB7Ci0JCXZsYW4tJmd0O2FjdGl2ZSA9IGZhbHNlOwotCQl2bGFuLSZndDt2aWQgPSAwOwomIzQzOwl2bGFuX2Jsb2NrID0KJiM0MzsJICAgIG10NzYyOF9maW5kX3ZsYW5fYmxvY2soZHMsIHZsYW4tJmd0O3ZpZCwgTVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSk7CiYjNDM7CWRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpOwomIzQzOwkvKgomIzQzOwkgKiBDUFUgcG9ydCBjYW4gYmUgYWRkZWQgdG8gYW55IFZMQU5zLCBidXQgdXNlciBwb3J0cyBuZWVkIHRvIGVuc3VyZSwKJiM0MzsJICogdGhhdCBpZiB0aGUgVkxBTiBhbHJlYWR5IGV4aXN0cyBpdCYjMzk7cyBub3QgdXNlZCBieSBhIGJyaWRnZSB3ZSYjMzk7cmUgbm90CiYjNDM7CSAqIGEgbWVtYmVyIG9mLCBiZWNhdXNlIFZMQU5zIGFyZSB0aGUgb25seSBmb3JtIG9mIGZvcndhcmRpbmcgY29udHJvbAomIzQzOwkgKiB3ZSBoYXZlIG9uIHRoaXMgc3dpdGNoLgomIzQzOwkgKi8KJiM0MzsJaWYgKHZsYW5fYmxvY2sgJmFtcDsmYW1wOyAhZHNhX3BvcnRfaXNfY3B1KGRwKSkgewomIzQzOwkJZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQob3RoZXJfZHAsIGRzKSB7CiYjNDM7CQkJaWYgKG90aGVyX2RwID09IGRwKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlpZiAob3RoZXJfZHAtJmd0O2JyaWRnZSA9PSBkcC0mZ3Q7YnJpZGdlKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlpZiAoISh2bGFuX2Jsb2NrLSZndDttZW1iZXJzICZhbXA7IEJJVChvdGhlcl9kcC0mZ3Q7aW5kZXgpKSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICYjMzQ7VkxBTiBJRCB1c2VkIG9uIGFub3RoZXIgYnJpZGdlJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUJVU1k7CiYjNDM7CQl9CiAJfQomIzQzOwlyZXQgPQomIzQzOwkgICAgbXQ3NjI4X3BvcnRfam9pbl92bGFuX2Jsb2NrKGRzLCBwb3J0LCB2bGFuLSZndDt2aWQsCiYjNDM7CQkJCQlNVDc2MjhfVkxBTl9UWVBFX0FXQVJFLCB2bGFuLSZndDtmbGFncyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJbXQ3NjI4X3ZsYW5fc3luYyhkcyk7CiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG10NzYyOF9wb3J0X3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSBtdDc2MjhfcG9ydF9sZWF2ZV92bGFuX2Jsb2NrKGRzLCBwb3J0LCB2bGFuLSZndDt2aWQsCiYjNDM7CQkJCQkgICAgICAgTVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwltdDc2Mjhfdmxhbl9zeW5jKGRzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbXQ3NjI4X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKIAlydG5sX2xvY2soKTsKQEAgLTU1MSw2ICYjNDM7NzA4LDQwIEBAIHN0YXRpYyB2b2lkIG10NzYyOF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJcnRubF91bmxvY2soKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG10NzYyOF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHU4IHN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLSZndDtwcml2OwomIzQzOwlib29sIGZvcndhcmRfZGlzYWJsZTsKJiM0MzsJYm9vbCBsZWFybl9kaXNhYmxlOwomIzQzOwomIzQzOwlzd2l0Y2ggKHN0YXRlKSB7CiYjNDM7CWNhc2UgQlJfU1RBVEVfRElTQUJMRUQ6CiYjNDM7CWNhc2UgQlJfU1RBVEVfQkxPQ0tJTkc6CiYjNDM7CWNhc2UgQlJfU1RBVEVfTElTVEVOSU5HOgomIzQzOwkJZm9yd2FyZF9kaXNhYmxlID0gdHJ1ZTsKJiM0MzsJCWxlYXJuX2Rpc2FibGUgPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlJfU1RBVEVfTEVBUk5JTkc6CiYjNDM7CQlmb3J3YXJkX2Rpc2FibGUgPSB0cnVlOwomIzQzOwkJbGVhcm5fZGlzYWJsZSA9IGZhbHNlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlJfU1RBVEVfRk9SV0FSRElORzoKJiM0MzsJCWZvcndhcmRfZGlzYWJsZSA9IGZhbHNlOwomIzQzOwkJbGVhcm5fZGlzYWJsZSA9IGZhbHNlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlkZXZfZXJyKGRzLSZndDtkZXYsICYjMzQ7aW52YWxpZCBTVFAgc3RhdGU6ICVkXG4mIzM0Oywgc3RhdGUpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlZ21hcF9hc3NpZ25fYml0cyhlc3ctJmd0O3JlZ21hcCwgTVQ3NjI4X0VTV19SRUdfUE9DMSwKJiM0MzsJCQkgICBGSUVMRF9QUkVQKE1UNzYyOF9FU1dfUE9DMV9QT1JUX0RJU19MRUFSTklORywKJiM0MzsJCQkJICAgICAgQklUKHBvcnQpKSwgbGVhcm5fZGlzYWJsZSk7CiYjNDM7CXJlZ21hcF9hc3NpZ25fYml0cyhlc3ctJmd0O3JlZ21hcCwgTVQ3NjI4X0VTV19SRUdfUE9DMSwKJiM0MzsJCQkgICBGSUVMRF9QUkVQKE1UNzYyOF9FU1dfUE9DMV9QT1JUX0JMT0NLSU5HX1NUQVRFLAomIzQzOwkJCQkgICAgICBCSVQocG9ydCkpLCBmb3J3YXJkX2Rpc2FibGUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXQ3NjI4X3N3aXRjaF9vcHMgPSB7CiAJLmdldF90YWdfcHJvdG9jb2wgPSBtdDc2MjhfZ2V0X3RhZ19wcm90bywKIAkuc2V0dXAgPSBtdDc2Mjhfc2V0dXAsCkBAIC01NjAsNiAmIzQzOzc1MSwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG10NzYyOF9zd2l0Y2hfb3BzID0gewogCS5waHlsaW5rX2dldF9jYXBzID0gbXQ3NjI4X3BoeWxpbmtfZ2V0X2NhcHMsCiAJLnRhZ184MDIxcV92bGFuX2FkZCA9IG10NzYyOF9kc2FfODAyMXFfdmxhbl9hZGQsCiAJLnRhZ184MDIxcV92bGFuX2RlbCA9IG10NzYyOF9kc2FfODAyMXFfdmxhbl9kZWwsCiYjNDM7CS5wb3J0X2JyaWRnZV9qb2luID0gZHNhX3RhZ184MDIxcV9icmlkZ2Vfam9pbiwKJiM0MzsJLnBvcnRfYnJpZGdlX2xlYXZlID0gZHNhX3RhZ184MDIxcV9icmlkZ2VfbGVhdmUsCiYjNDM7CS5wb3J0X3N0cF9zdGF0ZV9zZXQgPSBtdDc2Mjhfc3RwX3N0YXRlX3NldCwKJiM0MzsJLnBvcnRfdmxhbl9maWx0ZXJpbmcgPSBtdDc2MjhfcG9ydF92bGFuX2ZpbHRlcmluZywKJiM0MzsJLnBvcnRfdmxhbl9hZGQgPSBtdDc2MjhfcG9ydF92bGFuX2FkZCwKJiM0MzsJLnBvcnRfdmxhbl9kZWwgPSBtdDc2MjhfcG9ydF92bGFuX2RlbCwKIH07CiAKIHN0YXRpYyBpbnQgbXQ3NjI4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19tdDc2MjguYyBiL25ldC9kc2EvdGFnX210NzYyOC5jCmluZGV4IDgwYjUwZmYwOGU1M2YuLjdjNzFlOGIwODY0ODEgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdGFnX210NzYyOC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdGFnX210NzYyOC5jCkBAIC02LDYgJiM0Mzs2LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aGVyZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZHNhLzgwMjFxLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZHNhLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7dGFnLmgmIzM0OwpAQCAtMTUsMTMgJiM0MzsxNiwxNiBAQAogICogT24gVFggdGhlIGxvd2VyIDYgYml0cyBlbmNvZGUgdGhlIGRlc3RpbmF0aW9uIHBvcnQgYml0bWFzay4KICAqIE9uIFJYIHRoZSBsb3dlciAzIGJpdHMgZW5jb2RlIHRoZSBzb3VyY2UgcG9ydCBudW1iZXIuCiAgKgotICogVGhlIHN3aXRjaCBoYXJkd2FyZSB3aWxsIG5vdCBtb2RpZnkgdGhlIFRQSUQgb2YgYW4gaW5jb21pbmcgcGFja2V0IGlmIGl0IGlzCi0gKiBhbHJlYWR5IFZMQU4gdGFnZ2VkLiBUbyB3b3JrIGFyb3VuZCB0aGlzIHRoZSBzd2l0Y2ggaXMgY29uZmlndXJlZCB0byBhbHdheXMKLSAqIGFwcGVuZCBhIHRhZ184MDIxcSBzdGFuZGFsb25lIFZMQU4gdGFnIGZvciBlYWNoIHBvcnQuIFRoYXQgbWVhbnMgd2UgY2FuCi0gKiBzYWZlbHkgc3RyaXAgdGhlIG91dGVyIFZMQU4gdGFnIGFmdGVyIHBhcnNpbmcgaXQuCiYjNDM7ICogVGhlIHN3aXRjaCBjYW4gb25seSB1c2UgVkxBTnMgZm9yIGZvcndhcmRpbmcgY29udHJvbC4gVkxBTi11bmF3YXJlIGJyaWRnZXMKJiM0MzsgKiBhcmUgc2ltdWxhdGVkIHVzaW5nIHRhZ184MDIxcSBhbmQgZG91YmxlIHRhZ2dpbmcsIHdoaWxlIFZMQU4tYXdhcmUgYnJpZGdlcwomIzQzOyAqIHVzZSB0aGUgVkxBTnMgY29uZmlndXJlZCBieSB0aGUgYnJpZGdlIGRpcmVjdGx5LgogICoKLSAqIEEgVkxBTiB0YWcgaXMgY29uc3RydWN0ZWQgb24gZWdyZXNzIHRvIHRhcmdldCB0aGUgc3RhbmRhbG9uZSBWTEFOIGFuZAotICogZGVzdGluYXRpb24gcG9ydC4KJiM0MzsgKiBPbiBlZ3Jlc3MsIHRoZSB0YWdnZXIgZWl0aGVyIGFkZHMgYSBuZXcgTVQ3NjI4IHRhZyB0aGF0IGNvbnRhaW5zIHRoZQomIzQzOyAqIHN0YW5kYWxvbmUgb3IgYnJpZGdlIHRhZ184MDIxcSBWTEFOIGFuZCBkZXN0aW5hdGlvbiBwb3J0IG1hc2ssIG9yIG1vZGlmaWVzCiYjNDM7ICogYW4gZXhpc3RpbmcgVkxBTiB0YWcgdG8gY29udGFpbiB0aGUgZGVzdGluYXRpb24gcG9ydCBtYXNrLgomIzQzOyAqCiYjNDM7ICogT24gaW5ncmVzcywgdGhlIFZMQU4gdGFnIGlzIHJlc3RvcmVkIGFmdGVyIHN0cmlwcGluZyB0aGUgTVQ3NjI4IHRhZywgaWYgaXQKJiM0MzsgKiBpcyBub3QgYSB0YWdfODAyMXEgVkxBTi4KICAqLwogCiAjZGVmaW5lIE1UNzYyOF9UQUdfTkFNRSAmIzM0O210NzYyOCYjMzQ7CkBAIC0zNCwyMCAmIzQzOzM4LDM1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXQ3NjI4X3RhZ194bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsJdTE2IHhtaXRfdHBpZDsKIAl1MTYgeG1pdF92bGFuOwogCV9fYmUxNiAqdGFnOwogCiYjNDM7CXhtaXRfdHBpZCA9CiYjNDM7CSAgICBFVEhfUF84MDIxUSB8IEZJRUxEX1BSRVAoTVQ3NjI4X1RBR19UWF9QT1JULAomIzQzOwkJCQkgICAgIGRzYV94bWl0X3BvcnRfbWFzayhza2IsIGRldikpOwogCWRwID0gZHNhX3VzZXJfdG9fcG9ydChkZXYpOwotCXhtaXRfdmxhbiA9IGRzYV90YWdfODAyMXFfc3RhbmRhbG9uZV92aWQoZHApOwomIzQzOwlpZiAoc2tiLSZndDtvZmZsb2FkX2Z3ZF9tYXJrICZhbXA7JmFtcDsKJiM0MzsJICAgIGJyX3ZsYW5fZW5hYmxlZChkc2FfcG9ydF9icmlkZ2VfZGV2X2dldChkcCkpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogT24gVkxBTiBhd2FyZSBwb3J0cyBvbmx5IG1vZGlmeSB0aGUgVFBJRCB0byBjb250YWluIHRoZQomIzQzOwkJICogTVQ3NjI4IGVncmVzcyBwb3J0IG1ldGFkYXRhLCBpbnN0ZWFkIG9mIGFkZGluZyBhIG5ldyB2bGFuIHRhZwomIzQzOwkJICovCiYjNDM7CQl0YWcgPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc190eChza2IpOwomIzQzOwkJdGFnWzBdID0gaHRvbnMoeG1pdF90cGlkKTsKJiM0MzsJCXJldHVybiBza2I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJeG1pdF92bGFuID0gc2tiLSZndDtvZmZsb2FkX2Z3ZF9tYXJrID8KJiM0MzsJICAgIGRzYV90YWdfODAyMXFfYnJpZGdlX3ZpZChkc2FfcG9ydF9icmlkZ2VfbnVtX2dldChkcCkpIDoKJiM0MzsJICAgIGRzYV90YWdfODAyMXFfc3RhbmRhbG9uZV92aWQoZHApOwogCiAJc2tiX3B1c2goc2tiLCBNVDc2MjhfVEFHX0xFTik7CiAJZHNhX2FsbG9jX2V0eXBlX2hlYWRlcihza2IsIE1UNzYyOF9UQUdfTEVOKTsKIAogCXRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3R4KHNrYik7CiAKLQl0YWdbMF0gPSBodG9ucyhFVEhfUF84MDIxUSB8Ci0JCSAgICAgICBGSUVMRF9QUkVQKE1UNzYyOF9UQUdfVFhfUE9SVCwKLQkJCQkgIGRzYV94bWl0X3BvcnRfbWFzayhza2IsIGRldikpKTsKJiM0MzsJdGFnWzBdID0gaHRvbnMoeG1pdF90cGlkKTsKIAl0YWdbMV0gPSBodG9ucyh4bWl0X3ZsYW4pOwogCiAJcmV0dXJuIHNrYjsKQEAgLTU2LDcgJiM0Mzs3NSwxMCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm10NzYyOF90YWdfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiYjNDM7CXVuc2lnbmVkIGludCBzb3VyY2VfcG9ydDsKJiM0MzsJYm9vbCBpc19kc2FfODAyMXE7CiAJX19iZTE2ICpwaGRyOwomIzQzOwl1MTYgdGNpLCB2aWQ7CiAKIAlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBNVDc2MjhfVEFHX0xFTikpKSB7CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtNjQsOSAmIzQzOzg2LDIzIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXQ3NjI4X3RhZ19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl9CiAKIAlwaGRyID0gZHNhX2V0eXBlX2hlYWRlcl9wb3Nfcngoc2tiKTsKLQlza2ItJmd0O2RldiA9Ci0JICAgIGRzYV9jb25kdWl0X2ZpbmRfdXNlcihkZXYsIDAsCi0JCQkJICBGSUVMRF9HRVQoTVQ3NjI4X1RBR19SWF9QT1JULCBudG9ocygqcGhkcikpKTsKJiM0MzsJc291cmNlX3BvcnQgPSBGSUVMRF9HRVQoTVQ3NjI4X1RBR19SWF9QT1JULCBudG9ocygqcGhkcikpOwomIzQzOwl0Y2kgPSBudG9ocyhwaGRyWzFdKTsKJiM0MzsJdmlkID0gdGNpICZhbXA7IFZMQU5fVklEX01BU0s7CiYjNDM7CWlzX2RzYV84MDIxcSA9IHZpZF9pc19kc2FfODAyMXEodmlkKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHNvdXJjZSBwb3J0IGluZm8gaXMgb25seSBlbmNvZGVkIGluIHRoZSBUUElEIGZpZWxkIGZvciBwYWNrZXRzCiYjNDM7CSAqIHdoZXJlIHRoZSBWTEFOIHRhZyBpcyBpbnNlcnRlZCBieSB0aGUgUFZJRCBtZWNoYW5pc20uIFdpdGggVkxBTgomIzQzOwkgKiBmaWx0ZXJpbmcgZW5hYmxlZCwgVkxBTi10YWdnZWQgaW5ncmVzcyBwYWNrZXRzIGFwcGVhciBhcyBpZiB0aGV5JiMzOTtyZQomIzQzOwkgKiBvcmlnaW5hdGluZyBvbiBwb3J0IDAuIFVzZSB0aGUgVklEIHRvIGlkZW50aWZ5IHRoZSBicmlkZ2UgcG9ydCBpbgomIzQzOwkgKiB0aGlzIGNhc2UuCiYjNDM7CSAqLwomIzQzOwlpZiAoc291cmNlX3BvcnQgPT0gMCAmYW1wOyZhbXA7ICFpc19kc2FfODAyMXEpCiYjNDM7CQlza2ItJmd0O2RldiA9IGRzYV9maW5kX2Rlc2lnbmF0ZWRfYnJpZGdlX3BvcnRfYnlfdmlkKGRldiwgdmlkKTsKJiM0MzsJZWxzZQomIzQzOwkJc2tiLSZndDtkZXYgPSBkc2FfY29uZHVpdF9maW5kX3VzZXIoZGV2LCAwLCBzb3VyY2VfcG9ydCk7CiYjNDM7CiAJaWYgKCFza2ItJmd0O2RldikgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC03NSw2ICYjNDM7MTExLDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXQ3NjI4X3RhZ19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlza2JfcHVsbF9yY3N1bShza2IsIE1UNzYyOF9UQUdfTEVOKTsKIAlkc2Ffc3RyaXBfZXR5cGVfaGVhZGVyKHNrYiwgTVQ3NjI4X1RBR19MRU4pOwogCWRzYV9kZWZhdWx0X29mZmxvYWRfZndkX21hcmsoc2tiKTsKJiM0MzsKJiM0MzsJaWYgKCFpc19kc2FfODAyMXEpCiYjNDM7CQlfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLCB0Y2kpOwomIzQzOwogCXJldHVybiBza2I7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNzMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGlzIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIHNlcmllcy4gTXkgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kIOKAkyB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIG1vZGlmaWVkPyBJIHNlZSB0aHJlZSBmaWxlcyB3ZXJlIHRvdWNoZWQ6IGBNQUlOVEFJTkVSU2AsIGBkcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmNgLCBhbmQgYG5ldC9kc2EvdGFnX210NzYyOC5jYC4KClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgbXQ3NjI4YCBEU0Egc3dpdGNoIGRyaXZlci4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBoYXJkd2FyZSByZWFjaGFiaWxpdHkgYW5kIHRoZSBkcml2ZXImIzM5O3MgdHlwZSDigJMgd2hhdCBraW5kIG9mIHRhZ3MgYXJlIHdlIHRhbGtpbmcgYWJvdXQgaW4gYG5ldC9kc2EvdGFnX210NzYyOC5jYD8gVGhhdCYjMzk7cyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gVGhlbiwgSSBuZWVkIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZXQvZHNhL210NzYyOC5jYCBpdHNlbGYuIEkmIzM5O2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgS2NvbmZpZyBvcHRpb25zIGFuZCBwbGF0Zm9ybSBiaW5kaW5ncy4gVGhhdCYjMzk7bGwgdGVsbCBtZSBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCwgaXRzIGRlcGVuZGVuY2llcywgYW5kIHdoYXQgaGFyZHdhcmUgaXQmIzM5O3MgbWVhbnQgdG8gc3VwcG9ydC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBpZiB0aGlzIGFsbCBjaGVja3Mgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19ORVRfRFNBX01UNzYyOCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzBfTU1JTykgJiM0Mzs9IG10NzUzMC1tbWlvLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19ORVRfRFNBX01UNzYyOCkgJiM0Mzs9IG10NzYyOC5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX05FVF9EU0FfTVY4OEU2MDYwKSAmIzQzOz0gbXY4OGU2MDYwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSBvbiB0aGUgTVQ3NjI4IHN1cHBvcnQgd2l0aGluIHRoZSBEU0EgZHJpdmVyIGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgZGVmaW5pdGlvbnMuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L2RzYS9LY29uZmlnYCBmb3IgdGhlIGBORVRfRFNBX01UNzYyOGAgc3ltYm9sLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBzdXBwb3J0IGZvciB0aGUgaGFyZHdhcmUgaXMgZGVmaW5lZC4gVGhlbiwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgYmVjYXVzZSBpdCYjMzk7cyBhbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIGNyb3NzLXJlZmVyZW5jZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBJIHNob3VsZCBhbHNvIGltbWVkaWF0ZWx5IGxvb2sgaW4gYG5ldC9kc2EvS2NvbmZpZ2AuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyB0aGVyZSBmb3IgYE5FVF9EU0FfVEFHX01UNzYyOGAuIFRoaXMgdGFnIG1pZ2h0IGJlIHNwZWNpZmljIHRvIHRoZSBNVDc2MjgmIzM5O3MgcGFydGljdWxhciB0YWdnaW5nIHNjaGVtZSwgc28gSSBzaG91bGQgc2VlIGlmIGl0IGV4aXN0cy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIGhvdyBpdCYjMzk7cyBlbmFibGVkIGFuZCBjb25maWd1cmVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBEU0Egc3lzdGVtLiBJJiMzOTtsbCBnZXQgYSBjbGVhciBwaWN0dXJlIGJ5IGNoZWNraW5nIHRoZXNlIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FVF9EU0FfTVQ3NjI4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnPTU0PWNvbmZpZyBORVRfRFNBX01UNzUzMF9NTUlPXG4tLVxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctNjUtXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZzo2Njpjb25maWcgTkVUX0RTQV9NVDc2MjhcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTY3LVx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ3NjI4IEVtYmVkZGVkIEV0aGVybmV0IHN3aXRjaCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NTMwX01NSU8pICYjNDM7PSBtdDc1MzAtbW1pby5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc2MjgpICYjNDM7PSBtdDc2Mjgub1xuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19ORVRfRFNBX01WODhFNjA2MCkgJiM0Mzs9IG12ODhlNjA2MC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRFNBIEtjb25maWcgZm9yIENvbmZpZ3VyYXRpb24gSW5zaWdodHMqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IGBkcml2ZXJzL25ldC9kc2EvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2Ni4gVGhhdCBhcmVhJiMzOTtzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGZvciBjb3JlIERTQSBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBhbHNvIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9kc2EvS2NvbmZpZ2AgZmlsZSBpbiB0aGUgcm9vdCBuZXQgZGlyZWN0b3J5IGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgc29tZSBicm9hZGVyIERTQSBzZXR0aW5ncyB0aGVyZSwgb3Igc29tZSBpbmNsdWRlcyB0aGF0IHdpbGwgZGlyZWN0IG1lIHRvIHRoZSBjb3JyZWN0IHBsYWNlLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmFibGUgbW9kdWxlcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHBvdGVudGlhbGx5IGludGVyZXN0aW5nIG9wdGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxlLiBGcm9tIGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0LWluIEV0aGVybmV0IHN3aXRjaCBmb3VuZFxuICA2MTpcdFx0ICBpbiB0aGUgTWVkaWFUZWsgTVQ3OTg4IFNvQy5cbiAgNjI6XHRcdCAgVGhlIHN3aXRjaCBpcyBhIHNpbWlsYXIgZGVzaWduIGFzIE1UNzUzMSwgYnV0IHRoZSBzd2l0Y2ggcmVnaXN0ZXJzXG4gIDYzOlx0XHQgIGFyZSBkaXJlY3RseSBtYXBwZWQgaW50byB0aGUgU29DcyByZWdpc3RlciBzcGFjZSByYXRoZXIgdGhhbiBiZWluZ1xuICA2NDpcdFx0ICBhY2Nlc3NpYmxlIHZpYSBNRElPLlxuICA2NTpcdFxuICA2NjpcdGNvbmZpZyBORVRfRFNBX01UNzYyOFxuICA2NzpcdFx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ3NjI4IEVtYmVkZGVkIEV0aGVybmV0IHN3aXRjaCBzdXBwb3J0XCYjMzQ7XG4gIDY4Olx0XHRkZXBlbmRzIG9uIEhBU19JT01FTSBcdTAwMjZcdTAwMjYgKFNPQ19NVDc2MjAgfHwgQ09NUElMRV9URVNUKVxuICA2OTpcdFx0c2VsZWN0IE5FVF9EU0FfVEFHX01UNzYyOFxuICA3MDpcdFx0c2VsZWN0IE1FRElBVEVLX0ZFX1NPQ19QSFlcbiAgNzE6XHRcdHNlbGVjdCBSRUdNQVBfTU1JT1xuICA3MjpcdFx0aGVscFxuICA3MzpcdFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0LWluIEV0aGVybmV0IHN3aXRjaCBmb3VuZFxuICA3NDpcdFx0ICBpbiB0aGUgTVQ3NjI4IFNvQy5cbiAgNzU6XHRcbiAgNzY6XHRjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcbiAgNzc6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgODhFNjA2MCBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCYjMzQ7XG4gIDc4Olx0XHRzZWxlY3QgTkVUX0RTQV9UQUdfVFJBSUxFUlxuICA3OTpcdFx0aGVscFxuICA4MDpcdFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1hcnZlbGwgODhFNjA2MCBldGhlcm5ldCBzd2l0Y2hcbiAgODE6XHRcdCAgY2hpcC5cbiAgODI6XHRcbiAgODM6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnXCYjMzQ7XG4gIDg0Olx0XG4gIDg1Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1wmIzM0O1xuICA4NjpcdFxuICA4NzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L0tjb25maWdcJiMzNDtcbiAgODg6XHRcbiAgODk6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE4MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBNVDc2MjggRFNBIFRhZ2dlcioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIE1UNzYyOCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgRFNBIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIGFjdGlvbiBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBgbmV0L2RzYS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IOKAkyB0aGUgS2NvbmZpZyBsaWtlbHkgZGVmaW5lcyB0aGUgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoaXMgc3BlY2lmaWMgdGFnZ2VyLCBgTkVUX0RTQV9UQUdfTVQ3NjI4YC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBob3cgaXQmIzM5O3MgZW5hYmxlZCwgd2hhdCBvdGhlciBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBicmllZiBkb2N1bWVudGF0aW9uIHNuaXBwZXRzIGlmIEkmIzM5O20gbHVja3kuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaXRzIG92ZXJhbGwgcm9sZSBpbiB0aGUgYnJvYWRlciBEU0EgYXJjaGl0ZWN0dXJlLiBUaGlzIGluaXRpYWwgS2NvbmZpZyBpbnNwZWN0aW9uIHdpbGwgcXVpY2tseSBpbmZvcm0gbWUgYWJvdXQgdGhlIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBjb21wbGV4aXR5IHN1cnJvdW5kaW5nIHRoZSBNVDc2MjgmIzM5O3MgaW50ZWdyYXRpb24uIEFmdGVyIHRoaXMsIEkmIzM5O2xsIGtub3cgd2hhdCB0byBsb29rIGZvciBuZXh0LiBJJiMzOTttIGtlZW4gdG8gZ3Jhc3AgdGhlIHVuZGVybHlpbmcgRFNBIHRhZ2dlciBmdW5jdGlvbmFsaXR5IGF0IHBsYXkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VEFHX01UNzYyOCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kc2EmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2RzYS9LY29uZmlnPTk0PWNvbmZpZyBORVRfRFNBX1RBR19FRFNBXG4tLVxubmV0L2RzYS9LY29uZmlnLTEwMC1cbm5ldC9kc2EvS2NvbmZpZzoxMDE6Y29uZmlnIE5FVF9EU0FfVEFHX01UNzYyOFxubmV0L2RzYS9LY29uZmlnLTEwMi1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIHRoZSBNVDc2MjggZW1iZWRkZWQgc3dpdGNoXCYjMzQ7XG4tLVxubmV0L2RzYS9NYWtlZmlsZT0yOT1vYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTEFOOTMwMykgJiM0Mzs9IHRhZ19sYW45MzAzLm9cbm5ldC9kc2EvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX01UNzYyOCkgJiM0Mzs9IHRhZ19tdDc2Mjgub1xubmV0L2RzYS9NYWtlZmlsZS0zMS1vYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTVRLKSAmIzQzOz0gdGFnX210ay5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBEU0EgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBmaXJzdCBwbGFjZSBteSBicmFpbiBuYXR1cmFsbHkgZ29lcyBpcyB0aGUgYG5ldC9kc2EvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgemVyb2luZyBpbiBhcm91bmQgbGluZSAxMDEg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIHJlYXNvbiwgaWYgSSByZWNhbGwuIFByb2JhYmx5IHNvbWUgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkIHRoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZHNhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDk1Olx0XHR0cmlzdGF0ZSBcJiMzNDtUYWcgZHJpdmVyIGZvciBNYXJ2ZWxsIHN3aXRjaGVzIHVzaW5nIEV0aGVyVHlwZSBEU0EgaGVhZGVyc1wmIzM0O1xuICA5NjpcdFx0c2VsZWN0IE5FVF9EU0FfVEFHX0RTQV9DT01NT05cbiAgOTc6XHRcdGhlbHBcbiAgOTg6XHRcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yIHRoZVxuICA5OTpcdFx0ICBNYXJ2ZWxsIHN3aXRjaGVzIHdoaWNoIHVzZSBFdGhlclR5cGUgRFNBIGhlYWRlcnMuXG4gMTAwOlx0XG4gMTAxOlx0Y29uZmlnIE5FVF9EU0FfVEFHX01UNzYyOFxuIDEwMjpcdFx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgdGhlIE1UNzYyOCBlbWJlZGRlZCBzd2l0Y2hcJiMzNDtcbiAxMDM6XHRcdGhlbHBcbiAxMDQ6XHRcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yIHRoZVxuIDEwNTpcdFx0ICBzd2l0Y2ggZW1iZWRkZWQgaW4gdGhlIE1UNzYyOCBTb0MuXG4gMTA2Olx0XG4gMTA3Olx0Y29uZmlnIE5FVF9EU0FfVEFHX01US1xuIDEwODpcdFx0dHJpc3RhdGUgXCYjMzQ7VGFnIGRyaXZlciBmb3IgTWVkaWF0ZWsgc3dpdGNoZXNcJiMzNDtcbiAxMDk6XHRcdGhlbHBcbiAxMTA6XHRcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yXG4gMTExOlx0XHQgIE1lZGlhdGVrIHN3aXRjaGVzLlxuIDExMjpcdFxuIDExMzpcdGNvbmZpZyBORVRfRFNBX1RBR19NWExfODYyWFhcbiAxMTQ6XHRcdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE1heExpbmVhciBNeEw4NjJ4eCBzd2l0Y2hlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTVQ3NjI4IGFuZCBWaXJ0dWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBgZHJpdmVycy9uZXQvZHNhL210NzYyOC5jYCBmaWxlLiBSaWdodCwgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciB0aGUgTVQ3NjI4IFNvQyYjMzk7cyBlbWJlZGRlZCBzd2l0Y2guIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogY2FuIEkgcmVhbGlzdGljYWxseSBsZXZlcmFnZSBEU0Egc3dpdGNoZXMgb3IgdGFnZ2VycywgbGlrZSB0aGUgb25lIHRoaXMgZHJpdmVyIGxpa2VseSBtYW5hZ2VzLCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJJiMzOTttIHRoaW5raW5nIFFFTVUgb3IgYSB0eXBpY2FsIGFtZDY0IHNldHVwLiBUaGF0JiMzOTtzIHRoZSByZWFsIGNoYWxsZW5nZSBoZXJlLiBCZWZvcmUgSSBqdW1wIHRvbyBmYXIgZG93biB0aGF0IHJhYmJpdCBob2xlLCBob2xkIG9uLi4uIGlzIHRoaXMgdHJ1bHkgYSBwbGF0Zm9ybSBkcml2ZXI/IEJlc3QgdG8gZG91YmxlLWNoZWNrIGFnYWluc3QgdGhlIGNvbnRlbnRzIG9mIGBtdDc2MjguY2AgZGlyZWN0bHkgdG8gYmUgc3VyZS4gSXQmIzM5O3MgZWFzeSB0byBhc3N1bWUsIGJ1dCBtYWtpbmcgdGhhdCBhc3N1bXB0aW9uIHdvdWxkIGxlYWQgbWUgYXN0cmF5LiBMZXQmIzM5O3MgbWFrZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbGF0Zm9ybV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL210NzYyOC5jPTgzMz1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdDc2Mjhfb2ZfbWF0Y2gpO1xuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jLTgzNC1cbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzo4MzU6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXQ3NjI4X2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy04MzYtXHQuZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy04NDQtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmM6ODQ1Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobXQ3NjI4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtODQ2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzcyNgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBNVDc2MjggRFNBIERyaXZlcioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGUgTVQ3NjI4IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBEU0EgZnJhbWV3b3JrLiBNeSBpbW1lZGlhdGUgdGFyZ2V0IGlzIHRoZSBgZHJpdmVycy9uZXQvZHNhL210NzYyOC5jYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGBtdDc2MjhfcHJvYmVgIGZ1bmN0aW9uIC0gdGhhdCYjMzk7cyB3aGVyZSB0aGUgaW5pdGlhbCBkZXZpY2Ugc2V0dXAgaGFwcGVucywgcmlnaHQ/IEFuZCBJIHNob3VsZCBwcm9iYWJseSByZXZpZXcgYG10NzYyOF9vZl9tYXRjaGAgYXMgd2VsbCwganVzdCB0byBiZSBjZXJ0YWluIEkgdW5kZXJzdGFuZCB0aGUgZGV2aWNlIHRyZWUgYmluZGluZyBhbmQgaG93IHRoZSBzeXN0ZW0gaWRlbnRpZmllcyB0aGUgTVQ3NjI4IGhhcmR3YXJlIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhpcyYjMzk7bGwgcHJvYmFibHkgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGFueSBwb3dlci1vbiBpc3N1ZXMgYW5kIGluaXRpYWwgaGFyZHdhcmUgc2V0dXAgYW5kIGhvdyB0aGlzIGRyaXZlciBpcyBiZWluZyBjYWxsZWQgYnkgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODE1Olx0fVxuIDgxNjpcdFxuIDgxNzpcdHN0YXRpYyB2b2lkIG10NzYyOF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIDgxODpcdHtcbiA4MTk6XHRcdHN0cnVjdCBtdDc2MjhfZXN3ICplc3cgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiA4MjA6XHRcbiA4MjE6XHRcdGlmICghZXN3KVxuIDgyMjpcdFx0XHRyZXR1cm47XG4gODIzOlx0XG4gODI0Olx0XHRkc2Ffc3dpdGNoX3NodXRkb3duKGVzdy1cdTAwM2Vkcyk7XG4gODI1Olx0XHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYsIE5VTEwpO1xuIDgyNjpcdH1cbiA4Mjc6XHRcbiA4Mjg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc2Mjhfb2ZfbWF0Y2hbXSA9IHtcbiA4Mjk6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttZWRpYXRlayxtdDc2MjgtZXN3XCYjMzQ7IH0sXG4gODMwOlx0XHR7fVxuIDgzMTpcdH07XG4gODMyOlx0XG4gODMzOlx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXQ3NjI4X29mX21hdGNoKTtcbiA4MzQ6XHRcbiA4MzU6XHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdDc2MjhfZHJpdmVyID0ge1xuIDgzNjpcdFx0LmRyaXZlciA9IHtcbiA4Mzc6XHRcdFx0ICAgLm5hbWUgPSBcJiMzNDttdDc2MjgtZXN3XCYjMzQ7LFxuIDgzODpcdFx0XHQgICAub2ZfbWF0Y2hfdGFibGUgPSBtdDc2Mjhfb2ZfbWF0Y2gsXG4gODM5Olx0XHRcdCAgICB9LFxuIDg0MDpcdFx0LnByb2JlID0gbXQ3NjI4X3Byb2JlLFxuIDg0MTpcdFx0LnJlbW92ZSA9IG10NzYyOF9yZW1vdmUsXG4gODQyOlx0XHQuc2h1dGRvd24gPSBtdDc2Mjhfc2h1dGRvd24sXG4gODQzOlx0fTtcbiA4NDQ6XHRcbiA4NDU6XHRtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG10NzYyOF9kcml2ZXIpO1xuIDg0NjpcdFxuIDg0NzpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7Sm9yaXMgVmFpc3ZpbGEgXHUwMDNjam9leUB0aW55aXNyLmNvbVx1MDAzZVwmIzM0Oyk7XG4gODQ4Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0RyaXZlciBmb3IgTWVkaWF0ZWsgTVQ3NjI4IGVtYmVkZGVkIHN3aXRjaFwmIzM0Oyk7XG4gODQ5Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NDQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYG10NzYyOGAgUGxhdGZvcm0gRHJpdmVyIGFuZCBEU0EgVGFnZ2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBtdDc2MjhgIHRoaW5nLiBGcm9tIHdoYXQgSSBzZWUsIGl0JiMzOTtzIHVzaW5nIHRoZSBgJiMzNDttZWRpYXRlayxtdDc2MjgtZXN3JiMzNDtgIG9mX2RldmljZV9pZC4gTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBEU0Egc3R1ZmYsIHNwZWNpZmljYWxseSBpbiBgdGFnX210NzYyOC5jYCwgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHR3ZWFrZWQgZnJvbSB1c2VyIHNwYWNlPyBDb3VsZCBzb21lb25lIG1hbmlwdWxhdGUgaXQgdmlhIGEgbW9jayBEU0Egc2V0dXAsIE5ldGxpbmssIG9yIGV2ZW4gc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyPyBUaGF0JiMzOTtzIHRoZSByZWFsIHF1ZXN0aW9uLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIERTQSB0YWdnZXIgaXRzZWxmIGlzIGxvYWRhYmxlLCBpZiB0aGVyZSYjMzk7cyBhIHNlbGVjdGlvbiBtZWNoYW5pc20gYXQgcGxheSBoZXJlLiBUaGlzIG1ha2VzIG1lIGNvbnNpZGVyIGhvdyBEU0EgdGFnZ2luZyAqYWN0dWFsbHkqIHdvcmtzIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIERTQSB0YWdnaW5nIHByb3RvY29scyB0aGVtc2VsdmVzLCBJIHN1cHBvc2UuIEdvdHRhIGdldCBhIHNvbGlkIGhhbmRsZSBvbiBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RFNBX1RBR19QUk9UT19NVDc2MjgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL210NzYyOC5jPTU4OD1tdDc2MjhfZ2V0X3RhZ19wcm90byhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtNTg5LXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzo1OTA6XHRyZXR1cm4gRFNBX1RBR19QUk9UT19NVDc2Mjg7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtNTkxLX1cbi0tXG5pbmNsdWRlL25ldC9kc2EuaD0yNj1zdHJ1Y3QgdGNfYWN0aW9uO1xuLS1cbmluY2x1ZGUvbmV0L2RzYS5oLTYyLSNkZWZpbmUgRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFXHRcdDM0XG5pbmNsdWRlL25ldC9kc2EuaDo2MzojZGVmaW5lIERTQV9UQUdfUFJPVE9fTVQ3NjI4X1ZBTFVFXHRcdDM1XG5pbmNsdWRlL25ldC9kc2EuaC02NC1cbmluY2x1ZGUvbmV0L2RzYS5oPTY1PWVudW0gZHNhX3RhZ19wcm90b2NvbCB7XG4tLVxuaW5jbHVkZS9uZXQvZHNhLmgtMTAwLVx0RFNBX1RBR19QUk9UT19LU1o4NDYzXHRcdD0gRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFLFxuaW5jbHVkZS9uZXQvZHNhLmg6MTAxOlx0RFNBX1RBR19QUk9UT19NVDc2MjhcdFx0PSBEU0FfVEFHX1BST1RPX01UNzYyOF9WQUxVRSxcbmluY2x1ZGUvbmV0L2RzYS5oLTEwMi19O1xuLS1cbm5ldC9kc2EvdGFnX210NzYyOC5jPTEyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIG10NzYyOF90YWdfb3BzID0ge1xubmV0L2RzYS90YWdfbXQ3NjI4LmMtMTIyLVx0Lm5hbWUgPSBNVDc2MjhfVEFHX05BTUUsXG5uZXQvZHNhL3RhZ19tdDc2MjguYzoxMjM6XHQucHJvdG8gPSBEU0FfVEFHX1BST1RPX01UNzYyOCxcbm5ldC9kc2EvdGFnX210NzYyOC5jLTEyNC1cdC54bWl0ID0gbXQ3NjI4X3RhZ194bWl0LFxuLS1cbm5ldC9kc2EvdGFnX210NzYyOC5jPTEyOT1tb2R1bGVfZHNhX3RhZ19kcml2ZXIobXQ3NjI4X3RhZ19vcHMpO1xubmV0L2RzYS90YWdfbXQ3NjI4LmMtMTMwLVxubmV0L2RzYS90YWdfbXQ3NjI4LmM6MTMxOk1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX01UNzYyOCwgTVQ3NjI4X1RBR19OQU1FKTtcbm5ldC9kc2EvdGFnX210NzYyOC5jLTEzMi1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7RFNBIHRhZyBkcml2ZXIgZm9yIE1UNzYyOCBzd2l0Y2hcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUxOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRFNBIFRhZ2dpbmcgUHJvdG9jb2wgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgYW5kIEkmIzM5O20gd29uZGVyaW5nOiBjYW4gSSAqZHluYW1pY2FsbHkqIG1hbmlwdWxhdGUgdGhlIERTQSB0YWdnaW5nIHByb3RvY29sPyBDYW4gSSBkbyB0aGlzIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzIOKAkyBzeXNmcywgbmV0bGluaywgZXRodG9vbCwgb3IgZXZlbiBhdCB0aGUgbmV0ZGV2IGxldmVsPyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHNjZW5hcmlvcyB3aGVyZSBJIG1pZ2h0IG5lZWQgYSBEU0EgbW9jayBpbnRlcmZhY2UsIGEgZHVtbXkgc2V0dXAsIGEgbG9vcGJhY2ssIG9yIGV2ZW4gc29tZXRoaW5nIGxpa2UgbmV0a2l0IGZvciB0ZXN0aW5nLgoKVGhlIGNvcmUgcXVlc3Rpb24gaXMsIGhvdyAqZXhhY3RseSogZG9lcyB0aGUgc3lzdGVtIGRlY2lkZSB3aGljaCBEU0EgdGFnIHByb3RvY29sIHRvIHVzZSwgYW5kLCBjcnVjaWFsbHksIGNhbiBJICppbmZsdWVuY2UqIHRoYXQgc2VsZWN0aW9uIG9yIGV2ZW4gZm9yY2UgYSBjaGFuZ2UgYXQgcnVudGltZT8gVGltZSB0byBmaXJlIHVwIHRoZSBzZWFyY2ggZW5naW5lIGFuZCBkZWx2ZSBpbnRvIGhvdyBEU0EgdGFnIHByb3RvY29scyBhcmUgY2hvc2VuIGFuZCBpZiB0aGF0IGNob2ljZSBpcyBtb2RpZmlhYmxlIG9uIHRoZSBmbHkuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgY29tbXVuaXR5IGRpc2N1c3Npb25zIGhhdmUgdG8gc2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFuZ2VfdGFnX3Byb3RvY29sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2RzYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL2RzYS5jPTU3MD1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfc2V0dXBfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5uZXQvZHNhL2RzYS5jLTU3OS1cdHJ0bmxfbG9jaygpO1xubmV0L2RzYS9kc2EuYzo1ODA6XHRlcnIgPSBkcy1cdTAwM2VvcHMtXHUwMDNlY2hhbmdlX3RhZ19wcm90b2NvbChkcywgdGFnX29wcy1cdTAwM2Vwcm90byk7XG5uZXQvZHNhL2RzYS5jLTU4MS1cdHJ0bmxfdW5sb2NrKCk7XG4tLVxubmV0L2RzYS9kc2EuYz0xMTU1PXN0YXRpYyBpbnQgZHNhX3BvcnRfcGFyc2VfY3B1KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxuLS1cbm5ldC9kc2EvZHNhLmMtMTE3Ni1cdGlmICh1c2VyX3Byb3RvY29sKSB7XG5uZXQvZHNhL2RzYS5jOjExNzc6XHRcdGlmICghZHMtXHUwMDNlb3BzLVx1MDAzZWNoYW5nZV90YWdfcHJvdG9jb2wpIHtcbm5ldC9kc2EvZHNhLmMtMTE3OC1cdFx0XHRkZXZfZXJyKGRzLVx1MDAzZWRldiwgXCYjMzQ7VGFnIHByb3RvY29sIGNhbm5vdCBiZSBtb2RpZmllZFxcblwmIzM0Oyk7XG4tLVxubmV0L2RzYS9kc2EuYy0xMjMwLVx0ICogZHNhX3N3aXRjaF9zZXR1cF90YWdfcHJvdG9jb2wgb25jZSAuc2V0dXAgaGFzIHJ1biBhbmQgdGhlXG5uZXQvZHNhL2RzYS5jOjEyMzE6XHQgKiBkcml2ZXIgaXMgcmVhZHkgdG8gYWNjZXB0IGNhbGxzIHRvIC5jaGFuZ2VfdGFnX3Byb3RvY29sLiBJZlxubmV0L2RzYS9kc2EuYy0xMjMyLVx0ICogdGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjdXN0b20gcHJvdG9jb2wgYXQgdGhhdFxuLS1cbm5ldC9kc2Evc3dpdGNoLmM9ODczPXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9jaGFuZ2VfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbi0tXG5uZXQvZHNhL3N3aXRjaC5jLTg3OS1cbm5ldC9kc2Evc3dpdGNoLmM6ODgwOlx0aWYgKCFkcy1cdTAwM2VvcHMtXHUwMDNlY2hhbmdlX3RhZ19wcm90b2NvbClcbm5ldC9kc2Evc3dpdGNoLmMtODgxLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2RzYS9zd2l0Y2guYy04ODQtXG5uZXQvZHNhL3N3aXRjaC5jOjg4NTpcdGVyciA9IGRzLVx1MDAzZW9wcy1cdTAwM2VjaGFuZ2VfdGFnX3Byb3RvY29sKGRzLCB0YWdfb3BzLVx1MDAzZXByb3RvKTtcbm5ldC9kc2Evc3dpdGNoLmMtODg2LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIGBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG9gIENhbGxlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG9gLiBUaGUga2V5IHF1ZXN0aW9uIGlzLCAqd2hlcmUqIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgaW52b2tlZD8gSXMgdGhpcyBzb21ldGhpbmcgdHJpZ2dlcmVkIGJ5IGEgdXNlciBzcGFjZSBpbnRlcmFjdGlvbiwgbGlrZSBhIHN5c2ZzIGVudHJ5LCBhIG5ldGxpbmsgbWVzc2FnZSwgb3IgbWF5YmUgZXZlbiBzb21ldGhpbmcgbW9yZSBkZXYtb3JpZW50ZWQgbGlrZSBkZWJ1Z2ZzPyBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjYWxsIGdyYXBoLiBOZWVkIHRvIGZpbmQgb3V0IGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjYWxsIGBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG9gLiBUaGlzJiMzOTtsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIHR5cGljYWwgdXNhZ2Ugc2NlbmFyaW8gYW5kIHBvdGVudGlhbGx5IGV4cG9zZSBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgb3Igc3VidGxlIGRlcGVuZGVuY2llcyBpbiB0aGUgRFNBIHN1YnN5c3RlbS4gSG9wZWZ1bGx5LCB0aGUgY2FsbCBzdGFjayB3aWxsIGJlIGVhc3kgdG8gdHJhY2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RzYV9zd2l0Y2hfY2hhbmdlX3RhZ19wcm90byYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kc2EmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2RzYS9zd2l0Y2guYz04NTM9c3RhdGljIGludCBkc2Ffc3dpdGNoX2hvc3Rfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuLS1cbm5ldC9kc2Evc3dpdGNoLmMtODcyLVxubmV0L2RzYS9zd2l0Y2guYzo4NzM6c3RhdGljIGludCBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxubmV0L2RzYS9zd2l0Y2guYy04NzQtXHRcdFx0XHQgICAgICAgc3RydWN0IGRzYV9ub3RpZmllcl90YWdfcHJvdG9faW5mbyAqaW5mbylcbi0tXG5uZXQvZHNhL3N3aXRjaC5jPTk3ND1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5uZXQvZHNhL3N3aXRjaC5jLTEwNDQtXHRjYXNlIERTQV9OT1RJRklFUl9UQUdfUFJPVE86XG5uZXQvZHNhL3N3aXRjaC5jOjEwNDU6XHRcdGVyciA9IGRzYV9zd2l0Y2hfY2hhbmdlX3RhZ19wcm90byhkcywgaW5mbyk7XG5uZXQvZHNhL3N3aXRjaC5jLTEwNDYtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgwMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBEU0EgVGFnIFByb3RvY29sIE5vdGlmaWVyKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBgRFNBX05PVElGSUVSX1RBR19QUk9UT2AgZXZlbnQuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IGEgZmV3IGRpZmZlcmVudCBzb3VyY2VzIOKAkyBzcGVjaWZpY2FsbHksIGBkc2FfcG9ydF9jaGFuZ2VfdGFnX3Byb3RvYCwgYGRzYV9jb25kdWl0X3NldHVwYCwgb3IgcG90ZW50aWFsbHksIHNvbWV0aGluZyBoYXBwZW5pbmcgdGhyb3VnaCBzeXNmcy4gTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGlnIGRpcmVjdGx5IGludG8gdGhlIGBEU0FfTk9USUZJRVJfVEFHX1BST1RPYCBkZWZpbml0aW9uIGl0c2VsZi4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYW5zd2VycyBhcmUgZ29pbmcgdG8gbGllLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IGNhdXNlIHRoYXQgbm90aWZpZXIgdG8gZmlyZSBhbmQgd2hhdCBkYXRhIGl0JiMzOTtzIHBhc3NpbmcgYWxvbmcuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEU0FfTk9USUZJRVJfVEFHX1BST1RPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2RzYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL2RzYS5jPTk0OD1zdGF0aWMgaW50IGRzYV90cmVlX2JpbmRfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcbi0tXG5uZXQvZHNhL2RzYS5jLTk2MC1cdGluZm8udGFnX29wcyA9IHRhZ19vcHM7XG5uZXQvZHNhL2RzYS5jOjk2MTpcdGVyciA9IGRzYV90cmVlX25vdGlmeShkc3QsIERTQV9OT1RJRklFUl9UQUdfUFJPVE9fQ09OTkVDVCwgXHUwMDI2aW5mbyk7XG5uZXQvZHNhL2RzYS5jLTk2Mi1cdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUClcbi0tXG5uZXQvZHNhL2RzYS5jLTk2Ni1cdGluZm8udGFnX29wcyA9IG9sZF90YWdfb3BzO1xubmV0L2RzYS9kc2EuYzo5Njc6XHRkc2FfdHJlZV9ub3RpZnkoZHN0LCBEU0FfTk9USUZJRVJfVEFHX1BST1RPX0RJU0NPTk5FQ1QsIFx1MDAyNmluZm8pO1xubmV0L2RzYS9kc2EuYy05NjgtXG4tLVxubmV0L2RzYS9kc2EuYy05NzItXHRpbmZvLnRhZ19vcHMgPSB0YWdfb3BzO1xubmV0L2RzYS9kc2EuYzo5NzM6XHRkc2FfdHJlZV9ub3RpZnkoZHN0LCBEU0FfTk9USUZJRVJfVEFHX1BST1RPX0RJU0NPTk5FQ1QsIFx1MDAyNmluZm8pO1xubmV0L2RzYS9kc2EuYy05NzQtXHRkc3QtXHUwMDNldGFnX29wcyA9IG9sZF90YWdfb3BzO1xuLS1cbm5ldC9kc2EvZHNhLmM9OTgzPWludCBkc2FfdHJlZV9jaGFuZ2VfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcbi0tXG5uZXQvZHNhL2RzYS5jLTEwMDgtXHRpbmZvLnRhZ19vcHMgPSB0YWdfb3BzO1xubmV0L2RzYS9kc2EuYzoxMDA5Olx0ZXJyID0gZHNhX3RyZWVfbm90aWZ5KGRzdCwgRFNBX05PVElGSUVSX1RBR19QUk9UTywgXHUwMDI2aW5mbyk7XG5uZXQvZHNhL2RzYS5jLTEwMTAtXHRpZiAoZXJyKVxuLS1cbm5ldC9kc2EvZHNhLmMtMTAyMi1cdGluZm8udGFnX29wcyA9IG9sZF90YWdfb3BzO1xubmV0L2RzYS9kc2EuYzoxMDIzOlx0ZHNhX3RyZWVfbm90aWZ5KGRzdCwgRFNBX05PVElGSUVSX1RBR19QUk9UTywgXHUwMDI2aW5mbyk7XG5uZXQvZHNhL2RzYS5jLTEwMjQtb3V0X3VubG9jazpcbi0tXG5uZXQvZHNhL3N3aXRjaC5jPTk3ND1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5uZXQvZHNhL3N3aXRjaC5jLTEwNDMtXHRcdGJyZWFrO1xubmV0L2RzYS9zd2l0Y2guYzoxMDQ0Olx0Y2FzZSBEU0FfTk9USUZJRVJfVEFHX1BST1RPOlxubmV0L2RzYS9zd2l0Y2guYy0xMDQ1LVx0XHRlcnIgPSBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG8oZHMsIGluZm8pO1xubmV0L2RzYS9zd2l0Y2guYy0xMDQ2LVx0XHRicmVhaztcbm5ldC9kc2Evc3dpdGNoLmM6MTA0NzpcdGNhc2UgRFNBX05PVElGSUVSX1RBR19QUk9UT19DT05ORUNUOlxubmV0L2RzYS9zd2l0Y2guYy0xMDQ4LVx0XHRlcnIgPSBkc2Ffc3dpdGNoX2Nvbm5lY3RfdGFnX3Byb3RvKGRzLCBpbmZvKTtcbm5ldC9kc2Evc3dpdGNoLmMtMTA0OS1cdFx0YnJlYWs7XG5uZXQvZHNhL3N3aXRjaC5jOjEwNTA6XHRjYXNlIERTQV9OT1RJRklFUl9UQUdfUFJPVE9fRElTQ09OTkVDVDpcbm5ldC9kc2Evc3dpdGNoLmMtMTA1MS1cdFx0ZXJyID0gZHNhX3N3aXRjaF9kaXNjb25uZWN0X3RhZ19wcm90byhkcywgaW5mbyk7XG4tLVxubmV0L2RzYS9zd2l0Y2guaD0xMD1lbnVtIHtcbi0tXG5uZXQvZHNhL3N3aXRjaC5oLTMxLVx0RFNBX05PVElGSUVSX01UVSxcbm5ldC9kc2Evc3dpdGNoLmg6MzI6XHREU0FfTk9USUZJRVJfVEFHX1BST1RPLFxubmV0L2RzYS9zd2l0Y2guaDozMzpcdERTQV9OT1RJRklFUl9UQUdfUFJPVE9fQ09OTkVDVCxcbm5ldC9kc2Evc3dpdGNoLmg6MzQ6XHREU0FfTk9USUZJRVJfVEFHX1BST1RPX0RJU0NPTk5FQ1QsXG5uZXQvZHNhL3N3aXRjaC5oLTM1LVx0RFNBX05PVElGSUVSX1RBR184MDIxUV9WTEFOX0FERCxcbi0tXG5uZXQvZHNhL3N3aXRjaC5oPTkyPXN0cnVjdCBkc2Ffbm90aWZpZXJfbXR1X2luZm8ge1xuLS1cbm5ldC9kc2Evc3dpdGNoLmgtOTYtXG5uZXQvZHNhL3N3aXRjaC5oOjk3Oi8qIERTQV9OT1RJRklFUl9UQUdfUFJPVE9fKiAqL1xubmV0L2RzYS9zd2l0Y2guaC05OC1zdHJ1Y3QgZHNhX25vdGlmaWVyX3RhZ19wcm90b19pbmZvIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMDUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIENhbGwgU2l0ZXMgb2YgYGRzYV90cmVlX2NoYW5nZV90YWdfcHJvdG9gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYGRzYV90cmVlX2NoYW5nZV90YWdfcHJvdG9gLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCwgb2YgY291cnNlLCBpcyB0byBmaWd1cmUgb3V0ICp3aGVyZSogaXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgdXNlZC4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzLiBXaGF0IG1vZHVsZXMgb3IgZnVuY3Rpb25zIGFyZSBjYWxsaW5nIGludG8gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uPyAgSXMgaXQgYSBjb3JlIGxpYnJhcnkgY2FsbCwgYSB1c2VyLXNwYWNlIHV0aWxpdHksIHNvbWV0aGluZyBpbiB0aGUgbWlkZGxlPyBUaGlzIHdpbGwgZ2l2ZSBtZSBpbW1lZGlhdGUgaW5zaWdodCBpbnRvIHdoYXQgZGVwZW5kcyBvbiBpdCBhbmQgaG93IGNoYW5naW5nIGl0IG1pZ2h0IGJyZWFrIHRoaW5ncy4gSSBuZWVkIHRvIGZpbmQgdGhlIGNhbGxpbmcgY29udGV4dCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCwgcG90ZW50aWFsbHksIGl0cyBsaW1pdGF0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RzYV90cmVlX2NoYW5nZV90YWdfcHJvdG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZHNhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kc2EvY29uZHVpdC5jPTM1MD1zdGF0aWMgc3NpemVfdCB0YWdnaW5nX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbm5ldC9kc2EvY29uZHVpdC5jLTM4MC1cbm5ldC9kc2EvY29uZHVpdC5jOjM4MTpcdGVyciA9IGRzYV90cmVlX2NoYW5nZV90YWdfcHJvdG8oY3B1X2RwLVx1MDAzZWRzLVx1MDAzZWRzdCwgbmV3X3RhZ19vcHMsXG5uZXQvZHNhL2NvbmR1aXQuYy0zODItXHRcdFx0XHRcdG9sZF90YWdfb3BzKTtcbi0tXG5uZXQvZHNhL2RzYS5jPTk0OD1zdGF0aWMgaW50IGRzYV90cmVlX2JpbmRfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcbi0tXG5uZXQvZHNhL2RzYS5jLTk4Mi0gKi9cbm5ldC9kc2EvZHNhLmM6OTgzOmludCBkc2FfdHJlZV9jaGFuZ2VfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcbm5ldC9kc2EvZHNhLmMtOTg0LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyAqdGFnX29wcyxcbi0tXG5uZXQvZHNhL2RzYS5oPTI0PXN0cnVjdCBuZXRfZGV2aWNlICpkc2FfdHJlZV9maW5kX2ZpcnN0X2NvbmR1aXQoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KTtcbm5ldC9kc2EvZHNhLmg6MjU6aW50IGRzYV90cmVlX2NoYW5nZV90YWdfcHJvdG8oc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0LFxubmV0L2RzYS9kc2EuaC0yNi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgKnRhZ19vcHMsXG4tLVxubmV0L2RzYS9zd2l0Y2guYz04NzM9c3RhdGljIGludCBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuLS1cbm5ldC9kc2Evc3dpdGNoLmMtOTAwLVxubmV0L2RzYS9zd2l0Y2guYzo5MDE6XHRcdC8qIHJ0bmxfbXV0ZXggaXMgaGVsZCBpbiBkc2FfdHJlZV9jaGFuZ2VfdGFnX3Byb3RvICovXG5uZXQvZHNhL3N3aXRjaC5jLTkwMi1cdFx0ZHNhX3VzZXJfY2hhbmdlX210dSh1c2VyLCB1c2VyLVx1MDAzZW10dSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODA3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIERTQSBJbnF1aXJ5KioKCkhtbSwgd2FpdCBhIG1pbnV0ZS4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGFueXRoaW5nIGludm9sdmluZyBEU0EsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBtYWtlIHN1cmUgSSYjMzk7bSBncm91bmRlZCBpbiB0aGUgZXNzZW50aWFscy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7RG8gd2UgZXZlbiBoYXZlIGEgdmlydHVhbCBvciBtb2NrIERTQSBzd2l0Y2ggcmVwcmVzZW50YXRpb24gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgaXRzZWxmPyYjMzQ7IEkgbmVlZCB0byB2ZXJpZnkgd2hhdCB0aGUga2VybmVsIG9mZmVycyBhcyBhIGZvdW5kYXRpb24uIEl0JiMzOTtzIHRvbyBlYXN5IHRvIGFzc3VtZSwgYW5kIEkmIzM5O3ZlIGJlZW4gY2F1Z2h0IG91dCBieSBhc3N1bXB0aW9ucyBiZWZvcmUuCgpTbywgbGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIG9idmlvdXMgcGxhY2UgdG8gbG9vayBmb3IgRFNBIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMgaXMgdW5kZXIgYGRyaXZlcnMvbmV0L2RzYWAuIFRoYXQgZGlyZWN0b3J5IGlzIHRoZSBsb2dpY2FsIGxvY2F0aW9uIGZvciBhbGwgdGhpbmdzIERTQS4gSeKAmWxsIHN0YXJ0IHRoZXJlLCBhbmQgaG9wZSBJIGNhbiBxdWlja2x5IGZpbmQgYW55IHNpZ24gb2YgdmlydHVhbCBvciBtb2NrIHN3aXRjaCBkcml2ZXJzLiBUaGlzIGluaXRpYWwgc2VhcmNoIHNob3VsZCBxdWlja2x5IGNsZWFyIHRoZSBncm91bmQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGVjayBiZWZvcmUgY29uc2lkZXJpbmcgYW55IGtpbmQgb2Ygc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2JjbV9zZjIuYyYjMzQ7LAogICAgJiMzNDtiY21fc2YyLmgmIzM0OywKICAgICYjMzQ7YmNtX3NmMl9jZnAuYyYjMzQ7LAogICAgJiMzNDtiY21fc2YyX3JlZ3MuaCYjMzQ7LAogICAgJiMzNDtkc2FfbG9vcC5jJiMzNDssCiAgICAmIzM0O2tzODk5NS5jJiMzNDssCiAgICAmIzM0O2xhbjkzMDMtY29yZS5jJiMzNDssCiAgICAmIzM0O2xhbjkzMDMuaCYjMzQ7LAogICAgJiMzNDtsYW45MzAzX2kyYy5jJiMzNDssCiAgICAmIzM0O2xhbjkzMDNfbWRpby5jJiMzNDssCiAgICAmIzM0O210NzUzMC1tZGlvLmMmIzM0OywKICAgICYjMzQ7bXQ3NTMwLW1taW8uYyYjMzQ7LAogICAgJiMzNDttdDc1MzAuYyYjMzQ7LAogICAgJiMzNDttdDc1MzAuaCYjMzQ7LAogICAgJiMzNDttdDc2MjguYyYjMzQ7LAogICAgJiMzNDttdjg4ZTYwNjAuYyYjMzQ7LAogICAgJiMzNDttdjg4ZTYwNjAuaCYjMzQ7LAogICAgJiMzNDtyem4xX2E1cHN3LmMmIzM0OywKICAgICYjMzQ7cnpuMV9hNXBzdy5oJiMzNDssCiAgICAmIzM0O3ZpdGVzc2UtdnNjNzN4eC1jb3JlLmMmIzM0OywKICAgICYjMzQ7dml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLmMmIzM0OywKICAgICYjMzQ7dml0ZXNzZS12c2M3M3h4LXNwaS5jJiMzNDssCiAgICAmIzM0O3ZpdGVzc2UtdnNjNzN4eC5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0O2I1MyYjMzQ7LAogICAgJiMzNDtoaXJzY2htYW5uJiMzNDssCiAgICAmIzM0O2xhbnRpcSYjMzQ7LAogICAgJiMzNDttaWNyb2NoaXAmIzM0OywKICAgICYjMzQ7bW90b3Jjb21tJiMzNDssCiAgICAmIzM0O212ODhlNnh4eCYjMzQ7LAogICAgJiMzNDtteGw4NjJ4eCYjMzQ7LAogICAgJiMzNDtuZXRjJiMzNDssCiAgICAmIzM0O29jZWxvdCYjMzQ7LAogICAgJiMzNDtxY2EmIzM0OywKICAgICYjMzQ7cmVhbHRlayYjMzQ7LAogICAgJiMzNDtzamExMTA1JiMzNDssCiAgICAmIzM0O3hyczcwMHgmIzM0OwogIF0KfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ1OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgZHNhX2xvb3AuY2AqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gYGRzYV9sb29wLmNgLiBUaGF0IGZpbGUgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgcGFydGljdWxhciBhcmVhLCBzbyBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvZiBpdHMgbG9naWMgYW5kIGltcGxlbWVudGF0aW9uLiBSaWdodCBub3csICp0aGF0KiBpcyB0aGUgY29kZSBJIG5lZWQgdG8gYW5hbHl6ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHNhX2xvb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlPTM9YmNtLXNmMi1vYmpzXHRcdFx0Oj0gYmNtX3NmMi5vIGJjbV9zZjJfY2ZwLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfRFNBX0xPT1ApXHQmIzQzOz0gZHNhX2xvb3Aub1xuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlLTUtb2JqLSQoQ09ORklHX05FVF9EU0FfS1M4OTk1KSBcdCYjNDM7PSBrczg5OTUub1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjU6c3RydWN0IGRzYV9sb29wX3ZsYW4ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjYtXHR1MTYgbWVtYmVycztcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yOS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMwOnN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEtXHRjaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1OmVudW0gZHNhX2xvb3BfbWliX2NvdW50ZXJzIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2LVx0RFNBX0xPT1BfUEhZX1JFQURfT0ssXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzpzdHJ1Y3QgZHNhX2xvb3BfcG9ydCB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDpcdHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgbWliW19fRFNBX0xPT1BfQ05UX01BWF07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NS1cdHUxNiBwdmlkO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk6c3RydWN0IGRzYV9sb29wX3ByaXYge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAtXHRzdHJ1Y3QgbWlpX2J1c1x0KmJ1cztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxLVx0dW5zaWduZWQgaW50XHRwb3J0X2Jhc2U7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MjpcdHN0cnVjdCBkc2FfbG9vcF92bGFuIHZsYW5zW1ZMQU5fTl9WSURdO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTMtXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTQ6XHRzdHJ1Y3QgZHNhX2xvb3BfcG9ydCBwb3J0c1tEU0FfTUFYX1BPUlRTXTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTU1LX07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU3OnN0cnVjdCBkc2FfbG9vcF9wZGF0YSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01OC1cdC8qIE11c3QgYmUgZmlyc3QsIHN1Y2ggdGhhdCBkc2FfcmVnaXN0ZXJfc3dpdGNoKCkgY2FuIGFjY2VzcyB0aGlzXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo2NzpzdGF0aWMgc3RydWN0IGRzYV9sb29wX21pYl9lbnRyeSBkc2FfbG9vcF9taWJzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy02OC1cdFtEU0FfTE9PUF9QSFlfUkVBRF9PS11cdD0geyBcJiMzNDtwaHlfcmVhZF9va1wmIzM0OywgfSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz03NT1zdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlICpzd2l0Y2hfbWRpb2RldjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Nzc6ZW51bSBkc2FfbG9vcF9kZXZsaW5rX3Jlc291cmNlX2lkIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc4LVx0RFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9OT05FLCAgLyogREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QICovXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODEtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4MjpzdGF0aWMgdTY0IGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCh2b2lkICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODMte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODQ6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODUtXHR1bnNpZ25lZCBpbnQgaSwgY291bnQgPSAwO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODY6XHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy04Ny1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy05Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjk3OnN0YXRpYyBpbnQgZHNhX2xvb3Bfc2V0dXBfZGV2bGlua19yZXNvdXJjZXMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTgte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTktXHRzdHJ1Y3QgZGV2bGlua19yZXNvdXJjZV9zaXplX3BhcmFtcyBzaXplX3BhcmFtcztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEwMDpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMDEtXHRpbnQgZXJyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNS1cdFx0XHRcdFx0ICAgICAgRFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9WVFUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMTY6XHRcdFx0XHRcdCAgICAgIGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCwgcHMpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTE3LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTEyNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMjYtXHRcdFx0XHRcdFx0ICAgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTMzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTM0OnN0YXRpYyBpbnQgZHNhX2xvb3Bfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTM1LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNjpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzctXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkcy1cdTAwM2VudW1fcG9ydHM7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQwOlx0XHRtZW1jcHkocHMtXHUwMDNlcG9ydHNbaV0ubWliLCBkc2FfbG9vcF9taWJzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQxOlx0XHQgICAgICAgc2l6ZW9mKGRzYV9sb29wX21pYnMpKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Mi1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDU6XHRyZXR1cm4gZHNhX2xvb3Bfc2V0dXBfZGV2bGlua19yZXNvdXJjZXMoZHMpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTQ2LX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ny1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE0ODpzdGF0aWMgdm9pZCBkc2FfbG9vcF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE1Mi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE1MzpzdGF0aWMgaW50IGRzYV9sb29wX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTU0LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjAtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2Mi1cdFx0XHRcdCB1MzIgc3RyaW5nc2V0LCB1aW50OF90ICpkYXRhKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYzLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE2NDpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjUtXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNzMtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzQ6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3NS1cdFx0XHRcdCAgICAgICB1aW50NjRfdCAqZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3Ni17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzc6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc4LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTgzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTg0OnN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3JlYWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE4NS17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxODY6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg3LVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBzLVx1MDAzZWJ1cztcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xOTgtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxOTk6c3RhdGljIGludCBkc2FfbG9vcF9waHlfd3JpdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMC1cdFx0XHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDEte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjAyOlx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMy1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjE1OnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE2LVx0XHRcdFx0ICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI1LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMjctXHRcdFx0XHQgICAgICAgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzMi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIzMzpzdGF0aWMgdm9pZCBkc2FfbG9vcF9wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzNC1cdFx0XHRcdFx0dTggc3RhdGUpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjM5LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjQwOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjQxLVx0XHRcdFx0XHRib29sIHZsYW5fZmlsdGVyaW5nLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0OS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1MDpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1MS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF92bGFuICp2bGFuLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1NS1cdGJvb2wgcHZpZCA9IHZsYW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1NjpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNTctXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHMtXHUwMDNlYnVzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjU4Olx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU5LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4Mi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4MzpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4NC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF92bGFuICp2bGFuKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4Ni1cdGJvb2wgdW50YWdnZWQgPSB2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mjg3Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4OC1cdHUxNiBwdmlkID0gcHMtXHUwMDNlcG9ydHNbcG9ydF0ucHZpZDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI4OS1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyOTA6XHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yOTEtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzExOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTItXHRcdFx0XHQgICAgaW50IG5ld19tdHUpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTMte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzE0Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzE1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyMC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMyMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzIyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjUtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjY6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHNhLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyNy1cdFx0XHRcdCAgICAgIHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMzMy1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNDpzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGRzYV9sb29wX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNTpcdC5nZXRfdGFnX3Byb3RvY29sXHQ9IGRzYV9sb29wX2dldF9wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNjpcdC5zZXR1cFx0XHRcdD0gZHNhX2xvb3Bfc2V0dXAsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzc6XHQudGVhcmRvd25cdFx0PSBkc2FfbG9vcF90ZWFyZG93bixcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzODpcdC5nZXRfc3RyaW5nc1x0XHQ9IGRzYV9sb29wX2dldF9zdHJpbmdzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM5Olx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQwOlx0LmdldF9zc2V0X2NvdW50XHRcdD0gZHNhX2xvb3BfZ2V0X3NzZXRfY291bnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDE6XHQuZ2V0X2V0aHRvb2xfcGh5X3N0YXRzXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQyOlx0LnBoeV9yZWFkXHRcdD0gZHNhX2xvb3BfcGh5X3JlYWQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDM6XHQucGh5X3dyaXRlXHRcdD0gZHNhX2xvb3BfcGh5X3dyaXRlLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ0Olx0LnBvcnRfYnJpZGdlX2pvaW5cdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbixcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NTpcdC5wb3J0X2JyaWRnZV9sZWF2ZVx0PSBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NjpcdC5wb3J0X3N0cF9zdGF0ZV9zZXRcdD0gZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ3Olx0LnBvcnRfdmxhbl9maWx0ZXJpbmdcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0ODpcdC5wb3J0X3ZsYW5fYWRkXHRcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2FkZCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0OTpcdC5wb3J0X3ZsYW5fZGVsXHRcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2RlbCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MDpcdC5wb3J0X2NoYW5nZV9tdHVcdD0gZHNhX2xvb3BfcG9ydF9jaGFuZ2VfbXR1LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzUxOlx0LnBvcnRfbWF4X210dVx0XHQ9IGRzYV9sb29wX3BvcnRfbWF4X210dSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MjpcdC5waHlsaW5rX2dldF9jYXBzXHQ9IGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTMtfTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM1NC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NTpzdGF0aWMgaW50IGRzYV9sb29wX2Rydl9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTYte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU3Olx0c3RydWN0IGRzYV9sb29wX3BkYXRhICpwZGF0YSA9IG1kaW9kZXYtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTg6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTktXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzgyLVx0ZHMtXHUwMDNlZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODM6XHRkcy1cdTAwM2VvcHMgPSBcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODQtXHRkcy1cdTAwM2Vwcml2ID0gcHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk4LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OS1cdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MDA6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MDEtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDEwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDExOnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyMi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyNC1cdC5tZGlvZHJ2LmRyaXZlclx0PSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDI2LVx0fSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyNzpcdC5wcm9iZVx0PSBkc2FfbG9vcF9kcnZfcHJvYmUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjg6XHQucmVtb3ZlXHQ9IGRzYV9sb29wX2Rydl9yZW1vdmUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjk6XHQuc2h1dGRvd24gPSBkc2FfbG9vcF9kcnZfc2h1dGRvd24sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzAtfTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzMS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzMjpzdGF0aWMgaW50IGRzYV9sb29wX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzMtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzNC17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzU6XHRyZXR1cm4gZHJ2ID09IFx1MDAyNmRzYV9sb29wX2Rydi5tZGlvZHJ2LmRyaXZlcjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzNi19XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzctXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mzg6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00Mzkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0NS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0NjpzdGF0aWMgaW50IF9faW5pdCBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYodm9pZClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDg6XHRzdGF0aWMgc3RydWN0IGRzYV9sb29wX3BkYXRhIGRzYV9sb29wX3BkYXRhID0ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ5LVx0XHQuY2QgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDcwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDcxOlx0c3dpdGNoX21kaW9kZXYtXHUwMDNlYnVzX21hdGNoID0gZHNhX2xvb3BfYnVzX21hdGNoO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDcyOlx0c3dpdGNoX21kaW9kZXYtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGEgPSBcdTAwMjZkc2FfbG9vcF9wZGF0YTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3My1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODEtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODI6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDgzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODc6XHRyZXQgPSBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYoKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk0Olx0cmV0ID0gbWRpb19kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5NS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NjpcdFx0ZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTctXHRcdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAyLX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwMzptb2R1bGVfaW5pdChkc2FfbG9vcF9pbml0KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNTpzdGF0aWMgdm9pZCBfX2V4aXQgZHNhX2xvb3BfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTA2LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcdG1kaW9fZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwODpcdGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3RlcigpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTA5LVx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MTEtfVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTEyOm1vZHVsZV9leGl0KGRzYV9sb29wX2V4aXQpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjE0OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIERTQSBUYWcgUHJvdG9jb2wgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYGRzYV9sb29wLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGl0IGhhbmRsZXMgdGFnIHByb3RvY29scy4gVGhlIGNvZGUgdXNlcyBgZHNhX2xvb3BfZ2V0X3Byb3RvY29sYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCByZXR1cm5zIHNvbWV0aGluZyBsaWtlIGBEU0FfVEFHX1BST1RPX0xPT1BgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgZG9lcyBgZHNhX2xvb3BgIGltcGxlbWVudCBhIGBjaGFuZ2VfdGFnX3Byb3RvY29sYCBmdW5jdGlvbj8gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBoZXJlLCBiZWNhdXNlIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgbW9kdWxlIGNhbiBkeW5hbWljYWxseSBhZGp1c3QgaXRzIHRhZ2dpbmcgbWV0aG9kLgoKU28sIEkgZGl2ZSBiYWNrIGludG8gYGRzYV9sb29wLmNgIHRvIGV4YW1pbmUgdGhlIGBkc2FfbG9vcF9kcml2ZXJgIHN0cnVjdHVyZS4gSSYjMzk7bSBjaGVja2luZyBzcGVjaWZpY2FsbHkgZm9yIHRoZSBwcmVzZW5jZSBvZiBgLmNoYW5nZV90YWdfcHJvdG9jb2xgLiBBaCwgcmlnaHQsIG5vLCBpdCYjMzk7cyBub3QgdGhlcmUhIEl0IHNlZW1zIGBkc2FfbG9vcGAgZG9lc24mIzM5O3QgcHJvdmlkZSBpdHMgb3duIGZ1bmN0aW9uIHRvIGNoYW5nZSB0aGUgdGFnIHByb3RvY29sLgoKTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gYnJvYWRlbiB0aGUgc2NvcGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIG90aGVyIERTQSBzd2l0Y2ggZHJpdmVycyAqZG8qIGltcGxlbWVudCBgY2hhbmdlX3RhZ19wcm90b2NvbGAuIFRpbWUgdG8gY29uc3VsdCB0aGUgYnJvYWRlciBjb2RlYmFzZSBhbmQgc2VlIHdoZXJlIHRoaXMgY2FwYWJpbGl0eSBhY3R1YWxseSByZXNpZGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5jaGFuZ2VfdGFnX3Byb3RvY29sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTcxODc9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdjg4ZTZ4eHhfc3dpdGNoX29wcyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTcxODgtXHQuZ2V0X3RhZ19wcm90b2NvbFx0PSBtdjg4ZTZ4eHhfZ2V0X3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjcxODk6XHQuY2hhbmdlX3RhZ19wcm90b2NvbFx0PSBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTcxOTAtXHQuc2V0dXBcdFx0XHQ9IG12ODhlNnh4eF9zZXR1cCxcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM9MjMwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGZlbGl4X3N3aXRjaF9vcHMgPSB7XG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwNy1cdC5nZXRfdGFnX3Byb3RvY29sXHRcdD0gZmVsaXhfZ2V0X3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYzoyMzA4Olx0LmNoYW5nZV90YWdfcHJvdG9jb2xcdFx0PSBmZWxpeF9jaGFuZ2VfdGFnX3Byb3RvY29sLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzMDktXHQuY29ubmVjdF90YWdfcHJvdG9jb2xcdFx0PSBmZWxpeF9jb25uZWN0X3RhZ19wcm90b2NvbCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jPTMyODU9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBydGw4MzY1bWJfc3dpdGNoX29wcyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMtMzI4Ni1cdC5nZXRfdGFnX3Byb3RvY29sID0gcnRsODM2NW1iX2dldF90YWdfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jOjMyODc6XHQuY2hhbmdlX3RhZ19wcm90b2NvbCA9IHJ0bDgzNjVtYl9jaGFuZ2VfdGFnX3Byb3RvY29sLFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0zMjg4LVx0LnNldHVwID0gcnRsODM2NW1iX3NldHVwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzA5MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRFNBIFRhZyBQcm90b2NvbHMgYW5kIHRoZSBNVDc2MjggRXRoZXJuZXQgU3dpdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2UgRFNBIHRhZyBwcm90b2NvbHMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlOiBgbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2xgLCBgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbGAsIGFuZCBgcnRsODM2NW1iX2NoYW5nZV90YWdfcHJvdG9jb2xgLiBJJiMzOTttIGNoZWNraW5nIHRoZWlyIHN1cHBvcnRlZCBwcm90b2NvbHMuIGBtdjg4ZTZ4eHhgIGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHN0aWNraW5nIHdpdGggRURTQS9EU0EuIFRoZW4gYGZlbGl4YCBvZmZlcnMgb2NlbG90IHZhcmlhbnRzLiBgcnRsODM2NW1iYC4uLiB0aGF0JiMzOTtzIFJUTC1zcGVjaWZpYy4KCk5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgaW52ZXN0aWdhdGUgYGRyaXZlcnMvbmV0L2RzYS9tdDc2MjguY2AuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgd2hhdCB0aGUgYG10NzYyOGAgZGV2aWNlIGlzIGFsbCBhYm91dC4gQWgsIGl0JiMzOTtzIHRoZSBidWlsdC1pbiBFdGhlcm5ldCBzd2l0Y2ggd2l0aGluIHRoZSBNZWRpYVRlayBNVDc2MjggU29DLCBhIE1JUFMgU29DLiBUaGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIHdoYXQgSSYjMzk7ZCBleHBlY3Q6IGBIQVNfSU9NRU1gIGFuZCBlaXRoZXIgYFNPQ19NVDc2MjBgIG9yIGBDT01QSUxFX1RFU1RgLiBJdCYjMzk7cyBhIERldmljZSBUcmVlIHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IG9uIHRoZSBNVDc2MjggU29DLgoKSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBgbXQ3NjI4X2RyaXZlcmAsIHBhcnRpY3VsYXJseSB0aGUgcHJvYmUgZnVuY3Rpb24gYG10NzYyOF9wcm9iZWAuIFRoZSBkcml2ZXIgdXNlcyB0aGUgYCYjMzQ7bWVkaWF0ZWssbXQ3NjI4LWVzdyYjMzQ7YCBjb21wYXRpYmxlIHN0cmluZy4gT2theSwgYW5kIGBuZXQvZHNhL3RhZ19tdDc2MjguY2AgaXMgdGhlIHRhZyBkcml2ZXIgZm9yIGBEU0FfVEFHX1BST1RPX01UNzYyOGAuIFRoZSBwcm90b2NvbCBpcyB1c2VkIGV4Y2x1c2l2ZWx5IGJ5IGBtdDc2MjguY2AgdmlhIHRoZSBgbXQ3NjI4X2dldF90YWdfcHJvdG8oKWAgZnVuY3Rpb24uCgpOb3csIEkmIzM5O20gZ2V0dGluZyBzdXNwaWNpb3VzLiBJcyBgRFNBX1RBR19QUk9UT19NVDc2MjhgIG9ubHkgdXNlZCAqaGVyZSo/IEkgbmVlZCBhIG11Y2ggYnJvYWRlciB2aWV3LiBJJiMzOTttIGdvaW5nIHRvIHNlYXJjaCB0aGUgZW50aXJlIGtlcm5lbCBjb2RlYmFzZS4gVGltZSB0byBgZ3JlcGAgZm9yIGBEU0FfVEFHX1BST1RPX01UNzYyOGAgYW5kIGB0YWdfbXQ3NjI4YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzbiYjMzk7dCByZWZlcmVuY2VkIGVsc2V3aGVyZSwgb3IgdGhhdCBJIGFtIG1pc3Npbmcgc29tZXRoaW5nLiBJIHdhbnQgdG8gc2VlIHRoaXMgd2l0aGluIHRoZSBsYXJnZXIgZnJhbWV3b3JrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoRFNBX1RBR19QUk9UT19NVDc2Mjh8dGFnX210NzYyOCkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7TUFJTlRBSU5FUlM9MTY3OTA9RjpcdGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZmUtc29jLmNcbk1BSU5UQUlORVJTOjE2NzkxOkY6XHRuZXQvZHNhL3RhZ19tdDc2MjguY1xuTUFJTlRBSU5FUlMtMTY3OTItXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jPTU4OD1tdDc2MjhfZ2V0X3RhZ19wcm90byhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtNTg5LXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzo1OTA6XHRyZXR1cm4gRFNBX1RBR19QUk9UT19NVDc2Mjg7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtNTkxLX1cbi0tXG5pbmNsdWRlL25ldC9kc2EuaD0yNj1zdHJ1Y3QgdGNfYWN0aW9uO1xuLS1cbmluY2x1ZGUvbmV0L2RzYS5oLTYyLSNkZWZpbmUgRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFXHRcdDM0XG5pbmNsdWRlL25ldC9kc2EuaDo2MzojZGVmaW5lIERTQV9UQUdfUFJPVE9fTVQ3NjI4X1ZBTFVFXHRcdDM1XG5pbmNsdWRlL25ldC9kc2EuaC02NC1cbmluY2x1ZGUvbmV0L2RzYS5oPTY1PWVudW0gZHNhX3RhZ19wcm90b2NvbCB7XG4tLVxuaW5jbHVkZS9uZXQvZHNhLmgtMTAwLVx0RFNBX1RBR19QUk9UT19LU1o4NDYzXHRcdD0gRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFLFxuaW5jbHVkZS9uZXQvZHNhLmg6MTAxOlx0RFNBX1RBR19QUk9UT19NVDc2MjhcdFx0PSBEU0FfVEFHX1BST1RPX01UNzYyOF9WQUxVRSxcbmluY2x1ZGUvbmV0L2RzYS5oLTEwMi19O1xuLS1cbm5ldC9kc2EvTWFrZWZpbGU9Mjk9b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX0xBTjkzMDMpICYjNDM7PSB0YWdfbGFuOTMwMy5vXG5uZXQvZHNhL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19NVDc2MjgpICYjNDM7PSB0YWdfbXQ3NjI4Lm9cbm5ldC9kc2EvTWFrZWZpbGUtMzEtb2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX01USykgJiM0Mzs9IHRhZ19tdGsub1xuLS1cbm5ldC9kc2EvdGFnX210NzYyOC5jPTEyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIG10NzYyOF90YWdfb3BzID0ge1xubmV0L2RzYS90YWdfbXQ3NjI4LmMtMTIyLVx0Lm5hbWUgPSBNVDc2MjhfVEFHX05BTUUsXG5uZXQvZHNhL3RhZ19tdDc2MjguYzoxMjM6XHQucHJvdG8gPSBEU0FfVEFHX1BST1RPX01UNzYyOCxcbm5ldC9kc2EvdGFnX210NzYyOC5jLTEyNC1cdC54bWl0ID0gbXQ3NjI4X3RhZ194bWl0LFxuLS1cbm5ldC9kc2EvdGFnX210NzYyOC5jPTEyOT1tb2R1bGVfZHNhX3RhZ19kcml2ZXIobXQ3NjI4X3RhZ19vcHMpO1xubmV0L2RzYS90YWdfbXQ3NjI4LmMtMTMwLVxubmV0L2RzYS90YWdfbXQ3NjI4LmM6MTMxOk1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX01UNzYyOCwgTVQ3NjI4X1RBR19OQU1FKTtcbm5ldC9kc2EvdGFnX210NzYyOC5jLTEzMi1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7RFNBIHRhZyBkcml2ZXIgZm9yIE1UNzYyOCBzd2l0Y2hcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODg4NQoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiA4NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLiBUaGUgZGlmZiBzaG93cyBtb2RpZmljYXRpb25zIHRvIGBNQUlOVEFJTkVSU2AsIGEgZHJpdmVyIChgZHJpdmVycy9uZXQvZHNhL210NzYyOC5jYCkgZm9yIHRoZSBNZWRpYVRlayBNVDc2MjggU29DIGVtYmVkZGVkIEV0aGVybmV0IHN3aXRjaCwgYW5kIGl0cyBhc3NvY2lhdGVkIHRhZyBkcml2ZXIgKGBuZXQvZHNhL3RhZ19tdDc2MjguY2ApLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NC4KCk5vdywgSSYjMzk7bSBjaGVja2luZyBhZ2FpbnN0IHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhlIHByb21wdCBjbGVhcmx5IGRlZmluZXMgc2l0dWF0aW9ucyB3aGVyZSBmdXp6aW5nIGlzbiYjMzk7dCB2YWx1YWJsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yOiBub24ta2VybmVsL25vbi1leGVjdXRhYmxlIGNoYW5nZXMsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLgoKQ29uc2lkZXJpbmcgdGhlIE1UNzYyOCBTb0MsIG15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQgaXQmIzM5O3MgbGlrZWx5IGEgY2FzZSBvZiB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gTGV0IG1lIGNvbmZpcm06IHRoZSBkcml2ZXImIzM5O3MgZGVwZW5kZW5jaWVzLCBiYXNlZCBvbiBgbXQ3NjI4LmNgLCBpbmNsdWRlIGBIQVNfSU9NRU1gIGFuZCBlaXRoZXIgYFNPQ19NVDc2MjBgIG9yIGBDT01QSUxFX1RFU1RgLiBJdCBpcyBhbiBgb2ZfZGV2aWNlYCAoRGV2aWNlIFRyZWUpIG1hdGNoaW5nIGBtZWRpYXRlayxtdDc2MjgtZXN3YC4gSG93ZXZlciwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSBzZXR1cHMsIHRoZXJlJiMzOTtzIG5vIERldmljZSBUcmVlIG5vZGUgZm9yIHRoZSBNZWRpYVRlayBNVDc2MjggZW1iZWRkZWQgc3dpdGNoIGhhcmR3YXJlLiBUaGUgTVQ3NjIwL01UNzYyOCBpcyBhIE1JUFMgYXJjaGl0ZWN0dXJlIFNvQy4gRXZlbiB3aXRoIGBDT01QSUxFX1RFU1RgIGVuYWJsZWQgb24geDg2XzY0LCB0aGUgZHJpdmVyICpyZXF1aXJlcyogcGh5c2ljYWwgU29DIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzIGFuZCB0aGUgZGV2aWNlIHRyZWUgbm9kZSB0byBwcm9iZS4gTm8gdmlydHVhbCBkZXZpY2Ugb3IgUUVNVSBlbXVsYXRpb24gZXhpc3RzIGZvciBpdC4KCkZ1cnRoZXJtb3JlLCBgbmV0L2RzYS90YWdfbXQ3NjI4LmNgIGlzIGV4Y2x1c2l2ZWx5IGxpbmtlZCB0byB0aGUgYERTQV9UQUdfUFJPVE9fTVQ3NjI4YCBwcm90b2NvbCwgd2hpY2ggaXMgKm9ubHkqIHVzZWQgd2hlbiBgbXQ3NjI4LmNgIHByb2JlcyBhbmQgYXR0YWNoZXMgaXRzIERTQSBzd2l0Y2guIFNpbmNlIHRoZSBzd2l0Y2ggZHJpdmVyIGNhbiYjMzk7dCBwcm9iZSBvbiBhbWQ2NCBpbiBRRU1VLCB0aGUgYG10NzYyOF90YWdfb3BzYCBmdW5jdGlvbnMgYXJlIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUuIFRoZXkgd2lsbCBuZXZlciBiZSBpbnN0YW50aWF0ZWQgb3IgZXhlY3V0ZWQuCgpUaGVyZWZvcmUsICphbGwqIHRoZSBtb2RpZmllZCBjb2RlIGZhbGxzIGludG8gdGhlICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgY2F0ZWdvcnkgYW5kIHRoZSBub24tZXhlY3V0YWJsZSBkb2N1bWVudGF0aW9uIGZpbGUgYE1BSU5UQUlORVJTYC4gSXQmIzM5O3MgZWl0aGVyIGEgbm9uLWV4ZWN1dGFibGUgbWV0YWRhdGEgZmlsZSBvciBjb2RlIHRoYXQgcmVsaWVzIG9uIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHRoZSB0YXJnZXQgUUVNVSBlbnZpcm9ubWVudC4KCkhlbmNlLCBJIGNhbiBjb25maWRlbnRseSBjb25jbHVkZTogYFdvcnRoRnV6emluZz1mYWxzZWAuIE5vIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBvciBzcGVjaWZpYyBzeW1ib2xzIG5lZWQgdG8gYmUgZm9jdXNlZCBvbi4gSSYjMzk7bGwgc3VtbWFyaXplIGl0IGFzIGEgY29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgdmVyZGljdCwgYW5kIHRoZW4gcHJvY2VlZC4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBNQUlOVEFJTkVSUywgdGhlIE1lZGlhVGVrIE1UNzYyOCBTb0MgZW1iZWRkZWQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzYyOC5jKSwgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWcgZHJpdmVyIChuZXQvZHNhL3RhZ19tdDc2MjguYykuIE1UNzYyOCBpcyBhIHBsYXRmb3JtL1NvQy1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZm9yIE1JUFMtYmFzZWQgTWVkaWFUZWsgU29DcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldmljZSBjYW5ub3QgcHJvYmUgYW5kIHRoZSB0YWcgcHJvdG9jb2wgaXMgb25seSB1c2VkIGJ5IHRoaXMgc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBNQUlOVEFJTkVSUywgdGhlIE1lZGlhVGVrIE1UNzYyOCBTb0MgZW1iZWRkZWQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzYyOC5jKSwgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWcgZHJpdmVyIChuZXQvZHNhL3RhZ19tdDc2MjguYykuIE1UNzYyOCBpcyBhIHBsYXRmb3JtL1NvQy1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZm9yIE1JUFMtYmFzZWQgTWVkaWFUZWsgU29DcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldmljZSBjYW5ub3QgcHJvYmUgYW5kIHRoZSB0YWcgcHJvdG9jb2wgaXMgb25seSB1c2VkIGJ5IHRoaXMgc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTI6MjIuMDMyNjYyMTk3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyOTg4MzAwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNQUlOVEFJTkVSUywgdGhlIE1lZGlhVGVrIE1UNzYyOCBTb0MgZW1iZWRkZWQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzYyOC5jKSwgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWcgZHJpdmVyIChuZXQvZHNhL3RhZ19tdDc2MjguYykuIE1UNzYyOCBpcyBhIHBsYXRmb3JtL1NvQy1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZm9yIE1JUFMtYmFzZWQgTWVkaWFUZWsgU29DcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldmljZSBjYW5ub3QgcHJvYmUgYW5kIHRoZSB0YWcgcHJvdG9jb2wgaXMgb25seSB1c2VkIGJ5IHRoaXMgc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjoyMi4wMzI2Njg1MjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNjEzNDgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA0YjcxNmIxYTlmYTYxOTEwY2RkODE2MzIyZjI4ODAwNThmNDNjOTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAwMTo1MjoyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggYjIzZmI2ZjJmNGVmNC4uOTVlMzYxZjVkMGVkZSAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE2NzgxLDYgKzE2NzgxLDE1IEBAIFM6XFx0TWFpbnRhaW5lZFxcbiBGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvbWVkaWF0ZWssbXQ3NjIxLWkyYy55YW1sXFxuIEY6XFx0ZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdDc2MjEuY1xcbiBcXG4rTUVESUFURUsgTVQ3NjI4IFNXSVRDSCBEUklWRVJcXG4rTTpcXHRKb3JpcyBWYWlzdmlsYSBcXHUwMDNjam9leUB0aW55aXNyLmNvbVxcdTAwM2VcXG4rTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuK1M6XFx0TWFpbnRhaW5lZFxcbitGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzYyOC1lc3cueWFtbFxcbitGOlxcdGRyaXZlcnMvbmV0L2RzYS9tdDc2MjguY1xcbitGOlxcdGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZmUtc29jLmNcXG4rRjpcXHRuZXQvZHNhL3RhZ19tdDc2MjguY1xcbitcXG4gTUVESUFURUsgTVRNSVBTIENMT0NLIERSSVZFUlxcbiBNOlxcdFNlcmdpbyBQYXJhY3VlbGxvcyBcXHUwMDNjc2VyZ2lvLnBhcmFjdWVsbG9zQGdtYWlsLmNvbVxcdTAwM2VcXG4gUzpcXHRNYWludGFpbmVkXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguYyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguY1xcbmluZGV4IGZiNjNmNmY2NDRiOWUuLjYyOWRiZjk2OGExNzEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL210NzYyOC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL210NzYyOC5jXFxuQEAgLTM0LDYgKzM0LDcgQEBcXG4gI2RlZmluZSBNVDc2MjhfRVNXX1JFR19WVUIodmxhbikgKDB4MTAwICsgNCAqICgodmxhbikgLyA0KSlcXG4gI2RlZmluZSBNVDc2MjhfRVNXX1JFR19TT0NQQyAweDhjXFxuICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfUE9DMCAweDkwXFxuKyNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfUE9DMSAweDk0XFxuICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfUE9DMiAweDk4XFxuICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfU0dDIDB4OWNcXG4gI2RlZmluZSBNVDc2MjhfRVNXX1JFR19QQ1IwIDB4YzBcXG5AQCAtOTIsNiArOTMsOSBAQFxcbiBcXG4gI2RlZmluZSBNVDc2MjhfRVNXX1BPQzBfUE9SVF9ESVNBQkxFIEdFTk1BU0soMjksIDIzKVxcbiBcXG4rI2RlZmluZSBNVDc2MjhfRVNXX1BPQzFfUE9SVF9CTE9DS0lOR19TVEFURSBHRU5NQVNLKDIyLCAxNilcXG4rI2RlZmluZSBNVDc2MjhfRVNXX1BPQzFfUE9SVF9ESVNfTEVBUk5JTkcgR0VOTUFTSygxNCwgOClcXG4rXFxuICNkZWZpbmUgTVQ3NjI4X0VTV19QT0MyX1BFUl9WTEFOX1VOVEFHX0VOIEJJVCgxNSlcXG4gXFxuICNkZWZpbmUgTVQ3NjI4X0VTV19TR0NfQUdJTkdfSU5URVJWQUwgR0VOTUFTSygzLCAwKVxcbkBAIC0xMzgsNiArMTQyLDcgQEBcXG4gI2RlZmluZSBNVDc2MjhfRVNXX1BPUlRTX0NQVSBCSVQoNilcXG4gI2RlZmluZSBNVDc2MjhfRVNXX1BPUlRTX0FMTCBHRU5NQVNLKDYsIDApXFxuIFxcbisjZGVmaW5lIE1UNzYyOF9FU1dfTlVNX1VTRVJfUE9SVFMgNVxcbiAjZGVmaW5lIE1UNzYyOF9FU1dfTlVNX1BPUlRTIDdcXG4gI2RlZmluZSBNVDc2MjhfTlVNX1ZMQU5TIDE2XFxuIFxcbkBAIC0xNTEsOCArMTU2LDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBtdDc2MjhfZXN3X3JlZ21hcF9jZmcgPSB7XFxuIFxcdC52YWxfZm9ybWF0X2VuZGlhbiA9IFJFR01BUF9FTkRJQU5fTElUVExFLFxcbiB9O1xcbiBcXG4rZW51bSB7XFxuK1xcdE1UNzYyOF9WTEFOX1RZUEVfQVdBUkUsXFxuK1xcdE1UNzYyOF9WTEFOX1RZUEVfVU5BV0FSRSxcXG4rXFx0TVQ3NjI4X1ZMQU5fVFlQRV9OVU0sXFxuK307XFxuK1xcbiBzdHJ1Y3QgbXQ3NjI4X3ZsYW4ge1xcbi1cXHRib29sIGFjdGl2ZTtcXG4rXFx0dW5zaWduZWQgaW50IHR5cGU7XFxuIFxcdHU4IG1lbWJlcnM7XFxuIFxcdHU4IHVudGFnO1xcbiBcXHR1MTYgdmlkO1xcbkBAIC0xNjMsOSArMTc0LDEwIEBAIHN0cnVjdCBtdDc2MjhfZXN3IHtcXG4gXFx0c3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdF9lc3c7XFxuIFxcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcXG4gXFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzO1xcbi1cXHR1MTYgdGFnXzgwMjFxX3B2aWRbTVQ3NjI4X0VTV19OVU1fUE9SVFNdO1xcbitcXHR1MTYgcHZpZFtNVDc2MjhfVkxBTl9UWVBFX05VTV1bTVQ3NjI4X0VTV19OVU1fUE9SVFNdO1xcbiBcXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gdmxhbnNbTVQ3NjI4X05VTV9WTEFOU107XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4rXFx0dTggdmxhbl9maWx0ZXJpbmc7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IG10NzYyOF9taWlfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcXG5AQCAtMzgzLDIxICszOTUsMTI3IEBAIHN0YXRpYyB2b2lkIG10NzYyOF9lc3dfc2V0X3Z1YihzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3LCB1bnNpZ25lZCBpbnQgdmxhbixcXG4gXFx0XFx0XFx0ICAgTVQ3NjI4X0VTV19WVUJfUFJFUCh2bGFuLCB2dWIpKTtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBtdDc2MjhfdmxhbiAqbXQ3NjI4X2ZpbmRfdmxhbl9ibG9jayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgdTE2IHZpZCwgdW5zaWduZWQgaW50IHR5cGUpXFxuK3tcXG4rXFx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW47XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1UNzYyOF9OVU1fVkxBTlM7IGkrKykge1xcbitcXHRcXHR2bGFuID0gXFx1MDAyNmVzdy1cXHUwMDNldmxhbnNbaV07XFxuK1xcdFxcdGlmICh2bGFuLVxcdTAwM2V2aWQgPT0gdmlkIFxcdTAwMjZcXHUwMDI2IHZsYW4tXFx1MDAzZXR5cGUgPT0gdHlwZSlcXG4rXFx0XFx0XFx0cmV0dXJuIHZsYW47XFxuK1xcdH1cXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKm10NzYyOF9hbGxvY192bGFuX2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdTE2IHZpZCwgdW5zaWduZWQgaW50IHR5cGUpXFxuK3tcXG4rXFx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW47XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1UNzYyOF9OVU1fVkxBTlM7IGkrKykge1xcbitcXHRcXHR2bGFuID0gXFx1MDAyNmVzdy1cXHUwMDNldmxhbnNbaV07XFxuK1xcdFxcdGlmICh2bGFuLVxcdTAwM2V2aWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAodmxhbi1cXHUwMDNldHlwZSAhPSB0eXBlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0dmxhbi1cXHUwMDNldmlkID0gdmlkO1xcbitcXHRcXHRyZXR1cm4gdmxhbjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbXQ3NjI4X3BvcnRfam9pbl92bGFuX2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHUxNiB2aWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwgdTE2IGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IG10NzYyOF9maW5kX3ZsYW5fYmxvY2soZHMsIHZpZCwgdHlwZSk7XFxuK1xcdHN0cnVjdCBtdDc2MjhfZXN3ICplc3cgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlmICghdmxhbilcXG4rXFx0XFx0dmxhbiA9IG10NzYyOF9hbGxvY192bGFuX2Jsb2NrKGRzLCB2aWQsIHR5cGUpO1xcbitcXG4rXFx0aWYgKCF2bGFuKVxcbitcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4rXFxuK1xcdHZsYW4tXFx1MDAzZW1lbWJlcnMgfD0gQklUKHBvcnQpO1xcbitcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19QVklEKVxcbitcXHRcXHRlc3ctXFx1MDAzZXB2aWRbdHlwZV1bcG9ydF0gPSB2aWQ7XFxuK1xcdGVsc2UgaWYgKGVzdy1cXHUwMDNlcHZpZFt0eXBlXVtwb3J0XSA9PSB2aWQpXFxuK1xcdFxcdGVzdy1cXHUwMDNlcHZpZFt0eXBlXVtwb3J0XSA9IDA7XFxuK1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEKVxcbitcXHRcXHR2bGFuLVxcdTAwM2V1bnRhZyB8PSBCSVQocG9ydCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmxhbi1cXHUwMDNldW50YWcgXFx1MDAyNj0gfkJJVChwb3J0KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbXQ3NjI4X3BvcnRfbGVhdmVfdmxhbl9ibG9jayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHRcXHR1MTYgdmlkLCB1bnNpZ25lZCBpbnQgdHlwZSlcXG4re1xcbitcXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW4gPSBtdDc2MjhfZmluZF92bGFuX2Jsb2NrKGRzLCB2aWQsIHR5cGUpO1xcbitcXHRzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAoIXZsYW4pXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0aWYgKGVzdy1cXHUwMDNlcHZpZFt0eXBlXVtwb3J0XSA9PSB2aWQpXFxuK1xcdFxcdGVzdy1cXHUwMDNlcHZpZFt0eXBlXVtwb3J0XSA9IDA7XFxuK1xcdHZsYW4tXFx1MDAzZW1lbWJlcnMgXFx1MDAyNj0gfkJJVChwb3J0KTtcXG4rXFx0dmxhbi1cXHUwMDNldW50YWcgXFx1MDAyNj0gfkJJVChwb3J0KTtcXG4rXFx0LypcXG4rXFx0ICogRnJlZSB0aGUgdmxhbiBpZiB3ZSdyZSB0aGUgbGFzdCBtZW1iZXIgb2YgaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXZsYW4tXFx1MDAzZW1lbWJlcnMpXFxuK1xcdFxcdHZsYW4tXFx1MDAzZXZpZCA9IDA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBtdDc2Mjhfdmxhbl9zeW5jKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4ge1xcbiBcXHRzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuIFxcdGludCBpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1UNzYyOF9OVU1fVkxBTlM7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW4gPSBcXHUwMDI2ZXN3LVxcdTAwM2V2bGFuc1tpXTtcXG4rXFx0XFx0dTggbWVtYmVyX21hc2s7XFxuK1xcbitcXHRcXHRpZiAodmxhbi1cXHUwMDNldHlwZSA9PSBNVDc2MjhfVkxBTl9UWVBFX0FXQVJFKVxcbitcXHRcXHRcXHRtZW1iZXJfbWFzayA9IGVzdy1cXHUwMDNldmxhbl9maWx0ZXJpbmc7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bWVtYmVyX21hc2sgPSB+ZXN3LVxcdTAwM2V2bGFuX2ZpbHRlcmluZztcXG4rXFx0XFx0bWVtYmVyX21hc2sgfD0gTVQ3NjI4X0VTV19QT1JUU19DUFU7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFB1dCBWTEFOIGZpbHRlcmluZyBwb3J0cyBvbmx5IGludG8gVkxBTiBhd2FyZSBWTEFOcyBhbmRcXG4rXFx0XFx0ICogbm9uIFZMQU4gZmlsdGVyaW5nIHBvcnRzIGludG8gVkxBTiB1bmF3YXJlIFZMQU5zLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBDUFUgbWF5IG5vdCBiZSByZW1vdmVkIGZyb20gYW55IFZMQU4sIGFzIFZMQU4gZmlsdGVyaW5nXFxuK1xcdFxcdCAqIGFwcGxpZXMgb25seSB0byB1c2VyIHBvcnRzLlxcbitcXHRcXHQgKi9cXG4gXFxuLVxcdFxcdG10NzYyOF9lc3dfc2V0X3Ztc2MoZXN3LCBpLCB2bGFuLVxcdTAwM2VtZW1iZXJzKTtcXG4gXFx0XFx0bXQ3NjI4X2Vzd19zZXRfdmxhbl9pZChlc3csIGksIHZsYW4tXFx1MDAzZXZpZCk7XFxuLVxcdFxcdG10NzYyOF9lc3dfc2V0X3Z1Yihlc3csIGksIHZsYW4tXFx1MDAzZXVudGFnKTtcXG4rXFx0XFx0bXQ3NjI4X2Vzd19zZXRfdm1zYyhlc3csIGksIHZsYW4tXFx1MDAzZW1lbWJlcnMgXFx1MDAyNiBtZW1iZXJfbWFzayk7XFxuK1xcdFxcdG10NzYyOF9lc3dfc2V0X3Z1Yihlc3csIGksIHZsYW4tXFx1MDAzZXVudGFnIFxcdTAwMjYgbWVtYmVyX21hc2spO1xcbitcXG4gXFx0fVxcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRzLVxcdTAwM2VudW1fcG9ydHM7IGkrKylcXG4tXFx0XFx0bXQ3NjI4X2Vzd19zZXRfcHZpZChlc3csIGksIGVzdy1cXHUwMDNldGFnXzgwMjFxX3B2aWRbaV0pO1xcbitcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHR5cGUgPSBCSVQoZHAtXFx1MDAzZWluZGV4KSBcXHUwMDI2IGVzdy1cXHUwMDNldmxhbl9maWx0ZXJpbmcgP1xcbitcXHRcXHQgICAgTVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSA6IE1UNzYyOF9WTEFOX1RZUEVfVU5BV0FSRTtcXG4rXFx0XFx0bXQ3NjI4X2Vzd19zZXRfcHZpZChlc3csIGRwLVxcdTAwM2VpbmRleCwgZXN3LVxcdTAwM2VwdmlkW3R5cGVdW2RwLVxcdTAwM2VpbmRleF0pO1xcbitcXHR9XFxuK1xcdHJlZ21hcF91cGRhdGVfYml0cyhlc3ctXFx1MDAzZXJlZ21hcCwgTVQ3NjI4X0VTV19SRUdfU0dDMixcXG4rXFx0XFx0XFx0ICAgTVQ3NjI4X0VTV19TR0MyX0RPVUJMRV9UQUdfRU4sXFxuK1xcdFxcdFxcdCAgIEZJRUxEX1BSRVAoTVQ3NjI4X0VTV19TR0MyX0RPVUJMRV9UQUdfRU4sXFxuK1xcdFxcdFxcdFxcdCAgICAgIE1UNzYyOF9FU1dfUE9SVFNfTk9DUFUgXFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgICB+ZXN3LVxcdTAwM2V2bGFuX2ZpbHRlcmluZykpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG10NzYyOF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuQEAgLTQyNSw2ICs1NDMsMTkgQEAgc3RhdGljIGludCBtdDc2Mjhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4rXFx0LypcXG4rXFx0ICogRGVkaWNhdGUgdGhlIGZpcnN0IG51bV91c2VyX3BvcnRzICsgMSBWTEFOIHNsb3RzIGZvciB0YWdfODAyMXEuXFxuK1xcdCAqIFNpbmNlIGJyaWRnZXMgYXJlIG9ubHkgb2ZmbG9hZGVkIHdoZW4gdGhleSBoYXZlIGF0IGxlYXN0IG9uZSBtZW1iZXJcXG4rXFx0ICogcG9ydCwgdGhlIHdvcnN0IGNhc2UgZW50cnkgcmVxdWlyZW1lbnQgaXMgMSBwZXIgcG9ydC4gVGhlIGV4dHJhIHNsb3RcXG4rXFx0ICogaXMgbmVlZGVkIGJlY2F1c2Ugd2hlbiBjaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbiwgdGFnXzgwMjFxIGFkZHMgYVxcbitcXHQgKiBuZXcgVkxBTiBiZWZvcmUgcmVtb3ZpbmcgdGhlIG9sZCBvbmUuIFRoZSByZXN0IG9mIHRoZSBWTEFOIHNsb3RzIGNhblxcbitcXHQgKiBiZSB1c2VkIGZvciBmaWx0ZXJpbmcuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIE1UNzYyOF9FU1dfTlVNX1VTRVJfUE9SVFMgKyAxOyBpKyspXFxuK1xcdFxcdGVzdy1cXHUwMDNldmxhbnNbaV0udHlwZSA9IE1UNzYyOF9WTEFOX1RZUEVfVU5BV0FSRTtcXG4rXFxuK1xcdGRzLVxcdTAwM2VtYXhfbnVtX2JyaWRnZXMgPSBEU0FfVEFHXzgwMjFRX01BWF9OVU1fQlJJREdFUztcXG4rXFxuIFxcdHJ0bmxfbG9jaygpO1xcbiBcXHRyZXQgPSBkc2FfdGFnXzgwMjFxX3JlZ2lzdGVyKGRzLCBodG9ucyhFVEhfUF84MDIxUSkpO1xcbiBcXHRydG5sX3VubG9jaygpO1xcbkBAIC00NzksNzEgKzYxMCw5NyBAQCBzdGF0aWMgdm9pZCBtdDc2MjhfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBzdGF0aWMgaW50IG10NzYyOF9kc2FfODAyMXFfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0XFx0XFx0XFx0ICAgICB1MTYgdmlkLCB1MTYgZmxhZ3MpXFxuIHtcXG4tXFx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVxcdTAwM2Vwcml2O1xcbi1cXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW4gPSBOVUxMO1xcbi1cXHRpbnQgaTtcXG4tXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNVDc2MjhfTlVNX1ZMQU5TOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IG10NzYyOF92bGFuICpjaGVja192bGFuID0gXFx1MDAyNmVzdy1cXHUwMDNldmxhbnNbaV07XFxuLVxcbi1cXHRcXHRpZiAoIWNoZWNrX3ZsYW4tXFx1MDAzZWFjdGl2ZSBcXHUwMDI2XFx1MDAyNiAhdmxhbilcXG4tXFx0XFx0XFx0dmxhbiA9IGNoZWNrX3ZsYW47XFxuLVxcbi1cXHRcXHRpZiAoY2hlY2tfdmxhbi1cXHUwMDNlYWN0aXZlIFxcdTAwMjZcXHUwMDI2IGNoZWNrX3ZsYW4tXFx1MDAzZXZpZCA9PSB2aWQpIHtcXG4tXFx0XFx0XFx0dmxhbiA9IGNoZWNrX3ZsYW47XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghdmxhbilcXG4tXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLVxcbi1cXHR2bGFuLVxcdTAwM2V2aWQgPSB2aWQ7XFxuLVxcdHZsYW4tXFx1MDAzZWFjdGl2ZSA9IHRydWU7XFxuLVxcdHZsYW4tXFx1MDAzZW1lbWJlcnMgfD0gQklUKHBvcnQpO1xcbi1cXG4tXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19QVklEKVxcbi1cXHRcXHRlc3ctXFx1MDAzZXRhZ184MDIxcV9wdmlkW3BvcnRdID0gdmlkO1xcbi1cXG4tXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRClcXG4tXFx0XFx0dmxhbi1cXHUwMDNldW50YWcgfD0gQklUKHBvcnQpO1xcbi1cXG4rXFx0aW50IHJldCA9XFxuK1xcdCAgICBtdDc2MjhfcG9ydF9qb2luX3ZsYW5fYmxvY2soZHMsIHBvcnQsIHZpZCwgTVQ3NjI4X1ZMQU5fVFlQRV9VTkFXQVJFLFxcbitcXHRcXHRcXHRcXHRcXHRmbGFncyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdG10NzYyOF92bGFuX3N5bmMoZHMpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBtdDc2MjhfZHNhXzgwMjFxX3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHUxNiB2aWQpXFxuIHtcXG4tXFx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVxcdTAwM2Vwcml2O1xcbi1cXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW4gPSBOVUxMO1xcbi1cXHRpbnQgaTtcXG4rXFx0aW50IHJldCA9IG10NzYyOF9wb3J0X2xlYXZlX3ZsYW5fYmxvY2soZHMsIHBvcnQsIHZpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIE1UNzYyOF9WTEFOX1RZUEVfVU5BV0FSRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdG10NzYyOF92bGFuX3N5bmMoZHMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1UNzYyOF9OVU1fVkxBTlM7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKmNoZWNrX3ZsYW4gPSBcXHUwMDI2ZXN3LVxcdTAwM2V2bGFuc1tpXTtcXG4rc3RhdGljIGludCBtdDc2MjhfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgICBib29sIHZsYW5fZmlsdGVyaW5nLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXG4tXFx0XFx0aWYgKCFjaGVja192bGFuLVxcdTAwM2VhY3RpdmUgfHwgY2hlY2tfdmxhbi1cXHUwMDNldmlkICE9IHZpZClcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdHZsYW4gPSBjaGVja192bGFuO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0fVxcbi1cXHRpZiAoIXZsYW4pXFxuLVxcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHRpZiAodmxhbl9maWx0ZXJpbmcpXFxuK1xcdFxcdGVzdy1cXHUwMDNldmxhbl9maWx0ZXJpbmcgfD0gQklUKHBvcnQpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGVzdy1cXHUwMDNldmxhbl9maWx0ZXJpbmcgXFx1MDAyNj0gfkJJVChwb3J0KTtcXG4rXFx0bXQ3NjI4X3ZsYW5fc3luYyhkcyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuIFxcbi1cXHRpZiAoZXN3LVxcdTAwM2V0YWdfODAyMXFfcHZpZFtwb3J0XSA9PSB2aWQpXFxuLVxcdFxcdGVzdy1cXHUwMDNldGFnXzgwMjFxX3B2aWRbcG9ydF0gPSAwO1xcbitzdGF0aWMgaW50IG10NzYyOF9wb3J0X3ZsYW5fYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbl9ibG9jaztcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpvdGhlcl9kcDtcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdHZsYW4tXFx1MDAzZW1lbWJlcnMgXFx1MDAyNj0gfkJJVChwb3J0KTtcXG4tXFx0dmxhbi1cXHUwMDNldW50YWcgXFx1MDAyNj0gfkJJVChwb3J0KTtcXG4rXFx0aWYgKHZpZF9pc19kc2FfODAyMXEodmxhbi1cXHUwMDNldmlkKSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwiUmFuZ2UgMzA3Mi00MDk1IHJlc2VydmVkIGZvciBkc2FfODAyMXEgb3BlcmF0aW9uXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdH1cXG4gXFxuLVxcdGlmICghdmxhbi1cXHUwMDNlbWVtYmVycykge1xcbi1cXHRcXHR2bGFuLVxcdTAwM2VhY3RpdmUgPSBmYWxzZTtcXG4tXFx0XFx0dmxhbi1cXHUwMDNldmlkID0gMDtcXG4rXFx0dmxhbl9ibG9jayA9XFxuK1xcdCAgICBtdDc2MjhfZmluZF92bGFuX2Jsb2NrKGRzLCB2bGFuLVxcdTAwM2V2aWQsIE1UNzYyOF9WTEFOX1RZUEVfQVdBUkUpO1xcbitcXHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcXG4rXFx0LypcXG4rXFx0ICogQ1BVIHBvcnQgY2FuIGJlIGFkZGVkIHRvIGFueSBWTEFOcywgYnV0IHVzZXIgcG9ydHMgbmVlZCB0byBlbnN1cmUsXFxuK1xcdCAqIHRoYXQgaWYgdGhlIFZMQU4gYWxyZWFkeSBleGlzdHMgaXQncyBub3QgdXNlZCBieSBhIGJyaWRnZSB3ZSdyZSBub3RcXG4rXFx0ICogYSBtZW1iZXIgb2YsIGJlY2F1c2UgVkxBTnMgYXJlIHRoZSBvbmx5IGZvcm0gb2YgZm9yd2FyZGluZyBjb250cm9sXFxuK1xcdCAqIHdlIGhhdmUgb24gdGhpcyBzd2l0Y2guXFxuK1xcdCAqL1xcbitcXHRpZiAodmxhbl9ibG9jayBcXHUwMDI2XFx1MDAyNiAhZHNhX3BvcnRfaXNfY3B1KGRwKSkge1xcbitcXHRcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChvdGhlcl9kcCwgZHMpIHtcXG4rXFx0XFx0XFx0aWYgKG90aGVyX2RwID09IGRwKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0aWYgKG90aGVyX2RwLVxcdTAwM2VicmlkZ2UgPT0gZHAtXFx1MDAzZWJyaWRnZSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdGlmICghKHZsYW5fYmxvY2stXFx1MDAzZW1lbWJlcnMgXFx1MDAyNiBCSVQob3RoZXJfZHAtXFx1MDAzZWluZGV4KSkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiVkxBTiBJRCB1c2VkIG9uIGFub3RoZXIgYnJpZGdlXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbitcXHRyZXQgPVxcbitcXHQgICAgbXQ3NjI4X3BvcnRfam9pbl92bGFuX2Jsb2NrKGRzLCBwb3J0LCB2bGFuLVxcdTAwM2V2aWQsXFxuK1xcdFxcdFxcdFxcdFxcdE1UNzYyOF9WTEFOX1RZUEVfQVdBUkUsIHZsYW4tXFx1MDAzZWZsYWdzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdG10NzYyOF92bGFuX3N5bmMoZHMpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBtdDc2MjhfcG9ydF92bGFuX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4pXFxuK3tcXG4rXFx0aW50IHJldCA9IG10NzYyOF9wb3J0X2xlYXZlX3ZsYW5fYmxvY2soZHMsIHBvcnQsIHZsYW4tXFx1MDAzZXZpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIE1UNzYyOF9WTEFOX1RZUEVfQVdBUkUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRtdDc2Mjhfdmxhbl9zeW5jKGRzKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIG10NzYyOF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIHtcXG4gXFx0cnRubF9sb2NrKCk7XFxuQEAgLTU1MSw2ICs3MDgsNDAgQEAgc3RhdGljIHZvaWQgbXQ3NjI4X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0cnRubF91bmxvY2soKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbXQ3NjI4X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRib29sIGZvcndhcmRfZGlzYWJsZTtcXG4rXFx0Ym9vbCBsZWFybl9kaXNhYmxlO1xcbitcXG4rXFx0c3dpdGNoIChzdGF0ZSkge1xcbitcXHRjYXNlIEJSX1NUQVRFX0RJU0FCTEVEOlxcbitcXHRjYXNlIEJSX1NUQVRFX0JMT0NLSU5HOlxcbitcXHRjYXNlIEJSX1NUQVRFX0xJU1RFTklORzpcXG4rXFx0XFx0Zm9yd2FyZF9kaXNhYmxlID0gdHJ1ZTtcXG4rXFx0XFx0bGVhcm5fZGlzYWJsZSA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJSX1NUQVRFX0xFQVJOSU5HOlxcbitcXHRcXHRmb3J3YXJkX2Rpc2FibGUgPSB0cnVlO1xcbitcXHRcXHRsZWFybl9kaXNhYmxlID0gZmFsc2U7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJSX1NUQVRFX0ZPUldBUkRJTkc6XFxuK1xcdFxcdGZvcndhcmRfZGlzYWJsZSA9IGZhbHNlO1xcbitcXHRcXHRsZWFybl9kaXNhYmxlID0gZmFsc2U7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRkZXZfZXJyKGRzLVxcdTAwM2VkZXYsIFxcXCJpbnZhbGlkIFNUUCBzdGF0ZTogJWRcXFxcblxcXCIsIHN0YXRlKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRyZWdtYXBfYXNzaWduX2JpdHMoZXN3LVxcdTAwM2VyZWdtYXAsIE1UNzYyOF9FU1dfUkVHX1BPQzEsXFxuK1xcdFxcdFxcdCAgIEZJRUxEX1BSRVAoTVQ3NjI4X0VTV19QT0MxX1BPUlRfRElTX0xFQVJOSU5HLFxcbitcXHRcXHRcXHRcXHQgICAgICBCSVQocG9ydCkpLCBsZWFybl9kaXNhYmxlKTtcXG4rXFx0cmVnbWFwX2Fzc2lnbl9iaXRzKGVzdy1cXHUwMDNlcmVnbWFwLCBNVDc2MjhfRVNXX1JFR19QT0MxLFxcbitcXHRcXHRcXHQgICBGSUVMRF9QUkVQKE1UNzYyOF9FU1dfUE9DMV9QT1JUX0JMT0NLSU5HX1NUQVRFLFxcbitcXHRcXHRcXHRcXHQgICAgICBCSVQocG9ydCkpLCBmb3J3YXJkX2Rpc2FibGUpO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG10NzYyOF9zd2l0Y2hfb3BzID0ge1xcbiBcXHQuZ2V0X3RhZ19wcm90b2NvbCA9IG10NzYyOF9nZXRfdGFnX3Byb3RvLFxcbiBcXHQuc2V0dXAgPSBtdDc2Mjhfc2V0dXAsXFxuQEAgLTU2MCw2ICs3NTEsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdDc2Mjhfc3dpdGNoX29wcyA9IHtcXG4gXFx0LnBoeWxpbmtfZ2V0X2NhcHMgPSBtdDc2MjhfcGh5bGlua19nZXRfY2FwcyxcXG4gXFx0LnRhZ184MDIxcV92bGFuX2FkZCA9IG10NzYyOF9kc2FfODAyMXFfdmxhbl9hZGQsXFxuIFxcdC50YWdfODAyMXFfdmxhbl9kZWwgPSBtdDc2MjhfZHNhXzgwMjFxX3ZsYW5fZGVsLFxcbitcXHQucG9ydF9icmlkZ2Vfam9pbiA9IGRzYV90YWdfODAyMXFfYnJpZGdlX2pvaW4sXFxuK1xcdC5wb3J0X2JyaWRnZV9sZWF2ZSA9IGRzYV90YWdfODAyMXFfYnJpZGdlX2xlYXZlLFxcbitcXHQucG9ydF9zdHBfc3RhdGVfc2V0ID0gbXQ3NjI4X3N0cF9zdGF0ZV9zZXQsXFxuK1xcdC5wb3J0X3ZsYW5fZmlsdGVyaW5nID0gbXQ3NjI4X3BvcnRfdmxhbl9maWx0ZXJpbmcsXFxuK1xcdC5wb3J0X3ZsYW5fYWRkID0gbXQ3NjI4X3BvcnRfdmxhbl9hZGQsXFxuK1xcdC5wb3J0X3ZsYW5fZGVsID0gbXQ3NjI4X3BvcnRfdmxhbl9kZWwsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IG10NzYyOF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19tdDc2MjguYyBiL25ldC9kc2EvdGFnX210NzYyOC5jXFxuaW5kZXggODBiNTBmZjA4ZTUzZi4uN2M3MWU4YjA4NjQ4MSAxMDA2NDRcXG4tLS0gYS9uZXQvZHNhL3RhZ19tdDc2MjguY1xcbisrKyBiL25ldC9kc2EvdGFnX210NzYyOC5jXFxuQEAgLTYsNiArNiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RzYS84MDIxcS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInRhZy5oXFxcIlxcbkBAIC0xNSwxMyArMTYsMTYgQEBcXG4gICogT24gVFggdGhlIGxvd2VyIDYgYml0cyBlbmNvZGUgdGhlIGRlc3RpbmF0aW9uIHBvcnQgYml0bWFzay5cXG4gICogT24gUlggdGhlIGxvd2VyIDMgYml0cyBlbmNvZGUgdGhlIHNvdXJjZSBwb3J0IG51bWJlci5cXG4gICpcXG4tICogVGhlIHN3aXRjaCBoYXJkd2FyZSB3aWxsIG5vdCBtb2RpZnkgdGhlIFRQSUQgb2YgYW4gaW5jb21pbmcgcGFja2V0IGlmIGl0IGlzXFxuLSAqIGFscmVhZHkgVkxBTiB0YWdnZWQuIFRvIHdvcmsgYXJvdW5kIHRoaXMgdGhlIHN3aXRjaCBpcyBjb25maWd1cmVkIHRvIGFsd2F5c1xcbi0gKiBhcHBlbmQgYSB0YWdfODAyMXEgc3RhbmRhbG9uZSBWTEFOIHRhZyBmb3IgZWFjaCBwb3J0LiBUaGF0IG1lYW5zIHdlIGNhblxcbi0gKiBzYWZlbHkgc3RyaXAgdGhlIG91dGVyIFZMQU4gdGFnIGFmdGVyIHBhcnNpbmcgaXQuXFxuKyAqIFRoZSBzd2l0Y2ggY2FuIG9ubHkgdXNlIFZMQU5zIGZvciBmb3J3YXJkaW5nIGNvbnRyb2wuIFZMQU4tdW5hd2FyZSBicmlkZ2VzXFxuKyAqIGFyZSBzaW11bGF0ZWQgdXNpbmcgdGFnXzgwMjFxIGFuZCBkb3VibGUgdGFnZ2luZywgd2hpbGUgVkxBTi1hd2FyZSBicmlkZ2VzXFxuKyAqIHVzZSB0aGUgVkxBTnMgY29uZmlndXJlZCBieSB0aGUgYnJpZGdlIGRpcmVjdGx5LlxcbiAgKlxcbi0gKiBBIFZMQU4gdGFnIGlzIGNvbnN0cnVjdGVkIG9uIGVncmVzcyB0byB0YXJnZXQgdGhlIHN0YW5kYWxvbmUgVkxBTiBhbmRcXG4tICogZGVzdGluYXRpb24gcG9ydC5cXG4rICogT24gZWdyZXNzLCB0aGUgdGFnZ2VyIGVpdGhlciBhZGRzIGEgbmV3IE1UNzYyOCB0YWcgdGhhdCBjb250YWlucyB0aGVcXG4rICogc3RhbmRhbG9uZSBvciBicmlkZ2UgdGFnXzgwMjFxIFZMQU4gYW5kIGRlc3RpbmF0aW9uIHBvcnQgbWFzaywgb3IgbW9kaWZpZXNcXG4rICogYW4gZXhpc3RpbmcgVkxBTiB0YWcgdG8gY29udGFpbiB0aGUgZGVzdGluYXRpb24gcG9ydCBtYXNrLlxcbisgKlxcbisgKiBPbiBpbmdyZXNzLCB0aGUgVkxBTiB0YWcgaXMgcmVzdG9yZWQgYWZ0ZXIgc3RyaXBwaW5nIHRoZSBNVDc2MjggdGFnLCBpZiBpdFxcbisgKiBpcyBub3QgYSB0YWdfODAyMXEgVkxBTi5cXG4gICovXFxuIFxcbiAjZGVmaW5lIE1UNzYyOF9UQUdfTkFNRSBcXFwibXQ3NjI4XFxcIlxcbkBAIC0zNCwyMCArMzgsMzUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0dTE2IHhtaXRfdHBpZDtcXG4gXFx0dTE2IHhtaXRfdmxhbjtcXG4gXFx0X19iZTE2ICp0YWc7XFxuIFxcbitcXHR4bWl0X3RwaWQgPVxcbitcXHQgICAgRVRIX1BfODAyMVEgfCBGSUVMRF9QUkVQKE1UNzYyOF9UQUdfVFhfUE9SVCxcXG4rXFx0XFx0XFx0XFx0ICAgICBkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBkZXYpKTtcXG4gXFx0ZHAgPSBkc2FfdXNlcl90b19wb3J0KGRldik7XFxuLVxcdHhtaXRfdmxhbiA9IGRzYV90YWdfODAyMXFfc3RhbmRhbG9uZV92aWQoZHApO1xcbitcXHRpZiAoc2tiLVxcdTAwM2VvZmZsb2FkX2Z3ZF9tYXJrIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBicl92bGFuX2VuYWJsZWQoZHNhX3BvcnRfYnJpZGdlX2Rldl9nZXQoZHApKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBPbiBWTEFOIGF3YXJlIHBvcnRzIG9ubHkgbW9kaWZ5IHRoZSBUUElEIHRvIGNvbnRhaW4gdGhlXFxuK1xcdFxcdCAqIE1UNzYyOCBlZ3Jlc3MgcG9ydCBtZXRhZGF0YSwgaW5zdGVhZCBvZiBhZGRpbmcgYSBuZXcgdmxhbiB0YWdcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3R4KHNrYik7XFxuK1xcdFxcdHRhZ1swXSA9IGh0b25zKHhtaXRfdHBpZCk7XFxuK1xcdFxcdHJldHVybiBza2I7XFxuK1xcdH1cXG4rXFxuK1xcdHhtaXRfdmxhbiA9IHNrYi1cXHUwMDNlb2ZmbG9hZF9md2RfbWFyayA/XFxuK1xcdCAgICBkc2FfdGFnXzgwMjFxX2JyaWRnZV92aWQoZHNhX3BvcnRfYnJpZGdlX251bV9nZXQoZHApKSA6XFxuK1xcdCAgICBkc2FfdGFnXzgwMjFxX3N0YW5kYWxvbmVfdmlkKGRwKTtcXG4gXFxuIFxcdHNrYl9wdXNoKHNrYiwgTVQ3NjI4X1RBR19MRU4pO1xcbiBcXHRkc2FfYWxsb2NfZXR5cGVfaGVhZGVyKHNrYiwgTVQ3NjI4X1RBR19MRU4pO1xcbiBcXG4gXFx0dGFnID0gZHNhX2V0eXBlX2hlYWRlcl9wb3NfdHgoc2tiKTtcXG4gXFxuLVxcdHRhZ1swXSA9IGh0b25zKEVUSF9QXzgwMjFRIHxcXG4tXFx0XFx0ICAgICAgIEZJRUxEX1BSRVAoTVQ3NjI4X1RBR19UWF9QT1JULFxcbi1cXHRcXHRcXHRcXHQgIGRzYV94bWl0X3BvcnRfbWFzayhza2IsIGRldikpKTtcXG4rXFx0dGFnWzBdID0gaHRvbnMoeG1pdF90cGlkKTtcXG4gXFx0dGFnWzFdID0gaHRvbnMoeG1pdF92bGFuKTtcXG4gXFxuIFxcdHJldHVybiBza2I7XFxuQEAgLTU2LDcgKzc1LDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXQ3NjI4X3RhZ194bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXQ3NjI4X3RhZ19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbitcXHR1bnNpZ25lZCBpbnQgc291cmNlX3BvcnQ7XFxuK1xcdGJvb2wgaXNfZHNhXzgwMjFxO1xcbiBcXHRfX2JlMTYgKnBoZHI7XFxuK1xcdHUxNiB0Y2ksIHZpZDtcXG4gXFxuIFxcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIE1UNzYyOF9UQUdfTEVOKSkpIHtcXG4gXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuQEAgLTY0LDkgKzg2LDIzIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXQ3NjI4X3RhZ19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0fVxcbiBcXG4gXFx0cGhkciA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3J4KHNrYik7XFxuLVxcdHNrYi1cXHUwMDNlZGV2ID1cXG4tXFx0ICAgIGRzYV9jb25kdWl0X2ZpbmRfdXNlcihkZXYsIDAsXFxuLVxcdFxcdFxcdFxcdCAgRklFTERfR0VUKE1UNzYyOF9UQUdfUlhfUE9SVCwgbnRvaHMoKnBoZHIpKSk7XFxuK1xcdHNvdXJjZV9wb3J0ID0gRklFTERfR0VUKE1UNzYyOF9UQUdfUlhfUE9SVCwgbnRvaHMoKnBoZHIpKTtcXG4rXFx0dGNpID0gbnRvaHMocGhkclsxXSk7XFxuK1xcdHZpZCA9IHRjaSBcXHUwMDI2IFZMQU5fVklEX01BU0s7XFxuK1xcdGlzX2RzYV84MDIxcSA9IHZpZF9pc19kc2FfODAyMXEodmlkKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBzb3VyY2UgcG9ydCBpbmZvIGlzIG9ubHkgZW5jb2RlZCBpbiB0aGUgVFBJRCBmaWVsZCBmb3IgcGFja2V0c1xcbitcXHQgKiB3aGVyZSB0aGUgVkxBTiB0YWcgaXMgaW5zZXJ0ZWQgYnkgdGhlIFBWSUQgbWVjaGFuaXNtLiBXaXRoIFZMQU5cXG4rXFx0ICogZmlsdGVyaW5nIGVuYWJsZWQsIFZMQU4tdGFnZ2VkIGluZ3Jlc3MgcGFja2V0cyBhcHBlYXIgYXMgaWYgdGhleSdyZVxcbitcXHQgKiBvcmlnaW5hdGluZyBvbiBwb3J0IDAuIFVzZSB0aGUgVklEIHRvIGlkZW50aWZ5IHRoZSBicmlkZ2UgcG9ydCBpblxcbitcXHQgKiB0aGlzIGNhc2UuXFxuK1xcdCAqL1xcbitcXHRpZiAoc291cmNlX3BvcnQgPT0gMCBcXHUwMDI2XFx1MDAyNiAhaXNfZHNhXzgwMjFxKVxcbitcXHRcXHRza2ItXFx1MDAzZWRldiA9IGRzYV9maW5kX2Rlc2lnbmF0ZWRfYnJpZGdlX3BvcnRfYnlfdmlkKGRldiwgdmlkKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRza2ItXFx1MDAzZWRldiA9IGRzYV9jb25kdWl0X2ZpbmRfdXNlcihkZXYsIDAsIHNvdXJjZV9wb3J0KTtcXG4rXFxuIFxcdGlmICghc2tiLVxcdTAwM2VkZXYpIHtcXG4gXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbkBAIC03NSw2ICsxMTEsMTAgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRza2JfcHVsbF9yY3N1bShza2IsIE1UNzYyOF9UQUdfTEVOKTtcXG4gXFx0ZHNhX3N0cmlwX2V0eXBlX2hlYWRlcihza2IsIE1UNzYyOF9UQUdfTEVOKTtcXG4gXFx0ZHNhX2RlZmF1bHRfb2ZmbG9hZF9md2RfbWFyayhza2IpO1xcbitcXG4rXFx0aWYgKCFpc19kc2FfODAyMXEpXFxuK1xcdFxcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHRjaSk7XFxuK1xcbiBcXHRyZXR1cm4gc2tiO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjoyMi43NTk1NDU0OTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU1NTcxOTE4OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNQUlOVEFJTkVSUywgdGhlIE1lZGlhVGVrIE1UNzYyOCBTb0MgZW1iZWRkZWQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzYyOC5jKSwgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWcgZHJpdmVyIChuZXQvZHNhL3RhZ19tdDc2MjguYykuIE1UNzYyOCBpcyBhIHBsYXRmb3JtL1NvQy1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZm9yIE1JUFMtYmFzZWQgTWVkaWFUZWsgU29DcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldmljZSBjYW5ub3QgcHJvYmUgYW5kIHRoZSB0YWcgcHJvdG9jb2wgaXMgb25seSB1c2VkIGJ5IHRoaXMgc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA0YjcxNmIxYTlmYTYxOTEwY2RkODE2MzIyZjI4ODAwNThmNDNjOTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAxOjUyOjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggYjIzZmI2ZjJmNGVmNC4uOTVlMzYxZjVkMGVkZSAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTE2NzgxLDYgKzE2NzgxLDE1IEBAIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvbWVkaWF0ZWssbXQ3NjIxLWkyYy55YW1sXG4gRjpcdGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXQ3NjIxLmNcbiBcbitNRURJQVRFSyBNVDc2MjggU1dJVENIIERSSVZFUlxuK006XHRKb3JpcyBWYWlzdmlsYSBcdTAwM2Nqb2V5QHRpbnlpc3IuY29tXHUwMDNlXG4rTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbitTOlx0TWFpbnRhaW5lZFxuK0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc2MjgtZXN3LnlhbWxcbitGOlx0ZHJpdmVycy9uZXQvZHNhL210NzYyOC5jXG4rRjpcdGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZmUtc29jLmNcbitGOlx0bmV0L2RzYS90YWdfbXQ3NjI4LmNcbitcbiBNRURJQVRFSyBNVE1JUFMgQ0xPQ0sgRFJJVkVSXG4gTTpcdFNlcmdpbyBQYXJhY3VlbGxvcyBcdTAwM2NzZXJnaW8ucGFyYWN1ZWxsb3NAZ21haWwuY29tXHUwMDNlXG4gUzpcdE1haW50YWluZWRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmNcbmluZGV4IGZiNjNmNmY2NDRiOWUuLjYyOWRiZjk2OGExNzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc2MjguY1xuQEAgLTM0LDYgKzM0LDcgQEBcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1ZVQih2bGFuKSAoMHgxMDAgKyA0ICogKCh2bGFuKSAvIDQpKVxuICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfU09DUEMgMHg4Y1xuICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfUE9DMCAweDkwXG4rI2RlZmluZSBNVDc2MjhfRVNXX1JFR19QT0MxIDB4OTRcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1BPQzIgMHg5OFxuICNkZWZpbmUgTVQ3NjI4X0VTV19SRUdfU0dDIDB4OWNcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUkVHX1BDUjAgMHhjMFxuQEAgLTkyLDYgKzkzLDkgQEBcbiBcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUE9DMF9QT1JUX0RJU0FCTEUgR0VOTUFTSygyOSwgMjMpXG4gXG4rI2RlZmluZSBNVDc2MjhfRVNXX1BPQzFfUE9SVF9CTE9DS0lOR19TVEFURSBHRU5NQVNLKDIyLCAxNilcbisjZGVmaW5lIE1UNzYyOF9FU1dfUE9DMV9QT1JUX0RJU19MRUFSTklORyBHRU5NQVNLKDE0LCA4KVxuK1xuICNkZWZpbmUgTVQ3NjI4X0VTV19QT0MyX1BFUl9WTEFOX1VOVEFHX0VOIEJJVCgxNSlcbiBcbiAjZGVmaW5lIE1UNzYyOF9FU1dfU0dDX0FHSU5HX0lOVEVSVkFMIEdFTk1BU0soMywgMClcbkBAIC0xMzgsNiArMTQyLDcgQEBcbiAjZGVmaW5lIE1UNzYyOF9FU1dfUE9SVFNfQ1BVIEJJVCg2KVxuICNkZWZpbmUgTVQ3NjI4X0VTV19QT1JUU19BTEwgR0VOTUFTSyg2LCAwKVxuIFxuKyNkZWZpbmUgTVQ3NjI4X0VTV19OVU1fVVNFUl9QT1JUUyA1XG4gI2RlZmluZSBNVDc2MjhfRVNXX05VTV9QT1JUUyA3XG4gI2RlZmluZSBNVDc2MjhfTlVNX1ZMQU5TIDE2XG4gXG5AQCAtMTUxLDggKzE1NiwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgbXQ3NjI4X2Vzd19yZWdtYXBfY2ZnID0ge1xuIFx0LnZhbF9mb3JtYXRfZW5kaWFuID0gUkVHTUFQX0VORElBTl9MSVRUTEUsXG4gfTtcbiBcbitlbnVtIHtcbitcdE1UNzYyOF9WTEFOX1RZUEVfQVdBUkUsXG4rXHRNVDc2MjhfVkxBTl9UWVBFX1VOQVdBUkUsXG4rXHRNVDc2MjhfVkxBTl9UWVBFX05VTSxcbit9O1xuK1xuIHN0cnVjdCBtdDc2MjhfdmxhbiB7XG4tXHRib29sIGFjdGl2ZTtcbitcdHVuc2lnbmVkIGludCB0eXBlO1xuIFx0dTggbWVtYmVycztcbiBcdHU4IHVudGFnO1xuIFx0dTE2IHZpZDtcbkBAIC0xNjMsOSArMTc0LDEwIEBAIHN0cnVjdCBtdDc2MjhfZXN3IHtcbiBcdHN0cnVjdCByZXNldF9jb250cm9sICpyc3RfZXN3O1xuIFx0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xuIFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzO1xuLVx0dTE2IHRhZ184MDIxcV9wdmlkW01UNzYyOF9FU1dfTlVNX1BPUlRTXTtcbitcdHUxNiBwdmlkW01UNzYyOF9WTEFOX1RZUEVfTlVNXVtNVDc2MjhfRVNXX05VTV9QT1JUU107XG4gXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gdmxhbnNbTVQ3NjI4X05VTV9WTEFOU107XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4rXHR1OCB2bGFuX2ZpbHRlcmluZztcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbXQ3NjI4X21paV9yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtKVxuQEAgLTM4MywyMSArMzk1LDEyNyBAQCBzdGF0aWMgdm9pZCBtdDc2MjhfZXN3X3NldF92dWIoc3RydWN0IG10NzYyOF9lc3cgKmVzdywgdW5zaWduZWQgaW50IHZsYW4sXG4gXHRcdFx0ICAgTVQ3NjI4X0VTV19WVUJfUFJFUCh2bGFuLCB2dWIpKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBtdDc2MjhfdmxhbiAqbXQ3NjI4X2ZpbmRfdmxhbl9ibG9jayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4rXHRcdFx0XHRcdFx0ICB1MTYgdmlkLCB1bnNpZ25lZCBpbnQgdHlwZSlcbit7XG4rXHRzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbjtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X05VTV9WTEFOUzsgaSsrKSB7XG4rXHRcdHZsYW4gPSBcdTAwMjZlc3ctXHUwMDNldmxhbnNbaV07XG4rXHRcdGlmICh2bGFuLVx1MDAzZXZpZCA9PSB2aWQgXHUwMDI2XHUwMDI2IHZsYW4tXHUwMDNldHlwZSA9PSB0eXBlKVxuK1x0XHRcdHJldHVybiB2bGFuO1xuK1x0fVxuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKm10NzYyOF9hbGxvY192bGFuX2Jsb2NrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbitcdFx0XHRcdFx0XHQgICB1MTYgdmlkLCB1bnNpZ25lZCBpbnQgdHlwZSlcbit7XG4rXHRzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbjtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X05VTV9WTEFOUzsgaSsrKSB7XG4rXHRcdHZsYW4gPSBcdTAwMjZlc3ctXHUwMDNldmxhbnNbaV07XG4rXHRcdGlmICh2bGFuLVx1MDAzZXZpZClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKHZsYW4tXHUwMDNldHlwZSAhPSB0eXBlKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR2bGFuLVx1MDAzZXZpZCA9IHZpZDtcbitcdFx0cmV0dXJuIHZsYW47XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIGludCBtdDc2MjhfcG9ydF9qb2luX3ZsYW5fYmxvY2soc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTE2IHZpZCxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwgdTE2IGZsYWdzKVxuK3tcbitcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IG10NzYyOF9maW5kX3ZsYW5fYmxvY2soZHMsIHZpZCwgdHlwZSk7XG4rXHRzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtXHUwMDNlcHJpdjtcbitcbitcdGlmICghdmxhbilcbitcdFx0dmxhbiA9IG10NzYyOF9hbGxvY192bGFuX2Jsb2NrKGRzLCB2aWQsIHR5cGUpO1xuK1xuK1x0aWYgKCF2bGFuKVxuK1x0XHRyZXR1cm4gLUVOT1NQQztcbitcbitcdHZsYW4tXHUwMDNlbWVtYmVycyB8PSBCSVQocG9ydCk7XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRClcbitcdFx0ZXN3LVx1MDAzZXB2aWRbdHlwZV1bcG9ydF0gPSB2aWQ7XG4rXHRlbHNlIGlmIChlc3ctXHUwMDNlcHZpZFt0eXBlXVtwb3J0XSA9PSB2aWQpXG4rXHRcdGVzdy1cdTAwM2VwdmlkW3R5cGVdW3BvcnRdID0gMDtcbitcbitcdGlmIChmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRClcbitcdFx0dmxhbi1cdTAwM2V1bnRhZyB8PSBCSVQocG9ydCk7XG4rXHRlbHNlXG4rXHRcdHZsYW4tXHUwMDNldW50YWcgXHUwMDI2PSB+QklUKHBvcnQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbXQ3NjI4X3BvcnRfbGVhdmVfdmxhbl9ibG9jayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdFx0XHR1MTYgdmlkLCB1bnNpZ25lZCBpbnQgdHlwZSlcbit7XG4rXHRzdHJ1Y3QgbXQ3NjI4X3ZsYW4gKnZsYW4gPSBtdDc2MjhfZmluZF92bGFuX2Jsb2NrKGRzLCB2aWQsIHR5cGUpO1xuK1x0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAoIXZsYW4pXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0aWYgKGVzdy1cdTAwM2VwdmlkW3R5cGVdW3BvcnRdID09IHZpZClcbitcdFx0ZXN3LVx1MDAzZXB2aWRbdHlwZV1bcG9ydF0gPSAwO1xuK1x0dmxhbi1cdTAwM2VtZW1iZXJzIFx1MDAyNj0gfkJJVChwb3J0KTtcbitcdHZsYW4tXHUwMDNldW50YWcgXHUwMDI2PSB+QklUKHBvcnQpO1xuK1x0LypcbitcdCAqIEZyZWUgdGhlIHZsYW4gaWYgd2UncmUgdGhlIGxhc3QgbWVtYmVyIG9mIGl0LlxuK1x0ICovXG4rXHRpZiAoIXZsYW4tXHUwMDNlbWVtYmVycylcbitcdFx0dmxhbi1cdTAwM2V2aWQgPSAwO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG10NzYyOF92bGFuX3N5bmMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBtdDc2MjhfZXN3ICplc3cgPSBkcy1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X05VTV9WTEFOUzsgaSsrKSB7XG4gXHRcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IFx1MDAyNmVzdy1cdTAwM2V2bGFuc1tpXTtcbitcdFx0dTggbWVtYmVyX21hc2s7XG4rXG4rXHRcdGlmICh2bGFuLVx1MDAzZXR5cGUgPT0gTVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSlcbitcdFx0XHRtZW1iZXJfbWFzayA9IGVzdy1cdTAwM2V2bGFuX2ZpbHRlcmluZztcbitcdFx0ZWxzZVxuK1x0XHRcdG1lbWJlcl9tYXNrID0gfmVzdy1cdTAwM2V2bGFuX2ZpbHRlcmluZztcbitcdFx0bWVtYmVyX21hc2sgfD0gTVQ3NjI4X0VTV19QT1JUU19DUFU7XG4rXHRcdC8qXG4rXHRcdCAqIFB1dCBWTEFOIGZpbHRlcmluZyBwb3J0cyBvbmx5IGludG8gVkxBTiBhd2FyZSBWTEFOcyBhbmRcbitcdFx0ICogbm9uIFZMQU4gZmlsdGVyaW5nIHBvcnRzIGludG8gVkxBTiB1bmF3YXJlIFZMQU5zLlxuK1x0XHQgKlxuK1x0XHQgKiBDUFUgbWF5IG5vdCBiZSByZW1vdmVkIGZyb20gYW55IFZMQU4sIGFzIFZMQU4gZmlsdGVyaW5nXG4rXHRcdCAqIGFwcGxpZXMgb25seSB0byB1c2VyIHBvcnRzLlxuK1x0XHQgKi9cbiBcbi1cdFx0bXQ3NjI4X2Vzd19zZXRfdm1zYyhlc3csIGksIHZsYW4tXHUwMDNlbWVtYmVycyk7XG4gXHRcdG10NzYyOF9lc3dfc2V0X3ZsYW5faWQoZXN3LCBpLCB2bGFuLVx1MDAzZXZpZCk7XG4tXHRcdG10NzYyOF9lc3dfc2V0X3Z1Yihlc3csIGksIHZsYW4tXHUwMDNldW50YWcpO1xuK1x0XHRtdDc2MjhfZXN3X3NldF92bXNjKGVzdywgaSwgdmxhbi1cdTAwM2VtZW1iZXJzIFx1MDAyNiBtZW1iZXJfbWFzayk7XG4rXHRcdG10NzYyOF9lc3dfc2V0X3Z1Yihlc3csIGksIHZsYW4tXHUwMDNldW50YWcgXHUwMDI2IG1lbWJlcl9tYXNrKTtcbitcbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRzLVx1MDAzZW51bV9wb3J0czsgaSsrKVxuLVx0XHRtdDc2MjhfZXN3X3NldF9wdmlkKGVzdywgaSwgZXN3LVx1MDAzZXRhZ184MDIxcV9wdmlkW2ldKTtcbitcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfdXNlcl9wb3J0KGRwLCBkcykge1xuK1x0XHR1bnNpZ25lZCBpbnQgdHlwZSA9IEJJVChkcC1cdTAwM2VpbmRleCkgXHUwMDI2IGVzdy1cdTAwM2V2bGFuX2ZpbHRlcmluZyA/XG4rXHRcdCAgICBNVDc2MjhfVkxBTl9UWVBFX0FXQVJFIDogTVQ3NjI4X1ZMQU5fVFlQRV9VTkFXQVJFO1xuK1x0XHRtdDc2MjhfZXN3X3NldF9wdmlkKGVzdywgZHAtXHUwMDNlaW5kZXgsIGVzdy1cdTAwM2VwdmlkW3R5cGVdW2RwLVx1MDAzZWluZGV4XSk7XG4rXHR9XG4rXHRyZWdtYXBfdXBkYXRlX2JpdHMoZXN3LVx1MDAzZXJlZ21hcCwgTVQ3NjI4X0VTV19SRUdfU0dDMixcbitcdFx0XHQgICBNVDc2MjhfRVNXX1NHQzJfRE9VQkxFX1RBR19FTixcbitcdFx0XHQgICBGSUVMRF9QUkVQKE1UNzYyOF9FU1dfU0dDMl9ET1VCTEVfVEFHX0VOLFxuK1x0XHRcdFx0ICAgICAgTVQ3NjI4X0VTV19QT1JUU19OT0NQVSBcdTAwMjZcbitcdFx0XHRcdCAgICAgIH5lc3ctXHUwMDNldmxhbl9maWx0ZXJpbmcpKTtcbiB9XG4gXG4gc3RhdGljIGludCBtdDc2Mjhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuQEAgLTQyNSw2ICs1NDMsMTkgQEAgc3RhdGljIGludCBtdDc2Mjhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbitcdC8qXG4rXHQgKiBEZWRpY2F0ZSB0aGUgZmlyc3QgbnVtX3VzZXJfcG9ydHMgKyAxIFZMQU4gc2xvdHMgZm9yIHRhZ184MDIxcS5cbitcdCAqIFNpbmNlIGJyaWRnZXMgYXJlIG9ubHkgb2ZmbG9hZGVkIHdoZW4gdGhleSBoYXZlIGF0IGxlYXN0IG9uZSBtZW1iZXJcbitcdCAqIHBvcnQsIHRoZSB3b3JzdCBjYXNlIGVudHJ5IHJlcXVpcmVtZW50IGlzIDEgcGVyIHBvcnQuIFRoZSBleHRyYSBzbG90XG4rXHQgKiBpcyBuZWVkZWQgYmVjYXVzZSB3aGVuIGNoYW5naW5nIHRoZSBjb25maWd1cmF0aW9uLCB0YWdfODAyMXEgYWRkcyBhXG4rXHQgKiBuZXcgVkxBTiBiZWZvcmUgcmVtb3ZpbmcgdGhlIG9sZCBvbmUuIFRoZSByZXN0IG9mIHRoZSBWTEFOIHNsb3RzIGNhblxuK1x0ICogYmUgdXNlZCBmb3IgZmlsdGVyaW5nLlxuK1x0ICovXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X0VTV19OVU1fVVNFUl9QT1JUUyArIDE7IGkrKylcbitcdFx0ZXN3LVx1MDAzZXZsYW5zW2ldLnR5cGUgPSBNVDc2MjhfVkxBTl9UWVBFX1VOQVdBUkU7XG4rXG4rXHRkcy1cdTAwM2VtYXhfbnVtX2JyaWRnZXMgPSBEU0FfVEFHXzgwMjFRX01BWF9OVU1fQlJJREdFUztcbitcbiBcdHJ0bmxfbG9jaygpO1xuIFx0cmV0ID0gZHNhX3RhZ184MDIxcV9yZWdpc3RlcihkcywgaHRvbnMoRVRIX1BfODAyMVEpKTtcbiBcdHJ0bmxfdW5sb2NrKCk7XG5AQCAtNDc5LDcxICs2MTAsOTcgQEAgc3RhdGljIHZvaWQgbXQ3NjI4X3BoeWxpbmtfZ2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBzdGF0aWMgaW50IG10NzYyOF9kc2FfODAyMXFfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHRcdCAgICAgdTE2IHZpZCwgdTE2IGZsYWdzKVxuIHtcbi1cdHN0cnVjdCBtdDc2MjhfZXN3ICplc3cgPSBkcy1cdTAwM2Vwcml2O1xuLVx0c3RydWN0IG10NzYyOF92bGFuICp2bGFuID0gTlVMTDtcbi1cdGludCBpO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X05VTV9WTEFOUzsgaSsrKSB7XG4tXHRcdHN0cnVjdCBtdDc2MjhfdmxhbiAqY2hlY2tfdmxhbiA9IFx1MDAyNmVzdy1cdTAwM2V2bGFuc1tpXTtcbi1cbi1cdFx0aWYgKCFjaGVja192bGFuLVx1MDAzZWFjdGl2ZSBcdTAwMjZcdTAwMjYgIXZsYW4pXG4tXHRcdFx0dmxhbiA9IGNoZWNrX3ZsYW47XG4tXG4tXHRcdGlmIChjaGVja192bGFuLVx1MDAzZWFjdGl2ZSBcdTAwMjZcdTAwMjYgY2hlY2tfdmxhbi1cdTAwM2V2aWQgPT0gdmlkKSB7XG4tXHRcdFx0dmxhbiA9IGNoZWNrX3ZsYW47XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdGlmICghdmxhbilcbi1cdFx0cmV0dXJuIC1FTk9TUEM7XG4tXG4tXHR2bGFuLVx1MDAzZXZpZCA9IHZpZDtcbi1cdHZsYW4tXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbi1cdHZsYW4tXHUwMDNlbWVtYmVycyB8PSBCSVQocG9ydCk7XG4tXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRClcbi1cdFx0ZXN3LVx1MDAzZXRhZ184MDIxcV9wdmlkW3BvcnRdID0gdmlkO1xuLVxuLVx0aWYgKGZsYWdzIFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEKVxuLVx0XHR2bGFuLVx1MDAzZXVudGFnIHw9IEJJVChwb3J0KTtcbi1cbitcdGludCByZXQgPVxuK1x0ICAgIG10NzYyOF9wb3J0X2pvaW5fdmxhbl9ibG9jayhkcywgcG9ydCwgdmlkLCBNVDc2MjhfVkxBTl9UWVBFX1VOQVdBUkUsXG4rXHRcdFx0XHRcdGZsYWdzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXHRtdDc2Mjhfdmxhbl9zeW5jKGRzKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IG10NzYyOF9kc2FfODAyMXFfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTE2IHZpZClcbiB7XG4tXHRzdHJ1Y3QgbXQ3NjI4X2VzdyAqZXN3ID0gZHMtXHUwMDNlcHJpdjtcbi1cdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbiA9IE5VTEw7XG4tXHRpbnQgaTtcbitcdGludCByZXQgPSBtdDc2MjhfcG9ydF9sZWF2ZV92bGFuX2Jsb2NrKGRzLCBwb3J0LCB2aWQsXG4rXHRcdFx0XHRcdCAgICAgICBNVDc2MjhfVkxBTl9UWVBFX1VOQVdBUkUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdG10NzYyOF92bGFuX3N5bmMoZHMpO1xuK1x0cmV0dXJuIDA7XG4rfVxuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVQ3NjI4X05VTV9WTEFOUzsgaSsrKSB7XG4tXHRcdHN0cnVjdCBtdDc2MjhfdmxhbiAqY2hlY2tfdmxhbiA9IFx1MDAyNmVzdy1cdTAwM2V2bGFuc1tpXTtcbitzdGF0aWMgaW50IG10NzYyOF9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0XHQgICAgICBib29sIHZsYW5fZmlsdGVyaW5nLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBtdDc2MjhfZXN3ICplc3cgPSBkcy1cdTAwM2Vwcml2O1xuIFxuLVx0XHRpZiAoIWNoZWNrX3ZsYW4tXHUwMDNlYWN0aXZlIHx8IGNoZWNrX3ZsYW4tXHUwMDNldmlkICE9IHZpZClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0dmxhbiA9IGNoZWNrX3ZsYW47XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVx0aWYgKCF2bGFuKVxuLVx0XHRyZXR1cm4gLUVOT0VOVDtcbitcdGlmICh2bGFuX2ZpbHRlcmluZylcbitcdFx0ZXN3LVx1MDAzZXZsYW5fZmlsdGVyaW5nIHw9IEJJVChwb3J0KTtcbitcdGVsc2VcbitcdFx0ZXN3LVx1MDAzZXZsYW5fZmlsdGVyaW5nIFx1MDAyNj0gfkJJVChwb3J0KTtcbitcdG10NzYyOF92bGFuX3N5bmMoZHMpO1xuK1x0cmV0dXJuIDA7XG4rfVxuIFxuLVx0aWYgKGVzdy1cdTAwM2V0YWdfODAyMXFfcHZpZFtwb3J0XSA9PSB2aWQpXG4tXHRcdGVzdy1cdTAwM2V0YWdfODAyMXFfcHZpZFtwb3J0XSA9IDA7XG4rc3RhdGljIGludCBtdDc2MjhfcG9ydF92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF92bGFuICp2bGFuLFxuK1x0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBtdDc2MjhfdmxhbiAqdmxhbl9ibG9jaztcbitcdHN0cnVjdCBkc2FfcG9ydCAqb3RoZXJfZHA7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuK1x0aW50IHJldDtcbiBcbi1cdHZsYW4tXHUwMDNlbWVtYmVycyBcdTAwMjY9IH5CSVQocG9ydCk7XG4tXHR2bGFuLVx1MDAzZXVudGFnIFx1MDAyNj0gfkJJVChwb3J0KTtcbitcdGlmICh2aWRfaXNfZHNhXzgwMjFxKHZsYW4tXHUwMDNldmlkKSkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJSYW5nZSAzMDcyLTQwOTUgcmVzZXJ2ZWQgZm9yIGRzYV84MDIxcSBvcGVyYXRpb25cIik7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXHR9XG4gXG4tXHRpZiAoIXZsYW4tXHUwMDNlbWVtYmVycykge1xuLVx0XHR2bGFuLVx1MDAzZWFjdGl2ZSA9IGZhbHNlO1xuLVx0XHR2bGFuLVx1MDAzZXZpZCA9IDA7XG4rXHR2bGFuX2Jsb2NrID1cbitcdCAgICBtdDc2MjhfZmluZF92bGFuX2Jsb2NrKGRzLCB2bGFuLVx1MDAzZXZpZCwgTVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSk7XG4rXHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcbitcdC8qXG4rXHQgKiBDUFUgcG9ydCBjYW4gYmUgYWRkZWQgdG8gYW55IFZMQU5zLCBidXQgdXNlciBwb3J0cyBuZWVkIHRvIGVuc3VyZSxcbitcdCAqIHRoYXQgaWYgdGhlIFZMQU4gYWxyZWFkeSBleGlzdHMgaXQncyBub3QgdXNlZCBieSBhIGJyaWRnZSB3ZSdyZSBub3RcbitcdCAqIGEgbWVtYmVyIG9mLCBiZWNhdXNlIFZMQU5zIGFyZSB0aGUgb25seSBmb3JtIG9mIGZvcndhcmRpbmcgY29udHJvbFxuK1x0ICogd2UgaGF2ZSBvbiB0aGlzIHN3aXRjaC5cbitcdCAqL1xuK1x0aWYgKHZsYW5fYmxvY2sgXHUwMDI2XHUwMDI2ICFkc2FfcG9ydF9pc19jcHUoZHApKSB7XG4rXHRcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfdXNlcl9wb3J0KG90aGVyX2RwLCBkcykge1xuK1x0XHRcdGlmIChvdGhlcl9kcCA9PSBkcClcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdGlmIChvdGhlcl9kcC1cdTAwM2VicmlkZ2UgPT0gZHAtXHUwMDNlYnJpZGdlKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0aWYgKCEodmxhbl9ibG9jay1cdTAwM2VtZW1iZXJzIFx1MDAyNiBCSVQob3RoZXJfZHAtXHUwMDNlaW5kZXgpKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgIFwiVkxBTiBJRCB1c2VkIG9uIGFub3RoZXIgYnJpZGdlXCIpO1xuK1x0XHRcdHJldHVybiAtRUJVU1k7XG4rXHRcdH1cbiBcdH1cbitcdHJldCA9XG4rXHQgICAgbXQ3NjI4X3BvcnRfam9pbl92bGFuX2Jsb2NrKGRzLCBwb3J0LCB2bGFuLVx1MDAzZXZpZCxcbitcdFx0XHRcdFx0TVQ3NjI4X1ZMQU5fVFlQRV9BV0FSRSwgdmxhbi1cdTAwM2VmbGFncyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0bXQ3NjI4X3ZsYW5fc3luYyhkcyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBtdDc2MjhfcG9ydF92bGFuX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF92bGFuICp2bGFuKVxuK3tcbitcdGludCByZXQgPSBtdDc2MjhfcG9ydF9sZWF2ZV92bGFuX2Jsb2NrKGRzLCBwb3J0LCB2bGFuLVx1MDAzZXZpZCxcbitcdFx0XHRcdFx0ICAgICAgIE1UNzYyOF9WTEFOX1RZUEVfQVdBUkUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdG10NzYyOF92bGFuX3N5bmMoZHMpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG10NzYyOF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0cnRubF9sb2NrKCk7XG5AQCAtNTUxLDYgKzcwOCw0MCBAQCBzdGF0aWMgdm9pZCBtdDc2MjhfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0cnRubF91bmxvY2soKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbXQ3NjI4X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpXG4re1xuK1x0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IGRzLVx1MDAzZXByaXY7XG4rXHRib29sIGZvcndhcmRfZGlzYWJsZTtcbitcdGJvb2wgbGVhcm5fZGlzYWJsZTtcbitcbitcdHN3aXRjaCAoc3RhdGUpIHtcbitcdGNhc2UgQlJfU1RBVEVfRElTQUJMRUQ6XG4rXHRjYXNlIEJSX1NUQVRFX0JMT0NLSU5HOlxuK1x0Y2FzZSBCUl9TVEFURV9MSVNURU5JTkc6XG4rXHRcdGZvcndhcmRfZGlzYWJsZSA9IHRydWU7XG4rXHRcdGxlYXJuX2Rpc2FibGUgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlJfU1RBVEVfTEVBUk5JTkc6XG4rXHRcdGZvcndhcmRfZGlzYWJsZSA9IHRydWU7XG4rXHRcdGxlYXJuX2Rpc2FibGUgPSBmYWxzZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJSX1NUQVRFX0ZPUldBUkRJTkc6XG4rXHRcdGZvcndhcmRfZGlzYWJsZSA9IGZhbHNlO1xuK1x0XHRsZWFybl9kaXNhYmxlID0gZmFsc2U7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0ZGV2X2Vycihkcy1cdTAwM2VkZXYsIFwiaW52YWxpZCBTVFAgc3RhdGU6ICVkXFxuXCIsIHN0YXRlKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cmVnbWFwX2Fzc2lnbl9iaXRzKGVzdy1cdTAwM2VyZWdtYXAsIE1UNzYyOF9FU1dfUkVHX1BPQzEsXG4rXHRcdFx0ICAgRklFTERfUFJFUChNVDc2MjhfRVNXX1BPQzFfUE9SVF9ESVNfTEVBUk5JTkcsXG4rXHRcdFx0XHQgICAgICBCSVQocG9ydCkpLCBsZWFybl9kaXNhYmxlKTtcbitcdHJlZ21hcF9hc3NpZ25fYml0cyhlc3ctXHUwMDNlcmVnbWFwLCBNVDc2MjhfRVNXX1JFR19QT0MxLFxuK1x0XHRcdCAgIEZJRUxEX1BSRVAoTVQ3NjI4X0VTV19QT0MxX1BPUlRfQkxPQ0tJTkdfU1RBVEUsXG4rXHRcdFx0XHQgICAgICBCSVQocG9ydCkpLCBmb3J3YXJkX2Rpc2FibGUpO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG10NzYyOF9zd2l0Y2hfb3BzID0ge1xuIFx0LmdldF90YWdfcHJvdG9jb2wgPSBtdDc2MjhfZ2V0X3RhZ19wcm90byxcbiBcdC5zZXR1cCA9IG10NzYyOF9zZXR1cCxcbkBAIC01NjAsNiArNzUxLDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXQ3NjI4X3N3aXRjaF9vcHMgPSB7XG4gXHQucGh5bGlua19nZXRfY2FwcyA9IG10NzYyOF9waHlsaW5rX2dldF9jYXBzLFxuIFx0LnRhZ184MDIxcV92bGFuX2FkZCA9IG10NzYyOF9kc2FfODAyMXFfdmxhbl9hZGQsXG4gXHQudGFnXzgwMjFxX3ZsYW5fZGVsID0gbXQ3NjI4X2RzYV84MDIxcV92bGFuX2RlbCxcbitcdC5wb3J0X2JyaWRnZV9qb2luID0gZHNhX3RhZ184MDIxcV9icmlkZ2Vfam9pbixcbitcdC5wb3J0X2JyaWRnZV9sZWF2ZSA9IGRzYV90YWdfODAyMXFfYnJpZGdlX2xlYXZlLFxuK1x0LnBvcnRfc3RwX3N0YXRlX3NldCA9IG10NzYyOF9zdHBfc3RhdGVfc2V0LFxuK1x0LnBvcnRfdmxhbl9maWx0ZXJpbmcgPSBtdDc2MjhfcG9ydF92bGFuX2ZpbHRlcmluZyxcbitcdC5wb3J0X3ZsYW5fYWRkID0gbXQ3NjI4X3BvcnRfdmxhbl9hZGQsXG4rXHQucG9ydF92bGFuX2RlbCA9IG10NzYyOF9wb3J0X3ZsYW5fZGVsLFxuIH07XG4gXG4gc3RhdGljIGludCBtdDc2MjhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19tdDc2MjguYyBiL25ldC9kc2EvdGFnX210NzYyOC5jXG5pbmRleCA4MGI1MGZmMDhlNTNmLi43YzcxZThiMDg2NDgxIDEwMDY0NFxuLS0tIGEvbmV0L2RzYS90YWdfbXQ3NjI4LmNcbisrKyBiL25ldC9kc2EvdGFnX210NzYyOC5jXG5AQCAtNiw2ICs2LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZHNhLzgwMjFxLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInRhZy5oXCJcbkBAIC0xNSwxMyArMTYsMTYgQEBcbiAgKiBPbiBUWCB0aGUgbG93ZXIgNiBiaXRzIGVuY29kZSB0aGUgZGVzdGluYXRpb24gcG9ydCBiaXRtYXNrLlxuICAqIE9uIFJYIHRoZSBsb3dlciAzIGJpdHMgZW5jb2RlIHRoZSBzb3VyY2UgcG9ydCBudW1iZXIuXG4gICpcbi0gKiBUaGUgc3dpdGNoIGhhcmR3YXJlIHdpbGwgbm90IG1vZGlmeSB0aGUgVFBJRCBvZiBhbiBpbmNvbWluZyBwYWNrZXQgaWYgaXQgaXNcbi0gKiBhbHJlYWR5IFZMQU4gdGFnZ2VkLiBUbyB3b3JrIGFyb3VuZCB0aGlzIHRoZSBzd2l0Y2ggaXMgY29uZmlndXJlZCB0byBhbHdheXNcbi0gKiBhcHBlbmQgYSB0YWdfODAyMXEgc3RhbmRhbG9uZSBWTEFOIHRhZyBmb3IgZWFjaCBwb3J0LiBUaGF0IG1lYW5zIHdlIGNhblxuLSAqIHNhZmVseSBzdHJpcCB0aGUgb3V0ZXIgVkxBTiB0YWcgYWZ0ZXIgcGFyc2luZyBpdC5cbisgKiBUaGUgc3dpdGNoIGNhbiBvbmx5IHVzZSBWTEFOcyBmb3IgZm9yd2FyZGluZyBjb250cm9sLiBWTEFOLXVuYXdhcmUgYnJpZGdlc1xuKyAqIGFyZSBzaW11bGF0ZWQgdXNpbmcgdGFnXzgwMjFxIGFuZCBkb3VibGUgdGFnZ2luZywgd2hpbGUgVkxBTi1hd2FyZSBicmlkZ2VzXG4rICogdXNlIHRoZSBWTEFOcyBjb25maWd1cmVkIGJ5IHRoZSBicmlkZ2UgZGlyZWN0bHkuXG4gICpcbi0gKiBBIFZMQU4gdGFnIGlzIGNvbnN0cnVjdGVkIG9uIGVncmVzcyB0byB0YXJnZXQgdGhlIHN0YW5kYWxvbmUgVkxBTiBhbmRcbi0gKiBkZXN0aW5hdGlvbiBwb3J0LlxuKyAqIE9uIGVncmVzcywgdGhlIHRhZ2dlciBlaXRoZXIgYWRkcyBhIG5ldyBNVDc2MjggdGFnIHRoYXQgY29udGFpbnMgdGhlXG4rICogc3RhbmRhbG9uZSBvciBicmlkZ2UgdGFnXzgwMjFxIFZMQU4gYW5kIGRlc3RpbmF0aW9uIHBvcnQgbWFzaywgb3IgbW9kaWZpZXNcbisgKiBhbiBleGlzdGluZyBWTEFOIHRhZyB0byBjb250YWluIHRoZSBkZXN0aW5hdGlvbiBwb3J0IG1hc2suXG4rICpcbisgKiBPbiBpbmdyZXNzLCB0aGUgVkxBTiB0YWcgaXMgcmVzdG9yZWQgYWZ0ZXIgc3RyaXBwaW5nIHRoZSBNVDc2MjggdGFnLCBpZiBpdFxuKyAqIGlzIG5vdCBhIHRhZ184MDIxcSBWTEFOLlxuICAqL1xuIFxuICNkZWZpbmUgTVQ3NjI4X1RBR19OQU1FIFwibXQ3NjI4XCJcbkBAIC0zNCwyMCArMzgsMzUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXHR1MTYgeG1pdF90cGlkO1xuIFx0dTE2IHhtaXRfdmxhbjtcbiBcdF9fYmUxNiAqdGFnO1xuIFxuK1x0eG1pdF90cGlkID1cbitcdCAgICBFVEhfUF84MDIxUSB8IEZJRUxEX1BSRVAoTVQ3NjI4X1RBR19UWF9QT1JULFxuK1x0XHRcdFx0ICAgICBkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBkZXYpKTtcbiBcdGRwID0gZHNhX3VzZXJfdG9fcG9ydChkZXYpO1xuLVx0eG1pdF92bGFuID0gZHNhX3RhZ184MDIxcV9zdGFuZGFsb25lX3ZpZChkcCk7XG4rXHRpZiAoc2tiLVx1MDAzZW9mZmxvYWRfZndkX21hcmsgXHUwMDI2XHUwMDI2XG4rXHQgICAgYnJfdmxhbl9lbmFibGVkKGRzYV9wb3J0X2JyaWRnZV9kZXZfZ2V0KGRwKSkpIHtcbitcdFx0LypcbitcdFx0ICogT24gVkxBTiBhd2FyZSBwb3J0cyBvbmx5IG1vZGlmeSB0aGUgVFBJRCB0byBjb250YWluIHRoZVxuK1x0XHQgKiBNVDc2MjggZWdyZXNzIHBvcnQgbWV0YWRhdGEsIGluc3RlYWQgb2YgYWRkaW5nIGEgbmV3IHZsYW4gdGFnXG4rXHRcdCAqL1xuK1x0XHR0YWcgPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc190eChza2IpO1xuK1x0XHR0YWdbMF0gPSBodG9ucyh4bWl0X3RwaWQpO1xuK1x0XHRyZXR1cm4gc2tiO1xuK1x0fVxuK1xuK1x0eG1pdF92bGFuID0gc2tiLVx1MDAzZW9mZmxvYWRfZndkX21hcmsgP1xuK1x0ICAgIGRzYV90YWdfODAyMXFfYnJpZGdlX3ZpZChkc2FfcG9ydF9icmlkZ2VfbnVtX2dldChkcCkpIDpcbitcdCAgICBkc2FfdGFnXzgwMjFxX3N0YW5kYWxvbmVfdmlkKGRwKTtcbiBcbiBcdHNrYl9wdXNoKHNrYiwgTVQ3NjI4X1RBR19MRU4pO1xuIFx0ZHNhX2FsbG9jX2V0eXBlX2hlYWRlcihza2IsIE1UNzYyOF9UQUdfTEVOKTtcbiBcbiBcdHRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3R4KHNrYik7XG4gXG4tXHR0YWdbMF0gPSBodG9ucyhFVEhfUF84MDIxUSB8XG4tXHRcdCAgICAgICBGSUVMRF9QUkVQKE1UNzYyOF9UQUdfVFhfUE9SVCxcbi1cdFx0XHRcdCAgZHNhX3htaXRfcG9ydF9tYXNrKHNrYiwgZGV2KSkpO1xuK1x0dGFnWzBdID0gaHRvbnMoeG1pdF90cGlkKTtcbiBcdHRhZ1sxXSA9IGh0b25zKHhtaXRfdmxhbik7XG4gXG4gXHRyZXR1cm4gc2tiO1xuQEAgLTU2LDcgKzc1LDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXQ3NjI4X3RhZ194bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4rXHR1bnNpZ25lZCBpbnQgc291cmNlX3BvcnQ7XG4rXHRib29sIGlzX2RzYV84MDIxcTtcbiBcdF9fYmUxNiAqcGhkcjtcbitcdHUxNiB0Y2ksIHZpZDtcbiBcbiBcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIE1UNzYyOF9UQUdfTEVOKSkpIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG5AQCAtNjQsOSArODYsMjMgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICptdDc2MjhfdGFnX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fVxuIFxuIFx0cGhkciA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3J4KHNrYik7XG4tXHRza2ItXHUwMDNlZGV2ID1cbi1cdCAgICBkc2FfY29uZHVpdF9maW5kX3VzZXIoZGV2LCAwLFxuLVx0XHRcdFx0ICBGSUVMRF9HRVQoTVQ3NjI4X1RBR19SWF9QT1JULCBudG9ocygqcGhkcikpKTtcbitcdHNvdXJjZV9wb3J0ID0gRklFTERfR0VUKE1UNzYyOF9UQUdfUlhfUE9SVCwgbnRvaHMoKnBoZHIpKTtcbitcdHRjaSA9IG50b2hzKHBoZHJbMV0pO1xuK1x0dmlkID0gdGNpIFx1MDAyNiBWTEFOX1ZJRF9NQVNLO1xuK1x0aXNfZHNhXzgwMjFxID0gdmlkX2lzX2RzYV84MDIxcSh2aWQpO1xuK1xuK1x0LypcbitcdCAqIFRoZSBzb3VyY2UgcG9ydCBpbmZvIGlzIG9ubHkgZW5jb2RlZCBpbiB0aGUgVFBJRCBmaWVsZCBmb3IgcGFja2V0c1xuK1x0ICogd2hlcmUgdGhlIFZMQU4gdGFnIGlzIGluc2VydGVkIGJ5IHRoZSBQVklEIG1lY2hhbmlzbS4gV2l0aCBWTEFOXG4rXHQgKiBmaWx0ZXJpbmcgZW5hYmxlZCwgVkxBTi10YWdnZWQgaW5ncmVzcyBwYWNrZXRzIGFwcGVhciBhcyBpZiB0aGV5J3JlXG4rXHQgKiBvcmlnaW5hdGluZyBvbiBwb3J0IDAuIFVzZSB0aGUgVklEIHRvIGlkZW50aWZ5IHRoZSBicmlkZ2UgcG9ydCBpblxuK1x0ICogdGhpcyBjYXNlLlxuK1x0ICovXG4rXHRpZiAoc291cmNlX3BvcnQgPT0gMCBcdTAwMjZcdTAwMjYgIWlzX2RzYV84MDIxcSlcbitcdFx0c2tiLVx1MDAzZWRldiA9IGRzYV9maW5kX2Rlc2lnbmF0ZWRfYnJpZGdlX3BvcnRfYnlfdmlkKGRldiwgdmlkKTtcbitcdGVsc2VcbitcdFx0c2tiLVx1MDAzZWRldiA9IGRzYV9jb25kdWl0X2ZpbmRfdXNlcihkZXYsIDAsIHNvdXJjZV9wb3J0KTtcbitcbiBcdGlmICghc2tiLVx1MDAzZWRldikge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtNzUsNiArMTExLDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXQ3NjI4X3RhZ19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHNrYl9wdWxsX3Jjc3VtKHNrYiwgTVQ3NjI4X1RBR19MRU4pO1xuIFx0ZHNhX3N0cmlwX2V0eXBlX2hlYWRlcihza2IsIE1UNzYyOF9UQUdfTEVOKTtcbiBcdGRzYV9kZWZhdWx0X29mZmxvYWRfZndkX21hcmsoc2tiKTtcbitcbitcdGlmICghaXNfZHNhXzgwMjFxKVxuK1x0XHRfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLCB0Y2kpO1xuK1xuIFx0cmV0dXJuIHNrYjtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjoyMi43NTk1NDY4NTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzMwOTEzNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhpcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIHNlcmllcy4gTXkgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kIOKAkyB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQ/IEkgc2VlIHRocmVlIGZpbGVzIHdlcmUgdG91Y2hlZDogYE1BSU5UQUlORVJTYCwgYGRyaXZlcnMvbmV0L2RzYS9tdDc2MjguY2AsIGFuZCBgbmV0L2RzYS90YWdfbXQ3NjI4LmNgLlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIHRoZSBgbXQ3NjI4YCBEU0Egc3dpdGNoIGRyaXZlci4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBoYXJkd2FyZSByZWFjaGFiaWxpdHkgYW5kIHRoZSBkcml2ZXIncyB0eXBlIOKAkyB3aGF0IGtpbmQgb2YgdGFncyBhcmUgd2UgdGFsa2luZyBhYm91dCBpbiBgbmV0L2RzYS90YWdfbXQ3NjI4LmNgPyBUaGF0J3MgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuIFRoZW4sIEkgbmVlZCB0byBkaXZlIGludG8gYGRyaXZlcnMvbmV0L2RzYS9tdDc2MjguY2AgaXRzZWxmLiBJJ2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgS2NvbmZpZyBvcHRpb25zIGFuZCBwbGF0Zm9ybSBiaW5kaW5ncy4gVGhhdCdsbCB0ZWxsIG1lIGhvdyB0aGlzIGRyaXZlciBpcyBjb25maWd1cmVkLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgd2hhdCBoYXJkd2FyZSBpdCdzIG1lYW50IHRvIHN1cHBvcnQuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaWYgdGhpcyBhbGwgY2hlY2tzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjoyNS4wOTA0NjM1NDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU4MjM0OTg2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVUX0RTQV9NVDc2MjhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NTMwX01NSU8pICs9IG10NzUzMC1tbWlvLm9cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc2MjgpICs9IG10NzYyOC5vXFxuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19ORVRfRFNBX01WODhFNjA2MCkgKz0gbXY4OGU2MDYwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTI6MjguNjcyODE5MDc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE3MzgwMjU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSBvbiB0aGUgTVQ3NjI4IHN1cHBvcnQgd2l0aGluIHRoZSBEU0EgZHJpdmVyIGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBkZWZpbml0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayBgZHJpdmVycy9uZXQvZHNhL0tjb25maWdgIGZvciB0aGUgYE5FVF9EU0FfTVQ3NjI4YCBzeW1ib2wuIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgc3VwcG9ydCBmb3IgdGhlIGhhcmR3YXJlIGlzIGRlZmluZWQuIFRoZW4sIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGJlY2F1c2UgaXQncyBhbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIGNyb3NzLXJlZmVyZW5jZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBJIHNob3VsZCBhbHNvIGltbWVkaWF0ZWx5IGxvb2sgaW4gYG5ldC9kc2EvS2NvbmZpZ2AuIEknbGwgYmUgc2VhcmNoaW5nIHRoZXJlIGZvciBgTkVUX0RTQV9UQUdfTVQ3NjI4YC4gVGhpcyB0YWcgbWlnaHQgYmUgc3BlY2lmaWMgdG8gdGhlIE1UNzYyOCdzIHBhcnRpY3VsYXIgdGFnZ2luZyBzY2hlbWUsIHNvIEkgc2hvdWxkIHNlZSBpZiBpdCBleGlzdHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiBob3cgaXQncyBlbmFibGVkIGFuZCBjb25maWd1cmVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBEU0Egc3lzdGVtLiBJJ2xsIGdldCBhIGNsZWFyIHBpY3R1cmUgYnkgY2hlY2tpbmcgdGhlc2UgZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODk1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTI6MzAuODQ2NjI1MDgzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzEyMjYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfRFNBX01UNzYyOFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2FcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL0tjb25maWc9NTQ9Y29uZmlnIE5FVF9EU0FfTVQ3NTMwX01NSU9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTY1LVxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnOjY2OmNvbmZpZyBORVRfRFNBX01UNzYyOFxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTY3LVxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDc2MjggRW1iZWRkZWQgRXRoZXJuZXQgc3dpdGNoIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzBfTU1JTykgKz0gbXQ3NTMwLW1taW8ub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19ORVRfRFNBX01UNzYyOCkgKz0gbXQ3NjI4Lm9cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX05FVF9EU0FfTVY4OEU2MDYwKSArPSBtdjg4ZTYwNjAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjozMS4xNjk3NTQ2ODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDE1MTY2MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEU0EgS2NvbmZpZyBmb3IgQ29uZmlndXJhdGlvbiBJbnNpZ2h0cyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IGBkcml2ZXJzL25ldC9kc2EvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2Ni4gVGhhdCBhcmVhJ3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZm9yIGNvcmUgRFNBIGZ1bmN0aW9uYWxpdHkuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgdGhlIGBuZXQvZHNhL0tjb25maWdgIGZpbGUgaW4gdGhlIHJvb3QgbmV0IGRpcmVjdG9yeSBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIHNvbWUgYnJvYWRlciBEU0Egc2V0dGluZ3MgdGhlcmUsIG9yIHNvbWUgaW5jbHVkZXMgdGhhdCB3aWxsIGRpcmVjdCBtZSB0byB0aGUgY29ycmVjdCBwbGFjZS4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmFibGUgbW9kdWxlcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHBvdGVudGlhbGx5IGludGVyZXN0aW5nIG9wdGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxlLiBGcm9tIGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MzAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjozMy41ODQ5MjQ3MDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0XFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0LWluIEV0aGVybmV0IHN3aXRjaCBmb3VuZFxcbiAgNjE6XFx0XFx0ICBpbiB0aGUgTWVkaWFUZWsgTVQ3OTg4IFNvQy5cXG4gIDYyOlxcdFxcdCAgVGhlIHN3aXRjaCBpcyBhIHNpbWlsYXIgZGVzaWduIGFzIE1UNzUzMSwgYnV0IHRoZSBzd2l0Y2ggcmVnaXN0ZXJzXFxuICA2MzpcXHRcXHQgIGFyZSBkaXJlY3RseSBtYXBwZWQgaW50byB0aGUgU29DcyByZWdpc3RlciBzcGFjZSByYXRoZXIgdGhhbiBiZWluZ1xcbiAgNjQ6XFx0XFx0ICBhY2Nlc3NpYmxlIHZpYSBNRElPLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRjb25maWcgTkVUX0RTQV9NVDc2MjhcXG4gIDY3OlxcdFxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDc2MjggRW1iZWRkZWQgRXRoZXJuZXQgc3dpdGNoIHN1cHBvcnRcXFwiXFxuICA2ODpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiAoU09DX01UNzYyMCB8fCBDT01QSUxFX1RFU1QpXFxuICA2OTpcXHRcXHRzZWxlY3QgTkVUX0RTQV9UQUdfTVQ3NjI4XFxuICA3MDpcXHRcXHRzZWxlY3QgTUVESUFURUtfRkVfU09DX1BIWVxcbiAgNzE6XFx0XFx0c2VsZWN0IFJFR01BUF9NTUlPXFxuICA3MjpcXHRcXHRoZWxwXFxuICA3MzpcXHRcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgYnVpbHQtaW4gRXRoZXJuZXQgc3dpdGNoIGZvdW5kXFxuICA3NDpcXHRcXHQgIGluIHRoZSBNVDc2MjggU29DLlxcbiAgNzU6XFx0XFxuICA3NjpcXHRjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcXG4gIDc3OlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIDg4RTYwNjAgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4gIDc4OlxcdFxcdHNlbGVjdCBORVRfRFNBX1RBR19UUkFJTEVSXFxuICA3OTpcXHRcXHRoZWxwXFxuICA4MDpcXHRcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTWFydmVsbCA4OEU2MDYwIGV0aGVybmV0IHN3aXRjaFxcbiAgODE6XFx0XFx0ICBjaGlwLlxcbiAgODI6XFx0XFxuICA4MzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZ1xcXCJcXG4gIDg0OlxcdFxcbiAgODU6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcXFwiXFxuICA4NjpcXHRcXG4gIDg3OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXFxcIlxcbiAgODg6XFx0XFxuICA4OTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjozMy41ODUwNTA5MDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg1MDA2ODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE1UNzYyOCBEU0EgVGFnZ2VyKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBNVDc2MjggaXMgaGFuZGxlZCB3aXRoaW4gdGhlIERTQSBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSBhY3Rpb24gaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgYG5ldC9kc2EvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IOKAkyB0aGUgS2NvbmZpZyBsaWtlbHkgZGVmaW5lcyB0aGUgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoaXMgc3BlY2lmaWMgdGFnZ2VyLCBgTkVUX0RTQV9UQUdfTVQ3NjI4YC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGhvdyBpdCdzIGVuYWJsZWQsIHdoYXQgb3RoZXIgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgcGVyaGFwcyBldmVuIHNvbWUgYnJpZWYgZG9jdW1lbnRhdGlvbiBzbmlwcGV0cyBpZiBJJ20gbHVja3kuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byBiZXR0ZXIgdW5kZXJzdGFuZCBpdHMgb3ZlcmFsbCByb2xlIGluIHRoZSBicm9hZGVyIERTQSBhcmNoaXRlY3R1cmUuIFRoaXMgaW5pdGlhbCBLY29uZmlnIGluc3BlY3Rpb24gd2lsbCBxdWlja2x5IGluZm9ybSBtZSBhYm91dCB0aGUgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGNvbXBsZXhpdHkgc3Vycm91bmRpbmcgdGhlIE1UNzYyOCdzIGludGVncmF0aW9uLiBBZnRlciB0aGlzLCBJJ2xsIGtub3cgd2hhdCB0byBsb29rIGZvciBuZXh0LiBJJ20ga2VlbiB0byBncmFzcCB0aGUgdW5kZXJseWluZyBEU0EgdGFnZ2VyIGZ1bmN0aW9uYWxpdHkgYXQgcGxheSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTI6MzUuOTcwMDYwMTU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY3OTg0MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVEFHX01UNzYyOFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZHNhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kc2EvS2NvbmZpZz05ND1jb25maWcgTkVUX0RTQV9UQUdfRURTQVxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTEwMC1cXG5uZXQvZHNhL0tjb25maWc6MTAxOmNvbmZpZyBORVRfRFNBX1RBR19NVDc2MjhcXG5uZXQvZHNhL0tjb25maWctMTAyLVxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciB0aGUgTVQ3NjI4IGVtYmVkZGVkIHN3aXRjaFxcXCJcXG4tLVxcbm5ldC9kc2EvTWFrZWZpbGU9Mjk9b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX0xBTjkzMDMpICs9IHRhZ19sYW45MzAzLm9cXG5uZXQvZHNhL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19NVDc2MjgpICs9IHRhZ19tdDc2Mjgub1xcbm5ldC9kc2EvTWFrZWZpbGUtMzEtb2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX01USykgKz0gdGFnX210ay5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjM2LjEzNjg5ODEwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjY2MDAzMDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBEU0EgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBmaXJzdCBwbGFjZSBteSBicmFpbiBuYXR1cmFsbHkgZ29lcyBpcyB0aGUgYG5ldC9kc2EvS2NvbmZpZ2AgZmlsZS4gSSdtIHNwZWNpZmljYWxseSB6ZXJvaW5nIGluIGFyb3VuZCBsaW5lIDEwMSDigJMgdGhhdCdzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSByZWFzb24sIGlmIEkgcmVjYWxsLiBQcm9iYWJseSBzb21lIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCB0aGVyZS4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTI6MzcuODAyOTA0NjU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTU5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZHNhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0XFx0dHJpc3RhdGUgXFxcIlRhZyBkcml2ZXIgZm9yIE1hcnZlbGwgc3dpdGNoZXMgdXNpbmcgRXRoZXJUeXBlIERTQSBoZWFkZXJzXFxcIlxcbiAgOTY6XFx0XFx0c2VsZWN0IE5FVF9EU0FfVEFHX0RTQV9DT01NT05cXG4gIDk3OlxcdFxcdGhlbHBcXG4gIDk4OlxcdFxcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yIHRoZVxcbiAgOTk6XFx0XFx0ICBNYXJ2ZWxsIHN3aXRjaGVzIHdoaWNoIHVzZSBFdGhlclR5cGUgRFNBIGhlYWRlcnMuXFxuIDEwMDpcXHRcXG4gMTAxOlxcdGNvbmZpZyBORVRfRFNBX1RBR19NVDc2MjhcXG4gMTAyOlxcdFxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciB0aGUgTVQ3NjI4IGVtYmVkZGVkIHN3aXRjaFxcXCJcXG4gMTAzOlxcdFxcdGhlbHBcXG4gMTA0OlxcdFxcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yIHRoZVxcbiAxMDU6XFx0XFx0ICBzd2l0Y2ggZW1iZWRkZWQgaW4gdGhlIE1UNzYyOCBTb0MuXFxuIDEwNjpcXHRcXG4gMTA3OlxcdGNvbmZpZyBORVRfRFNBX1RBR19NVEtcXG4gMTA4OlxcdFxcdHRyaXN0YXRlIFxcXCJUYWcgZHJpdmVyIGZvciBNZWRpYXRlayBzd2l0Y2hlc1xcXCJcXG4gMTA5OlxcdFxcdGhlbHBcXG4gMTEwOlxcdFxcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yXFxuIDExMTpcXHRcXHQgIE1lZGlhdGVrIHN3aXRjaGVzLlxcbiAxMTI6XFx0XFxuIDExMzpcXHRjb25maWcgTkVUX0RTQV9UQUdfTVhMXzg2MlhYXFxuIDExNDpcXHRcXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTWF4TGluZWFyIE14TDg2Mnh4IHN3aXRjaGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjozNy44MDMwNDc3MDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ3Mjk0NjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE1UNzYyOCBhbmQgVmlydHVhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIGBkcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmNgIGZpbGUuIFJpZ2h0LCBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgdGhlIE1UNzYyOCBTb0MncyBlbWJlZGRlZCBzd2l0Y2guIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogY2FuIEkgcmVhbGlzdGljYWxseSBsZXZlcmFnZSBEU0Egc3dpdGNoZXMgb3IgdGFnZ2VycywgbGlrZSB0aGUgb25lIHRoaXMgZHJpdmVyIGxpa2VseSBtYW5hZ2VzLCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJJ20gdGhpbmtpbmcgUUVNVSBvciBhIHR5cGljYWwgYW1kNjQgc2V0dXAuIFRoYXQncyB0aGUgcmVhbCBjaGFsbGVuZ2UgaGVyZS4gQmVmb3JlIEkganVtcCB0b28gZmFyIGRvd24gdGhhdCByYWJiaXQgaG9sZSwgaG9sZCBvbi4uLiBpcyB0aGlzIHRydWx5IGEgcGxhdGZvcm0gZHJpdmVyPyBCZXN0IHRvIGRvdWJsZS1jaGVjayBhZ2FpbnN0IHRoZSBjb250ZW50cyBvZiBgbXQ3NjI4LmNgIGRpcmVjdGx5IHRvIGJlIHN1cmUuIEl0J3MgZWFzeSB0byBhc3N1bWUsIGJ1dCBtYWtpbmcgdGhhdCBhc3N1bXB0aW9uIHdvdWxkIGxlYWQgbWUgYXN0cmF5LiBMZXQncyBtYWtlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjA1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1Mjo0MC4yNzU5OTc2NThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjE5NTI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL210NzYyOC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYz04MzM9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXQ3NjI4X29mX21hdGNoKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtODM0LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzo4MzU6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXQ3NjI4X2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtODM2LVxcdC5kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtODQ0LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzo4NDU6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtdDc2MjhfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtODQ2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1Mjo0MC40MTIyMDAwNTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk0Mjc3OTg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIE1UNzYyOCBEU0EgRHJpdmVyKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIE1UNzYyOCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgRFNBIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIHRhcmdldCBpcyB0aGUgYGRyaXZlcnMvbmV0L2RzYS9tdDc2MjguY2AgZmlsZS4gSSdsbCBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGBtdDc2MjhfcHJvYmVgIGZ1bmN0aW9uIC0gdGhhdCdzIHdoZXJlIHRoZSBpbml0aWFsIGRldmljZSBzZXR1cCBoYXBwZW5zLCByaWdodD8gQW5kIEkgc2hvdWxkIHByb2JhYmx5IHJldmlldyBgbXQ3NjI4X29mX21hdGNoYCBhcyB3ZWxsLCBqdXN0IHRvIGJlIGNlcnRhaW4gSSB1bmRlcnN0YW5kIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5nIGFuZCBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIHRoZSBNVDc2MjggaGFyZHdhcmUgaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGlzJ2xsIHByb2JhYmx5IGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBhbnkgcG93ZXItb24gaXNzdWVzIGFuZCBpbml0aWFsIGhhcmR3YXJlIHNldHVwIGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgYmVpbmcgY2FsbGVkIGJ5IHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcyNiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjQyLjM1NDk4NDgwNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL210NzYyOC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgxNTpcXHR9XFxuIDgxNjpcXHRcXG4gODE3OlxcdHN0YXRpYyB2b2lkIG10NzYyOF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiA4MTg6XFx0e1xcbiA4MTk6XFx0XFx0c3RydWN0IG10NzYyOF9lc3cgKmVzdyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xcbiA4MjA6XFx0XFxuIDgyMTpcXHRcXHRpZiAoIWVzdylcXG4gODIyOlxcdFxcdFxcdHJldHVybjtcXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0ZHNhX3N3aXRjaF9zaHV0ZG93bihlc3ctXFx1MDAzZWRzKTtcXG4gODI1OlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBOVUxMKTtcXG4gODI2OlxcdH1cXG4gODI3OlxcdFxcbiA4Mjg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3NjI4X29mX21hdGNoW10gPSB7XFxuIDgyOTpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1lZGlhdGVrLG10NzYyOC1lc3dcXFwiIH0sXFxuIDgzMDpcXHRcXHR7fVxcbiA4MzE6XFx0fTtcXG4gODMyOlxcdFxcbiA4MzM6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXQ3NjI4X29mX21hdGNoKTtcXG4gODM0OlxcdFxcbiA4MzU6XFx0c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXQ3NjI4X2RyaXZlciA9IHtcXG4gODM2OlxcdFxcdC5kcml2ZXIgPSB7XFxuIDgzNzpcXHRcXHRcXHQgICAubmFtZSA9IFxcXCJtdDc2MjgtZXN3XFxcIixcXG4gODM4OlxcdFxcdFxcdCAgIC5vZl9tYXRjaF90YWJsZSA9IG10NzYyOF9vZl9tYXRjaCxcXG4gODM5OlxcdFxcdFxcdCAgICB9LFxcbiA4NDA6XFx0XFx0LnByb2JlID0gbXQ3NjI4X3Byb2JlLFxcbiA4NDE6XFx0XFx0LnJlbW92ZSA9IG10NzYyOF9yZW1vdmUsXFxuIDg0MjpcXHRcXHQuc2h1dGRvd24gPSBtdDc2Mjhfc2h1dGRvd24sXFxuIDg0MzpcXHR9O1xcbiA4NDQ6XFx0XFxuIDg0NTpcXHRtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG10NzYyOF9kcml2ZXIpO1xcbiA4NDY6XFx0XFxuIDg0NzpcXHRNT0RVTEVfQVVUSE9SKFxcXCJKb3JpcyBWYWlzdmlsYSBcXHUwMDNjam9leUB0aW55aXNyLmNvbVxcdTAwM2VcXFwiKTtcXG4gODQ4OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiRHJpdmVyIGZvciBNZWRpYXRlayBNVDc2MjggZW1iZWRkZWQgc3dpdGNoXFxcIik7XFxuIDg0OTpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjQyLjM1NTEyMjg3NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzQ4NTY3NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBtdDc2MjhgIFBsYXRmb3JtIERyaXZlciBhbmQgRFNBIFRhZ2dpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG10NzYyOGAgdGhpbmcuIEZyb20gd2hhdCBJIHNlZSwgaXQncyB1c2luZyB0aGUgYFwibWVkaWF0ZWssbXQ3NjI4LWVzd1wiYCBvZl9kZXZpY2VfaWQuIE15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgRFNBIHN0dWZmLCBzcGVjaWZpY2FsbHkgaW4gYHRhZ19tdDc2MjguY2AsIHNvbWV0aGluZyB0aGF0IGNhbiBiZSB0d2Vha2VkIGZyb20gdXNlciBzcGFjZT8gQ291bGQgc29tZW9uZSBtYW5pcHVsYXRlIGl0IHZpYSBhIG1vY2sgRFNBIHNldHVwLCBOZXRsaW5rLCBvciBldmVuIHNvbWV0aGluZyBsaWtlIHN5emthbGxlcj8gVGhhdCdzIHRoZSByZWFsIHF1ZXN0aW9uLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgRFNBIHRhZ2dlciBpdHNlbGYgaXMgbG9hZGFibGUsIGlmIHRoZXJlJ3MgYSBzZWxlY3Rpb24gbWVjaGFuaXNtIGF0IHBsYXkgaGVyZS4gVGhpcyBtYWtlcyBtZSBjb25zaWRlciBob3cgRFNBIHRhZ2dpbmcgKmFjdHVhbGx5KiB3b3JrcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBEU0EgdGFnZ2luZyBwcm90b2NvbHMgdGhlbXNlbHZlcywgSSBzdXBwb3NlLiBHb3R0YSBnZXQgYSBzb2xpZCBoYW5kbGUgb24gaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTQ0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTI6NDQuNzAzNjk3ODE2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQ4NDI0Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRTQV9UQUdfUFJPVE9fTVQ3NjI4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYz01ODg9bXQ3NjI4X2dldF90YWdfcHJvdG8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy01ODkte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzo1OTA6XFx0cmV0dXJuIERTQV9UQUdfUFJPVE9fTVQ3NjI4O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy01OTEtfVxcbi0tXFxuaW5jbHVkZS9uZXQvZHNhLmg9MjY9c3RydWN0IHRjX2FjdGlvbjtcXG4tLVxcbmluY2x1ZGUvbmV0L2RzYS5oLTYyLSNkZWZpbmUgRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFXFx0XFx0MzRcXG5pbmNsdWRlL25ldC9kc2EuaDo2MzojZGVmaW5lIERTQV9UQUdfUFJPVE9fTVQ3NjI4X1ZBTFVFXFx0XFx0MzVcXG5pbmNsdWRlL25ldC9kc2EuaC02NC1cXG5pbmNsdWRlL25ldC9kc2EuaD02NT1lbnVtIGRzYV90YWdfcHJvdG9jb2wge1xcbi0tXFxuaW5jbHVkZS9uZXQvZHNhLmgtMTAwLVxcdERTQV9UQUdfUFJPVE9fS1NaODQ2M1xcdFxcdD0gRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFLFxcbmluY2x1ZGUvbmV0L2RzYS5oOjEwMTpcXHREU0FfVEFHX1BST1RPX01UNzYyOFxcdFxcdD0gRFNBX1RBR19QUk9UT19NVDc2MjhfVkFMVUUsXFxuaW5jbHVkZS9uZXQvZHNhLmgtMTAyLX07XFxuLS1cXG5uZXQvZHNhL3RhZ19tdDc2MjguYz0xMjE9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyBtdDc2MjhfdGFnX29wcyA9IHtcXG5uZXQvZHNhL3RhZ19tdDc2MjguYy0xMjItXFx0Lm5hbWUgPSBNVDc2MjhfVEFHX05BTUUsXFxubmV0L2RzYS90YWdfbXQ3NjI4LmM6MTIzOlxcdC5wcm90byA9IERTQV9UQUdfUFJPVE9fTVQ3NjI4LFxcbm5ldC9kc2EvdGFnX210NzYyOC5jLTEyNC1cXHQueG1pdCA9IG10NzYyOF90YWdfeG1pdCxcXG4tLVxcbm5ldC9kc2EvdGFnX210NzYyOC5jPTEyOT1tb2R1bGVfZHNhX3RhZ19kcml2ZXIobXQ3NjI4X3RhZ19vcHMpO1xcbm5ldC9kc2EvdGFnX210NzYyOC5jLTEzMC1cXG5uZXQvZHNhL3RhZ19tdDc2MjguYzoxMzE6TU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fTVQ3NjI4LCBNVDc2MjhfVEFHX05BTUUpO1xcbm5ldC9kc2EvdGFnX210NzYyOC5jLTEzMi1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIkRTQSB0YWcgZHJpdmVyIGZvciBNVDc2Mjggc3dpdGNoXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjQ3LjU1MjEyODUyOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjk0Njk5MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRFNBIFRhZ2dpbmcgUHJvdG9jb2wgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGFuZCBJJ20gd29uZGVyaW5nOiBjYW4gSSAqZHluYW1pY2FsbHkqIG1hbmlwdWxhdGUgdGhlIERTQSB0YWdnaW5nIHByb3RvY29sPyBDYW4gSSBkbyB0aGlzIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzIOKAkyBzeXNmcywgbmV0bGluaywgZXRodG9vbCwgb3IgZXZlbiBhdCB0aGUgbmV0ZGV2IGxldmVsPyBJJ20gdGhpbmtpbmcgYWJvdXQgc2NlbmFyaW9zIHdoZXJlIEkgbWlnaHQgbmVlZCBhIERTQSBtb2NrIGludGVyZmFjZSwgYSBkdW1teSBzZXR1cCwgYSBsb29wYmFjaywgb3IgZXZlbiBzb21ldGhpbmcgbGlrZSBuZXRraXQgZm9yIHRlc3RpbmcuXG5cblRoZSBjb3JlIHF1ZXN0aW9uIGlzLCBob3cgKmV4YWN0bHkqIGRvZXMgdGhlIHN5c3RlbSBkZWNpZGUgd2hpY2ggRFNBIHRhZyBwcm90b2NvbCB0byB1c2UsIGFuZCwgY3J1Y2lhbGx5LCBjYW4gSSAqaW5mbHVlbmNlKiB0aGF0IHNlbGVjdGlvbiBvciBldmVuIGZvcmNlIGEgY2hhbmdlIGF0IHJ1bnRpbWU/IFRpbWUgdG8gZmlyZSB1cCB0aGUgc2VhcmNoIGVuZ2luZSBhbmQgZGVsdmUgaW50byBob3cgRFNBIHRhZyBwcm90b2NvbHMgYXJlIGNob3NlbiBhbmQgaWYgdGhhdCBjaG9pY2UgaXMgbW9kaWZpYWJsZSBvbiB0aGUgZmx5LiBMZXQncyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgY29tbXVuaXR5IGRpc2N1c3Npb25zIGhhdmUgdG8gc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUxOCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjUwLjg0NjgzMTU5NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5NDc1MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoYW5nZV90YWdfcHJvdG9jb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZHNhL2RzYS5jPTU3MD1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfc2V0dXBfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbm5ldC9kc2EvZHNhLmMtNTc5LVxcdHJ0bmxfbG9jaygpO1xcbm5ldC9kc2EvZHNhLmM6NTgwOlxcdGVyciA9IGRzLVxcdTAwM2VvcHMtXFx1MDAzZWNoYW5nZV90YWdfcHJvdG9jb2woZHMsIHRhZ19vcHMtXFx1MDAzZXByb3RvKTtcXG5uZXQvZHNhL2RzYS5jLTU4MS1cXHRydG5sX3VubG9jaygpO1xcbi0tXFxubmV0L2RzYS9kc2EuYz0xMTU1PXN0YXRpYyBpbnQgZHNhX3BvcnRfcGFyc2VfY3B1KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxcbi0tXFxubmV0L2RzYS9kc2EuYy0xMTc2LVxcdGlmICh1c2VyX3Byb3RvY29sKSB7XFxubmV0L2RzYS9kc2EuYzoxMTc3OlxcdFxcdGlmICghZHMtXFx1MDAzZW9wcy1cXHUwMDNlY2hhbmdlX3RhZ19wcm90b2NvbCkge1xcbm5ldC9kc2EvZHNhLmMtMTE3OC1cXHRcXHRcXHRkZXZfZXJyKGRzLVxcdTAwM2VkZXYsIFxcXCJUYWcgcHJvdG9jb2wgY2Fubm90IGJlIG1vZGlmaWVkXFxcXG5cXFwiKTtcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTIzMC1cXHQgKiBkc2Ffc3dpdGNoX3NldHVwX3RhZ19wcm90b2NvbCBvbmNlIC5zZXR1cCBoYXMgcnVuIGFuZCB0aGVcXG5uZXQvZHNhL2RzYS5jOjEyMzE6XFx0ICogZHJpdmVyIGlzIHJlYWR5IHRvIGFjY2VwdCBjYWxscyB0byAuY2hhbmdlX3RhZ19wcm90b2NvbC4gSWZcXG5uZXQvZHNhL2RzYS5jLTEyMzItXFx0ICogdGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjdXN0b20gcHJvdG9jb2wgYXQgdGhhdFxcbi0tXFxubmV0L2RzYS9zd2l0Y2guYz04NzM9c3RhdGljIGludCBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbi0tXFxubmV0L2RzYS9zd2l0Y2guYy04NzktXFxubmV0L2RzYS9zd2l0Y2guYzo4ODA6XFx0aWYgKCFkcy1cXHUwMDNlb3BzLVxcdTAwM2VjaGFuZ2VfdGFnX3Byb3RvY29sKVxcbm5ldC9kc2Evc3dpdGNoLmMtODgxLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9kc2Evc3dpdGNoLmMtODg0LVxcbm5ldC9kc2Evc3dpdGNoLmM6ODg1OlxcdGVyciA9IGRzLVxcdTAwM2VvcHMtXFx1MDAzZWNoYW5nZV90YWdfcHJvdG9jb2woZHMsIHRhZ19vcHMtXFx1MDAzZXByb3RvKTtcXG5uZXQvZHNhL3N3aXRjaC5jLTg4Ni1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1Mjo1MS4wNTYzMTcyNDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3MzM1NDk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBgZHNhX3N3aXRjaF9jaGFuZ2VfdGFnX3Byb3RvYCBDYWxsZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGRzYV9zd2l0Y2hfY2hhbmdlX3RhZ19wcm90b2AuIFRoZSBrZXkgcXVlc3Rpb24gaXMsICp3aGVyZSogaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBpbnZva2VkPyBJcyB0aGlzIHNvbWV0aGluZyB0cmlnZ2VyZWQgYnkgYSB1c2VyIHNwYWNlIGludGVyYWN0aW9uLCBsaWtlIGEgc3lzZnMgZW50cnksIGEgbmV0bGluayBtZXNzYWdlLCBvciBtYXliZSBldmVuIHNvbWV0aGluZyBtb3JlIGRldi1vcmllbnRlZCBsaWtlIGRlYnVnZnM/IFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgZ3JhcGguIE5lZWQgdG8gZmluZCBvdXQgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGNhbGwgYGRzYV9zd2l0Y2hfY2hhbmdlX3RhZ19wcm90b2AuIFRoaXMnbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyB0eXBpY2FsIHVzYWdlIHNjZW5hcmlvIGFuZCBwb3RlbnRpYWxseSBleHBvc2Ugc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIG9yIHN1YnRsZSBkZXBlbmRlbmNpZXMgaW4gdGhlIERTQSBzdWJzeXN0ZW0uIEhvcGVmdWxseSwgdGhlIGNhbGwgc3RhY2sgd2lsbCBiZSBlYXN5IHRvIHRyYWNlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjUzLjAyOTY3NjQwOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNTkyNjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRzYV9zd2l0Y2hfY2hhbmdlX3RhZ19wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZHNhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kc2Evc3dpdGNoLmM9ODUzPXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9ob3N0X3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4tLVxcbm5ldC9kc2Evc3dpdGNoLmMtODcyLVxcbm5ldC9kc2Evc3dpdGNoLmM6ODczOnN0YXRpYyBpbnQgZHNhX3N3aXRjaF9jaGFuZ2VfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5uZXQvZHNhL3N3aXRjaC5jLTg3NC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRzYV9ub3RpZmllcl90YWdfcHJvdG9faW5mbyAqaW5mbylcXG4tLVxcbm5ldC9kc2Evc3dpdGNoLmM9OTc0PXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxubmV0L2RzYS9zd2l0Y2guYy0xMDQ0LVxcdGNhc2UgRFNBX05PVElGSUVSX1RBR19QUk9UTzpcXG5uZXQvZHNhL3N3aXRjaC5jOjEwNDU6XFx0XFx0ZXJyID0gZHNhX3N3aXRjaF9jaGFuZ2VfdGFnX3Byb3RvKGRzLCBpbmZvKTtcXG5uZXQvZHNhL3N3aXRjaC5jLTEwNDYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjUzLjIwMTI3NTQyNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDExNDY4MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgRFNBIFRhZyBQcm90b2NvbCBOb3RpZmllcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBgRFNBX05PVElGSUVSX1RBR19QUk9UT2AgZXZlbnQuIEl0IHNlZW1zIGxpa2UgaXQncyB0cmlnZ2VyZWQgYnkgYSBmZXcgZGlmZmVyZW50IHNvdXJjZXMg4oCTIHNwZWNpZmljYWxseSwgYGRzYV9wb3J0X2NoYW5nZV90YWdfcHJvdG9gLCBgZHNhX2NvbmR1aXRfc2V0dXBgLCBvciBwb3RlbnRpYWxseSwgc29tZXRoaW5nIGhhcHBlbmluZyB0aHJvdWdoIHN5c2ZzLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBkaWcgZGlyZWN0bHkgaW50byB0aGUgYERTQV9OT1RJRklFUl9UQUdfUFJPVE9gIGRlZmluaXRpb24gaXRzZWxmLiBUaGF0J3Mgd2hlcmUgdGhlIGFuc3dlcnMgYXJlIGdvaW5nIHRvIGxpZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBjYXVzZSB0aGF0IG5vdGlmaWVyIHRvIGZpcmUgYW5kIHdoYXQgZGF0YSBpdCdzIHBhc3NpbmcgYWxvbmcuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjgwMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjU1LjYxMjc0NzE3NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NDc3NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRTQV9OT1RJRklFUl9UQUdfUFJPVE9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZHNhL2RzYS5jPTk0OD1zdGF0aWMgaW50IGRzYV90cmVlX2JpbmRfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcXG4tLVxcbm5ldC9kc2EvZHNhLmMtOTYwLVxcdGluZm8udGFnX29wcyA9IHRhZ19vcHM7XFxubmV0L2RzYS9kc2EuYzo5NjE6XFx0ZXJyID0gZHNhX3RyZWVfbm90aWZ5KGRzdCwgRFNBX05PVElGSUVSX1RBR19QUk9UT19DT05ORUNULCBcXHUwMDI2aW5mbyk7XFxubmV0L2RzYS9kc2EuYy05NjItXFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBlcnIgIT0gLUVPUE5PVFNVUFApXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTk2Ni1cXHRpbmZvLnRhZ19vcHMgPSBvbGRfdGFnX29wcztcXG5uZXQvZHNhL2RzYS5jOjk2NzpcXHRkc2FfdHJlZV9ub3RpZnkoZHN0LCBEU0FfTk9USUZJRVJfVEFHX1BST1RPX0RJU0NPTk5FQ1QsIFxcdTAwMjZpbmZvKTtcXG5uZXQvZHNhL2RzYS5jLTk2OC1cXG4tLVxcbm5ldC9kc2EvZHNhLmMtOTcyLVxcdGluZm8udGFnX29wcyA9IHRhZ19vcHM7XFxubmV0L2RzYS9kc2EuYzo5NzM6XFx0ZHNhX3RyZWVfbm90aWZ5KGRzdCwgRFNBX05PVElGSUVSX1RBR19QUk9UT19ESVNDT05ORUNULCBcXHUwMDI2aW5mbyk7XFxubmV0L2RzYS9kc2EuYy05NzQtXFx0ZHN0LVxcdTAwM2V0YWdfb3BzID0gb2xkX3RhZ19vcHM7XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTk4Mz1pbnQgZHNhX3RyZWVfY2hhbmdlX3RhZ19wcm90byhzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QsXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTEwMDgtXFx0aW5mby50YWdfb3BzID0gdGFnX29wcztcXG5uZXQvZHNhL2RzYS5jOjEwMDk6XFx0ZXJyID0gZHNhX3RyZWVfbm90aWZ5KGRzdCwgRFNBX05PVElGSUVSX1RBR19QUk9UTywgXFx1MDAyNmluZm8pO1xcbm5ldC9kc2EvZHNhLmMtMTAxMC1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2RzYS9kc2EuYy0xMDIyLVxcdGluZm8udGFnX29wcyA9IG9sZF90YWdfb3BzO1xcbm5ldC9kc2EvZHNhLmM6MTAyMzpcXHRkc2FfdHJlZV9ub3RpZnkoZHN0LCBEU0FfTk9USUZJRVJfVEFHX1BST1RPLCBcXHUwMDI2aW5mbyk7XFxubmV0L2RzYS9kc2EuYy0xMDI0LW91dF91bmxvY2s6XFxuLS1cXG5uZXQvZHNhL3N3aXRjaC5jPTk3ND1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tLVxcbm5ldC9kc2Evc3dpdGNoLmMtMTA0My1cXHRcXHRicmVhaztcXG5uZXQvZHNhL3N3aXRjaC5jOjEwNDQ6XFx0Y2FzZSBEU0FfTk9USUZJRVJfVEFHX1BST1RPOlxcbm5ldC9kc2Evc3dpdGNoLmMtMTA0NS1cXHRcXHRlcnIgPSBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG8oZHMsIGluZm8pO1xcbm5ldC9kc2Evc3dpdGNoLmMtMTA0Ni1cXHRcXHRicmVhaztcXG5uZXQvZHNhL3N3aXRjaC5jOjEwNDc6XFx0Y2FzZSBEU0FfTk9USUZJRVJfVEFHX1BST1RPX0NPTk5FQ1Q6XFxubmV0L2RzYS9zd2l0Y2guYy0xMDQ4LVxcdFxcdGVyciA9IGRzYV9zd2l0Y2hfY29ubmVjdF90YWdfcHJvdG8oZHMsIGluZm8pO1xcbm5ldC9kc2Evc3dpdGNoLmMtMTA0OS1cXHRcXHRicmVhaztcXG5uZXQvZHNhL3N3aXRjaC5jOjEwNTA6XFx0Y2FzZSBEU0FfTk9USUZJRVJfVEFHX1BST1RPX0RJU0NPTk5FQ1Q6XFxubmV0L2RzYS9zd2l0Y2guYy0xMDUxLVxcdFxcdGVyciA9IGRzYV9zd2l0Y2hfZGlzY29ubmVjdF90YWdfcHJvdG8oZHMsIGluZm8pO1xcbi0tXFxubmV0L2RzYS9zd2l0Y2guaD0xMD1lbnVtIHtcXG4tLVxcbm5ldC9kc2Evc3dpdGNoLmgtMzEtXFx0RFNBX05PVElGSUVSX01UVSxcXG5uZXQvZHNhL3N3aXRjaC5oOjMyOlxcdERTQV9OT1RJRklFUl9UQUdfUFJPVE8sXFxubmV0L2RzYS9zd2l0Y2guaDozMzpcXHREU0FfTk9USUZJRVJfVEFHX1BST1RPX0NPTk5FQ1QsXFxubmV0L2RzYS9zd2l0Y2guaDozNDpcXHREU0FfTk9USUZJRVJfVEFHX1BST1RPX0RJU0NPTk5FQ1QsXFxubmV0L2RzYS9zd2l0Y2guaC0zNS1cXHREU0FfTk9USUZJRVJfVEFHXzgwMjFRX1ZMQU5fQURELFxcbi0tXFxubmV0L2RzYS9zd2l0Y2guaD05Mj1zdHJ1Y3QgZHNhX25vdGlmaWVyX210dV9pbmZvIHtcXG4tLVxcbm5ldC9kc2Evc3dpdGNoLmgtOTYtXFxubmV0L2RzYS9zd2l0Y2guaDo5NzovKiBEU0FfTk9USUZJRVJfVEFHX1BST1RPXyogKi9cXG5uZXQvZHNhL3N3aXRjaC5oLTk4LXN0cnVjdCBkc2Ffbm90aWZpZXJfdGFnX3Byb3RvX2luZm8ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1Mjo1NS43ODIyMzY1MTRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2NzIyOTM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBDYWxsIFNpdGVzIG9mIGBkc2FfdHJlZV9jaGFuZ2VfdGFnX3Byb3RvYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYGRzYV90cmVlX2NoYW5nZV90YWdfcHJvdG9gLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCwgb2YgY291cnNlLCBpcyB0byBmaWd1cmUgb3V0ICp3aGVyZSogaXQncyBhY3R1YWxseSBiZWluZyB1c2VkLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMuIFdoYXQgbW9kdWxlcyBvciBmdW5jdGlvbnMgYXJlIGNhbGxpbmcgaW50byB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24/ICBJcyBpdCBhIGNvcmUgbGlicmFyeSBjYWxsLCBhIHVzZXItc3BhY2UgdXRpbGl0eSwgc29tZXRoaW5nIGluIHRoZSBtaWRkbGU/IFRoaXMgd2lsbCBnaXZlIG1lIGltbWVkaWF0ZSBpbnNpZ2h0IGludG8gd2hhdCBkZXBlbmRzIG9uIGl0IGFuZCBob3cgY2hhbmdpbmcgaXQgbWlnaHQgYnJlYWsgdGhpbmdzLiBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbGluZyBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kLCBwb3RlbnRpYWxseSwgaXRzIGxpbWl0YXRpb25zLiBMZXQncyBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjU4LjE0OTQ2ODQ2NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MjEwNDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRzYV90cmVlX2NoYW5nZV90YWdfcHJvdG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZHNhL2NvbmR1aXQuYz0zNTA9c3RhdGljIHNzaXplX3QgdGFnZ2luZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jLTM4MC1cXG5uZXQvZHNhL2NvbmR1aXQuYzozODE6XFx0ZXJyID0gZHNhX3RyZWVfY2hhbmdlX3RhZ19wcm90byhjcHVfZHAtXFx1MDAzZWRzLVxcdTAwM2Vkc3QsIG5ld190YWdfb3BzLFxcbm5ldC9kc2EvY29uZHVpdC5jLTM4Mi1cXHRcXHRcXHRcXHRcXHRvbGRfdGFnX29wcyk7XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTk0OD1zdGF0aWMgaW50IGRzYV90cmVlX2JpbmRfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcXG4tLVxcbm5ldC9kc2EvZHNhLmMtOTgyLSAqL1xcbm5ldC9kc2EvZHNhLmM6OTgzOmludCBkc2FfdHJlZV9jaGFuZ2VfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcXG5uZXQvZHNhL2RzYS5jLTk4NC1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgKnRhZ19vcHMsXFxuLS1cXG5uZXQvZHNhL2RzYS5oPTI0PXN0cnVjdCBuZXRfZGV2aWNlICpkc2FfdHJlZV9maW5kX2ZpcnN0X2NvbmR1aXQoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KTtcXG5uZXQvZHNhL2RzYS5oOjI1OmludCBkc2FfdHJlZV9jaGFuZ2VfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCxcXG5uZXQvZHNhL2RzYS5oLTI2LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyAqdGFnX29wcyxcXG4tLVxcbm5ldC9kc2Evc3dpdGNoLmM9ODczPXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9jaGFuZ2VfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4tLVxcbm5ldC9kc2Evc3dpdGNoLmMtOTAwLVxcbm5ldC9kc2Evc3dpdGNoLmM6OTAxOlxcdFxcdC8qIHJ0bmxfbXV0ZXggaXMgaGVsZCBpbiBkc2FfdHJlZV9jaGFuZ2VfdGFnX3Byb3RvICovXFxubmV0L2RzYS9zd2l0Y2guYy05MDItXFx0XFx0ZHNhX3VzZXJfY2hhbmdlX210dSh1c2VyLCB1c2VyLVxcdTAwM2VtdHUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1Mjo1OC4yNTQ2ODUyMzVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwMTcyODA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIERTQSBJbnF1aXJ5KipcblxuSG1tLCB3YWl0IGEgbWludXRlLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gYW55dGhpbmcgaW52b2x2aW5nIERTQSwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIG1ha2Ugc3VyZSBJJ20gZ3JvdW5kZWQgaW4gdGhlIGVzc2VudGlhbHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkRvIHdlIGV2ZW4gaGF2ZSBhIHZpcnR1YWwgb3IgbW9jayBEU0Egc3dpdGNoIHJlcHJlc2VudGF0aW9uIHdpdGhpbiB0aGUgTGludXgga2VybmVsIGl0c2VsZj9cIiBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgdGhlIGtlcm5lbCBvZmZlcnMgYXMgYSBmb3VuZGF0aW9uLiBJdCdzIHRvbyBlYXN5IHRvIGFzc3VtZSwgYW5kIEkndmUgYmVlbiBjYXVnaHQgb3V0IGJ5IGFzc3VtcHRpb25zIGJlZm9yZS5cblxuU28sIGxldCdzIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIG9idmlvdXMgcGxhY2UgdG8gbG9vayBmb3IgRFNBIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMgaXMgdW5kZXIgYGRyaXZlcnMvbmV0L2RzYWAuIFRoYXQgZGlyZWN0b3J5IGlzIHRoZSBsb2dpY2FsIGxvY2F0aW9uIGZvciBhbGwgdGhpbmdzIERTQS4gSeKAmWxsIHN0YXJ0IHRoZXJlLCBhbmQgaG9wZSBJIGNhbiBxdWlja2x5IGZpbmQgYW55IHNpZ24gb2YgdmlydHVhbCBvciBtb2NrIHN3aXRjaCBkcml2ZXJzLiBUaGlzIGluaXRpYWwgc2VhcmNoIHNob3VsZCBxdWlja2x5IGNsZWFyIHRoZSBncm91bmQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQncyBhIGZ1bmRhbWVudGFsIGNoZWNrIGJlZm9yZSBjb25zaWRlcmluZyBhbnkga2luZCBvZiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MDcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MzowMC40NTY0MTYxMTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJiY21fc2YyLmNcIixcbiAgICBcImJjbV9zZjIuaFwiLFxuICAgIFwiYmNtX3NmMl9jZnAuY1wiLFxuICAgIFwiYmNtX3NmMl9yZWdzLmhcIixcbiAgICBcImRzYV9sb29wLmNcIixcbiAgICBcImtzODk5NS5jXCIsXG4gICAgXCJsYW45MzAzLWNvcmUuY1wiLFxuICAgIFwibGFuOTMwMy5oXCIsXG4gICAgXCJsYW45MzAzX2kyYy5jXCIsXG4gICAgXCJsYW45MzAzX21kaW8uY1wiLFxuICAgIFwibXQ3NTMwLW1kaW8uY1wiLFxuICAgIFwibXQ3NTMwLW1taW8uY1wiLFxuICAgIFwibXQ3NTMwLmNcIixcbiAgICBcIm10NzUzMC5oXCIsXG4gICAgXCJtdDc2MjguY1wiLFxuICAgIFwibXY4OGU2MDYwLmNcIixcbiAgICBcIm12ODhlNjA2MC5oXCIsXG4gICAgXCJyem4xX2E1cHN3LmNcIixcbiAgICBcInJ6bjFfYTVwc3cuaFwiLFxuICAgIFwidml0ZXNzZS12c2M3M3h4LWNvcmUuY1wiLFxuICAgIFwidml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLmNcIixcbiAgICBcInZpdGVzc2UtdnNjNzN4eC1zcGkuY1wiLFxuICAgIFwidml0ZXNzZS12c2M3M3h4LmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogW1xuICAgIFwiYjUzXCIsXG4gICAgXCJoaXJzY2htYW5uXCIsXG4gICAgXCJsYW50aXFcIixcbiAgICBcIm1pY3JvY2hpcFwiLFxuICAgIFwibW90b3Jjb21tXCIsXG4gICAgXCJtdjg4ZTZ4eHhcIixcbiAgICBcIm14bDg2Mnh4XCIsXG4gICAgXCJuZXRjXCIsXG4gICAgXCJvY2Vsb3RcIixcbiAgICBcInFjYVwiLFxuICAgIFwicmVhbHRla1wiLFxuICAgIFwic2phMTEwNVwiLFxuICAgIFwieHJzNzAweFwiXG4gIF1cbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUzOjAwLjQ1NjQ5OTQ3OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDQ5NzY5NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGRzYV9sb29wLmNgKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiBgZHNhX2xvb3AuY2AuIFRoYXQgZmlsZSBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIHBhcnRpY3VsYXIgYXJlYSwgc28gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb2YgaXRzIGxvZ2ljIGFuZCBpbXBsZW1lbnRhdGlvbi4gUmlnaHQgbm93LCAqdGhhdCogaXMgdGhlIGNvZGUgSSBuZWVkIHRvIGFuYWx5emUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDU4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUzOjAxLjkwNjI3Mjc4NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MTU0NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRzYV9sb29wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9Mz1iY20tc2YyLW9ianNcXHRcXHRcXHQ6PSBiY21fc2YyLm8gYmNtX3NmMl9jZnAub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfRFNBX0xPT1ApXFx0Kz0gZHNhX2xvb3Aub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXFx0Kz0ga3M4OTk1Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1OnN0cnVjdCBkc2FfbG9vcF92bGFuIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNi1cXHR1MTYgbWVtYmVycztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI5LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMwOnN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxLVxcdGNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzQtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU6ZW51bSBkc2FfbG9vcF9taWJfY291bnRlcnMge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2LVxcdERTQV9MT09QX1BIWV9SRUFEX09LLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM6c3RydWN0IGRzYV9sb29wX3BvcnQge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0OlxcdHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgbWliW19fRFNBX0xPT1BfQ05UX01BWF07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDUtXFx0dTE2IHB2aWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTpzdHJ1Y3QgZHNhX2xvb3BfcHJpdiB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAtXFx0c3RydWN0IG1paV9idXNcXHQqYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxLVxcdHVuc2lnbmVkIGludFxcdHBvcnRfYmFzZTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MjpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiB2bGFuc1tWTEFOX05fVklEXTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01My1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU0OlxcdHN0cnVjdCBkc2FfbG9vcF9wb3J0IHBvcnRzW0RTQV9NQVhfUE9SVFNdO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTU1LX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTc6c3RydWN0IGRzYV9sb29wX3BkYXRhIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01OC1cXHQvKiBNdXN0IGJlIGZpcnN0LCBzdWNoIHRoYXQgZHNhX3JlZ2lzdGVyX3N3aXRjaCgpIGNhbiBhY2Nlc3MgdGhpc1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Njc6c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgZHNhX2xvb3BfbWlic1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTY4LVxcdFtEU0FfTE9PUF9QSFlfUkVBRF9PS11cXHQ9IHsgXFxcInBoeV9yZWFkX29rXFxcIiwgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTc1PXN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2UgKnN3aXRjaF9tZGlvZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjc3OmVudW0gZHNhX2xvb3BfZGV2bGlua19yZXNvdXJjZV9pZCB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNzgtXFx0RFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9OT05FLCAgLyogREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy04MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4MjpzdGF0aWMgdTY0IGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCh2b2lkICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4NDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg1LVxcdHVuc2lnbmVkIGludCBpLCBjb3VudCA9IDA7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODY6XFx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6OTc6c3RhdGljIGludCBkc2FfbG9vcF9zZXR1cF9kZXZsaW5rX3Jlc291cmNlcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTgte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk5LVxcdHN0cnVjdCBkZXZsaW5rX3Jlc291cmNlX3NpemVfcGFyYW1zIHNpemVfcGFyYW1zO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEwMDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMDEtXFx0aW50IGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNS1cXHRcXHRcXHRcXHRcXHQgICAgICBEU0FfTE9PUF9ERVZMSU5LX1BBUkFNX0lEX1ZUVSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgZHNhX2xvb3BfZGV2bGlua192dHVfZ2V0LCBwcyk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTE3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTMzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNDpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzUte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNjpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzctXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRzLVxcdTAwM2VudW1fcG9ydHM7IGkrKylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDA6XFx0XFx0bWVtY3B5KHBzLVxcdTAwM2Vwb3J0c1tpXS5taWIsIGRzYV9sb29wX21pYnMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQxOlxcdFxcdCAgICAgICBzaXplb2YoZHNhX2xvb3BfbWlicykpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0NC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDU6XFx0cmV0dXJuIGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDYtfVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ny1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDg6c3RhdGljIHZvaWQgZHNhX2xvb3BfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNTItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTUzOnN0YXRpYyBpbnQgZHNhX2xvb3BfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTU0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjItXFx0XFx0XFx0XFx0IHUzMiBzdHJpbmdzZXQsIHVpbnQ4X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTY1LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTczLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE3NDpzdGF0aWMgdm9pZCBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3NS1cXHRcXHRcXHRcXHQgICAgICAgdWludDY0X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc4LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTgzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE4NDpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg1LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxODY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTk4LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE5OTpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV93cml0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMC1cXHRcXHRcXHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAxLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyMDI6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAzLVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIxNTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMTYtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMjUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI3LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjMzOnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzNC1cXHRcXHRcXHRcXHRcXHR1OCBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzOS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNDA6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjQxLVxcdFxcdFxcdFxcdFxcdGJvb2wgdmxhbl9maWx0ZXJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNDktXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjUwOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1MS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1NS1cXHRib29sIHB2aWQgPSB2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU5LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjgyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4MzpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODQtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODYtXFx0Ym9vbCB1bnRhZ2dlZCA9IHZsYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyODc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg4LVxcdHUxNiBwdmlkID0gcHMtXFx1MDAzZXBvcnRzW3BvcnRdLnB2aWQ7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg5LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI5MDpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEwLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxMi1cXHRcXHRcXHRcXHQgICAgaW50IG5ld19tdHUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMTQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjAtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzIxOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzIyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyNS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjY6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHNhLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjctXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMzMtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZHNhX2xvb3BfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNTpcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gZHNhX2xvb3BfZ2V0X3Byb3RvY29sLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNjpcXHQuc2V0dXBcXHRcXHRcXHQ9IGRzYV9sb29wX3NldHVwLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNzpcXHQudGVhcmRvd25cXHRcXHQ9IGRzYV9sb29wX3RlYXJkb3duLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzODpcXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGRzYV9sb29wX2dldF9zdHJpbmdzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzOTpcXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MDpcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGRzYV9sb29wX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MTpcXHQuZ2V0X2V0aHRvb2xfcGh5X3N0YXRzXFx0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDI6XFx0LnBoeV9yZWFkXFx0XFx0PSBkc2FfbG9vcF9waHlfcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDM6XFx0LnBoeV93cml0ZVxcdFxcdD0gZHNhX2xvb3BfcGh5X3dyaXRlLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NDpcXHQucG9ydF9icmlkZ2Vfam9pblxcdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDU6XFx0LnBvcnRfYnJpZGdlX2xlYXZlXFx0PSBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDY6XFx0LnBvcnRfc3RwX3N0YXRlX3NldFxcdD0gZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NzpcXHQucG9ydF92bGFuX2ZpbHRlcmluZ1xcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDg6XFx0LnBvcnRfdmxhbl9hZGRcXHRcXHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ5OlxcdC5wb3J0X3ZsYW5fZGVsXFx0XFx0PSBkc2FfbG9vcF9wb3J0X3ZsYW5fZGVsLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MDpcXHQucG9ydF9jaGFuZ2VfbXR1XFx0PSBkc2FfbG9vcF9wb3J0X2NoYW5nZV9tdHUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzUxOlxcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGRzYV9sb29wX3BvcnRfbWF4X210dSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTI6XFx0LnBoeWxpbmtfZ2V0X2NhcHNcXHQ9IGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzUzLX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NTpzdGF0aWMgaW50IGRzYV9sb29wX2Rydl9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTc6XFx0c3RydWN0IGRzYV9sb29wX3BkYXRhICpwZGF0YSA9IG1kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Mi1cXHRkcy1cXHUwMDNlZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODM6XFx0ZHMtXFx1MDAzZW9wcyA9IFxcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg0LVxcdGRzLVxcdTAwM2Vwcml2ID0gcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OC17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MDA6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQwMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjQtXFx0Lm1kaW9kcnYuZHJpdmVyXFx0PSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjYtXFx0fSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjc6XFx0LnByb2JlXFx0PSBkc2FfbG9vcF9kcnZfcHJvYmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI4OlxcdC5yZW1vdmVcXHQ9IGRzYV9sb29wX2Rydl9yZW1vdmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI5OlxcdC5zaHV0ZG93biA9IGRzYV9sb29wX2Rydl9zaHV0ZG93bixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzAtfTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzEtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDMyOnN0YXRpYyBpbnQgZHNhX2xvb3BfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzMtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzQte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzNTpcXHRyZXR1cm4gZHJ2ID09IFxcdTAwMjZkc2FfbG9vcF9kcnYubWRpb2Rydi5kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM2LX1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzctXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM4OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3Rlcih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzOS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ2OnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2Rldih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ4OlxcdHN0YXRpYyBzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEgZHNhX2xvb3BfcGRhdGEgPSB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ5LVxcdFxcdC5jZCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzE6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzI6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXFx1MDAyNmRzYV9sb29wX3BkYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODI6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4My17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDg3OlxcdHJldCA9IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2RldigpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NDpcXHRyZXQgPSBtZGlvX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTUtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NjpcXHRcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTctXFx0XFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwMi19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTAzOm1vZHVsZV9pbml0KGRzYV9sb29wX2luaXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDU6c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDYte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcXHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZkc2FfbG9vcF9kcnYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwODpcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDktXFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMS19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTEyOm1vZHVsZV9leGl0KGRzYV9sb29wX2V4aXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTM6MDIuMDIyNDM0ODEzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MzI5NDY2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBEU0EgVGFnIFByb3RvY29sIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBkc2FfbG9vcC5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBpdCBoYW5kbGVzIHRhZyBwcm90b2NvbHMuIFRoZSBjb2RlIHVzZXMgYGRzYV9sb29wX2dldF9wcm90b2NvbGAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgcmV0dXJucyBzb21ldGhpbmcgbGlrZSBgRFNBX1RBR19QUk9UT19MT09QYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGRvZXMgYGRzYV9sb29wYCBpbXBsZW1lbnQgYSBgY2hhbmdlX3RhZ19wcm90b2NvbGAgZnVuY3Rpb24/IFRoYXQncyB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBoZXJlLCBiZWNhdXNlIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgbW9kdWxlIGNhbiBkeW5hbWljYWxseSBhZGp1c3QgaXRzIHRhZ2dpbmcgbWV0aG9kLlxuXG5TbywgSSBkaXZlIGJhY2sgaW50byBgZHNhX2xvb3AuY2AgdG8gZXhhbWluZSB0aGUgYGRzYV9sb29wX2RyaXZlcmAgc3RydWN0dXJlLiBJJ20gY2hlY2tpbmcgc3BlY2lmaWNhbGx5IGZvciB0aGUgcHJlc2VuY2Ugb2YgYC5jaGFuZ2VfdGFnX3Byb3RvY29sYC4gQWgsIHJpZ2h0LCBubywgaXQncyBub3QgdGhlcmUhIEl0IHNlZW1zIGBkc2FfbG9vcGAgZG9lc24ndCBwcm92aWRlIGl0cyBvd24gZnVuY3Rpb24gdG8gY2hhbmdlIHRoZSB0YWcgcHJvdG9jb2wuXG5cbk5vdywgbXkgbmV4dCBtb3ZlIGlzIHRvIGJyb2FkZW4gdGhlIHNjb3BlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBvdGhlciBEU0Egc3dpdGNoIGRyaXZlcnMgKmRvKiBpbXBsZW1lbnQgYGNoYW5nZV90YWdfcHJvdG9jb2xgLiBUaW1lIHRvIGNvbnN1bHQgdGhlIGJyb2FkZXIgY29kZWJhc2UgYW5kIHNlZSB3aGVyZSB0aGlzIGNhcGFiaWxpdHkgYWN0dWFsbHkgcmVzaWRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxNDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTM6MDQuNDU1Mzg0NzU0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ3OTE3MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXC5jaGFuZ2VfdGFnX3Byb3RvY29sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz03MTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXY4OGU2eHh4X3N3aXRjaF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNzE4OC1cXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gbXY4OGU2eHh4X2dldF90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM6NzE4OTpcXHQuY2hhbmdlX3RhZ19wcm90b2NvbFxcdD0gbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNzE5MC1cXHQuc2V0dXBcXHRcXHRcXHQ9IG12ODhlNnh4eF9zZXR1cCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYz0yMzA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZmVsaXhfc3dpdGNoX29wcyA9IHtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwNy1cXHQuZ2V0X3RhZ19wcm90b2NvbFxcdFxcdD0gZmVsaXhfZ2V0X3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6MjMwODpcXHQuY2hhbmdlX3RhZ19wcm90b2NvbFxcdFxcdD0gZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwOS1cXHQuY29ubmVjdF90YWdfcHJvdG9jb2xcXHRcXHQ9IGZlbGl4X2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYz0zMjg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgcnRsODM2NW1iX3N3aXRjaF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0zMjg2LVxcdC5nZXRfdGFnX3Byb3RvY29sID0gcnRsODM2NW1iX2dldF90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYzozMjg3OlxcdC5jaGFuZ2VfdGFnX3Byb3RvY29sID0gcnRsODM2NW1iX2NoYW5nZV90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0zMjg4LVxcdC5zZXR1cCA9IHJ0bDgzNjVtYl9zZXR1cCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTM6MDQuNjUwMTg0NjQxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxODAzNDc5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERTQSBUYWcgUHJvdG9jb2xzIGFuZCB0aGUgTVQ3NjI4IEV0aGVybmV0IFN3aXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSBEU0EgdGFnIHByb3RvY29scy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYW5kc2NhcGU6IGBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbGAsIGBmZWxpeF9jaGFuZ2VfdGFnX3Byb3RvY29sYCwgYW5kIGBydGw4MzY1bWJfY2hhbmdlX3RhZ19wcm90b2NvbGAuIEknbSBjaGVja2luZyB0aGVpciBzdXBwb3J0ZWQgcHJvdG9jb2xzLiBgbXY4OGU2eHh4YCBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBzdGlja2luZyB3aXRoIEVEU0EvRFNBLiBUaGVuIGBmZWxpeGAgb2ZmZXJzIG9jZWxvdCB2YXJpYW50cy4gYHJ0bDgzNjVtYmAuLi4gdGhhdCdzIFJUTC1zcGVjaWZpYy5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGludmVzdGlnYXRlIGBkcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmNgLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHdoYXQgdGhlIGBtdDc2MjhgIGRldmljZSBpcyBhbGwgYWJvdXQuIEFoLCBpdCdzIHRoZSBidWlsdC1pbiBFdGhlcm5ldCBzd2l0Y2ggd2l0aGluIHRoZSBNZWRpYVRlayBNVDc2MjggU29DLCBhIE1JUFMgU29DLiBUaGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIHdoYXQgSSdkIGV4cGVjdDogYEhBU19JT01FTWAgYW5kIGVpdGhlciBgU09DX01UNzYyMGAgb3IgYENPTVBJTEVfVEVTVGAuIEl0J3MgYSBEZXZpY2UgVHJlZSBwbGF0Zm9ybSBkcml2ZXIsIHNwZWNpZmljYWxseSBvbiB0aGUgTVQ3NjI4IFNvQy5cblxuSSdtIHplcm9pbmcgaW4gb24gdGhlIGBtdDc2MjhfZHJpdmVyYCwgcGFydGljdWxhcmx5IHRoZSBwcm9iZSBmdW5jdGlvbiBgbXQ3NjI4X3Byb2JlYC4gVGhlIGRyaXZlciB1c2VzIHRoZSBgXCJtZWRpYXRlayxtdDc2MjgtZXN3XCJgIGNvbXBhdGlibGUgc3RyaW5nLiBPa2F5LCBhbmQgYG5ldC9kc2EvdGFnX210NzYyOC5jYCBpcyB0aGUgdGFnIGRyaXZlciBmb3IgYERTQV9UQUdfUFJPVE9fTVQ3NjI4YC4gVGhlIHByb3RvY29sIGlzIHVzZWQgZXhjbHVzaXZlbHkgYnkgYG10NzYyOC5jYCB2aWEgdGhlIGBtdDc2MjhfZ2V0X3RhZ19wcm90bygpYCBmdW5jdGlvbi5cblxuTm93LCBJJ20gZ2V0dGluZyBzdXNwaWNpb3VzLiBJcyBgRFNBX1RBR19QUk9UT19NVDc2MjhgIG9ubHkgdXNlZCAqaGVyZSo/IEkgbmVlZCBhIG11Y2ggYnJvYWRlciB2aWV3LiBJJ20gZ29pbmcgdG8gc2VhcmNoIHRoZSBlbnRpcmUga2VybmVsIGNvZGViYXNlLiBUaW1lIHRvIGBncmVwYCBmb3IgYERTQV9UQUdfUFJPVE9fTVQ3NjI4YCBhbmQgYHRhZ19tdDc2MjhgLiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXNuJ3QgcmVmZXJlbmNlZCBlbHNld2hlcmUsIG9yIHRoYXQgSSBhbSBtaXNzaW5nIHNvbWV0aGluZy4gSSB3YW50IHRvIHNlZSB0aGlzIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6MjcwOTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTM6MDguODMwNTM3MDYyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjM4NzU0NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihEU0FfVEFHX1BST1RPX01UNzYyOHx0YWdfbXQ3NjI4KVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJNQUlOVEFJTkVSUz0xNjc5MD1GOlxcdGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZmUtc29jLmNcXG5NQUlOVEFJTkVSUzoxNjc5MTpGOlxcdG5ldC9kc2EvdGFnX210NzYyOC5jXFxuTUFJTlRBSU5FUlMtMTY3OTItXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmM9NTg4PW10NzYyOF9nZXRfdGFnX3Byb3RvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtNTg5LXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmM6NTkwOlxcdHJldHVybiBEU0FfVEFHX1BST1RPX01UNzYyODtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtNTkxLX1cXG4tLVxcbmluY2x1ZGUvbmV0L2RzYS5oPTI2PXN0cnVjdCB0Y19hY3Rpb247XFxuLS1cXG5pbmNsdWRlL25ldC9kc2EuaC02Mi0jZGVmaW5lIERTQV9UQUdfUFJPVE9fS1NaODQ2M19WQUxVRVxcdFxcdDM0XFxuaW5jbHVkZS9uZXQvZHNhLmg6NjM6I2RlZmluZSBEU0FfVEFHX1BST1RPX01UNzYyOF9WQUxVRVxcdFxcdDM1XFxuaW5jbHVkZS9uZXQvZHNhLmgtNjQtXFxuaW5jbHVkZS9uZXQvZHNhLmg9NjU9ZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2RzYS5oLTEwMC1cXHREU0FfVEFHX1BST1RPX0tTWjg0NjNcXHRcXHQ9IERTQV9UQUdfUFJPVE9fS1NaODQ2M19WQUxVRSxcXG5pbmNsdWRlL25ldC9kc2EuaDoxMDE6XFx0RFNBX1RBR19QUk9UT19NVDc2MjhcXHRcXHQ9IERTQV9UQUdfUFJPVE9fTVQ3NjI4X1ZBTFVFLFxcbmluY2x1ZGUvbmV0L2RzYS5oLTEwMi19O1xcbi0tXFxubmV0L2RzYS9NYWtlZmlsZT0yOT1vYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTEFOOTMwMykgKz0gdGFnX2xhbjkzMDMub1xcbm5ldC9kc2EvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX01UNzYyOCkgKz0gdGFnX210NzYyOC5vXFxubmV0L2RzYS9NYWtlZmlsZS0zMS1vYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTVRLKSArPSB0YWdfbXRrLm9cXG4tLVxcbm5ldC9kc2EvdGFnX210NzYyOC5jPTEyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIG10NzYyOF90YWdfb3BzID0ge1xcbm5ldC9kc2EvdGFnX210NzYyOC5jLTEyMi1cXHQubmFtZSA9IE1UNzYyOF9UQUdfTkFNRSxcXG5uZXQvZHNhL3RhZ19tdDc2MjguYzoxMjM6XFx0LnByb3RvID0gRFNBX1RBR19QUk9UT19NVDc2MjgsXFxubmV0L2RzYS90YWdfbXQ3NjI4LmMtMTI0LVxcdC54bWl0ID0gbXQ3NjI4X3RhZ194bWl0LFxcbi0tXFxubmV0L2RzYS90YWdfbXQ3NjI4LmM9MTI5PW1vZHVsZV9kc2FfdGFnX2RyaXZlcihtdDc2MjhfdGFnX29wcyk7XFxubmV0L2RzYS90YWdfbXQ3NjI4LmMtMTMwLVxcbm5ldC9kc2EvdGFnX210NzYyOC5jOjEzMTpNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19NVDc2MjgsIE1UNzYyOF9UQUdfTkFNRSk7XFxubmV0L2RzYS90YWdfbXQ3NjI4LmMtMTMyLU1PRFVMRV9ERVNDUklQVElPTihcXFwiRFNBIHRhZyBkcml2ZXIgZm9yIE1UNzYyOCBzd2l0Y2hcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTM6MTIuNDY5MzAzMDAyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NjIxMTg2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gVGhlIGRpZmYgc2hvd3MgbW9kaWZpY2F0aW9ucyB0byBgTUFJTlRBSU5FUlNgLCBhIGRyaXZlciAoYGRyaXZlcnMvbmV0L2RzYS9tdDc2MjguY2ApIGZvciB0aGUgTWVkaWFUZWsgTVQ3NjI4IFNvQyBlbWJlZGRlZCBFdGhlcm5ldCBzd2l0Y2gsIGFuZCBpdHMgYXNzb2NpYXRlZCB0YWcgZHJpdmVyIChgbmV0L2RzYS90YWdfbXQ3NjI4LmNgKS4gVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQuXG5cbk5vdywgSSdtIGNoZWNraW5nIGFnYWluc3QgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBUaGUgcHJvbXB0IGNsZWFybHkgZGVmaW5lcyBzaXR1YXRpb25zIHdoZXJlIGZ1enppbmcgaXNuJ3QgdmFsdWFibGUuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yOiBub24ta2VybmVsL25vbi1leGVjdXRhYmxlIGNoYW5nZXMsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLlxuXG5Db25zaWRlcmluZyB0aGUgTVQ3NjI4IFNvQywgbXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBpdCdzIGxpa2VseSBhIGNhc2Ugb2YgdW5yZWFjaGFibGUgaGFyZHdhcmUuIExldCBtZSBjb25maXJtOiB0aGUgZHJpdmVyJ3MgZGVwZW5kZW5jaWVzLCBiYXNlZCBvbiBgbXQ3NjI4LmNgLCBpbmNsdWRlIGBIQVNfSU9NRU1gIGFuZCBlaXRoZXIgYFNPQ19NVDc2MjBgIG9yIGBDT01QSUxFX1RFU1RgLiBJdCBpcyBhbiBgb2ZfZGV2aWNlYCAoRGV2aWNlIFRyZWUpIG1hdGNoaW5nIGBtZWRpYXRlayxtdDc2MjgtZXN3YC4gSG93ZXZlciwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSBzZXR1cHMsIHRoZXJlJ3Mgbm8gRGV2aWNlIFRyZWUgbm9kZSBmb3IgdGhlIE1lZGlhVGVrIE1UNzYyOCBlbWJlZGRlZCBzd2l0Y2ggaGFyZHdhcmUuIFRoZSBNVDc2MjAvTVQ3NjI4IGlzIGEgTUlQUyBhcmNoaXRlY3R1cmUgU29DLiBFdmVuIHdpdGggYENPTVBJTEVfVEVTVGAgZW5hYmxlZCBvbiB4ODZfNjQsIHRoZSBkcml2ZXIgKnJlcXVpcmVzKiBwaHlzaWNhbCBTb0MgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMgYW5kIHRoZSBkZXZpY2UgdHJlZSBub2RlIHRvIHByb2JlLiBObyB2aXJ0dWFsIGRldmljZSBvciBRRU1VIGVtdWxhdGlvbiBleGlzdHMgZm9yIGl0LlxuXG5GdXJ0aGVybW9yZSwgYG5ldC9kc2EvdGFnX210NzYyOC5jYCBpcyBleGNsdXNpdmVseSBsaW5rZWQgdG8gdGhlIGBEU0FfVEFHX1BST1RPX01UNzYyOGAgcHJvdG9jb2wsIHdoaWNoIGlzICpvbmx5KiB1c2VkIHdoZW4gYG10NzYyOC5jYCBwcm9iZXMgYW5kIGF0dGFjaGVzIGl0cyBEU0Egc3dpdGNoLiBTaW5jZSB0aGUgc3dpdGNoIGRyaXZlciBjYW4ndCBwcm9iZSBvbiBhbWQ2NCBpbiBRRU1VLCB0aGUgYG10NzYyOF90YWdfb3BzYCBmdW5jdGlvbnMgYXJlIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUuIFRoZXkgd2lsbCBuZXZlciBiZSBpbnN0YW50aWF0ZWQgb3IgZXhlY3V0ZWQuXG5cblRoZXJlZm9yZSwgKmFsbCogdGhlIG1vZGlmaWVkIGNvZGUgZmFsbHMgaW50byB0aGUgXCJzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBjYXRlZ29yeSBhbmQgdGhlIG5vbi1leGVjdXRhYmxlIGRvY3VtZW50YXRpb24gZmlsZSBgTUFJTlRBSU5FUlNgLiBJdCdzIGVpdGhlciBhIG5vbi1leGVjdXRhYmxlIG1ldGFkYXRhIGZpbGUgb3IgY29kZSB0aGF0IHJlbGllcyBvbiBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiB0aGUgdGFyZ2V0IFFFTVUgZW52aXJvbm1lbnQuXG5cbkhlbmNlLCBJIGNhbiBjb25maWRlbnRseSBjb25jbHVkZTogYFdvcnRoRnV6emluZz1mYWxzZWAuIE5vIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBvciBzcGVjaWZpYyBzeW1ib2xzIG5lZWQgdG8gYmUgZm9jdXNlZCBvbi4gSSdsbCBzdW1tYXJpemUgaXQgYXMgYSBjb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSB2ZXJkaWN0LCBhbmQgdGhlbiBwcm9jZWVkLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODg1LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MzoxOC4zMzE0MjQ0NzVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNQUlOVEFJTkVSUywgdGhlIE1lZGlhVGVrIE1UNzYyOCBTb0MgZW1iZWRkZWQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzYyOC5jKSwgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWcgZHJpdmVyIChuZXQvZHNhL3RhZ19tdDc2MjguYykuIE1UNzYyOCBpcyBhIHBsYXRmb3JtL1NvQy1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZm9yIE1JUFMtYmFzZWQgTWVkaWFUZWsgU29DcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldmljZSBjYW5ub3QgcHJvYmUgYW5kIHRoZSB0YWcgcHJvdG9jb2wgaXMgb25seSB1c2VkIGJ5IHRoaXMgc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBNQUlOVEFJTkVSUywgdGhlIE1lZGlhVGVrIE1UNzYyOCBTb0MgZW1iZWRkZWQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzYyOC5jKSwgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWcgZHJpdmVyIChuZXQvZHNhL3RhZ19tdDc2MjguYykuIE1UNzYyOCBpcyBhIHBsYXRmb3JtL1NvQy1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZm9yIE1JUFMtYmFzZWQgTWVkaWFUZWsgU29DcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldmljZSBjYW5ub3QgcHJvYmUgYW5kIHRoZSB0YWcgcHJvdG9jb2wgaXMgb25seSB1c2VkIGJ5IHRoaXMgc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MzoxOC4zMzE0NzM0MTVaIiwiU2VxIjozNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowckbxz[1] Phase: Running StartedAt: 2026-09-07 01:53:30 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbxz[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-07 01:53:30 +0000 UTC FinishedAt: 2026-09-07 01:53:38 +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,}