Name: series-workflowmnnqm Phase: Failed StartedAt: 2026-07-20 09:12:08 +0000 UTC FinishedAt: 2026-07-20 09:40:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmnnqm[0] Phase: Succeeded StartedAt: 2026-07-20 09:12:08 +0000 UTC FinishedAt: 2026-07-20 09:40:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmnnqm[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 09:12:08 +0000 UTC FinishedAt: 2026-07-20 09:40:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXRsaW5rIG11bHRpY2FzdCBub3RpZmljYXRpb24gKGBlcnJvci1ldmVudGApIHNlbnQgZnJvbSB0aGUga2VybmVsIHRvIHVzZXJzcGFjZSB3aGVuIGhhcmR3YXJlIFJBUyBlcnJvcnMgb2NjdXIuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVzZXJzcGFjZS10cmlnZ2VyYWJsZSBjb2RlIHBhdGhzIG9yIGlucHV0IHBhcnNpbmcgbG9naWMsIGFzIHRoZSBldmVudCBnZW5lcmF0aW9uIGlzIGRyaXZlbiBieSBoYXJkd2FyZSBldmVudHMgYW5kIHRoZSBtdWx0aWNhc3Qgc3Vic2NyaXB0aW9uIGlzIGhhbmRsZWQgYnkgZ2VuZXJpYyBuZXRsaW5rIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTY1YWYyZjk1MjhmYmFlYmYxNGI3NzM1MTVjYjg5OTQwOWI2YjVhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDA5OjM5OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbmluZGV4IDgzYzIxODUzYjc0YjYwLi40MDZlNGM0OWJhYzFmZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxuQEAgLTU2LDYgJiM0Mzs1Niw3IEBAIFVzZXIgc3BhY2UgdG9vbHMgY2FuOlxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxuICogQ2xlYXIgc3BlY2lmaWMgZXJyb3IgY291bnRlcnMgd2l0aCB0aGUgYGBjbGVhci1lcnJvci1jb3VudGVyYGAgY29tbWFuZCwgdXNpbmcgYm90aFxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxuJiM0MzsqIFN1YnNjcmliZSB0byB0aGUgYGBlcnJvci1yZXBvcnRgYCBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBgYGVycm9yLWV2ZW50YGAuXG4gXG4gWUFNTC1iYXNlZCBJbnRlcmZhY2VcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuQEAgLTExMSwzICYjNDM7MTEyLDIzIEBAIEV4YW1wbGU6IENsZWFyIGFuIGVycm9yIGNvdW50ZXIgZm9yIGEgZ2l2ZW4gbm9kZVxuIFxuICAgICBzdWRvIHlubCAtLWZhbWlseSBkcm1fcmFzIC0tZG8gY2xlYXItZXJyb3ItY291bnRlciAtLWpzb24gJiMzOTt7XCYjMzQ7bm9kZS1pZFwmIzM0OzowLCBcJiMzNDtlcnJvci1pZFwmIzM0OzoxfSYjMzk7XG4gICAgIE5vbmVcbiYjNDM7XG4mIzQzO0V4YW1wbGU6IFN1YnNjcmliZSB0byBgYGVycm9yLXJlcG9ydGBgIG11bHRpY2FzdCBncm91cFxuJiM0MztcbiYjNDM7Li4gY29kZS1ibG9jazo6IGJhc2hcbiYjNDM7XG4mIzQzOyAgICBzdWRvIHlubCAtLWZhbWlseSBkcm1fcmFzIC0tb3V0cHV0LWpzb24gLS1zdWJzY3JpYmUgZXJyb3ItcmVwb3J0XG4mIzQzO1xuJiM0MzsuLiBjb2RlLWJsb2NrOjoganNvblxuJiM0MztcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtlcnJvci1ldmVudFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttc2dcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7ZGV2aWNlLW5hbWVcJiMzNDs6IFwmIzM0OzAwMDA6MDM6MDAuMFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7bm9kZS1pZFwmIzM0OzogMSxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7bm9kZS1uYW1lXCYjMzQ7OiBcJiMzNDt1bmNvcnJlY3RhYmxlLWVycm9yc1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7ZXJyb3ItaWRcJiMzNDs6IDEsXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2Vycm9yLW5hbWVcJiMzNDs6IFwmIzM0O2Vycm9yX25hbWUxXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtlcnJvci12YWx1ZVwmIzM0OzogMVxuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgIH1cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuaW5kZXggZTExMzA1NmY4YzAxNmMuLjhhZWQzZDQ1MTVlNWFmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuQEAgLTY5LDYgJiM0Mzs2OSwzMyBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIG5hbWU6IGVycm9yLXZhbHVlXG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAgIGRvYzogQ3VycmVudCB2YWx1ZSBvZiB0aGUgcmVxdWVzdGVkIGVycm9yIGNvdW50ZXIuXG4mIzQzOyAgLVxuJiM0MzsgICAgbmFtZTogZXJyb3ItZXZlbnQtYXR0cnNcbiYjNDM7ICAgIGF0dHJpYnV0ZXM6XG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBkZXZpY2UtbmFtZVxuJiM0MzsgICAgICAgIHR5cGU6IHN0cmluZ1xuJiM0MzsgICAgICAgIGRvYzogRGV2aWNlIChQQ0kgQkRGLCBVVUlEKSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IG5vZGUtaWRcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBkb2M6IElEIG9mIHRoZSBub2RlIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogbm9kZS1uYW1lXG4mIzQzOyAgICAgICAgdHlwZTogc3RyaW5nXG4mIzQzOyAgICAgICAgZG9jOiBOYW1lIG9mIHRoZSBub2RlIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogZXJyb3ItaWRcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBkb2M6IElEIG9mIHRoZSBlcnJvciBjb3VudGVyLlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogZXJyb3ItbmFtZVxuJiM0MzsgICAgICAgIHR5cGU6IHN0cmluZ1xuJiM0MzsgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgZXJyb3IuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBlcnJvci12YWx1ZVxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAgIGRvYzogQ3VycmVudCB2YWx1ZSBvZiB0aGUgZXJyb3IgY291bnRlci5cbiBcbiBvcGVyYXRpb25zOlxuICAgbGlzdDpcbkBAIC0xMjQsMyAmIzQzOzE1MSwyNCBAQCBvcGVyYXRpb25zOlxuICAgICAgIGRvOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlkLWF0dHJzXG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IGVycm9yLWV2ZW50XG4mIzQzOyAgICAgIGRvYzogXHUwMDNlLVxuJiM0MzsgICAgICAgICAgIFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuXG4mIzQzOyAgICAgICAgICAgVGhlIGV2ZW50IGluY2x1ZGVzIHRoZSBkZXZpY2UsIG5vZGUgYW5kIGVycm9yIGluZm9ybWF0aW9uXG4mIzQzOyAgICAgICAgICAgb2YgdGhlIGVycm9yIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC5cbiYjNDM7ICAgICAgYXR0cmlidXRlLXNldDogZXJyb3ItZXZlbnQtYXR0cnNcbiYjNDM7ICAgICAgbWNncnA6IGVycm9yLXJlcG9ydFxuJiM0MzsgICAgICBldmVudDpcbiYjNDM7ICAgICAgICBhdHRyaWJ1dGVzOlxuJiM0MzsgICAgICAgICAgLSBkZXZpY2UtbmFtZVxuJiM0MzsgICAgICAgICAgLSBub2RlLWlkXG4mIzQzOyAgICAgICAgICAtIG5vZGUtbmFtZVxuJiM0MzsgICAgICAgICAgLSBlcnJvci1pZFxuJiM0MzsgICAgICAgICAgLSBlcnJvci1uYW1lXG4mIzQzOyAgICAgICAgICAtIGVycm9yLXZhbHVlXG4mIzQzO1xuJiM0MzttY2FzdC1ncm91cHM6XG4mIzQzOyAgbGlzdDpcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogZXJyb3ItcmVwb3J0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcbmluZGV4IGQ2ZWFiMjlhMTM5NGNhLi4wYjc3ZTQzNThlYThmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcbkBAIC00MSw2ICYjNDM7NDEsMTEgQEBcbiAgKiAgICBVc2Vyc3BhY2UgbXVzdCBwcm92aWRlIE5vZGUgSUQsIEVycm9yIElELlxuICAqICAgIENsZWFycyBzcGVjaWZpYyBlcnJvciBjb3VudGVyIG9mIGEgbm9kZSBpZiBzdXBwb3J0ZWQuXG4gICpcbiYjNDM7ICogNC4gRVJST1JfUkVQT1JUOiBTdWJzY3JpYmUgdG8gdGhpcyBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBlcnJvciBldmVudHNcbiYjNDM7ICpcbiYjNDM7ICogNS4gRVJST1JfRVZFTlQ6IFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuIFRoZSBldmVudCBjb250YWlucyBkZXZpY2UsIG5vZGVcbiYjNDM7ICogICAgYW5kIGVycm9yIGluZm9ybWF0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC5cbiYjNDM7ICpcbiAgKiBOb2RlIHJlZ2lzdHJhdGlvbjpcbiAgKlxuICAqIC0gZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCk6IFJlZ2lzdGVycyBhIG5ldyBub2RlIGFuZCBhc3NpZ25zXG5AQCAtMTg2LDYgJiM0MzsxOTEsMzQgQEAgc3RhdGljIGludCBtc2dfcmVwbHlfdmFsdWUoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLFxuIFx0XHRcdCAgIHZhbHVlKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19ERVZJQ0VfTkFNRSwgbm9kZS1cdTAwM2VkZXZpY2VfbmFtZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsIG5vZGUtXHUwMDNlaWQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsIG5vZGUtXHUwMDNlbm9kZV9uYW1lKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfSUQsIGVycm9yX2lkKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSwgZXJyb3JfbmFtZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcbiBcdFx0XHQgICAgdTMyIGVycm9yX2lkKVxuIHtcbkBAIC0yMjIsNiAmIzQzOzI1NSw1NyBAQCBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXG4gXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoKSAtIFJlcG9ydCBhbiBlcnJvciBldmVudFxuJiM0MzsgKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGVycm9yX2lkOiBJRCBvZiB0aGUgZXJyb3JcbiYjNDM7ICogQGVycm9yX25hbWU6IE5hbWUgb2YgdGhlIGVycm9yXG4mIzQzOyAqIEB2YWx1ZTogVmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBlcnJvclxuJiM0MzsgKlxuJiM0MzsgKiBSZXBvcnQgYW4gZXJyb3ItZXZlbnQgdG8gdXNlcnNwYWNlIHVzaW5nIHRoZSBlcnJvci1yZXBvcnQgbXVsdGljYXN0IGdyb3VwLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcbiYjNDM7XHRcdFx0ICAgdTMyIHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGdlbmxfaW5mbyBpbmZvO1xuJiM0MztcdHN0cnVjdCBza19idWZmICptc2c7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqaGRyO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZXJyb3JfbmFtZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRnZW5sX2luZm9faW5pdF9udGYoXHUwMDI2aW5mbywgXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UKTtcbiYjNDM7XG4mIzQzO1x0bXNnID0gZ2VubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghbXNnKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGhkciA9IGdlbmxtc2dfaXB1dChtc2csIFx1MDAyNmluZm8pO1xuJiM0MztcdGlmICghaGRyKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU1TR1NJWkU7XG4mIzQzO1x0XHRnb3RvIGZyZWVfbXNnO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhtc2csIG5vZGUsIGVycm9yX2lkLCBlcnJvcl9uYW1lLCB2YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gY2FuY2VsX21zZztcbiYjNDM7XG4mIzQzO1x0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xuJiM0MztcdGdlbmxtc2dfbXVsdGljYXN0X2FsbG5zKFx1MDAyNmRybV9yYXNfbmxfZmFtaWx5LCBtc2csIDAsIERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JUKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztjYW5jZWxfbXNnOlxuJiM0MztcdGdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTtcbiYjNDM7ZnJlZV9tc2c6XG4mIzQzO1x0bmxtc2dfZnJlZShtc2cpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChkcm1fcmFzX25sX2Vycm9yX2V2ZW50KTtcbiYjNDM7XG4gLyoqXG4gICogZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoKSAtIER1bXAgYWxsIEVycm9yIENvdW50ZXJzXG4gICogQHNrYjogTmV0bGluayBtZXNzYWdlIGJ1ZmZlclxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG5pbmRleCBkZWExYzFiMjQ5NGU4MS4uOWQzMTIzY2M5ZjljYWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG5AQCAtNTgsNiAmIzQzOzU4LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHJtX3Jhc19ubF9vcHNbXSA9IHtcbiBcdH0sXG4gfTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBkcm1fcmFzX25sX21jZ3Jwc1tdID0ge1xuJiM0MztcdFtEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVF0gPSB7IFwmIzM0O2Vycm9yLXJlcG9ydFwmIzM0OywgfSxcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcdC5uYW1lXHRcdD0gRFJNX1JBU19GQU1JTFlfTkFNRSxcbiBcdC52ZXJzaW9uXHQ9IERSTV9SQVNfRkFNSUxZX1ZFUlNJT04sXG5AQCAtNjYsNCAmIzQzOzcwLDYgQEAgc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcdC5tb2R1bGVcdFx0PSBUSElTX01PRFVMRSxcbiBcdC5zcGxpdF9vcHNcdD0gZHJtX3Jhc19ubF9vcHMsXG4gXHQubl9zcGxpdF9vcHNcdD0gQVJSQVlfU0laRShkcm1fcmFzX25sX29wcyksXG4mIzQzO1x0Lm1jZ3Jwc1x0XHQ9IGRybV9yYXNfbmxfbWNncnBzLFxuJiM0MztcdC5uX21jZ3Jwc1x0PSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfbWNncnBzKSxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmggYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG5pbmRleCBhMzk4NjQzNTcyYTVhMC4uMDNlYzI3NWFjYTkyOTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG5AQCAtMjEsNiAmIzQzOzIxLDEwIEBAIGludCBkcm1fcmFzX25sX2dldF9lcnJvcl9jb3VudGVyX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIGludCBkcm1fcmFzX25sX2NsZWFyX2Vycm9yX2NvdW50ZXJfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbiBcbiYjNDM7ZW51bSB7XG4mIzQzO1x0RFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQsXG4mIzQzO307XG4mIzQzO1xuIGV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHk7XG4gXG4gI2VuZGlmIC8qIF9MSU5VWF9EUk1fUkFTX0dFTl9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbmluZGV4IDc5MzdkOGJhMGVkOWNlLi4wMjg3NTk0ZTEwMjY1MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbkBAIC0xODUsNiAmIzQzOzE4NSw0OCBAQCBzdGF0aWMgaW50IHJlZ2lzdGVyX25vZGVzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB4ZV9kcm1fcmFzX2V2ZW50KCkgLSBSZXBvcnQgZHJtX3JhcyBlcnJvciBldmVudCB0byB1c2Vyc3BhY2VcbiYjNDM7ICogQHhlOiB4ZSBkZXZpY2Ugc3RydWN0dXJlXG4mIzQzOyAqIEBjb21wb25lbnQ6IGVycm9yIGNvbXBvbmVudCAoc2VlIFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9jb21wb25lbnQpXG4mIzQzOyAqIEBzZXZlcml0eTogZXJyb3Igc2V2ZXJpdHkgKHNlZSBcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3Jfc2V2ZXJpdHkpXG4mIzQzOyAqIEB2YWx1ZTogdmFsdWUgb2YgZXJyb3IgY291bnRlclxuJiM0MzsgKlxuJiM0MzsgKiBSZXBvcnQgYW4gZXJyb3ItZXZlbnQgdG8gdXNlcnNwYWNlLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBjb21wb25lbnQsIHU4IHNldmVyaXR5LCB1MzIgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXHUwMDI2eGUtXHUwMDNlcmFzO1xuJiM0MztcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm87XG4mIzQzO1x0c3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBFdmVudCBpcyBzdXBwb3J0ZWQgb25seSBpZiBkcm1fcmFzIGlzIGVuYWJsZWQgKi9cbiYjNDM7XHRpZiAoIXhlLVx1MDAzZWluZm8uaGFzX2RybV9yYXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChjb21wb25lbnQgXHUwMDNlPSBEUk1fWEVfUkFTX0VSUl9DT01QX01BWCkge1xuJiM0MztcdFx0ZHJtX3dhcm4oXHUwMDI2eGUtXHUwMDNlZHJtLCBcJiMzNDt1bnN1cHBvcnRlZCBjb21wb25lbnQgJXVcXG5cJiMzNDssIGNvbXBvbmVudCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc2V2ZXJpdHkgXHUwMDNlPSBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYKSB7XG4mIzQzO1x0XHRkcm1fd2FybihcdTAwMjZ4ZS1cdTAwM2Vkcm0sIFwmIzM0O3Vuc3VwcG9ydGVkIHNldmVyaXR5ICV1XFxuXCYjMzQ7LCBzZXZlcml0eSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRub2RlID0gXHUwMDI2cmFzLVx1MDAzZW5vZGVbc2V2ZXJpdHldO1xuJiM0MztcdGluZm8gPSByYXMtXHUwMDNlaW5mb1tzZXZlcml0eV07XG4mIzQzO1xuJiM0MztcdGlmICghaW5mbyB8fCAhaW5mb1tjb21wb25lbnRdLm5hbWUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJldCA9IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQobm9kZSwgY29tcG9uZW50LCBpbmZvW2NvbXBvbmVudF0ubmFtZSwgdmFsdWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRkcm1fZXJyX3JhdGVsaW1pdGVkKFx1MDAyNnhlLVx1MDAzZWRybSwgXCYjMzQ7ZHJtX3JhcyBlcnJvci1ldmVudCBmYWlsZWQ6ICVkIGZvciAlcyAlc1xcblwmIzM0OywgcmV0LFxuJiM0MztcdFx0XHRcdCAgICBpbmZvW2NvbXBvbmVudF0ubmFtZSwgZXJyb3Jfc2V2ZXJpdHlbc2V2ZXJpdHldKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB4ZV9kcm1fcmFzX2luaXQoKSAtIEluaXRpYWxpemUgRFJNIFJBU1xuICAqIEB4ZTogeGUgZGV2aWNlIGluc3RhbmNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmhcbmluZGV4IDM2NWM3MGU5M2U4MmZkLi5hZGQ5NmJmMWE3YWJkNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmhcbkBAIC01LDExICYjNDM7NSwxNCBAQFxuICNpZm5kZWYgX1hFX0RSTV9SQVNfSF9cbiAjZGVmaW5lIF9YRV9EUk1fUkFTX0hfXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4gc3RydWN0IHhlX2RldmljZTtcbiBcbiAjZGVmaW5lIGZvcl9lYWNoX2Vycm9yX3NldmVyaXR5KGkpXHRcXFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgRFJNX1hFX1JBU19FUlJfU0VWX01BWDsgaSYjNDM7JiM0MzspXG4gXG4gaW50IHhlX2RybV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSk7XG4mIzQzO3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggY29tcG9uZW50LCB1OCBzZXZlcml0eSwgdTMyIHZhbHVlKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbmluZGV4IGVkNjA5OTEyZmRhMTQwLi40NjJjYmI1NDhmMDdiYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXG5AQCAtODksNiAmIzQzOzg5LDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBncHVfaGVhbHRoX3N0YXRlc1tdID0ge1xuIH07XG4gc3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKGdwdV9oZWFsdGhfc3RhdGVzKSA9PSBYRV9SQVNfSEVBTFRIX01BWCk7XG4gXG4mIzQzO3N0YXRpYyBpbnQgZ2V0X2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmNvdW50ZXIsIHUzMiAqdmFsdWUpO1xuJiM0MztcbiBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19zZXZlcml0eSh1OCBzZXZlcml0eSlcbiB7XG4gXHRzd2l0Y2ggKHNldmVyaXR5KSB7XG5AQCAtMTAxLDYgJiM0MzsxMDMsMTggQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdTggeGVfdG9fZHJtX3Jhc19zZXZlcml0eSh1OCBzZXZlcml0eSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoc2V2ZXJpdHkpIHtcbiYjNDM7XHRjYXNlIFhFX1JBU19TRVZfQ09SUkVDVEFCTEU6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFO1xuJiM0MztcdGNhc2UgWEVfUkFTX1NFVl9VTkNPUlJFQ1RBQkxFOlxuJiM0MztcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9VTkNPUlJFQ1RBQkxFO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX01BWDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudClcbiB7XG4gXHRzd2l0Y2ggKGNvbXBvbmVudCkge1xuQEAgLTExOSw2ICYjNDM7MTMzLDI0IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdTggeGVfdG9fZHJtX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChjb21wb25lbnQpIHtcbiYjNDM7XHRjYXNlIFhFX1JBU19DT01QX0RFVklDRV9NRU1PUlk6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9ERVZJQ0VfTUVNT1JZO1xuJiM0MztcdGNhc2UgWEVfUkFTX0NPTVBfQ09SRV9DT01QVVRFOlxuJiM0MztcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfQ09SRV9DT01QVVRFO1xuJiM0MztcdGNhc2UgWEVfUkFTX0NPTVBfUENJRTpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1BDSUU7XG4mIzQzO1x0Y2FzZSBYRV9SQVNfQ09NUF9GQUJSSUM6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9GQUJSSUM7XG4mIzQzO1x0Y2FzZSBYRV9SQVNfQ09NUF9TT0NfSU5URVJOQUw6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9TT0NfSU5URVJOQUw7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX01BWDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCByYXNfc3RhdHVzX3RvX2Vycm5vKHUzMiBzdGF0dXMpXG4ge1xuIFx0c3dpdGNoIChzdGF0dXMpIHtcbkBAIC0yMTcsNiAmIzQzOzI0OSwyNiBAQCBzdGF0aWMgdm9pZCByYXNfdXNwX2Flcl9pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuIFx0ZGV2X2RiZyhcdTAwMjZ1c3AtXHUwMDNlZGV2LCBcJiMzNDtVbmNvcnJlY3RhYmxlIEludGVybmFsIEVycm9ycyBkb3duZ3JhZGVkIGFuZCB1bm1hc2tlZFxcblwmIzM0Oyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCByYXNfc2VuZF9lcnJvcl9ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlciA9IHswfTtcbiYjNDM7XHR1OCBkcm1fc2V2ZXJpdHksIGRybV9jb21wb25lbnQ7XG4mIzQzO1x0dTMyIHZhbHVlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGNvdW50ZXIuY29tbW9uLnNldmVyaXR5ID0gc2V2ZXJpdHk7XG4mIzQzO1x0Y291bnRlci5jb21tb24uY29tcG9uZW50ID0gY29tcG9uZW50O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZXRfY291bnRlcih4ZSwgXHUwMDI2Y291bnRlciwgXHUwMDI2dmFsdWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRybV9zZXZlcml0eSA9IHhlX3RvX2RybV9yYXNfc2V2ZXJpdHkoc2V2ZXJpdHkpO1xuJiM0MztcdGRybV9jb21wb25lbnQgPSB4ZV90b19kcm1fcmFzX2NvbXBvbmVudChjb21wb25lbnQpO1xuJiM0MztcbiYjNDM7XHR4ZV9kcm1fcmFzX2V2ZW50KHhlLCBkcm1fY29tcG9uZW50LCBkcm1fc2V2ZXJpdHksIHZhbHVlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdTggaGFuZGxlX2NvcmVfY29tcHV0ZV9lcnJvcnMoc3RydWN0IHhlX3Jhc19lcnJvcl9hcnJheSAqYXJyKVxuIHtcbiBcdHN0cnVjdCB4ZV9yYXNfY29tcHV0ZV9lcnJvciAqZXJyb3JfaW5mbyA9ICh2b2lkICopYXJyLVx1MDAzZWRldGFpbHM7XG5AQCAtMjQxLDggJiM0MzsyOTMsMTAgQEAgdm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcbiBcdHN0cnVjdCB4ZV9yYXNfdGhyZXNob2xkX2Nyb3NzZWQgKnBlbmRpbmcgPSAodm9pZCAqKVx1MDAyNnJlc3BvbnNlLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICplcnJvcnMgPSBwZW5kaW5nLVx1MDAzZWNvdW50ZXJzO1xuIFx0dTMyIGlkLCBuY291bnRlcnMgPSBwZW5kaW5nLVx1MDAzZW5jb3VudGVycztcbiYjNDM7XHR1OCBzZW50ID0gMDtcbiBcbiBcdEJVSUxEX0JVR19PTihzaXplb2YocmVzcG9uc2UtXHUwMDNlZGF0YSkgXHUwMDNjIHNpemVvZigqcGVuZGluZykpO1xuJiM0MztcdEJVSUxEX0JVR19PTihCSVRTX1BFUl9UWVBFKHNlbnQpIFx1MDAzYyBYRV9SQVNfQ09NUF9NQVgpO1xuIFx0eGVfZGV2aWNlX2Fzc2VydF9tZW1fYWNjZXNzKHhlKTtcbiBcbiBcdGlmICghbmNvdW50ZXJzIHx8IG5jb3VudGVycyBcdTAwM2UgWEVfUkFTX05VTV9DT1VOVEVSUylcbkBAIC0yNTYsOCAmIzQzOzMxMCwyMSBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuIFx0XHRzZXZlcml0eSA9IGVycm9yc1tpZF0uY29tbW9uLnNldmVyaXR5O1xuIFx0XHRjb21wb25lbnQgPSBlcnJvcnNbaWRdLmNvbW1vbi5jb21wb25lbnQ7XG4gXG4mIzQzO1x0XHRpZiAoc2V2ZXJpdHkgIT0gWEVfUkFTX1NFVl9DT1JSRUNUQUJMRSkge1xuJiM0MztcdFx0XHR4ZV93YXJuKHhlLCBcJiMzNDtzeXNjdHJsOiB1bmV4cGVjdGVkIHNldmVyaXR5ICVzICgldSlcXG5cJiMzNDssIHNldl90b19zdHIoc2V2ZXJpdHkpLFxuJiM0MztcdFx0XHRcdHNldmVyaXR5KTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHR4ZV93YXJuKHhlLCBcJiMzNDtbUkFTXTogJXMgJXMgZGV0ZWN0ZWRcXG5cJiMzNDssXG4gXHRcdFx0Y29tcF90b19zdHIoY29tcG9uZW50KSwgc2V2X3RvX3N0cihzZXZlcml0eSkpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFNlbmQgZXZlbnQgb25jZSBwZXIgY29tcG9uZW50ICovXG4mIzQzO1x0XHRpZiAoc2VudCBcdTAwMjYgQklUKGNvbXBvbmVudCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0c2VudCB8PSBCSVQoY29tcG9uZW50KTtcbiYjNDM7XG4mIzQzO1x0XHRyYXNfc2VuZF9lcnJvcl9ldmVudCh4ZSwgc2V2ZXJpdHksIGNvbXBvbmVudCk7XG4gXHR9XG4gfVxuIFxuQEAgLTMxMSw2ICYjNDM7Mzc4LDcgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiBcdGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiBmaW5hbF9hY3Rpb247XG4gXHR1MzIgcmVtYWluaW5nID0gWEVfU1lTQ1RSTF9GTE9PRF9MSU1JVDtcbiBcdHN0cnVjdCB4ZV9yYXNfZ2V0X3NvY19lcnJvciByZXNwb25zZTtcbiYjNDM7XHR1OCBzZW50ID0gMDtcbiBcdHNpemVfdCBybGVuO1xuIFx0aW50IHJldDtcbiBcbkBAIC0zNTQsNiAmIzQzOzQyMiwxMiBAQCBlbnVtIHhlX3Jhc19yZWNvdmVyeV9hY3Rpb24geGVfcmFzX3Byb2Nlc3NfZXJyb3JzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuIFx0XHRcdHhlX2luZm8oeGUsIFwmIzM0O1tSQVNdOiAlcyAlcyBkZXRlY3RlZFxcblwmIzM0OywgY29tcF90b19zdHIoY29tcG9uZW50KSxcbiBcdFx0XHRcdHNldl90b19zdHIoc2V2ZXJpdHkpKTtcbiBcbiYjNDM7XHRcdFx0LyogU2VuZCBldmVudCBvbmNlIHBlciBjb21wb25lbnQgKi9cbiYjNDM7XHRcdFx0aWYgKCEoc2VudCBcdTAwMjYgQklUKGNvbXBvbmVudCkpKSB7XG4mIzQzO1x0XHRcdFx0c2VudCB8PSBCSVQoY29tcG9uZW50KTtcbiYjNDM7XHRcdFx0XHRyYXNfc2VuZF9lcnJvcl9ldmVudCh4ZSwgc2V2ZXJpdHksIGNvbXBvbmVudCk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4gXHRcdFx0c3dpdGNoIChjb21wb25lbnQpIHtcbiBcdFx0XHRjYXNlIFhFX1JBU19DT01QX0NPUkVfQ09NUFVURTpcbiBcdFx0XHRcdGFjdGlvbiA9IGhhbmRsZV9jb3JlX2NvbXB1dGVfZXJyb3JzKGFycik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXG5pbmRleCAwYmVlZGUzZGRjNGU0Yi4uZWUyY2FhMGVkYzZmOTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxuQEAgLTgwLDkgJiM0Mzs4MCwxNCBAQCBzdHJ1Y3QgZHJtX2RldmljZTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX1JBUylcbiBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xuIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XG4mIzQzO2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcbiYjNDM7XHRcdFx0ICAgdTMyIHZhbHVlKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCxcbiYjNDM7XHRcdFx0XHRcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXG4mIzQzO3sgcmV0dXJuIDA7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5pbmRleCAyMThhM2VlODY4MDUyNy4uZWFiODIzMWFhODdjYmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcbkBAIC0zOCwxMyAmIzQzOzM4LDI4IEBAIGVudW0ge1xuIFx0RFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYIC0gMSlcbiB9O1xuIFxuJiM0MztlbnVtIHtcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfREVWSUNFX05BTUUgPSAxLFxuJiM0MztcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX0lELFxuJiM0MztcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsXG4mIzQzO1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX0lELFxuJiM0MztcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9OQU1FLFxuJiM0MztcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSxcbiYjNDM7XG4mIzQzO1x0X19EUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYLFxuJiM0MztcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVggPSAoX19EUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYIC0gMSlcbiYjNDM7fTtcbiYjNDM7XG4gZW51bSB7XG4gXHREUk1fUkFTX0NNRF9MSVNUX05PREVTID0gMSxcbiBcdERSTV9SQVNfQ01EX0dFVF9FUlJPUl9DT1VOVEVSLFxuIFx0RFJNX1JBU19DTURfQ0xFQVJfRVJST1JfQ09VTlRFUixcbiYjNDM7XHREUk1fUkFTX0NNRF9FUlJPUl9FVkVOVCxcbiBcbiBcdF9fRFJNX1JBU19DTURfTUFYLFxuIFx0RFJNX1JBU19DTURfTUFYID0gKF9fRFJNX1JBU19DTURfTUFYIC0gMSlcbiB9O1xuIFxuJiM0MzsjZGVmaW5lIERSTV9SQVNfTUNHUlBfRVJST1JfUkVQT1JUXHRcJiMzNDtlcnJvci1yZXBvcnRcJiMzNDtcbiYjNDM7XG4gI2VuZGlmIC8qIF9VQVBJX0xJTlVYX0RSTV9SQVNfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXRsaW5rIG11bHRpY2FzdCBub3RpZmljYXRpb24gKGBlcnJvci1ldmVudGApIHNlbnQgZnJvbSB0aGUga2VybmVsIHRvIHVzZXJzcGFjZSB3aGVuIGhhcmR3YXJlIFJBUyBlcnJvcnMgb2NjdXIuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVzZXJzcGFjZS10cmlnZ2VyYWJsZSBjb2RlIHBhdGhzIG9yIGlucHV0IHBhcnNpbmcgbG9naWMsIGFzIHRoZSBldmVudCBnZW5lcmF0aW9uIGlzIGRyaXZlbiBieSBoYXJkd2FyZSBldmVudHMgYW5kIHRoZSBtdWx0aWNhc3Qgc3Vic2NyaXB0aW9uIGlzIGhhbmRsZWQgYnkgZ2VuZXJpYyBuZXRsaW5rIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5NjVhZjJmOTUyOGZiYWViZjE0Yjc3MzUxNWNiODk5NDA5YjZiNWE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjAgMDk6Mzk6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0CmluZGV4IDgzYzIxODUzYjc0YjYwLi40MDZlNGM0OWJhYzFmZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3QKQEAgLTU2LDYgJiM0Mzs1Niw3IEBAIFVzZXIgc3BhY2UgdG9vbHMgY2FuOgogICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuCiAqIENsZWFyIHNwZWNpZmljIGVycm9yIGNvdW50ZXJzIHdpdGggdGhlIGBgY2xlYXItZXJyb3ItY291bnRlcmBgIGNvbW1hbmQsIHVzaW5nIGJvdGgKICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLgomIzQzOyogU3Vic2NyaWJlIHRvIHRoZSBgYGVycm9yLXJlcG9ydGBgIG11bHRpY2FzdCBncm91cCB0byByZWNlaXZlIGBgZXJyb3ItZXZlbnRgYC4KIAogWUFNTC1iYXNlZCBJbnRlcmZhY2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTEsMyAmIzQzOzExMiwyMyBAQCBFeGFtcGxlOiBDbGVhciBhbiBlcnJvciBjb3VudGVyIGZvciBhIGdpdmVuIG5vZGUKIAogICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBjbGVhci1lcnJvci1jb3VudGVyIC0tanNvbiAmIzM5O3smIzM0O25vZGUtaWQmIzM0OzowLCAmIzM0O2Vycm9yLWlkJiMzNDs6MX0mIzM5OwogICAgIE5vbmUKJiM0MzsKJiM0MztFeGFtcGxlOiBTdWJzY3JpYmUgdG8gYGBlcnJvci1yZXBvcnRgYCBtdWx0aWNhc3QgZ3JvdXAKJiM0MzsKJiM0MzsuLiBjb2RlLWJsb2NrOjogYmFzaAomIzQzOwomIzQzOyAgICBzdWRvIHlubCAtLWZhbWlseSBkcm1fcmFzIC0tb3V0cHV0LWpzb24gLS1zdWJzY3JpYmUgZXJyb3ItcmVwb3J0CiYjNDM7CiYjNDM7Li4gY29kZS1ibG9jazo6IGpzb24KJiM0MzsKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7ZXJyb3ItZXZlbnQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bXNnJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O2RldmljZS1uYW1lJiMzNDs6ICYjMzQ7MDAwMDowMzowMC4wJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtub2RlLWlkJiMzNDs6IDEsCiYjNDM7ICAgICAgICAgICAgJiMzNDtub2RlLW5hbWUmIzM0OzogJiMzNDt1bmNvcnJlY3RhYmxlLWVycm9ycyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7ZXJyb3ItaWQmIzM0OzogMSwKJiM0MzsgICAgICAgICAgICAmIzM0O2Vycm9yLW5hbWUmIzM0OzogJiMzNDtlcnJvcl9uYW1lMSYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7ZXJyb3ItdmFsdWUmIzM0OzogMQomIzQzOyAgICAgICAgfQomIzQzOyAgICB9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbAppbmRleCBlMTEzMDU2ZjhjMDE2Yy4uOGFlZDNkNDUxNWU1YWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbApAQCAtNjksNiAmIzQzOzY5LDMzIEBAIGF0dHJpYnV0ZS1zZXRzOgogICAgICAgICBuYW1lOiBlcnJvci12YWx1ZQogICAgICAgICB0eXBlOiB1MzIKICAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgZXJyb3IgY291bnRlci4KJiM0MzsgIC0KJiM0MzsgICAgbmFtZTogZXJyb3ItZXZlbnQtYXR0cnMKJiM0MzsgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBkZXZpY2UtbmFtZQomIzQzOyAgICAgICAgdHlwZTogc3RyaW5nCiYjNDM7ICAgICAgICBkb2M6IERldmljZSAoUENJIEJERiwgVVVJRCkgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogbm9kZS1pZAomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBkb2M6IElEIG9mIHRoZSBub2RlIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IG5vZGUtbmFtZQomIzQzOyAgICAgICAgdHlwZTogc3RyaW5nCiYjNDM7ICAgICAgICBkb2M6IE5hbWUgb2YgdGhlIG5vZGUgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZXJyb3ItaWQKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZG9jOiBJRCBvZiB0aGUgZXJyb3IgY291bnRlci4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBlcnJvci1uYW1lCiYjNDM7ICAgICAgICB0eXBlOiBzdHJpbmcKJiM0MzsgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgZXJyb3IuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZXJyb3ItdmFsdWUKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSBlcnJvciBjb3VudGVyLgogCiBvcGVyYXRpb25zOgogICBsaXN0OgpAQCAtMTI0LDMgJiM0MzsxNTEsMjQgQEAgb3BlcmF0aW9uczoKICAgICAgIGRvOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRycwomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogZXJyb3ItZXZlbnQKJiM0MzsgICAgICBkb2M6ICZndDstCiYjNDM7ICAgICAgICAgICBSZXBvcnQgYW4gZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlLgomIzQzOyAgICAgICAgICAgVGhlIGV2ZW50IGluY2x1ZGVzIHRoZSBkZXZpY2UsIG5vZGUgYW5kIGVycm9yIGluZm9ybWF0aW9uCiYjNDM7ICAgICAgICAgICBvZiB0aGUgZXJyb3IgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LgomIzQzOyAgICAgIGF0dHJpYnV0ZS1zZXQ6IGVycm9yLWV2ZW50LWF0dHJzCiYjNDM7ICAgICAgbWNncnA6IGVycm9yLXJlcG9ydAomIzQzOyAgICAgIGV2ZW50OgomIzQzOyAgICAgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAgICAgLSBkZXZpY2UtbmFtZQomIzQzOyAgICAgICAgICAtIG5vZGUtaWQKJiM0MzsgICAgICAgICAgLSBub2RlLW5hbWUKJiM0MzsgICAgICAgICAgLSBlcnJvci1pZAomIzQzOyAgICAgICAgICAtIGVycm9yLW5hbWUKJiM0MzsgICAgICAgICAgLSBlcnJvci12YWx1ZQomIzQzOwomIzQzO21jYXN0LWdyb3VwczoKJiM0MzsgIGxpc3Q6CiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBlcnJvci1yZXBvcnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jCmluZGV4IGQ2ZWFiMjlhMTM5NGNhLi4wYjc3ZTQzNThlYThmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jCkBAIC00MSw2ICYjNDM7NDEsMTEgQEAKICAqICAgIFVzZXJzcGFjZSBtdXN0IHByb3ZpZGUgTm9kZSBJRCwgRXJyb3IgSUQuCiAgKiAgICBDbGVhcnMgc3BlY2lmaWMgZXJyb3IgY291bnRlciBvZiBhIG5vZGUgaWYgc3VwcG9ydGVkLgogICoKJiM0MzsgKiA0LiBFUlJPUl9SRVBPUlQ6IFN1YnNjcmliZSB0byB0aGlzIG11bHRpY2FzdCBncm91cCB0byByZWNlaXZlIGVycm9yIGV2ZW50cwomIzQzOyAqCiYjNDM7ICogNS4gRVJST1JfRVZFTlQ6IFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuIFRoZSBldmVudCBjb250YWlucyBkZXZpY2UsIG5vZGUKJiM0MzsgKiAgICBhbmQgZXJyb3IgaW5mb3JtYXRpb24gdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LgomIzQzOyAqCiAgKiBOb2RlIHJlZ2lzdHJhdGlvbjoKICAqCiAgKiAtIGRybV9yYXNfbm9kZV9yZWdpc3RlcigpOiBSZWdpc3RlcnMgYSBuZXcgbm9kZSBhbmQgYXNzaWducwpAQCAtMTg2LDYgJiM0MzsxOTEsMzQgQEAgc3RhdGljIGludCBtc2dfcmVwbHlfdmFsdWUoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLAogCQkJICAgdmFsdWUpOwogfQogCiYjNDM7c3RhdGljIGludCBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsCiYjNDM7CQkJCSAgICAgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19ERVZJQ0VfTkFNRSwgbm9kZS0mZ3Q7ZGV2aWNlX25hbWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9JRCwgbm9kZS0mZ3Q7aWQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9OQU1FLCBub2RlLSZndDtub2RlX25hbWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfSUQsIGVycm9yX2lkKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsIGVycm9yX25hbWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX1ZBTFVFLCB2YWx1ZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLAogCQkJICAgIHUzMiBlcnJvcl9pZCkKIHsKQEAgLTIyMiw2ICYjNDM7MjU1LDU3IEBAIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCwKIAlyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pOwogfQogCiYjNDM7LyoqCiYjNDM7ICogZHJtX3Jhc19ubF9lcnJvcl9ldmVudCgpIC0gUmVwb3J0IGFuIGVycm9yIGV2ZW50CiYjNDM7ICogQG5vZGU6IE5vZGUgc3RydWN0dXJlCiYjNDM7ICogQGVycm9yX2lkOiBJRCBvZiB0aGUgZXJyb3IKJiM0MzsgKiBAZXJyb3JfbmFtZTogTmFtZSBvZiB0aGUgZXJyb3IKJiM0MzsgKiBAdmFsdWU6IFZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXJyb3IKJiM0MzsgKgomIzQzOyAqIFJlcG9ydCBhbiBlcnJvci1ldmVudCB0byB1c2Vyc3BhY2UgdXNpbmcgdGhlIGVycm9yLXJlcG9ydCBtdWx0aWNhc3QgZ3JvdXAuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsCiYjNDM7CQkJICAgdTMyIHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IGdlbmxfaW5mbyBpbmZvOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOwomIzQzOwlzdHJ1Y3QgbmxhdHRyICpoZHI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghZXJyb3JfbmFtZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlnZW5sX2luZm9faW5pdF9udGYoJmFtcDtpbmZvLCAmYW1wO2RybV9yYXNfbmxfZmFtaWx5LCBEUk1fUkFTX0NNRF9FUlJPUl9FVkVOVCk7CiYjNDM7CiYjNDM7CW1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFtc2cpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJaGRyID0gZ2VubG1zZ19pcHV0KG1zZywgJmFtcDtpbmZvKTsKJiM0MzsJaWYgKCFoZHIpIHsKJiM0MzsJCXJldCA9IC1FTVNHU0laRTsKJiM0MzsJCWdvdG8gZnJlZV9tc2c7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhtc2csIG5vZGUsIGVycm9yX2lkLCBlcnJvcl9uYW1lLCB2YWx1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGNhbmNlbF9tc2c7CiYjNDM7CiYjNDM7CWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKJiM0MzsJZ2VubG1zZ19tdWx0aWNhc3RfYWxsbnMoJmFtcDtkcm1fcmFzX25sX2ZhbWlseSwgbXNnLCAwLCBEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2NhbmNlbF9tc2c6CiYjNDM7CWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKJiM0MztmcmVlX21zZzoKJiM0MzsJbmxtc2dfZnJlZShtc2cpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGRybV9yYXNfbmxfZXJyb3JfZXZlbnQpOwomIzQzOwogLyoqCiAgKiBkcm1fcmFzX25sX2dldF9lcnJvcl9jb3VudGVyX2R1bXBpdCgpIC0gRHVtcCBhbGwgRXJyb3IgQ291bnRlcnMKICAqIEBza2I6IE5ldGxpbmsgbWVzc2FnZSBidWZmZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jCmluZGV4IGRlYTFjMWIyNDk0ZTgxLi45ZDMxMjNjYzlmOWNhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jCkBAIC01OCw2ICYjNDM7NTgsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0gewogCX0sCiB9OwogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBkcm1fcmFzX25sX21jZ3Jwc1tdID0gewomIzQzOwlbRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlRdID0geyAmIzM0O2Vycm9yLXJlcG9ydCYjMzQ7LCB9LAomIzQzO307CiYjNDM7CiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0gewogCS5uYW1lCQk9IERSTV9SQVNfRkFNSUxZX05BTUUsCiAJLnZlcnNpb24JPSBEUk1fUkFTX0ZBTUlMWV9WRVJTSU9OLApAQCAtNjYsNCAmIzQzOzcwLDYgQEAgc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHsKIAkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAogCS5zcGxpdF9vcHMJPSBkcm1fcmFzX25sX29wcywKIAkubl9zcGxpdF9vcHMJPSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfb3BzKSwKJiM0MzsJLm1jZ3JwcwkJPSBkcm1fcmFzX25sX21jZ3JwcywKJiM0MzsJLm5fbWNncnBzCT0gQVJSQVlfU0laRShkcm1fcmFzX25sX21jZ3JwcyksCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmgKaW5kZXggYTM5ODY0MzU3MmE1YTAuLjAzZWMyNzVhY2E5MjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmgKQEAgLTIxLDYgJiM0MzsyMSwxMCBAQCBpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIGludCBkcm1fcmFzX25sX2NsZWFyX2Vycm9yX2NvdW50ZXJfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQlzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKIAomIzQzO2VudW0gewomIzQzOwlEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVCwKJiM0Mzt9OwomIzQzOwogZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseTsKIAogI2VuZGlmIC8qIF9MSU5VWF9EUk1fUkFTX0dFTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYwppbmRleCA3OTM3ZDhiYTBlZDljZS4uMDI4NzU5NGUxMDI2NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYwpAQCAtMTg1LDYgJiM0MzsxODUsNDggQEAgc3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogeGVfZHJtX3Jhc19ldmVudCgpIC0gUmVwb3J0IGRybV9yYXMgZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlCiYjNDM7ICogQHhlOiB4ZSBkZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICogQGNvbXBvbmVudDogZXJyb3IgY29tcG9uZW50IChzZWUgJmFtcDtlbnVtIGRybV94ZV9yYXNfZXJyb3JfY29tcG9uZW50KQomIzQzOyAqIEBzZXZlcml0eTogZXJyb3Igc2V2ZXJpdHkgKHNlZSAmYW1wO2VudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSkKJiM0MzsgKiBAdmFsdWU6IHZhbHVlIG9mIGVycm9yIGNvdW50ZXIKJiM0MzsgKgomIzQzOyAqIFJlcG9ydCBhbiBlcnJvci1ldmVudCB0byB1c2Vyc3BhY2UuCiYjNDM7ICovCiYjNDM7dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBjb21wb25lbnQsIHU4IHNldmVyaXR5LCB1MzIgdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gJmFtcDt4ZS0mZ3Q7cmFzOwomIzQzOwlzdHJ1Y3QgeGVfZHJtX3Jhc19jb3VudGVyICppbmZvOwomIzQzOwlzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKiBFdmVudCBpcyBzdXBwb3J0ZWQgb25seSBpZiBkcm1fcmFzIGlzIGVuYWJsZWQgKi8KJiM0MzsJaWYgKCF4ZS0mZ3Q7aW5mby5oYXNfZHJtX3JhcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGNvbXBvbmVudCAmZ3Q7PSBEUk1fWEVfUkFTX0VSUl9DT01QX01BWCkgewomIzQzOwkJZHJtX3dhcm4oJmFtcDt4ZS0mZ3Q7ZHJtLCAmIzM0O3Vuc3VwcG9ydGVkIGNvbXBvbmVudCAldVxuJiMzNDssIGNvbXBvbmVudCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHNldmVyaXR5ICZndDs9IERSTV9YRV9SQVNfRVJSX1NFVl9NQVgpIHsKJiM0MzsJCWRybV93YXJuKCZhbXA7eGUtJmd0O2RybSwgJiMzNDt1bnN1cHBvcnRlZCBzZXZlcml0eSAldVxuJiMzNDssIHNldmVyaXR5KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlub2RlID0gJmFtcDtyYXMtJmd0O25vZGVbc2V2ZXJpdHldOwomIzQzOwlpbmZvID0gcmFzLSZndDtpbmZvW3NldmVyaXR5XTsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvIHx8ICFpbmZvW2NvbXBvbmVudF0ubmFtZSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcmV0ID0gZHJtX3Jhc19ubF9lcnJvcl9ldmVudChub2RlLCBjb21wb25lbnQsIGluZm9bY29tcG9uZW50XS5uYW1lLCB2YWx1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlkcm1fZXJyX3JhdGVsaW1pdGVkKCZhbXA7eGUtJmd0O2RybSwgJiMzNDtkcm1fcmFzIGVycm9yLWV2ZW50IGZhaWxlZDogJWQgZm9yICVzICVzXG4mIzM0OywgcmV0LAomIzQzOwkJCQkgICAgaW5mb1tjb21wb25lbnRdLm5hbWUsIGVycm9yX3NldmVyaXR5W3NldmVyaXR5XSk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB4ZV9kcm1fcmFzX2luaXQoKSAtIEluaXRpYWxpemUgRFJNIFJBUwogICogQHhlOiB4ZSBkZXZpY2UgaW5zdGFuY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oCmluZGV4IDM2NWM3MGU5M2U4MmZkLi5hZGQ5NmJmMWE3YWJkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oCkBAIC01LDExICYjNDM7NSwxNCBAQAogI2lmbmRlZiBfWEVfRFJNX1JBU19IXwogI2RlZmluZSBfWEVfRFJNX1JBU19IXwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiBzdHJ1Y3QgeGVfZGV2aWNlOwogCiAjZGVmaW5lIGZvcl9lYWNoX2Vycm9yX3NldmVyaXR5KGkpCVwKIAlmb3IgKGkgPSAwOyBpICZsdDsgRFJNX1hFX1JBU19FUlJfU0VWX01BWDsgaSYjNDM7JiM0MzspCiAKIGludCB4ZV9kcm1fcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpOwomIzQzO3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggY29tcG9uZW50LCB1OCBzZXZlcml0eSwgdTMyIHZhbHVlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMKaW5kZXggZWQ2MDk5MTJmZGExNDAuLjQ2MmNiYjU0OGYwN2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jCkBAIC04OSw2ICYjNDM7ODksOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdwdV9oZWFsdGhfc3RhdGVzW10gPSB7CiB9Owogc3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKGdwdV9oZWFsdGhfc3RhdGVzKSA9PSBYRV9SQVNfSEVBTFRIX01BWCk7CiAKJiM0MztzdGF0aWMgaW50IGdldF9jb3VudGVyKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICpjb3VudGVyLCB1MzIgKnZhbHVlKTsKJiM0MzsKIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KQogewogCXN3aXRjaCAoc2V2ZXJpdHkpIHsKQEAgLTEwMSw2ICYjNDM7MTAzLDE4IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KQogCX0KIH0KIAomIzQzO3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KQomIzQzO3sKJiM0MzsJc3dpdGNoIChzZXZlcml0eSkgewomIzQzOwljYXNlIFhFX1JBU19TRVZfQ09SUkVDVEFCTEU6CiYjNDM7CQlyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFOwomIzQzOwljYXNlIFhFX1JBU19TRVZfVU5DT1JSRUNUQUJMRToKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfVU5DT1JSRUNUQUJMRTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudCkKIHsKIAlzd2l0Y2ggKGNvbXBvbmVudCkgewpAQCAtMTE5LDYgJiM0MzsxMzMsMjQgQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgdTggeGVfdG9fZHJtX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KQomIzQzO3sKJiM0MzsJc3dpdGNoIChjb21wb25lbnQpIHsKJiM0MzsJY2FzZSBYRV9SQVNfQ09NUF9ERVZJQ0VfTUVNT1JZOgomIzQzOwkJcmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfREVWSUNFX01FTU9SWTsKJiM0MzsJY2FzZSBYRV9SQVNfQ09NUF9DT1JFX0NPTVBVVEU6CiYjNDM7CQlyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9DT1JFX0NPTVBVVEU7CiYjNDM7CWNhc2UgWEVfUkFTX0NPTVBfUENJRToKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1BDSUU7CiYjNDM7CWNhc2UgWEVfUkFTX0NPTVBfRkFCUklDOgomIzQzOwkJcmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfRkFCUklDOwomIzQzOwljYXNlIFhFX1JBU19DT01QX1NPQ19JTlRFUk5BTDoKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1NPQ19JTlRFUk5BTDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX01BWDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcmFzX3N0YXR1c190b19lcnJubyh1MzIgc3RhdHVzKQogewogCXN3aXRjaCAoc3RhdHVzKSB7CkBAIC0yMTcsNiAmIzQzOzI0OSwyNiBAQCBzdGF0aWMgdm9pZCByYXNfdXNwX2Flcl9pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKQogCWRldl9kYmcoJmFtcDt1c3AtJmd0O2RldiwgJiMzNDtVbmNvcnJlY3RhYmxlIEludGVybmFsIEVycm9ycyBkb3duZ3JhZGVkIGFuZCB1bm1hc2tlZFxuJiMzNDspOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXIgPSB7MH07CiYjNDM7CXU4IGRybV9zZXZlcml0eSwgZHJtX2NvbXBvbmVudDsKJiM0MzsJdTMyIHZhbHVlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwljb3VudGVyLmNvbW1vbi5zZXZlcml0eSA9IHNldmVyaXR5OwomIzQzOwljb3VudGVyLmNvbW1vbi5jb21wb25lbnQgPSBjb21wb25lbnQ7CiYjNDM7CiYjNDM7CXJldCA9IGdldF9jb3VudGVyKHhlLCAmYW1wO2NvdW50ZXIsICZhbXA7dmFsdWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkcm1fc2V2ZXJpdHkgPSB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHNldmVyaXR5KTsKJiM0MzsJZHJtX2NvbXBvbmVudCA9IHhlX3RvX2RybV9yYXNfY29tcG9uZW50KGNvbXBvbmVudCk7CiYjNDM7CiYjNDM7CXhlX2RybV9yYXNfZXZlbnQoeGUsIGRybV9jb21wb25lbnQsIGRybV9zZXZlcml0eSwgdmFsdWUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB1OCBoYW5kbGVfY29yZV9jb21wdXRlX2Vycm9ycyhzdHJ1Y3QgeGVfcmFzX2Vycm9yX2FycmF5ICphcnIpCiB7CiAJc3RydWN0IHhlX3Jhc19jb21wdXRlX2Vycm9yICplcnJvcl9pbmZvID0gKHZvaWQgKilhcnItJmd0O2RldGFpbHM7CkBAIC0yNDEsOCAmIzQzOzI5MywxMCBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLAogCXN0cnVjdCB4ZV9yYXNfdGhyZXNob2xkX2Nyb3NzZWQgKnBlbmRpbmcgPSAodm9pZCAqKSZhbXA7cmVzcG9uc2UtJmd0O2RhdGE7CiAJc3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqZXJyb3JzID0gcGVuZGluZy0mZ3Q7Y291bnRlcnM7CiAJdTMyIGlkLCBuY291bnRlcnMgPSBwZW5kaW5nLSZndDtuY291bnRlcnM7CiYjNDM7CXU4IHNlbnQgPSAwOwogCiAJQlVJTERfQlVHX09OKHNpemVvZihyZXNwb25zZS0mZ3Q7ZGF0YSkgJmx0OyBzaXplb2YoKnBlbmRpbmcpKTsKJiM0MzsJQlVJTERfQlVHX09OKEJJVFNfUEVSX1RZUEUoc2VudCkgJmx0OyBYRV9SQVNfQ09NUF9NQVgpOwogCXhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2Vzcyh4ZSk7CiAKIAlpZiAoIW5jb3VudGVycyB8fCBuY291bnRlcnMgJmd0OyBYRV9SQVNfTlVNX0NPVU5URVJTKQpAQCAtMjU2LDggJiM0MzszMTAsMjEgQEAgdm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwKIAkJc2V2ZXJpdHkgPSBlcnJvcnNbaWRdLmNvbW1vbi5zZXZlcml0eTsKIAkJY29tcG9uZW50ID0gZXJyb3JzW2lkXS5jb21tb24uY29tcG9uZW50OwogCiYjNDM7CQlpZiAoc2V2ZXJpdHkgIT0gWEVfUkFTX1NFVl9DT1JSRUNUQUJMRSkgewomIzQzOwkJCXhlX3dhcm4oeGUsICYjMzQ7c3lzY3RybDogdW5leHBlY3RlZCBzZXZlcml0eSAlcyAoJXUpXG4mIzM0Oywgc2V2X3RvX3N0cihzZXZlcml0eSksCiYjNDM7CQkJCXNldmVyaXR5KTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJeGVfd2Fybih4ZSwgJiMzNDtbUkFTXTogJXMgJXMgZGV0ZWN0ZWRcbiYjMzQ7LAogCQkJY29tcF90b19zdHIoY29tcG9uZW50KSwgc2V2X3RvX3N0cihzZXZlcml0eSkpOwomIzQzOwomIzQzOwkJLyogU2VuZCBldmVudCBvbmNlIHBlciBjb21wb25lbnQgKi8KJiM0MzsJCWlmIChzZW50ICZhbXA7IEJJVChjb21wb25lbnQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJc2VudCB8PSBCSVQoY29tcG9uZW50KTsKJiM0MzsKJiM0MzsJCXJhc19zZW5kX2Vycm9yX2V2ZW50KHhlLCBzZXZlcml0eSwgY29tcG9uZW50KTsKIAl9CiB9CiAKQEAgLTMxMSw2ICYjNDM7Mzc4LDcgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSkKIAllbnVtIHhlX3Jhc19yZWNvdmVyeV9hY3Rpb24gZmluYWxfYWN0aW9uOwogCXUzMiByZW1haW5pbmcgPSBYRV9TWVNDVFJMX0ZMT09EX0xJTUlUOwogCXN0cnVjdCB4ZV9yYXNfZ2V0X3NvY19lcnJvciByZXNwb25zZTsKJiM0MzsJdTggc2VudCA9IDA7CiAJc2l6ZV90IHJsZW47CiAJaW50IHJldDsKIApAQCAtMzU0LDYgJiM0Mzs0MjIsMTIgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSkKIAkJCXhlX2luZm8oeGUsICYjMzQ7W1JBU106ICVzICVzIGRldGVjdGVkXG4mIzM0OywgY29tcF90b19zdHIoY29tcG9uZW50KSwKIAkJCQlzZXZfdG9fc3RyKHNldmVyaXR5KSk7CiAKJiM0MzsJCQkvKiBTZW5kIGV2ZW50IG9uY2UgcGVyIGNvbXBvbmVudCAqLwomIzQzOwkJCWlmICghKHNlbnQgJmFtcDsgQklUKGNvbXBvbmVudCkpKSB7CiYjNDM7CQkJCXNlbnQgfD0gQklUKGNvbXBvbmVudCk7CiYjNDM7CQkJCXJhc19zZW5kX2Vycm9yX2V2ZW50KHhlLCBzZXZlcml0eSwgY29tcG9uZW50KTsKJiM0MzsJCQl9CiYjNDM7CiAJCQlzd2l0Y2ggKGNvbXBvbmVudCkgewogCQkJY2FzZSBYRV9SQVNfQ09NUF9DT1JFX0NPTVBVVEU6CiAJCQkJYWN0aW9uID0gaGFuZGxlX2NvcmVfY29tcHV0ZV9lcnJvcnMoYXJyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaAppbmRleCAwYmVlZGUzZGRjNGU0Yi4uZWUyY2FhMGVkYzZmOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2RybS9kcm1fcmFzLmgKQEAgLTgwLDkgJiM0Mzs4MCwxNCBAQCBzdHJ1Y3QgZHJtX2RldmljZTsKICNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fUkFTKQogaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTsKIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7CiYjNDM7aW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLAomIzQzOwkJCSAgIHUzMiB2YWx1ZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIGludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwKJiM0MzsJCQkJCSBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpCiYjNDM7eyByZXR1cm4gMDsgfQogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaAppbmRleCAyMThhM2VlODY4MDUyNy4uZWFiODIzMWFhODdjYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oCkBAIC0zOCwxMyAmIzQzOzM4LDI4IEBAIGVudW0gewogCURSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCAtIDEpCiB9OwogCiYjNDM7ZW51bSB7CiYjNDM7CURSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19ERVZJQ0VfTkFNRSA9IDEsCiYjNDM7CURSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX0lELAomIzQzOwlEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9OQU1FLAomIzQzOwlEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfSUQsCiYjNDM7CURSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9OQU1FLAomIzQzOwlEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfVkFMVUUsCiYjNDM7CiYjNDM7CV9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCwKJiM0MzsJRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVggLSAxKQomIzQzO307CiYjNDM7CiBlbnVtIHsKIAlEUk1fUkFTX0NNRF9MSVNUX05PREVTID0gMSwKIAlEUk1fUkFTX0NNRF9HRVRfRVJST1JfQ09VTlRFUiwKIAlEUk1fUkFTX0NNRF9DTEVBUl9FUlJPUl9DT1VOVEVSLAomIzQzOwlEUk1fUkFTX0NNRF9FUlJPUl9FVkVOVCwKIAogCV9fRFJNX1JBU19DTURfTUFYLAogCURSTV9SQVNfQ01EX01BWCA9IChfX0RSTV9SQVNfQ01EX01BWCAtIDEpCiB9OwogCiYjNDM7I2RlZmluZSBEUk1fUkFTX01DR1JQX0VSUk9SX1JFUE9SVAkmIzM0O2Vycm9yLXJlcG9ydCYjMzQ7CiYjNDM7CiAjZW5kaWYgLyogX1VBUElfTElOVVhfRFJNX1JBU19IICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MjAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXcgTmV0bGluayBNdWx0aWNhc3QgRXZlbnQgZm9yIERSTSBSQVMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBpdCYjMzk7cyBhYm91dCBhZGRpbmcgYW4gYGVycm9yLWV2ZW50YCBuZXRsaW5rIG11bHRpY2FzdCBldmVudCB0byB0aGUgZXhpc3RpbmcgYGRybV9yYXNgIG5ldGxpbmsgZmFtaWx5LiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IGl0JiMzOTtzIGdvb2QgdGhhdCB3ZSYjMzk7cmUgZXhwYW5kaW5nIG91ciBlcnJvciByZXBvcnRpbmcgY2FwYWJpbGl0aWVzLCBidXQgbGV0JiMzOTtzIHNlZSB3aGVyZSB0aGUgcmlza3MgbGllLgoKVGhlIHBhdGNoIHRvdWNoZXMgYSBidW5jaCBvZiBmaWxlcywgbW9zdGx5IGluIHRoZSBEUk0gYW5kIHNwZWNpZmljYWxseSB0aGUgYHhlYCBkcml2ZXIgYXJlYXMsIGFsb25nIHdpdGggcmVsYXRlZCBoZWFkZXIgYW5kIGRvY3VtZW50YXRpb24gZmlsZXMsIHdoaWNoIGlzIGV4cGVjdGVkIGZvciBzb21ldGhpbmcgbGlrZSB0aGlzLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIHRoZSBhY3R1YWwgbmV0bGluayBtdWx0aWNhc3QgZXZlbnQuICBJdCBtb2RpZmllcyB0aGUgYHhlYCBkcml2ZXIgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHRocm91Z2ggYHhlX2RybV9yYXNfZXZlbnRgIGFuZCBzdWJzZXF1ZW50bHkgdGhyb3VnaCBgcmFzX3NlbmRfZXJyb3JfZXZlbnRgLCBldmVudHVhbGx5IG9yaWdpbmF0aW5nIGZyb20gaGFyZHdhcmUgZXJyb3IgaGFuZGxlcnMgbGlrZSBgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWRgIGFuZCBgeGVfcmFzX3Byb2Nlc3NfZXJyb3JzYC4KCk5vdywgdGhlIG1haW4gcXVlc3Rpb24gaXMgYWx3YXlzOiAqaXMgdGhpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2U/KiBUaGUgZG9jdW1lbnRhdGlvbiBpcyBwcmV0dHkgY2xlYXIgYWJvdXQgYGVycm9yLWV2ZW50YCBiZWluZyAqdG8qIHVzZXJzcGFjZS4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtdWx0aWNhc3QgZ3JvdXAsIGBlcnJvci1yZXBvcnRgLCB0byB3aGljaCB1c2Vyc3BhY2UgY2FuIHN1YnNjcmliZS4gSXQgc2VlbXMgdGhlIGV2ZW50IGl0c2VsZiBpcyB0cmlnZ2VyZWQgYnkgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGJ5IHRoZSBgeGVgIGRyaXZlciB3aGVuIFJBUyBlcnJvcnMgaGFwcGVuLiBBIHF1aWNrIGRvdWJsZS1jaGVjazogaXMgdGhlcmUgYW55IHdheSBmb3IgdXNlcnNwYWNlIHRvIHRyaWdnZXIgYHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkYCBvciBgeGVfcmFzX3Byb2Nlc3NfZXJyb3JzYCBkaXJlY3RseT8gVGhlc2UgYXBwZWFyIHRvIGJlIGhhcmR3YXJlIGVycm9yIGhhbmRsZXJzLCBzbyBpdCBzZWVtcyB1bmxpa2VseS4KCkkgcXVpY2tseSBjaGVjayB0aGUgbmV0bGluayBwYXJ0OiBJdCBtZXJlbHkgZGVmaW5lcyB0aGUgbXVsdGljYXN0IGdyb3VwIGFuZCB0aGUgZXZlbnQgYXR0cmlidXRlcy4gVGhlcmUmIzM5O3Mgbm8gbmV3IGBkb2l0YCBvciBgZHVtcGl0YCBvcGVyYXRpb24gZm9yIHVzZXJzcGFjZSB0byBjYWxsLCBub3RoaW5nIHRoYXQgY291bGQgdHJpZ2dlciBhbiBldmVudCBvdGhlciB0aGFuIHN1YnNjcmliaW5nIHRvIHRoZSBtdWx0aWNhc3QgZ3JvdXAuIExvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24gb2YgYERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UYCBpbiB0aGUgYGluY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oYCwgYWxvbmcgd2l0aCB0aGUgYGRybV9yYXMueWFtbGAgZmlsZSwgaXQgY29uZmlybXMgdGhpcyBpcyBhbiBldmVudCAqc2VudCB0byogdXNlcnNwYWNlLCB3aXRoIGluZm9ybWF0aW9uIGxpa2UgZGV2aWNlIG5hbWUsIG5vZGUgSUQsIGFuZCBlcnJvciBkZXRhaWxzLgoKSSYjMzk7bSB2ZXJpZnlpbmcgYnkgZXhhbWluaW5nIGBkcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jYC4gYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgIGNsZWFybHkgY3JlYXRlcyBhbmQgc2VuZHMgdGhlIG5ldGxpbmsgbm90aWZpY2F0aW9uLiBUaGUgYG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnNgIGlzIHNvbGVseSBhYm91dCBwb3B1bGF0aW5nIHRoZSBldmVudCBkYXRhLiBUaGUgYHhlYCBkcml2ZXIgY2hhbmdlcyBhcmUgb25seSBhYm91dCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2hlbiBoYXJkd2FyZSBlcnJvcnMgYXJlIGVuY291bnRlcmVkLgoKU28sIHNpbmNlIGl0JiMzOTtzIG9ubHkgYW4gb3V0Ym91bmQgbmV0bGluayBub3RpZmljYXRpb24sIGFuZCBubyBuZXcgY29kZSBwYXRocyB0cmlnZ2VyZWQgKmJ5KiB1c2Vyc3BhY2UsIHRoZSByaXNrIG9mIGZ1enppbmcgaXMgbWluaW1hbC4uLiB1bmxlc3MsIG9mIGNvdXJzZSwgdGhlcmUmIzM5O3Mgc29tZSBzb3J0IG9mIGltcGxpY2l0IHZ1bG5lcmFiaWxpdHkgaW4gdGhlIG5ldGxpbmsgaW5mcmFzdHJ1Y3R1cmUgaXRzZWxmLCBvciwgYXMgYSBtb3JlIHJlbW90ZSBwb3NzaWJpbGl0eSwgaWYgdGhlc2UgaGFyZHdhcmUgZXZlbnRzIHRyaWdnZXJlZCBieSBzb21lIG90aGVyIG1lYW5zIGxpa2UgZGVidWdmcyBvciBzeXNmcy4gSSB3b3VsZCBub3cgdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIGluamVjdGlvbiBvciB0cmlnZ2VyaW5nIG9mIHRob3NlIGVycm9yIGV2ZW50cy4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCB0aGlzIGZlZWxzIGxpa2UgaXQgd2lsbCBiZSBhIGxvdyBwcmlvcml0eSBmb3IgZnV6emluZywgdW5sZXNzIGBncmVwcGVyYCByZXZlYWxzIHNvbWUgaGlkZGVuIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0yNzI9c3RhdGljIHU4IGhhbmRsZV9jb3JlX2NvbXB1dGVfZXJyb3JzKHN0cnVjdCB4ZV9yYXNfZXJyb3JfYXJyYXkgKmFycilcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMjg5LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jOjI5MDp2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTI5MS1cdFx0XHRcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmg9MTM9c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2U7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmgtMTQtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmg6MTU6dm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaC0xNi1cdFx0XHRcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYz0xNT1zdGF0aWMgdm9pZCBnZXRfcGVuZGluZ19ldmVudChzdHJ1Y3QgeGVfc3lzY3RybCAqc2MsIHN0cnVjdCB4ZV9zeXNjdHJsX21haWxib3hfY29tbWFuZCAqY29tbWFuZClcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jLTM4LVx0XHRpZiAocmVzcG9uc2UtXHUwMDNlZXZlbnQgPT0gWEVfU1lTQ1RSTF9FVkVOVF9USFJFU0hPTERfQ1JPU1NFRClcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM6Mzk6XHRcdFx0eGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoeGUsIHJlc3BvbnNlKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtNDAtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA1NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBSQVMgRXJyb3IgRmxvdyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHNvIGB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZGAgZ2V0cyB0cmlnZ2VyZWQgZnJvbSBgeGVfc3lzY3RybF9ldmVudC5jYC4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhhcmR3YXJlIGV2ZW50IGhhbmRsaW5nIGxpdmVzLiBUaGF0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgYSBrZXkgcGFydCBvZiB0aGUgcmVhbC10aW1lIHJlc3BvbnNlIHRvIGEgUkFTIGV2ZW50LiBXaGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kIG5vdyBpcyB0aGUgcmVsYXRpb25zaGlwIG9mIHRoYXQgZnVuY3Rpb24gdG8gb3RoZXJzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBmbG93IG9mIHRoaXMgY29kZS4gV2hlcmUgZG9lcyBpdCBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgZXJyb3IgaGFuZGxpbmc/CgpJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IHRoaXMuLi4gaG93IGRvZXMgdGhhdCB0aHJlc2hvbGQgY3Jvc3NpbmcgcmVsYXRlIHRvIHRoZSBvdGhlciBSQVMgZXJyb3IgaGFuZGxpbmcgZnVuY3Rpb25zPyBXaGF0IGhhcHBlbnMgbmV4dD8gV2hlcmUgaXMgYHhlX3Jhc19wcm9jZXNzX2Vycm9yc2AgdXNlZD8gSSYjMzk7bGwgbmVlZCB0byBnbyBmaW5kIHdoZXJlIGB4ZV9yYXNfcHJvY2Vzc19lcnJvcnNgIGlzIGNhbGxlZC4gSXQmIzM5O3MgcHJvYmFibHkgaW52b2tlZCBlaXRoZXIgZnJvbSBoZXJlIGRpcmVjdGx5LCBvciBmcm9tIHNvbWV3aGVyZSBkZWVwZXIgaW4gdGhlIGNhbGwgc3RhY2suIFRoaXMgdGhyZXNob2xkIGNyb3NzZWQgZXZlbnQgaGFzIHRvIGZlZWQgaW50byBzb21lIGtpbmQgb2YgZXJyb3IgcHJvY2Vzc2luZywgcmlnaHQ/IFRoZSBrZXkgbm93IGlzIHRyYWNraW5nIGRvd24gdGhhdCBjb25uZWN0aW9uLCBmaWd1cmluZyBvdXQgaG93IHRoZSBkYXRhIGZsb3dzIGZyb20gb25lIHRvIHRoZSBuZXh0LCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBlcnJvciBoYW5kbGluZyBzdGF0ZSBtYWNoaW5lIGxvb2tzIGxpa2UuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNhbGwgZ3JhcGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hlX3Jhc19wcm9jZXNzX2Vycm9ycyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX2Vycm9yLmM9Nzg9c3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgeGVfcGNpX2Vycm9yX21taW9fZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX2Vycm9yLmMtODMtXHR4ZV9pbmZvKHhlLCBcJiMzNDtQQ0kgZXJyb3I6IE1NSU8gZW5hYmxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX2Vycm9yLmM6ODQ6XHRhY3Rpb24gPSB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoeGUpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9lcnJvci5jLTg1LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0zMzE9c3RhdGljIGludCBnZXRfY291bnRlcihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqY291bnRlciwgdTMyICp2YWx1ZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMzY2LS8qKlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jOjM2NzogKiB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoKSAtIFByb2Nlc3MgYW5kIGNvbnRhaW4gaGFyZHdhcmUgZXJyb3JzXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMzY4LSAqIEB4ZTogeGUgZGV2aWNlIGluc3RhbmNlXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTM3NC0gKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzozNzU6ZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy0zNzYte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz02Nzc9dm9pZCB4ZV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtNjk2LVx0ICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM6Njk3Olx0eGVfcmFzX3Byb2Nlc3NfZXJyb3JzKHhlKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy02OTgtXHRyZXQgPSBkZXZtX2RldmljZV9hZGRfZ3JvdXAoeGUtXHUwMDNlZHJtLmRldiwgXHUwMDI2Z3B1X2hlYWx0aF9ncm91cCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oPTE5PXZvaWQgeGVfcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oOjIwOmVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoc3RydWN0IHhlX2RldmljZSAqeGUpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oLTIxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTk1CgkJCQkJCQlvdXRwdXQ6IDk2CgkJCQkJCQl0aG91Z2h0czogNTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXM6IE5vIE5ldyBVc2Vyc3BhY2UgQXR0YWNrIFN1cmZhY2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgZm9jdXNlcyBvbiBpZGVudGlmeWluZyBuZXcgYXR0YWNrIHN1cmZhY2VzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCDigJMgc3BlY2lmaWNhbGx5LCBhbnl0aGluZyByZWFjaGFibGUgYnkgdXNlcnNwYWNlIHRoYXQgY291bGQgYmUgZnV6emVkLgoKSSYjMzk7dmUgdHJhY2VkIHRoZSBmbG93LiBgeGVfcmFzX3Byb2Nlc3NfZXJyb3JzYCBpcyB0cmlnZ2VyZWQgaW50ZXJuYWxseSDigJMgYnkgYHhlX3BjaV9lcnJvcl9tbWlvX2VuYWJsZWRgIGFuZCBgeGVfcmFzX2luaXRgLiBOb3RoaW5nIGhlcmUgc2VlbXMgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UgZXhjZXB0LCBwZXJoYXBzLCBkdXJpbmcgaW5pdGlhbGlzYXRpb24gb3IgZXJyb3IgcmVjb3ZlcnkuIFRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGEgbmV0bGluayBub3RpZmljYXRpb24uIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgc3VzcGljaW9uOyBpcyB0aGVyZSBhbnkgbmV3IHBhcnNpbmcgb2YgdXNlcnNwYWNlLXByb3ZpZGVkIGlucHV0PwoKSSBzZWUgdGhhdCBgZHJtX3Jhc2AgbmV0bGluayBmYW1pbHkgaXMgYWxyZWFkeSBlc3RhYmxpc2hlZC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBlcnJvci1ldmVudGAgdG8gYGRybV9yYXMueWFtbGAgYW5kIGBkcm1fcmFzLmNgLiBUaGF04oCZcyBteSBwcmltYXJ5IGNvbmNlcm4uIEhvd2V2ZXIsIHVwb24gaW5zcGVjdGlvbiwgYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgIGlzICpleHBvcnRlZCogYW5kIGNhbGxlZCBmcm9tIHRoZSBkcml2ZXIsIGJ1dCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgYWRkIGFueSBjb2RlIHRvIHBhcnNlIGluY29taW5nIHVzZXJzcGFjZSBpbnB1dC4gVGhlIG5ldyBjb2RlIGlzIGBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzYCwgd2hpY2ggY29uc3RydWN0cyB0aGUgbmV0bGluayBtZXNzYWdlICpzZW50KiB0byB1c2Vyc3BhY2UuCgpUaGUgdXNlcnNwYWNlIGludGVyYWN0aW9uIGlzIHNvbGVseSBzdWJzY3JpYmluZyB0byB0aGUgbXVsdGljYXN0IGdyb3VwLiBUaGF04oCZcyBnZW5lcmljIG5ldGxpbmsgdGVycml0b3J5LiBgZHJtX3Jhc2AgaXMgb25seSBjb25jZXJuZWQgd2l0aCB0aGUgKnNlbmRpbmcqIHNpZGUuIFRodXMsIHRoZXJlIGlzICpubyogbmV3IHVzZXJzcGFjZS1yZWFjaGFibGUgY29kZSBpbnRyb2R1Y2VkLiBUaGlzIGlzIGp1c3QgYSBub3RpZmljYXRpb24gY2hhbm5lbCwga2VybmVsIHRvIHVzZXJzcGFjZS4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSBkb2N1bWVudGF0aW9uIGNoYW5nZXMgZm9yIGBkcm1fcmFzLnlhbWxgLiBBaCwgaXQmIzM5O3MgYWRkaW5nIGBlcnJvci1ldmVudC1hdHRyc2AgYW5kIGFuIGBlcnJvci1ldmVudGAgb3BlcmF0aW9uLCBhbG9uZyB3aXRoIGFuIGBlcnJvci1yZXBvcnRgIG11bHRpY2FzdCBncm91cC4gVGhlIGBldmVudDpgIGRlc2lnbmF0aW9uIGZvciBgZXJyb3ItZXZlbnRgIGNvbmZpcm1zIGl0JiMzOTtzIGEgbm90aWZpY2F0aW9uIOKAkyB0aGVyZSBhcmUgbm8gYGRvOmAgb3IgYGR1bXA6YCBjb21tYW5kcyBoZXJlLgoKTXkgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBhZGQgYW55IG5ldyB1c2Vyc3BhY2UtdHJpZ2dlcmFibGUgY29kZSBwYXRocy4gYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgLCBgeGVfZHJtX3Jhc19ldmVudGAgYW5kIGByYXNfc2VuZF9lcnJvcl9ldmVudGAgYXJlIHNpbXBseSBmb3JtYXR0aW5nIGFuZCB0cmFuc21pdHRpbmcgZXJyb3IgaW5mb3JtYXRpb24uIFRoZXJlIGFyZSBubyBuZXcgaW9jdGxzLCBzeXNmcyBlbnRyaWVzLCBkZWJ1Z2ZzIGZpbGVzLCBvciBuZXRsaW5rIGNvbW1hbmRzIHRoYXQgdXNlcnNwYWNlIGNhbiBpbml0aWF0ZS4KClRoZXJlZm9yZSwgV29ydGhGdXp6aW5nPWZhbHNlLiBJIGFtIGNvbmZpZGVudCBpbiB0aGF0IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV0bGluayBtdWx0aWNhc3Qgbm90aWZpY2F0aW9uIChgZXJyb3ItZXZlbnRgKSBzZW50IGZyb20gdGhlIGtlcm5lbCB0byB1c2Vyc3BhY2Ugd2hlbiBoYXJkd2FyZSBSQVMgZXJyb3JzIG9jY3VyLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB1c2Vyc3BhY2UtdHJpZ2dlcmFibGUgY29kZSBwYXRocyBvciBpbnB1dCBwYXJzaW5nIGxvZ2ljLCBhcyB0aGUgZXZlbnQgZ2VuZXJhdGlvbiBpcyBkcml2ZW4gYnkgaGFyZHdhcmUgZXZlbnRzIGFuZCB0aGUgbXVsdGljYXN0IHN1YnNjcmlwdGlvbiBpcyBoYW5kbGVkIGJ5IGdlbmVyaWMgbmV0bGluayBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldGxpbmsgbXVsdGljYXN0IG5vdGlmaWNhdGlvbiAoYGVycm9yLWV2ZW50YCkgc2VudCBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlcnNwYWNlIHdoZW4gaGFyZHdhcmUgUkFTIGVycm9ycyBvY2N1ci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdXNlcnNwYWNlLXRyaWdnZXJhYmxlIGNvZGUgcGF0aHMgb3IgaW5wdXQgcGFyc2luZyBsb2dpYywgYXMgdGhlIGV2ZW50IGdlbmVyYXRpb24gaXMgZHJpdmVuIGJ5IGhhcmR3YXJlIGV2ZW50cyBhbmQgdGhlIG11bHRpY2FzdCBzdWJzY3JpcHRpb24gaXMgaGFuZGxlZCBieSBnZW5lcmljIG5ldGxpbmsgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTozOToyMy42NjY5MDkyNzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTUzMTExMzg4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldGxpbmsgbXVsdGljYXN0IG5vdGlmaWNhdGlvbiAoYGVycm9yLWV2ZW50YCkgc2VudCBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlcnNwYWNlIHdoZW4gaGFyZHdhcmUgUkFTIGVycm9ycyBvY2N1ci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdXNlcnNwYWNlLXRyaWdnZXJhYmxlIGNvZGUgcGF0aHMgb3IgaW5wdXQgcGFyc2luZyBsb2dpYywgYXMgdGhlIGV2ZW50IGdlbmVyYXRpb24gaXMgZHJpdmVuIGJ5IGhhcmR3YXJlIGV2ZW50cyBhbmQgdGhlIG11bHRpY2FzdCBzdWJzY3JpcHRpb24gaXMgaGFuZGxlZCBieSBnZW5lcmljIG5ldGxpbmsgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA5OjM5OjIzLjY2NjkxNjQ1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY1MTQwNTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTY1YWYyZjk1MjhmYmFlYmYxNGI3NzM1MTVjYjg5OTQwOWI2YjVhOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAwOTozOToyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XFxuaW5kZXggODNjMjE4NTNiNzRiNjAuLjQwNmU0YzQ5YmFjMWZkIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcXG5AQCAtNTYsNiArNTYsNyBAQCBVc2VyIHNwYWNlIHRvb2xzIGNhbjpcXG4gICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuXFxuICogQ2xlYXIgc3BlY2lmaWMgZXJyb3IgY291bnRlcnMgd2l0aCB0aGUgYGBjbGVhci1lcnJvci1jb3VudGVyYGAgY29tbWFuZCwgdXNpbmcgYm90aFxcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cXG4rKiBTdWJzY3JpYmUgdG8gdGhlIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgYGBlcnJvci1ldmVudGBgLlxcbiBcXG4gWUFNTC1iYXNlZCBJbnRlcmZhY2VcXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5AQCAtMTExLDMgKzExMiwyMyBAQCBFeGFtcGxlOiBDbGVhciBhbiBlcnJvciBjb3VudGVyIGZvciBhIGdpdmVuIG5vZGVcXG4gXFxuICAgICBzdWRvIHlubCAtLWZhbWlseSBkcm1fcmFzIC0tZG8gY2xlYXItZXJyb3ItY291bnRlciAtLWpzb24gJ3tcXFwibm9kZS1pZFxcXCI6MCwgXFxcImVycm9yLWlkXFxcIjoxfSdcXG4gICAgIE5vbmVcXG4rXFxuK0V4YW1wbGU6IFN1YnNjcmliZSB0byBgYGVycm9yLXJlcG9ydGBgIG11bHRpY2FzdCBncm91cFxcbitcXG4rLi4gY29kZS1ibG9jazo6IGJhc2hcXG4rXFxuKyAgICBzdWRvIHlubCAtLWZhbWlseSBkcm1fcmFzIC0tb3V0cHV0LWpzb24gLS1zdWJzY3JpYmUgZXJyb3ItcmVwb3J0XFxuK1xcbisuLiBjb2RlLWJsb2NrOjoganNvblxcbitcXG4rICAgIHtcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJlcnJvci1ldmVudFxcXCIsXFxuKyAgICAgICAgXFxcIm1zZ1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcImRldmljZS1uYW1lXFxcIjogXFxcIjAwMDA6MDM6MDAuMFxcXCIsXFxuKyAgICAgICAgICAgIFxcXCJub2RlLWlkXFxcIjogMSxcXG4rICAgICAgICAgICAgXFxcIm5vZGUtbmFtZVxcXCI6IFxcXCJ1bmNvcnJlY3RhYmxlLWVycm9yc1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCJlcnJvci1pZFxcXCI6IDEsXFxuKyAgICAgICAgICAgIFxcXCJlcnJvci1uYW1lXFxcIjogXFxcImVycm9yX25hbWUxXFxcIixcXG4rICAgICAgICAgICAgXFxcImVycm9yLXZhbHVlXFxcIjogMVxcbisgICAgICAgIH1cXG4rICAgIH1cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcXG5pbmRleCBlMTEzMDU2ZjhjMDE2Yy4uOGFlZDNkNDUxNWU1YWYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcXG5AQCAtNjksNiArNjksMzMgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcXG4gICAgICAgICB0eXBlOiB1MzJcXG4gICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBlcnJvciBjb3VudGVyLlxcbisgIC1cXG4rICAgIG5hbWU6IGVycm9yLWV2ZW50LWF0dHJzXFxuKyAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogZGV2aWNlLW5hbWVcXG4rICAgICAgICB0eXBlOiBzdHJpbmdcXG4rICAgICAgICBkb2M6IERldmljZSAoUENJIEJERiwgVVVJRCkgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBub2RlLWlkXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZG9jOiBJRCBvZiB0aGUgbm9kZSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IG5vZGUtbmFtZVxcbisgICAgICAgIHR5cGU6IHN0cmluZ1xcbisgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgbm9kZSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGVycm9yLWlkXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZG9jOiBJRCBvZiB0aGUgZXJyb3IgY291bnRlci5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGVycm9yLW5hbWVcXG4rICAgICAgICB0eXBlOiBzdHJpbmdcXG4rICAgICAgICBkb2M6IE5hbWUgb2YgdGhlIGVycm9yLlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIGVycm9yIGNvdW50ZXIuXFxuIFxcbiBvcGVyYXRpb25zOlxcbiAgIGxpc3Q6XFxuQEAgLTEyNCwzICsxNTEsMjQgQEAgb3BlcmF0aW9uczpcXG4gICAgICAgZG86XFxuICAgICAgICAgcmVxdWVzdDpcXG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xcbisgICAgLVxcbisgICAgICBuYW1lOiBlcnJvci1ldmVudFxcbisgICAgICBkb2M6IFxcdTAwM2UtXFxuKyAgICAgICAgICAgUmVwb3J0IGFuIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZS5cXG4rICAgICAgICAgICBUaGUgZXZlbnQgaW5jbHVkZXMgdGhlIGRldmljZSwgbm9kZSBhbmQgZXJyb3IgaW5mb3JtYXRpb25cXG4rICAgICAgICAgICBvZiB0aGUgZXJyb3IgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LlxcbisgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1ldmVudC1hdHRyc1xcbisgICAgICBtY2dycDogZXJyb3ItcmVwb3J0XFxuKyAgICAgIGV2ZW50OlxcbisgICAgICAgIGF0dHJpYnV0ZXM6XFxuKyAgICAgICAgICAtIGRldmljZS1uYW1lXFxuKyAgICAgICAgICAtIG5vZGUtaWRcXG4rICAgICAgICAgIC0gbm9kZS1uYW1lXFxuKyAgICAgICAgICAtIGVycm9yLWlkXFxuKyAgICAgICAgICAtIGVycm9yLW5hbWVcXG4rICAgICAgICAgIC0gZXJyb3ItdmFsdWVcXG4rXFxuK21jYXN0LWdyb3VwczpcXG4rICBsaXN0OlxcbisgICAgLVxcbisgICAgICBuYW1lOiBlcnJvci1yZXBvcnRcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcXG5pbmRleCBkNmVhYjI5YTEzOTRjYS4uMGI3N2U0MzU4ZWE4ZjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcXG5AQCAtNDEsNiArNDEsMTEgQEBcXG4gICogICAgVXNlcnNwYWNlIG11c3QgcHJvdmlkZSBOb2RlIElELCBFcnJvciBJRC5cXG4gICogICAgQ2xlYXJzIHNwZWNpZmljIGVycm9yIGNvdW50ZXIgb2YgYSBub2RlIGlmIHN1cHBvcnRlZC5cXG4gICpcXG4rICogNC4gRVJST1JfUkVQT1JUOiBTdWJzY3JpYmUgdG8gdGhpcyBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBlcnJvciBldmVudHNcXG4rICpcXG4rICogNS4gRVJST1JfRVZFTlQ6IFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuIFRoZSBldmVudCBjb250YWlucyBkZXZpY2UsIG5vZGVcXG4rICogICAgYW5kIGVycm9yIGluZm9ybWF0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC5cXG4rICpcXG4gICogTm9kZSByZWdpc3RyYXRpb246XFxuICAqXFxuICAqIC0gZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCk6IFJlZ2lzdGVycyBhIG5ldyBub2RlIGFuZCBhc3NpZ25zXFxuQEAgLTE4Niw2ICsxOTEsMzQgQEAgc3RhdGljIGludCBtc2dfcmVwbHlfdmFsdWUoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLFxcbiBcXHRcXHRcXHQgICB2YWx1ZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwgdTMyIHZhbHVlKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19ERVZJQ0VfTkFNRSwgbm9kZS1cXHUwMDNlZGV2aWNlX25hbWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9JRCwgbm9kZS1cXHUwMDNlaWQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9OQU1FLCBub2RlLVxcdTAwM2Vub2RlX25hbWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfSUQsIGVycm9yX2lkKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsIGVycm9yX25hbWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX1ZBTFVFLCB2YWx1ZSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcXG4gXFx0XFx0XFx0ICAgIHUzMiBlcnJvcl9pZClcXG4ge1xcbkBAIC0yMjIsNiArMjU1LDU3IEBAIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcXG4gXFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoKSAtIFJlcG9ydCBhbiBlcnJvciBldmVudFxcbisgKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmVcXG4rICogQGVycm9yX2lkOiBJRCBvZiB0aGUgZXJyb3JcXG4rICogQGVycm9yX25hbWU6IE5hbWUgb2YgdGhlIGVycm9yXFxuKyAqIEB2YWx1ZTogVmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBlcnJvclxcbisgKlxcbisgKiBSZXBvcnQgYW4gZXJyb3ItZXZlbnQgdG8gdXNlcnNwYWNlIHVzaW5nIHRoZSBlcnJvci1yZXBvcnQgbXVsdGljYXN0IGdyb3VwLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cXG4rICovXFxuK2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcXG4rXFx0XFx0XFx0ICAgdTMyIHZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBnZW5sX2luZm8gaW5mbztcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKm1zZztcXG4rXFx0c3RydWN0IG5sYXR0ciAqaGRyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFlcnJvcl9uYW1lKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGdlbmxfaW5mb19pbml0X250ZihcXHUwMDI2aW5mbywgXFx1MDAyNmRybV9yYXNfbmxfZmFtaWx5LCBEUk1fUkFTX0NNRF9FUlJPUl9FVkVOVCk7XFxuK1xcbitcXHRtc2cgPSBnZW5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghbXNnKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGhkciA9IGdlbmxtc2dfaXB1dChtc2csIFxcdTAwMjZpbmZvKTtcXG4rXFx0aWYgKCFoZHIpIHtcXG4rXFx0XFx0cmV0ID0gLUVNU0dTSVpFO1xcbitcXHRcXHRnb3RvIGZyZWVfbXNnO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzKG1zZywgbm9kZSwgZXJyb3JfaWQsIGVycm9yX25hbWUsIHZhbHVlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBjYW5jZWxfbXNnO1xcbitcXG4rXFx0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xcbitcXHRnZW5sbXNnX211bHRpY2FzdF9hbGxucyhcXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIG1zZywgMCwgRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitjYW5jZWxfbXNnOlxcbitcXHRnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7XFxuK2ZyZWVfbXNnOlxcbitcXHRubG1zZ19mcmVlKG1zZyk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChkcm1fcmFzX25sX2Vycm9yX2V2ZW50KTtcXG4rXFxuIC8qKlxcbiAgKiBkcm1fcmFzX25sX2dldF9lcnJvcl9jb3VudGVyX2R1bXBpdCgpIC0gRHVtcCBhbGwgRXJyb3IgQ291bnRlcnNcXG4gICogQHNrYjogTmV0bGluayBtZXNzYWdlIGJ1ZmZlclxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xcbmluZGV4IGRlYTFjMWIyNDk0ZTgxLi45ZDMxMjNjYzlmOWNhYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xcbkBAIC01OCw2ICs1OCwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRybV9yYXNfbmxfb3BzW10gPSB7XFxuIFxcdH0sXFxuIH07XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGRybV9yYXNfbmxfbWNncnBzW10gPSB7XFxuK1xcdFtEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVF0gPSB7IFxcXCJlcnJvci1yZXBvcnRcXFwiLCB9LFxcbit9O1xcbitcXG4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4gXFx0Lm5hbWVcXHRcXHQ9IERSTV9SQVNfRkFNSUxZX05BTUUsXFxuIFxcdC52ZXJzaW9uXFx0PSBEUk1fUkFTX0ZBTUlMWV9WRVJTSU9OLFxcbkBAIC02Niw0ICs3MCw2IEBAIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuIFxcdC5tb2R1bGVcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiBcXHQuc3BsaXRfb3BzXFx0PSBkcm1fcmFzX25sX29wcyxcXG4gXFx0Lm5fc3BsaXRfb3BzXFx0PSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfb3BzKSxcXG4rXFx0Lm1jZ3Jwc1xcdFxcdD0gZHJtX3Jhc19ubF9tY2dycHMsXFxuK1xcdC5uX21jZ3Jwc1xcdD0gQVJSQVlfU0laRShkcm1fcmFzX25sX21jZ3JwcyksXFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmggYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXFxuaW5kZXggYTM5ODY0MzU3MmE1YTAuLjAzZWMyNzVhY2E5MjkyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXFxuQEAgLTIxLDYgKzIxLDEwIEBAIGludCBkcm1fcmFzX25sX2dldF9lcnJvcl9jb3VudGVyX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuIFxcbitlbnVtIHtcXG4rXFx0RFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQsXFxuK307XFxuK1xcbiBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5O1xcbiBcXG4gI2VuZGlmIC8qIF9MSU5VWF9EUk1fUkFTX0dFTl9IICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXFxuaW5kZXggNzkzN2Q4YmEwZWQ5Y2UuLjAyODc1OTRlMTAyNjUwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXFxuQEAgLTE4NSw2ICsxODUsNDggQEAgc3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHhlX2RybV9yYXNfZXZlbnQoKSAtIFJlcG9ydCBkcm1fcmFzIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZVxcbisgKiBAeGU6IHhlIGRldmljZSBzdHJ1Y3R1cmVcXG4rICogQGNvbXBvbmVudDogZXJyb3IgY29tcG9uZW50IChzZWUgXFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9jb21wb25lbnQpXFxuKyAqIEBzZXZlcml0eTogZXJyb3Igc2V2ZXJpdHkgKHNlZSBcXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX3NldmVyaXR5KVxcbisgKiBAdmFsdWU6IHZhbHVlIG9mIGVycm9yIGNvdW50ZXJcXG4rICpcXG4rICogUmVwb3J0IGFuIGVycm9yLWV2ZW50IHRvIHVzZXJzcGFjZS5cXG4rICovXFxuK3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggY29tcG9uZW50LCB1OCBzZXZlcml0eSwgdTMyIHZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCB4ZV9kcm1fcmFzICpyYXMgPSBcXHUwMDI2eGUtXFx1MDAzZXJhcztcXG4rXFx0c3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqaW5mbztcXG4rXFx0c3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qIEV2ZW50IGlzIHN1cHBvcnRlZCBvbmx5IGlmIGRybV9yYXMgaXMgZW5hYmxlZCAqL1xcbitcXHRpZiAoIXhlLVxcdTAwM2VpbmZvLmhhc19kcm1fcmFzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoY29tcG9uZW50IFxcdTAwM2U9IERSTV9YRV9SQVNfRVJSX0NPTVBfTUFYKSB7XFxuK1xcdFxcdGRybV93YXJuKFxcdTAwMjZ4ZS1cXHUwMDNlZHJtLCBcXFwidW5zdXBwb3J0ZWQgY29tcG9uZW50ICV1XFxcXG5cXFwiLCBjb21wb25lbnQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzZXZlcml0eSBcXHUwMDNlPSBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYKSB7XFxuK1xcdFxcdGRybV93YXJuKFxcdTAwMjZ4ZS1cXHUwMDNlZHJtLCBcXFwidW5zdXBwb3J0ZWQgc2V2ZXJpdHkgJXVcXFxcblxcXCIsIHNldmVyaXR5KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRub2RlID0gXFx1MDAyNnJhcy1cXHUwMDNlbm9kZVtzZXZlcml0eV07XFxuK1xcdGluZm8gPSByYXMtXFx1MDAzZWluZm9bc2V2ZXJpdHldO1xcbitcXG4rXFx0aWYgKCFpbmZvIHx8ICFpbmZvW2NvbXBvbmVudF0ubmFtZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cmV0ID0gZHJtX3Jhc19ubF9lcnJvcl9ldmVudChub2RlLCBjb21wb25lbnQsIGluZm9bY29tcG9uZW50XS5uYW1lLCB2YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGRybV9lcnJfcmF0ZWxpbWl0ZWQoXFx1MDAyNnhlLVxcdTAwM2Vkcm0sIFxcXCJkcm1fcmFzIGVycm9yLWV2ZW50IGZhaWxlZDogJWQgZm9yICVzICVzXFxcXG5cXFwiLCByZXQsXFxuK1xcdFxcdFxcdFxcdCAgICBpbmZvW2NvbXBvbmVudF0ubmFtZSwgZXJyb3Jfc2V2ZXJpdHlbc2V2ZXJpdHldKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHhlX2RybV9yYXNfaW5pdCgpIC0gSW5pdGlhbGl6ZSBEUk0gUkFTXFxuICAqIEB4ZTogeGUgZGV2aWNlIGluc3RhbmNlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXFxuaW5kZXggMzY1YzcwZTkzZTgyZmQuLmFkZDk2YmYxYTdhYmQ2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmhcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXFxuQEAgLTUsMTEgKzUsMTQgQEBcXG4gI2lmbmRlZiBfWEVfRFJNX1JBU19IX1xcbiAjZGVmaW5lIF9YRV9EUk1fUkFTX0hfXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuIHN0cnVjdCB4ZV9kZXZpY2U7XFxuIFxcbiAjZGVmaW5lIGZvcl9lYWNoX2Vycm9yX3NldmVyaXR5KGkpXFx0XFxcXFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgRFJNX1hFX1JBU19FUlJfU0VWX01BWDsgaSsrKVxcbiBcXG4gaW50IHhlX2RybV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSk7XFxuK3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggY29tcG9uZW50LCB1OCBzZXZlcml0eSwgdTMyIHZhbHVlKTtcXG4gXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcXG5pbmRleCBlZDYwOTkxMmZkYTE0MC4uNDYyY2JiNTQ4ZjA3YmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXFxuQEAgLTg5LDYgKzg5LDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBncHVfaGVhbHRoX3N0YXRlc1tdID0ge1xcbiB9O1xcbiBzdGF0aWNfYXNzZXJ0KEFSUkFZX1NJWkUoZ3B1X2hlYWx0aF9zdGF0ZXMpID09IFhFX1JBU19IRUFMVEhfTUFYKTtcXG4gXFxuK3N0YXRpYyBpbnQgZ2V0X2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmNvdW50ZXIsIHUzMiAqdmFsdWUpO1xcbitcXG4gc3RhdGljIHU4IGRybV90b194ZV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpXFxuIHtcXG4gXFx0c3dpdGNoIChzZXZlcml0eSkge1xcbkBAIC0xMDEsNiArMTAzLDE4IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxcbit7XFxuK1xcdHN3aXRjaCAoc2V2ZXJpdHkpIHtcXG4rXFx0Y2FzZSBYRV9SQVNfU0VWX0NPUlJFQ1RBQkxFOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFO1xcbitcXHRjYXNlIFhFX1JBU19TRVZfVU5DT1JSRUNUQUJMRTpcXG4rXFx0XFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9VTkNPUlJFQ1RBQkxFO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX01BWDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KVxcbiB7XFxuIFxcdHN3aXRjaCAoY29tcG9uZW50KSB7XFxuQEAgLTExOSw2ICsxMzMsMjQgQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudClcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdTggeGVfdG9fZHJtX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KVxcbit7XFxuK1xcdHN3aXRjaCAoY29tcG9uZW50KSB7XFxuK1xcdGNhc2UgWEVfUkFTX0NPTVBfREVWSUNFX01FTU9SWTpcXG4rXFx0XFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfREVWSUNFX01FTU9SWTtcXG4rXFx0Y2FzZSBYRV9SQVNfQ09NUF9DT1JFX0NPTVBVVEU6XFxuK1xcdFxcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX0NPUkVfQ09NUFVURTtcXG4rXFx0Y2FzZSBYRV9SQVNfQ09NUF9QQ0lFOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9QQ0lFO1xcbitcXHRjYXNlIFhFX1JBU19DT01QX0ZBQlJJQzpcXG4rXFx0XFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfRkFCUklDO1xcbitcXHRjYXNlIFhFX1JBU19DT01QX1NPQ19JTlRFUk5BTDpcXG4rXFx0XFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfU09DX0lOVEVSTkFMO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9NQVg7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCByYXNfc3RhdHVzX3RvX2Vycm5vKHUzMiBzdGF0dXMpXFxuIHtcXG4gXFx0c3dpdGNoIChzdGF0dXMpIHtcXG5AQCAtMjE3LDYgKzI0OSwyNiBAQCBzdGF0aWMgdm9pZCByYXNfdXNwX2Flcl9pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxcbiBcXHRkZXZfZGJnKFxcdTAwMjZ1c3AtXFx1MDAzZWRldiwgXFxcIlVuY29ycmVjdGFibGUgSW50ZXJuYWwgRXJyb3JzIGRvd25ncmFkZWQgYW5kIHVubWFza2VkXFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpXFxuK3tcXG4rXFx0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyBjb3VudGVyID0gezB9O1xcbitcXHR1OCBkcm1fc2V2ZXJpdHksIGRybV9jb21wb25lbnQ7XFxuK1xcdHUzMiB2YWx1ZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGNvdW50ZXIuY29tbW9uLnNldmVyaXR5ID0gc2V2ZXJpdHk7XFxuK1xcdGNvdW50ZXIuY29tbW9uLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcXG4rXFxuK1xcdHJldCA9IGdldF9jb3VudGVyKHhlLCBcXHUwMDI2Y291bnRlciwgXFx1MDAyNnZhbHVlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZHJtX3NldmVyaXR5ID0geGVfdG9fZHJtX3Jhc19zZXZlcml0eShzZXZlcml0eSk7XFxuK1xcdGRybV9jb21wb25lbnQgPSB4ZV90b19kcm1fcmFzX2NvbXBvbmVudChjb21wb25lbnQpO1xcbitcXG4rXFx0eGVfZHJtX3Jhc19ldmVudCh4ZSwgZHJtX2NvbXBvbmVudCwgZHJtX3NldmVyaXR5LCB2YWx1ZSk7XFxuK31cXG4rXFxuIHN0YXRpYyB1OCBoYW5kbGVfY29yZV9jb21wdXRlX2Vycm9ycyhzdHJ1Y3QgeGVfcmFzX2Vycm9yX2FycmF5ICphcnIpXFxuIHtcXG4gXFx0c3RydWN0IHhlX3Jhc19jb21wdXRlX2Vycm9yICplcnJvcl9pbmZvID0gKHZvaWQgKilhcnItXFx1MDAzZWRldGFpbHM7XFxuQEAgLTI0MSw4ICsyOTMsMTAgQEAgdm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcXG4gXFx0c3RydWN0IHhlX3Jhc190aHJlc2hvbGRfY3Jvc3NlZCAqcGVuZGluZyA9ICh2b2lkICopXFx1MDAyNnJlc3BvbnNlLVxcdTAwM2VkYXRhO1xcbiBcXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICplcnJvcnMgPSBwZW5kaW5nLVxcdTAwM2Vjb3VudGVycztcXG4gXFx0dTMyIGlkLCBuY291bnRlcnMgPSBwZW5kaW5nLVxcdTAwM2VuY291bnRlcnM7XFxuK1xcdHU4IHNlbnQgPSAwO1xcbiBcXG4gXFx0QlVJTERfQlVHX09OKHNpemVvZihyZXNwb25zZS1cXHUwMDNlZGF0YSkgXFx1MDAzYyBzaXplb2YoKnBlbmRpbmcpKTtcXG4rXFx0QlVJTERfQlVHX09OKEJJVFNfUEVSX1RZUEUoc2VudCkgXFx1MDAzYyBYRV9SQVNfQ09NUF9NQVgpO1xcbiBcXHR4ZV9kZXZpY2VfYXNzZXJ0X21lbV9hY2Nlc3MoeGUpO1xcbiBcXG4gXFx0aWYgKCFuY291bnRlcnMgfHwgbmNvdW50ZXJzIFxcdTAwM2UgWEVfUkFTX05VTV9DT1VOVEVSUylcXG5AQCAtMjU2LDggKzMxMCwyMSBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxcbiBcXHRcXHRzZXZlcml0eSA9IGVycm9yc1tpZF0uY29tbW9uLnNldmVyaXR5O1xcbiBcXHRcXHRjb21wb25lbnQgPSBlcnJvcnNbaWRdLmNvbW1vbi5jb21wb25lbnQ7XFxuIFxcbitcXHRcXHRpZiAoc2V2ZXJpdHkgIT0gWEVfUkFTX1NFVl9DT1JSRUNUQUJMRSkge1xcbitcXHRcXHRcXHR4ZV93YXJuKHhlLCBcXFwic3lzY3RybDogdW5leHBlY3RlZCBzZXZlcml0eSAlcyAoJXUpXFxcXG5cXFwiLCBzZXZfdG9fc3RyKHNldmVyaXR5KSxcXG4rXFx0XFx0XFx0XFx0c2V2ZXJpdHkpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0eGVfd2Fybih4ZSwgXFxcIltSQVNdOiAlcyAlcyBkZXRlY3RlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0Y29tcF90b19zdHIoY29tcG9uZW50KSwgc2V2X3RvX3N0cihzZXZlcml0eSkpO1xcbitcXG4rXFx0XFx0LyogU2VuZCBldmVudCBvbmNlIHBlciBjb21wb25lbnQgKi9cXG4rXFx0XFx0aWYgKHNlbnQgXFx1MDAyNiBCSVQoY29tcG9uZW50KSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHNlbnQgfD0gQklUKGNvbXBvbmVudCk7XFxuK1xcbitcXHRcXHRyYXNfc2VuZF9lcnJvcl9ldmVudCh4ZSwgc2V2ZXJpdHksIGNvbXBvbmVudCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMzExLDYgKzM3OCw3IEBAIGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuIFxcdGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiBmaW5hbF9hY3Rpb247XFxuIFxcdHUzMiByZW1haW5pbmcgPSBYRV9TWVNDVFJMX0ZMT09EX0xJTUlUO1xcbiBcXHRzdHJ1Y3QgeGVfcmFzX2dldF9zb2NfZXJyb3IgcmVzcG9uc2U7XFxuK1xcdHU4IHNlbnQgPSAwO1xcbiBcXHRzaXplX3QgcmxlbjtcXG4gXFx0aW50IHJldDtcXG4gXFxuQEAgLTM1NCw2ICs0MjIsMTIgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4gXFx0XFx0XFx0eGVfaW5mbyh4ZSwgXFxcIltSQVNdOiAlcyAlcyBkZXRlY3RlZFxcXFxuXFxcIiwgY29tcF90b19zdHIoY29tcG9uZW50KSxcXG4gXFx0XFx0XFx0XFx0c2V2X3RvX3N0cihzZXZlcml0eSkpO1xcbiBcXG4rXFx0XFx0XFx0LyogU2VuZCBldmVudCBvbmNlIHBlciBjb21wb25lbnQgKi9cXG4rXFx0XFx0XFx0aWYgKCEoc2VudCBcXHUwMDI2IEJJVChjb21wb25lbnQpKSkge1xcbitcXHRcXHRcXHRcXHRzZW50IHw9IEJJVChjb21wb25lbnQpO1xcbitcXHRcXHRcXHRcXHRyYXNfc2VuZF9lcnJvcl9ldmVudCh4ZSwgc2V2ZXJpdHksIGNvbXBvbmVudCk7XFxuK1xcdFxcdFxcdH1cXG4rXFxuIFxcdFxcdFxcdHN3aXRjaCAoY29tcG9uZW50KSB7XFxuIFxcdFxcdFxcdGNhc2UgWEVfUkFTX0NPTVBfQ09SRV9DT01QVVRFOlxcbiBcXHRcXHRcXHRcXHRhY3Rpb24gPSBoYW5kbGVfY29yZV9jb21wdXRlX2Vycm9ycyhhcnIpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcXG5pbmRleCAwYmVlZGUzZGRjNGU0Yi4uZWUyY2FhMGVkYzZmOTIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXFxuKysrIGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXFxuQEAgLTgwLDkgKzgwLDE0IEBAIHN0cnVjdCBkcm1fZGV2aWNlO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX1JBUylcXG4gaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTtcXG4gdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTtcXG4raW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxcbitcXHRcXHRcXHQgICB1MzIgdmFsdWUpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGludCBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyByZXR1cm4gMDsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyB9XFxuK3N0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLFxcbitcXHRcXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwgdTMyIHZhbHVlKVxcbit7IHJldHVybiAwOyB9XFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcXG5pbmRleCAyMThhM2VlODY4MDUyNy4uZWFiODIzMWFhODdjYmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxcbkBAIC0zOCwxMyArMzgsMjggQEAgZW51bSB7XFxuIFxcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCAtIDEpXFxuIH07XFxuIFxcbitlbnVtIHtcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FID0gMSxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSxcXG4rXFxuK1xcdF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVggLSAxKVxcbit9O1xcbitcXG4gZW51bSB7XFxuIFxcdERSTV9SQVNfQ01EX0xJU1RfTk9ERVMgPSAxLFxcbiBcXHREUk1fUkFTX0NNRF9HRVRfRVJST1JfQ09VTlRFUixcXG4gXFx0RFJNX1JBU19DTURfQ0xFQVJfRVJST1JfQ09VTlRFUixcXG4rXFx0RFJNX1JBU19DTURfRVJST1JfRVZFTlQsXFxuIFxcbiBcXHRfX0RSTV9SQVNfQ01EX01BWCxcXG4gXFx0RFJNX1JBU19DTURfTUFYID0gKF9fRFJNX1JBU19DTURfTUFYIC0gMSlcXG4gfTtcXG4gXFxuKyNkZWZpbmUgRFJNX1JBU19NQ0dSUF9FUlJPUl9SRVBPUlRcXHRcXFwiZXJyb3ItcmVwb3J0XFxcIlxcbitcXG4gI2VuZGlmIC8qIF9VQVBJX0xJTlVYX0RSTV9SQVNfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTozOToyNC41MzI5OTgyMDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjY1MDE5ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV0bGluayBtdWx0aWNhc3Qgbm90aWZpY2F0aW9uIChgZXJyb3ItZXZlbnRgKSBzZW50IGZyb20gdGhlIGtlcm5lbCB0byB1c2Vyc3BhY2Ugd2hlbiBoYXJkd2FyZSBSQVMgZXJyb3JzIG9jY3VyLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB1c2Vyc3BhY2UtdHJpZ2dlcmFibGUgY29kZSBwYXRocyBvciBpbnB1dCBwYXJzaW5nIGxvZ2ljLCBhcyB0aGUgZXZlbnQgZ2VuZXJhdGlvbiBpcyBkcml2ZW4gYnkgaGFyZHdhcmUgZXZlbnRzIGFuZCB0aGUgbXVsdGljYXN0IHN1YnNjcmlwdGlvbiBpcyBoYW5kbGVkIGJ5IGdlbmVyaWMgbmV0bGluayBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NjVhZjJmOTUyOGZiYWViZjE0Yjc3MzUxNWNiODk5NDA5YjZiNWE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMDk6Mzk6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XG5pbmRleCA4M2MyMTg1M2I3NGI2MC4uNDA2ZTRjNDliYWMxZmQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbkBAIC01Niw2ICs1Niw3IEBAIFVzZXIgc3BhY2UgdG9vbHMgY2FuOlxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxuICogQ2xlYXIgc3BlY2lmaWMgZXJyb3IgY291bnRlcnMgd2l0aCB0aGUgYGBjbGVhci1lcnJvci1jb3VudGVyYGAgY29tbWFuZCwgdXNpbmcgYm90aFxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxuKyogU3Vic2NyaWJlIHRvIHRoZSBgYGVycm9yLXJlcG9ydGBgIG11bHRpY2FzdCBncm91cCB0byByZWNlaXZlIGBgZXJyb3ItZXZlbnRgYC5cbiBcbiBZQU1MLWJhc2VkIEludGVyZmFjZVxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtMTExLDMgKzExMiwyMyBAQCBFeGFtcGxlOiBDbGVhciBhbiBlcnJvciBjb3VudGVyIGZvciBhIGdpdmVuIG5vZGVcbiBcbiAgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIGNsZWFyLWVycm9yLWNvdW50ZXIgLS1qc29uICd7XCJub2RlLWlkXCI6MCwgXCJlcnJvci1pZFwiOjF9J1xuICAgICBOb25lXG4rXG4rRXhhbXBsZTogU3Vic2NyaWJlIHRvIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwXG4rXG4rLi4gY29kZS1ibG9jazo6IGJhc2hcbitcbisgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLW91dHB1dC1qc29uIC0tc3Vic2NyaWJlIGVycm9yLXJlcG9ydFxuK1xuKy4uIGNvZGUtYmxvY2s6OiBqc29uXG4rXG4rICAgIHtcbisgICAgICAgIFwibmFtZVwiOiBcImVycm9yLWV2ZW50XCIsXG4rICAgICAgICBcIm1zZ1wiOiB7XG4rICAgICAgICAgICAgXCJkZXZpY2UtbmFtZVwiOiBcIjAwMDA6MDM6MDAuMFwiLFxuKyAgICAgICAgICAgIFwibm9kZS1pZFwiOiAxLFxuKyAgICAgICAgICAgIFwibm9kZS1uYW1lXCI6IFwidW5jb3JyZWN0YWJsZS1lcnJvcnNcIixcbisgICAgICAgICAgICBcImVycm9yLWlkXCI6IDEsXG4rICAgICAgICAgICAgXCJlcnJvci1uYW1lXCI6IFwiZXJyb3JfbmFtZTFcIixcbisgICAgICAgICAgICBcImVycm9yLXZhbHVlXCI6IDFcbisgICAgICAgIH1cbisgICAgfVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sXG5pbmRleCBlMTEzMDU2ZjhjMDE2Yy4uOGFlZDNkNDUxNWU1YWYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sXG5AQCAtNjksNiArNjksMzMgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICBuYW1lOiBlcnJvci12YWx1ZVxuICAgICAgICAgdHlwZTogdTMyXG4gICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBlcnJvciBjb3VudGVyLlxuKyAgLVxuKyAgICBuYW1lOiBlcnJvci1ldmVudC1hdHRyc1xuKyAgICBhdHRyaWJ1dGVzOlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGRldmljZS1uYW1lXG4rICAgICAgICB0eXBlOiBzdHJpbmdcbisgICAgICAgIGRvYzogRGV2aWNlIChQQ0kgQkRGLCBVVUlEKSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBub2RlLWlkXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGRvYzogSUQgb2YgdGhlIG5vZGUgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogbm9kZS1uYW1lXG4rICAgICAgICB0eXBlOiBzdHJpbmdcbisgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgbm9kZSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBlcnJvci1pZFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgICBkb2M6IElEIG9mIHRoZSBlcnJvciBjb3VudGVyLlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGVycm9yLW5hbWVcbisgICAgICAgIHR5cGU6IHN0cmluZ1xuKyAgICAgICAgZG9jOiBOYW1lIG9mIHRoZSBlcnJvci5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBlcnJvci12YWx1ZVxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIGVycm9yIGNvdW50ZXIuXG4gXG4gb3BlcmF0aW9uczpcbiAgIGxpc3Q6XG5AQCAtMTI0LDMgKzE1MSwyNCBAQCBvcGVyYXRpb25zOlxuICAgICAgIGRvOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlkLWF0dHJzXG4rICAgIC1cbisgICAgICBuYW1lOiBlcnJvci1ldmVudFxuKyAgICAgIGRvYzogXHUwMDNlLVxuKyAgICAgICAgICAgUmVwb3J0IGFuIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZS5cbisgICAgICAgICAgIFRoZSBldmVudCBpbmNsdWRlcyB0aGUgZGV2aWNlLCBub2RlIGFuZCBlcnJvciBpbmZvcm1hdGlvblxuKyAgICAgICAgICAgb2YgdGhlIGVycm9yIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC5cbisgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1ldmVudC1hdHRyc1xuKyAgICAgIG1jZ3JwOiBlcnJvci1yZXBvcnRcbisgICAgICBldmVudDpcbisgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgIC0gZGV2aWNlLW5hbWVcbisgICAgICAgICAgLSBub2RlLWlkXG4rICAgICAgICAgIC0gbm9kZS1uYW1lXG4rICAgICAgICAgIC0gZXJyb3ItaWRcbisgICAgICAgICAgLSBlcnJvci1uYW1lXG4rICAgICAgICAgIC0gZXJyb3ItdmFsdWVcbitcbittY2FzdC1ncm91cHM6XG4rICBsaXN0OlxuKyAgICAtXG4rICAgICAgbmFtZTogZXJyb3ItcmVwb3J0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcbmluZGV4IGQ2ZWFiMjlhMTM5NGNhLi4wYjc3ZTQzNThlYThmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcbkBAIC00MSw2ICs0MSwxMSBAQFxuICAqICAgIFVzZXJzcGFjZSBtdXN0IHByb3ZpZGUgTm9kZSBJRCwgRXJyb3IgSUQuXG4gICogICAgQ2xlYXJzIHNwZWNpZmljIGVycm9yIGNvdW50ZXIgb2YgYSBub2RlIGlmIHN1cHBvcnRlZC5cbiAgKlxuKyAqIDQuIEVSUk9SX1JFUE9SVDogU3Vic2NyaWJlIHRvIHRoaXMgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgZXJyb3IgZXZlbnRzXG4rICpcbisgKiA1LiBFUlJPUl9FVkVOVDogUmVwb3J0IGFuIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZS4gVGhlIGV2ZW50IGNvbnRhaW5zIGRldmljZSwgbm9kZVxuKyAqICAgIGFuZCBlcnJvciBpbmZvcm1hdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuXG4rICpcbiAgKiBOb2RlIHJlZ2lzdHJhdGlvbjpcbiAgKlxuICAqIC0gZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCk6IFJlZ2lzdGVycyBhIG5ldyBub2RlIGFuZCBhc3NpZ25zXG5AQCAtMTg2LDYgKzE5MSwzNCBAQCBzdGF0aWMgaW50IG1zZ19yZXBseV92YWx1ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgZXJyb3JfaWQsXG4gXHRcdFx0ICAgdmFsdWUpO1xuIH1cbiBcbitzdGF0aWMgaW50IG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSxcbitcdFx0XHRcdCAgICAgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FLCBub2RlLVx1MDAzZWRldmljZV9uYW1lKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX0lELCBub2RlLVx1MDAzZWlkKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsIG5vZGUtXHUwMDNlbm9kZV9uYW1lKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCwgZXJyb3JfaWQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsIGVycm9yX25hbWUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSwgdmFsdWUpO1xuK31cbitcbiBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXG4gXHRcdFx0ICAgIHUzMiBlcnJvcl9pZClcbiB7XG5AQCAtMjIyLDYgKzI1NSw1NyBAQCBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXG4gXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xuIH1cbiBcbisvKipcbisgKiBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KCkgLSBSZXBvcnQgYW4gZXJyb3IgZXZlbnRcbisgKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmVcbisgKiBAZXJyb3JfaWQ6IElEIG9mIHRoZSBlcnJvclxuKyAqIEBlcnJvcl9uYW1lOiBOYW1lIG9mIHRoZSBlcnJvclxuKyAqIEB2YWx1ZTogVmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBlcnJvclxuKyAqXG4rICogUmVwb3J0IGFuIGVycm9yLWV2ZW50IHRvIHVzZXJzcGFjZSB1c2luZyB0aGUgZXJyb3ItcmVwb3J0IG11bHRpY2FzdCBncm91cC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcbitcdFx0XHQgICB1MzIgdmFsdWUpXG4re1xuK1x0c3RydWN0IGdlbmxfaW5mbyBpbmZvO1xuK1x0c3RydWN0IHNrX2J1ZmYgKm1zZztcbitcdHN0cnVjdCBubGF0dHIgKmhkcjtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWVycm9yX25hbWUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Z2VubF9pbmZvX2luaXRfbnRmKFx1MDAyNmluZm8sIFx1MDAyNmRybV9yYXNfbmxfZmFtaWx5LCBEUk1fUkFTX0NNRF9FUlJPUl9FVkVOVCk7XG4rXG4rXHRtc2cgPSBnZW5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIW1zZylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRoZHIgPSBnZW5sbXNnX2lwdXQobXNnLCBcdTAwMjZpbmZvKTtcbitcdGlmICghaGRyKSB7XG4rXHRcdHJldCA9IC1FTVNHU0laRTtcbitcdFx0Z290byBmcmVlX21zZztcbitcdH1cbitcbitcdHJldCA9IG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnMobXNnLCBub2RlLCBlcnJvcl9pZCwgZXJyb3JfbmFtZSwgdmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBjYW5jZWxfbXNnO1xuK1xuK1x0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xuK1x0Z2VubG1zZ19tdWx0aWNhc3RfYWxsbnMoXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIG1zZywgMCwgRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQpO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rY2FuY2VsX21zZzpcbitcdGdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTtcbitmcmVlX21zZzpcbitcdG5sbXNnX2ZyZWUobXNnKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0woZHJtX3Jhc19ubF9lcnJvcl9ldmVudCk7XG4rXG4gLyoqXG4gICogZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoKSAtIER1bXAgYWxsIEVycm9yIENvdW50ZXJzXG4gICogQHNrYjogTmV0bGluayBtZXNzYWdlIGJ1ZmZlclxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG5pbmRleCBkZWExYzFiMjQ5NGU4MS4uOWQzMTIzY2M5ZjljYWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG5AQCAtNTgsNiArNTgsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0ge1xuIFx0fSxcbiB9O1xuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgZHJtX3Jhc19ubF9tY2dycHNbXSA9IHtcbitcdFtEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVF0gPSB7IFwiZXJyb3ItcmVwb3J0XCIsIH0sXG4rfTtcbitcbiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuIFx0Lm5hbWVcdFx0PSBEUk1fUkFTX0ZBTUlMWV9OQU1FLFxuIFx0LnZlcnNpb25cdD0gRFJNX1JBU19GQU1JTFlfVkVSU0lPTixcbkBAIC02Niw0ICs3MCw2IEBAIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXHQubW9kdWxlXHRcdD0gVEhJU19NT0RVTEUsXG4gXHQuc3BsaXRfb3BzXHQ9IGRybV9yYXNfbmxfb3BzLFxuIFx0Lm5fc3BsaXRfb3BzXHQ9IEFSUkFZX1NJWkUoZHJtX3Jhc19ubF9vcHMpLFxuK1x0Lm1jZ3Jwc1x0XHQ9IGRybV9yYXNfbmxfbWNncnBzLFxuK1x0Lm5fbWNncnBzXHQ9IEFSUkFZX1NJWkUoZHJtX3Jhc19ubF9tY2dycHMpLFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbmluZGV4IGEzOTg2NDM1NzJhNWEwLi4wM2VjMjc1YWNhOTI5MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbkBAIC0yMSw2ICsyMSwxMCBAQCBpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0c3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gXG4rZW51bSB7XG4rXHREUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVCxcbit9O1xuK1xuIGV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHk7XG4gXG4gI2VuZGlmIC8qIF9MSU5VWF9EUk1fUkFTX0dFTl9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbmluZGV4IDc5MzdkOGJhMGVkOWNlLi4wMjg3NTk0ZTEwMjY1MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbkBAIC0xODUsNiArMTg1LDQ4IEBAIHN0YXRpYyBpbnQgcmVnaXN0ZXJfbm9kZXMoc3RydWN0IHhlX2RldmljZSAqeGUpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiB4ZV9kcm1fcmFzX2V2ZW50KCkgLSBSZXBvcnQgZHJtX3JhcyBlcnJvciBldmVudCB0byB1c2Vyc3BhY2VcbisgKiBAeGU6IHhlIGRldmljZSBzdHJ1Y3R1cmVcbisgKiBAY29tcG9uZW50OiBlcnJvciBjb21wb25lbnQgKHNlZSBcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3JfY29tcG9uZW50KVxuKyAqIEBzZXZlcml0eTogZXJyb3Igc2V2ZXJpdHkgKHNlZSBcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3Jfc2V2ZXJpdHkpXG4rICogQHZhbHVlOiB2YWx1ZSBvZiBlcnJvciBjb3VudGVyXG4rICpcbisgKiBSZXBvcnQgYW4gZXJyb3ItZXZlbnQgdG8gdXNlcnNwYWNlLlxuKyAqL1xuK3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggY29tcG9uZW50LCB1OCBzZXZlcml0eSwgdTMyIHZhbHVlKVxuK3tcbitcdHN0cnVjdCB4ZV9kcm1fcmFzICpyYXMgPSBcdTAwMjZ4ZS1cdTAwM2VyYXM7XG4rXHRzdHJ1Y3QgeGVfZHJtX3Jhc19jb3VudGVyICppbmZvO1xuK1x0c3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZTtcbitcdGludCByZXQ7XG4rXG4rXHQvKiBFdmVudCBpcyBzdXBwb3J0ZWQgb25seSBpZiBkcm1fcmFzIGlzIGVuYWJsZWQgKi9cbitcdGlmICgheGUtXHUwMDNlaW5mby5oYXNfZHJtX3JhcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKGNvbXBvbmVudCBcdTAwM2U9IERSTV9YRV9SQVNfRVJSX0NPTVBfTUFYKSB7XG4rXHRcdGRybV93YXJuKFx1MDAyNnhlLVx1MDAzZWRybSwgXCJ1bnN1cHBvcnRlZCBjb21wb25lbnQgJXVcXG5cIiwgY29tcG9uZW50KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHNldmVyaXR5IFx1MDAzZT0gRFJNX1hFX1JBU19FUlJfU0VWX01BWCkge1xuK1x0XHRkcm1fd2FybihcdTAwMjZ4ZS1cdTAwM2Vkcm0sIFwidW5zdXBwb3J0ZWQgc2V2ZXJpdHkgJXVcXG5cIiwgc2V2ZXJpdHkpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRub2RlID0gXHUwMDI2cmFzLVx1MDAzZW5vZGVbc2V2ZXJpdHldO1xuK1x0aW5mbyA9IHJhcy1cdTAwM2VpbmZvW3NldmVyaXR5XTtcbitcbitcdGlmICghaW5mbyB8fCAhaW5mb1tjb21wb25lbnRdLm5hbWUpXG4rXHRcdHJldHVybjtcbitcbitcdHJldCA9IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQobm9kZSwgY29tcG9uZW50LCBpbmZvW2NvbXBvbmVudF0ubmFtZSwgdmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0ZHJtX2Vycl9yYXRlbGltaXRlZChcdTAwMjZ4ZS1cdTAwM2Vkcm0sIFwiZHJtX3JhcyBlcnJvci1ldmVudCBmYWlsZWQ6ICVkIGZvciAlcyAlc1xcblwiLCByZXQsXG4rXHRcdFx0XHQgICAgaW5mb1tjb21wb25lbnRdLm5hbWUsIGVycm9yX3NldmVyaXR5W3NldmVyaXR5XSk7XG4rfVxuK1xuIC8qKlxuICAqIHhlX2RybV9yYXNfaW5pdCgpIC0gSW5pdGlhbGl6ZSBEUk0gUkFTXG4gICogQHhlOiB4ZSBkZXZpY2UgaW5zdGFuY2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxuaW5kZXggMzY1YzcwZTkzZTgyZmQuLmFkZDk2YmYxYTdhYmQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxuQEAgLTUsMTEgKzUsMTQgQEBcbiAjaWZuZGVmIF9YRV9EUk1fUkFTX0hfXG4gI2RlZmluZSBfWEVfRFJNX1JBU19IX1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbiBzdHJ1Y3QgeGVfZGV2aWNlO1xuIFxuICNkZWZpbmUgZm9yX2VhY2hfZXJyb3Jfc2V2ZXJpdHkoaSlcdFxcXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYOyBpKyspXG4gXG4gaW50IHhlX2RybV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSk7XG4rdm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBjb21wb25lbnQsIHU4IHNldmVyaXR5LCB1MzIgdmFsdWUpO1xuIFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xuaW5kZXggZWQ2MDk5MTJmZGExNDAuLjQ2MmNiYjU0OGYwN2JhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbkBAIC04OSw2ICs4OSw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3B1X2hlYWx0aF9zdGF0ZXNbXSA9IHtcbiB9O1xuIHN0YXRpY19hc3NlcnQoQVJSQVlfU0laRShncHVfaGVhbHRoX3N0YXRlcykgPT0gWEVfUkFTX0hFQUxUSF9NQVgpO1xuIFxuK3N0YXRpYyBpbnQgZ2V0X2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmNvdW50ZXIsIHUzMiAqdmFsdWUpO1xuK1xuIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxuIHtcbiBcdHN3aXRjaCAoc2V2ZXJpdHkpIHtcbkBAIC0xMDEsNiArMTAzLDE4IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdTggeGVfdG9fZHJtX3Jhc19zZXZlcml0eSh1OCBzZXZlcml0eSlcbit7XG4rXHRzd2l0Y2ggKHNldmVyaXR5KSB7XG4rXHRjYXNlIFhFX1JBU19TRVZfQ09SUkVDVEFCTEU6XG4rXHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEU7XG4rXHRjYXNlIFhFX1JBU19TRVZfVU5DT1JSRUNUQUJMRTpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9VTkNPUlJFQ1RBQkxFO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9NQVg7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXG4ge1xuIFx0c3dpdGNoIChjb21wb25lbnQpIHtcbkBAIC0xMTksNiArMTMzLDI0IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXG4re1xuK1x0c3dpdGNoIChjb21wb25lbnQpIHtcbitcdGNhc2UgWEVfUkFTX0NPTVBfREVWSUNFX01FTU9SWTpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfREVWSUNFX01FTU9SWTtcbitcdGNhc2UgWEVfUkFTX0NPTVBfQ09SRV9DT01QVVRFOlxuK1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9DT1JFX0NPTVBVVEU7XG4rXHRjYXNlIFhFX1JBU19DT01QX1BDSUU6XG4rXHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1BDSUU7XG4rXHRjYXNlIFhFX1JBU19DT01QX0ZBQlJJQzpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfRkFCUklDO1xuK1x0Y2FzZSBYRV9SQVNfQ09NUF9TT0NfSU5URVJOQUw6XG4rXHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1NPQ19JTlRFUk5BTDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX01BWDtcbitcdH1cbit9XG4rXG4gc3RhdGljIGludCByYXNfc3RhdHVzX3RvX2Vycm5vKHUzMiBzdGF0dXMpXG4ge1xuIFx0c3dpdGNoIChzdGF0dXMpIHtcbkBAIC0yMTcsNiArMjQ5LDI2IEBAIHN0YXRpYyB2b2lkIHJhc191c3BfYWVyX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpXG4gXHRkZXZfZGJnKFx1MDAyNnVzcC1cdTAwM2VkZXYsIFwiVW5jb3JyZWN0YWJsZSBJbnRlcm5hbCBFcnJvcnMgZG93bmdyYWRlZCBhbmQgdW5tYXNrZWRcXG5cIik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJhc19zZW5kX2Vycm9yX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxuK3tcbitcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlciA9IHswfTtcbitcdHU4IGRybV9zZXZlcml0eSwgZHJtX2NvbXBvbmVudDtcbitcdHUzMiB2YWx1ZTtcbitcdGludCByZXQ7XG4rXG4rXHRjb3VudGVyLmNvbW1vbi5zZXZlcml0eSA9IHNldmVyaXR5O1xuK1x0Y291bnRlci5jb21tb24uY29tcG9uZW50ID0gY29tcG9uZW50O1xuK1xuK1x0cmV0ID0gZ2V0X2NvdW50ZXIoeGUsIFx1MDAyNmNvdW50ZXIsIFx1MDAyNnZhbHVlKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybjtcbitcbitcdGRybV9zZXZlcml0eSA9IHhlX3RvX2RybV9yYXNfc2V2ZXJpdHkoc2V2ZXJpdHkpO1xuK1x0ZHJtX2NvbXBvbmVudCA9IHhlX3RvX2RybV9yYXNfY29tcG9uZW50KGNvbXBvbmVudCk7XG4rXG4rXHR4ZV9kcm1fcmFzX2V2ZW50KHhlLCBkcm1fY29tcG9uZW50LCBkcm1fc2V2ZXJpdHksIHZhbHVlKTtcbit9XG4rXG4gc3RhdGljIHU4IGhhbmRsZV9jb3JlX2NvbXB1dGVfZXJyb3JzKHN0cnVjdCB4ZV9yYXNfZXJyb3JfYXJyYXkgKmFycilcbiB7XG4gXHRzdHJ1Y3QgeGVfcmFzX2NvbXB1dGVfZXJyb3IgKmVycm9yX2luZm8gPSAodm9pZCAqKWFyci1cdTAwM2VkZXRhaWxzO1xuQEAgLTI0MSw4ICsyOTMsMTAgQEAgdm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcbiBcdHN0cnVjdCB4ZV9yYXNfdGhyZXNob2xkX2Nyb3NzZWQgKnBlbmRpbmcgPSAodm9pZCAqKVx1MDAyNnJlc3BvbnNlLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICplcnJvcnMgPSBwZW5kaW5nLVx1MDAzZWNvdW50ZXJzO1xuIFx0dTMyIGlkLCBuY291bnRlcnMgPSBwZW5kaW5nLVx1MDAzZW5jb3VudGVycztcbitcdHU4IHNlbnQgPSAwO1xuIFxuIFx0QlVJTERfQlVHX09OKHNpemVvZihyZXNwb25zZS1cdTAwM2VkYXRhKSBcdTAwM2Mgc2l6ZW9mKCpwZW5kaW5nKSk7XG4rXHRCVUlMRF9CVUdfT04oQklUU19QRVJfVFlQRShzZW50KSBcdTAwM2MgWEVfUkFTX0NPTVBfTUFYKTtcbiBcdHhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2Vzcyh4ZSk7XG4gXG4gXHRpZiAoIW5jb3VudGVycyB8fCBuY291bnRlcnMgXHUwMDNlIFhFX1JBU19OVU1fQ09VTlRFUlMpXG5AQCAtMjU2LDggKzMxMCwyMSBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuIFx0XHRzZXZlcml0eSA9IGVycm9yc1tpZF0uY29tbW9uLnNldmVyaXR5O1xuIFx0XHRjb21wb25lbnQgPSBlcnJvcnNbaWRdLmNvbW1vbi5jb21wb25lbnQ7XG4gXG4rXHRcdGlmIChzZXZlcml0eSAhPSBYRV9SQVNfU0VWX0NPUlJFQ1RBQkxFKSB7XG4rXHRcdFx0eGVfd2Fybih4ZSwgXCJzeXNjdHJsOiB1bmV4cGVjdGVkIHNldmVyaXR5ICVzICgldSlcXG5cIiwgc2V2X3RvX3N0cihzZXZlcml0eSksXG4rXHRcdFx0XHRzZXZlcml0eSk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0eGVfd2Fybih4ZSwgXCJbUkFTXTogJXMgJXMgZGV0ZWN0ZWRcXG5cIixcbiBcdFx0XHRjb21wX3RvX3N0cihjb21wb25lbnQpLCBzZXZfdG9fc3RyKHNldmVyaXR5KSk7XG4rXG4rXHRcdC8qIFNlbmQgZXZlbnQgb25jZSBwZXIgY29tcG9uZW50ICovXG4rXHRcdGlmIChzZW50IFx1MDAyNiBCSVQoY29tcG9uZW50KSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0c2VudCB8PSBCSVQoY29tcG9uZW50KTtcbitcbitcdFx0cmFzX3NlbmRfZXJyb3JfZXZlbnQoeGUsIHNldmVyaXR5LCBjb21wb25lbnQpO1xuIFx0fVxuIH1cbiBcbkBAIC0zMTEsNiArMzc4LDcgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiBcdGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiBmaW5hbF9hY3Rpb247XG4gXHR1MzIgcmVtYWluaW5nID0gWEVfU1lTQ1RSTF9GTE9PRF9MSU1JVDtcbiBcdHN0cnVjdCB4ZV9yYXNfZ2V0X3NvY19lcnJvciByZXNwb25zZTtcbitcdHU4IHNlbnQgPSAwO1xuIFx0c2l6ZV90IHJsZW47XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTM1NCw2ICs0MjIsMTIgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiBcdFx0XHR4ZV9pbmZvKHhlLCBcIltSQVNdOiAlcyAlcyBkZXRlY3RlZFxcblwiLCBjb21wX3RvX3N0cihjb21wb25lbnQpLFxuIFx0XHRcdFx0c2V2X3RvX3N0cihzZXZlcml0eSkpO1xuIFxuK1x0XHRcdC8qIFNlbmQgZXZlbnQgb25jZSBwZXIgY29tcG9uZW50ICovXG4rXHRcdFx0aWYgKCEoc2VudCBcdTAwMjYgQklUKGNvbXBvbmVudCkpKSB7XG4rXHRcdFx0XHRzZW50IHw9IEJJVChjb21wb25lbnQpO1xuK1x0XHRcdFx0cmFzX3NlbmRfZXJyb3JfZXZlbnQoeGUsIHNldmVyaXR5LCBjb21wb25lbnQpO1xuK1x0XHRcdH1cbitcbiBcdFx0XHRzd2l0Y2ggKGNvbXBvbmVudCkge1xuIFx0XHRcdGNhc2UgWEVfUkFTX0NPTVBfQ09SRV9DT01QVVRFOlxuIFx0XHRcdFx0YWN0aW9uID0gaGFuZGxlX2NvcmVfY29tcHV0ZV9lcnJvcnMoYXJyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbmluZGV4IDBiZWVkZTNkZGM0ZTRiLi5lZTJjYWEwZWRjNmY5MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxuKysrIGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXG5AQCAtODAsOSArODAsMTQgQEAgc3RydWN0IGRybV9kZXZpY2U7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9SQVMpXG4gaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTtcbiB2b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xuK2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcbitcdFx0XHQgICB1MzIgdmFsdWUpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyB9XG4rc3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsXG4rXHRcdFx0XHRcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXG4reyByZXR1cm4gMDsgfVxuICNlbmRpZlxuIFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcbmluZGV4IDIxOGEzZWU4NjgwNTI3Li5lYWI4MjMxYWE4N2NiZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG4rKysgYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxuQEAgLTM4LDEzICszOCwyOCBAQCBlbnVtIHtcbiBcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCAtIDEpXG4gfTtcbiBcbitlbnVtIHtcbitcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19ERVZJQ0VfTkFNRSA9IDEsXG4rXHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9JRCxcbitcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsXG4rXHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfSUQsXG4rXHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSxcbitcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSxcbitcbitcdF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCxcbitcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVggPSAoX19EUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYIC0gMSlcbit9O1xuK1xuIGVudW0ge1xuIFx0RFJNX1JBU19DTURfTElTVF9OT0RFUyA9IDEsXG4gXHREUk1fUkFTX0NNRF9HRVRfRVJST1JfQ09VTlRFUixcbiBcdERSTV9SQVNfQ01EX0NMRUFSX0VSUk9SX0NPVU5URVIsXG4rXHREUk1fUkFTX0NNRF9FUlJPUl9FVkVOVCxcbiBcbiBcdF9fRFJNX1JBU19DTURfTUFYLFxuIFx0RFJNX1JBU19DTURfTUFYID0gKF9fRFJNX1JBU19DTURfTUFYIC0gMSlcbiB9O1xuIFxuKyNkZWZpbmUgRFJNX1JBU19NQ0dSUF9FUlJPUl9SRVBPUlRcdFwiZXJyb3ItcmVwb3J0XCJcbitcbiAjZW5kaWYgLyogX1VBUElfTElOVVhfRFJNX1JBU19IICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTozOToyNC41MzMwMDAzNTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjM4MzkzOTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgTmV3IE5ldGxpbmsgTXVsdGljYXN0IEV2ZW50IGZvciBEUk0gUkFTKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGl0J3MgYWJvdXQgYWRkaW5nIGFuIGBlcnJvci1ldmVudGAgbmV0bGluayBtdWx0aWNhc3QgZXZlbnQgdG8gdGhlIGV4aXN0aW5nIGBkcm1fcmFzYCBuZXRsaW5rIGZhbWlseS4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBpdCdzIGdvb2QgdGhhdCB3ZSdyZSBleHBhbmRpbmcgb3VyIGVycm9yIHJlcG9ydGluZyBjYXBhYmlsaXRpZXMsIGJ1dCBsZXQncyBzZWUgd2hlcmUgdGhlIHJpc2tzIGxpZS5cblxuVGhlIHBhdGNoIHRvdWNoZXMgYSBidW5jaCBvZiBmaWxlcywgbW9zdGx5IGluIHRoZSBEUk0gYW5kIHNwZWNpZmljYWxseSB0aGUgYHhlYCBkcml2ZXIgYXJlYXMsIGFsb25nIHdpdGggcmVsYXRlZCBoZWFkZXIgYW5kIGRvY3VtZW50YXRpb24gZmlsZXMsIHdoaWNoIGlzIGV4cGVjdGVkIGZvciBzb21ldGhpbmcgbGlrZSB0aGlzLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIHRoZSBhY3R1YWwgbmV0bGluayBtdWx0aWNhc3QgZXZlbnQuICBJdCBtb2RpZmllcyB0aGUgYHhlYCBkcml2ZXIgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHRocm91Z2ggYHhlX2RybV9yYXNfZXZlbnRgIGFuZCBzdWJzZXF1ZW50bHkgdGhyb3VnaCBgcmFzX3NlbmRfZXJyb3JfZXZlbnRgLCBldmVudHVhbGx5IG9yaWdpbmF0aW5nIGZyb20gaGFyZHdhcmUgZXJyb3IgaGFuZGxlcnMgbGlrZSBgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWRgIGFuZCBgeGVfcmFzX3Byb2Nlc3NfZXJyb3JzYC5cblxuTm93LCB0aGUgbWFpbiBxdWVzdGlvbiBpcyBhbHdheXM6ICppcyB0aGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZT8qIFRoZSBkb2N1bWVudGF0aW9uIGlzIHByZXR0eSBjbGVhciBhYm91dCBgZXJyb3ItZXZlbnRgIGJlaW5nICp0byogdXNlcnNwYWNlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG11bHRpY2FzdCBncm91cCwgYGVycm9yLXJlcG9ydGAsIHRvIHdoaWNoIHVzZXJzcGFjZSBjYW4gc3Vic2NyaWJlLiBJdCBzZWVtcyB0aGUgZXZlbnQgaXRzZWxmIGlzIHRyaWdnZXJlZCBieSB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgYnkgdGhlIGB4ZWAgZHJpdmVyIHdoZW4gUkFTIGVycm9ycyBoYXBwZW4uIEEgcXVpY2sgZG91YmxlLWNoZWNrOiBpcyB0aGVyZSBhbnkgd2F5IGZvciB1c2Vyc3BhY2UgdG8gdHJpZ2dlciBgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWRgIG9yIGB4ZV9yYXNfcHJvY2Vzc19lcnJvcnNgIGRpcmVjdGx5PyBUaGVzZSBhcHBlYXIgdG8gYmUgaGFyZHdhcmUgZXJyb3IgaGFuZGxlcnMsIHNvIGl0IHNlZW1zIHVubGlrZWx5LlxuXG5JIHF1aWNrbHkgY2hlY2sgdGhlIG5ldGxpbmsgcGFydDogSXQgbWVyZWx5IGRlZmluZXMgdGhlIG11bHRpY2FzdCBncm91cCBhbmQgdGhlIGV2ZW50IGF0dHJpYnV0ZXMuIFRoZXJlJ3Mgbm8gbmV3IGBkb2l0YCBvciBgZHVtcGl0YCBvcGVyYXRpb24gZm9yIHVzZXJzcGFjZSB0byBjYWxsLCBub3RoaW5nIHRoYXQgY291bGQgdHJpZ2dlciBhbiBldmVudCBvdGhlciB0aGFuIHN1YnNjcmliaW5nIHRvIHRoZSBtdWx0aWNhc3QgZ3JvdXAuIExvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24gb2YgYERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UYCBpbiB0aGUgYGluY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oYCwgYWxvbmcgd2l0aCB0aGUgYGRybV9yYXMueWFtbGAgZmlsZSwgaXQgY29uZmlybXMgdGhpcyBpcyBhbiBldmVudCAqc2VudCB0byogdXNlcnNwYWNlLCB3aXRoIGluZm9ybWF0aW9uIGxpa2UgZGV2aWNlIG5hbWUsIG5vZGUgSUQsIGFuZCBlcnJvciBkZXRhaWxzLlxuXG5JJ20gdmVyaWZ5aW5nIGJ5IGV4YW1pbmluZyBgZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY2AuIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YCBjbGVhcmx5IGNyZWF0ZXMgYW5kIHNlbmRzIHRoZSBuZXRsaW5rIG5vdGlmaWNhdGlvbi4gVGhlIGBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzYCBpcyBzb2xlbHkgYWJvdXQgcG9wdWxhdGluZyB0aGUgZXZlbnQgZGF0YS4gVGhlIGB4ZWAgZHJpdmVyIGNoYW5nZXMgYXJlIG9ubHkgYWJvdXQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdoZW4gaGFyZHdhcmUgZXJyb3JzIGFyZSBlbmNvdW50ZXJlZC5cblxuU28sIHNpbmNlIGl0J3Mgb25seSBhbiBvdXRib3VuZCBuZXRsaW5rIG5vdGlmaWNhdGlvbiwgYW5kIG5vIG5ldyBjb2RlIHBhdGhzIHRyaWdnZXJlZCAqYnkqIHVzZXJzcGFjZSwgdGhlIHJpc2sgb2YgZnV6emluZyBpcyBtaW5pbWFsLi4uIHVubGVzcywgb2YgY291cnNlLCB0aGVyZSdzIHNvbWUgc29ydCBvZiBpbXBsaWNpdCB2dWxuZXJhYmlsaXR5IGluIHRoZSBuZXRsaW5rIGluZnJhc3RydWN0dXJlIGl0c2VsZiwgb3IsIGFzIGEgbW9yZSByZW1vdGUgcG9zc2liaWxpdHksIGlmIHRoZXNlIGhhcmR3YXJlIGV2ZW50cyB0cmlnZ2VyZWQgYnkgc29tZSBvdGhlciBtZWFucyBsaWtlIGRlYnVnZnMgb3Igc3lzZnMuIEkgd291bGQgbm93IHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBpbmplY3Rpb24gb3IgdHJpZ2dlcmluZyBvZiB0aG9zZSBlcnJvciBldmVudHMuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSwgdGhpcyBmZWVscyBsaWtlIGl0IHdpbGwgYmUgYSBsb3cgcHJpb3JpdHkgZm9yIGZ1enppbmcsIHVubGVzcyBgZ3JlcHBlcmAgcmV2ZWFscyBzb21lIGhpZGRlbiBpbnRlcmFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkyMCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTozOTozNi45MTY5NDIxODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk5MDk2ODA2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM9MjcyPXN0YXRpYyB1OCBoYW5kbGVfY29yZV9jb21wdXRlX2Vycm9ycyhzdHJ1Y3QgeGVfcmFzX2Vycm9yX2FycmF5ICphcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMjg5LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzoyOTA6dm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMjkxLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaD0xMz1zdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmgtMTQtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oOjE1OnZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oLTE2LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jPTE1PXN0YXRpYyB2b2lkIGdldF9wZW5kaW5nX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYywgc3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kICpjb21tYW5kKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy0zOC1cXHRcXHRpZiAocmVzcG9uc2UtXFx1MDAzZWV2ZW50ID09IFhFX1NZU0NUUkxfRVZFTlRfVEhSRVNIT0xEX0NST1NTRUQpXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYzozOTpcXHRcXHRcXHR4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZCh4ZSwgcmVzcG9uc2UpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtNDAtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTozOTozOS45MDc5MTQ1N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTA5OTY5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFJBUyBFcnJvciBGbG93KipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHNvIGB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZGAgZ2V0cyB0cmlnZ2VyZWQgZnJvbSBgeGVfc3lzY3RybF9ldmVudC5jYC4gTWFrZXMgc2Vuc2UsIHRoYXQncyB3aGVyZSB0aGUgaGFyZHdhcmUgZXZlbnQgaGFuZGxpbmcgbGl2ZXMuIFRoYXQgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBhIGtleSBwYXJ0IG9mIHRoZSByZWFsLXRpbWUgcmVzcG9uc2UgdG8gYSBSQVMgZXZlbnQuIFdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgbm93IGlzIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhhdCBmdW5jdGlvbiB0byBvdGhlcnMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiB0aGlzIGNvZGUuIFdoZXJlIGRvZXMgaXQgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGVycm9yIGhhbmRsaW5nP1xuXG5JJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgdGhpcy4uLiBob3cgZG9lcyB0aGF0IHRocmVzaG9sZCBjcm9zc2luZyByZWxhdGUgdG8gdGhlIG90aGVyIFJBUyBlcnJvciBoYW5kbGluZyBmdW5jdGlvbnM/IFdoYXQgaGFwcGVucyBuZXh0PyBXaGVyZSBpcyBgeGVfcmFzX3Byb2Nlc3NfZXJyb3JzYCB1c2VkPyBJJ2xsIG5lZWQgdG8gZ28gZmluZCB3aGVyZSBgeGVfcmFzX3Byb2Nlc3NfZXJyb3JzYCBpcyBjYWxsZWQuIEl0J3MgcHJvYmFibHkgaW52b2tlZCBlaXRoZXIgZnJvbSBoZXJlIGRpcmVjdGx5LCBvciBmcm9tIHNvbWV3aGVyZSBkZWVwZXIgaW4gdGhlIGNhbGwgc3RhY2suIFRoaXMgdGhyZXNob2xkIGNyb3NzZWQgZXZlbnQgaGFzIHRvIGZlZWQgaW50byBzb21lIGtpbmQgb2YgZXJyb3IgcHJvY2Vzc2luZywgcmlnaHQ/IFRoZSBrZXkgbm93IGlzIHRyYWNraW5nIGRvd24gdGhhdCBjb25uZWN0aW9uLCBmaWd1cmluZyBvdXQgaG93IHRoZSBkYXRhIGZsb3dzIGZyb20gb25lIHRvIHRoZSBuZXh0LCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBlcnJvciBoYW5kbGluZyBzdGF0ZSBtYWNoaW5lIGxvb2tzIGxpa2UuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbCBncmFwaHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDU0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDk6Mzk6NDMuNDU4OTEzNjY2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDM3MjI0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGVfcmFzX3Byb2Nlc3NfZXJyb3JzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfZXJyb3IuYz03OD1zdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB4ZV9wY2lfZXJyb3JfbW1pb19lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9lcnJvci5jLTgzLVxcdHhlX2luZm8oeGUsIFxcXCJQQ0kgZXJyb3I6IE1NSU8gZW5hYmxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9lcnJvci5jOjg0OlxcdGFjdGlvbiA9IHhlX3Jhc19wcm9jZXNzX2Vycm9ycyh4ZSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9lcnJvci5jLTg1LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jPTMzMT1zdGF0aWMgaW50IGdldF9jb3VudGVyKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICpjb3VudGVyLCB1MzIgKnZhbHVlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTM2Ni0vKipcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM6MzY3OiAqIHhlX3Jhc19wcm9jZXNzX2Vycm9ycygpIC0gUHJvY2VzcyBhbmQgY29udGFpbiBoYXJkd2FyZSBlcnJvcnNcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMzY4LSAqIEB4ZTogeGUgZGV2aWNlIGluc3RhbmNlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMzc0LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzozNzU6ZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMzc2LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz02Nzc9dm9pZCB4ZV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy02OTYtXFx0ICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jOjY5NzpcXHR4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoeGUpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy02OTgtXFx0cmV0ID0gZGV2bV9kZXZpY2VfYWRkX2dyb3VwKHhlLVxcdTAwM2Vkcm0uZGV2LCBcXHUwMDI2Z3B1X2hlYWx0aF9ncm91cCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmg9MTk9dm9pZCB4ZV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oOjIwOmVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoc3RydWN0IHhlX2RldmljZSAqeGUpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaC0yMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDk6Mzk6NDUuODAyNjQwMjI3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM5NTM1MjE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEFuYWx5c2lzOiBObyBOZXcgVXNlcnNwYWNlIEF0dGFjayBTdXJmYWNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBmb2N1c2VzIG9uIGlkZW50aWZ5aW5nIG5ldyBhdHRhY2sgc3VyZmFjZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIOKAkyBzcGVjaWZpY2FsbHksIGFueXRoaW5nIHJlYWNoYWJsZSBieSB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBiZSBmdXp6ZWQuXG5cbkkndmUgdHJhY2VkIHRoZSBmbG93LiBgeGVfcmFzX3Byb2Nlc3NfZXJyb3JzYCBpcyB0cmlnZ2VyZWQgaW50ZXJuYWxseSDigJMgYnkgYHhlX3BjaV9lcnJvcl9tbWlvX2VuYWJsZWRgIGFuZCBgeGVfcmFzX2luaXRgLiBOb3RoaW5nIGhlcmUgc2VlbXMgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UgZXhjZXB0LCBwZXJoYXBzLCBkdXJpbmcgaW5pdGlhbGlzYXRpb24gb3IgZXJyb3IgcmVjb3ZlcnkuIFRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGEgbmV0bGluayBub3RpZmljYXRpb24uIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgc3VzcGljaW9uOyBpcyB0aGVyZSBhbnkgbmV3IHBhcnNpbmcgb2YgdXNlcnNwYWNlLXByb3ZpZGVkIGlucHV0P1xuXG5JIHNlZSB0aGF0IGBkcm1fcmFzYCBuZXRsaW5rIGZhbWlseSBpcyBhbHJlYWR5IGVzdGFibGlzaGVkLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYGVycm9yLWV2ZW50YCB0byBgZHJtX3Jhcy55YW1sYCBhbmQgYGRybV9yYXMuY2AuIFRoYXTigJlzIG15IHByaW1hcnkgY29uY2Vybi4gSG93ZXZlciwgdXBvbiBpbnNwZWN0aW9uLCBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAgaXMgKmV4cG9ydGVkKiBhbmQgY2FsbGVkIGZyb20gdGhlIGRyaXZlciwgYnV0IHRoZSBwYXRjaCBkb2Vzbid0IGFkZCBhbnkgY29kZSB0byBwYXJzZSBpbmNvbWluZyB1c2Vyc3BhY2UgaW5wdXQuIFRoZSBuZXcgY29kZSBpcyBgbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRyc2AsIHdoaWNoIGNvbnN0cnVjdHMgdGhlIG5ldGxpbmsgbWVzc2FnZSAqc2VudCogdG8gdXNlcnNwYWNlLlxuXG5UaGUgdXNlcnNwYWNlIGludGVyYWN0aW9uIGlzIHNvbGVseSBzdWJzY3JpYmluZyB0byB0aGUgbXVsdGljYXN0IGdyb3VwLiBUaGF04oCZcyBnZW5lcmljIG5ldGxpbmsgdGVycml0b3J5LiBgZHJtX3Jhc2AgaXMgb25seSBjb25jZXJuZWQgd2l0aCB0aGUgKnNlbmRpbmcqIHNpZGUuIFRodXMsIHRoZXJlIGlzICpubyogbmV3IHVzZXJzcGFjZS1yZWFjaGFibGUgY29kZSBpbnRyb2R1Y2VkLiBUaGlzIGlzIGp1c3QgYSBub3RpZmljYXRpb24gY2hhbm5lbCwga2VybmVsIHRvIHVzZXJzcGFjZS5cblxuSSdtIGRvdWJsZS1jaGVja2luZyB0aGUgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzIGZvciBgZHJtX3Jhcy55YW1sYC4gQWgsIGl0J3MgYWRkaW5nIGBlcnJvci1ldmVudC1hdHRyc2AgYW5kIGFuIGBlcnJvci1ldmVudGAgb3BlcmF0aW9uLCBhbG9uZyB3aXRoIGFuIGBlcnJvci1yZXBvcnRgIG11bHRpY2FzdCBncm91cC4gVGhlIGBldmVudDpgIGRlc2lnbmF0aW9uIGZvciBgZXJyb3ItZXZlbnRgIGNvbmZpcm1zIGl0J3MgYSBub3RpZmljYXRpb24g4oCTIHRoZXJlIGFyZSBubyBgZG86YCBvciBgZHVtcDpgIGNvbW1hbmRzIGhlcmUuXG5cbk15IGNvbmNsdXNpb24gaXMgY2xlYXI6IHRoaXMgcGF0Y2ggZG9lc24ndCBhZGQgYW55IG5ldyB1c2Vyc3BhY2UtdHJpZ2dlcmFibGUgY29kZSBwYXRocy4gYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgLCBgeGVfZHJtX3Jhc19ldmVudGAgYW5kIGByYXNfc2VuZF9lcnJvcl9ldmVudGAgYXJlIHNpbXBseSBmb3JtYXR0aW5nIGFuZCB0cmFuc21pdHRpbmcgZXJyb3IgaW5mb3JtYXRpb24uIFRoZXJlIGFyZSBubyBuZXcgaW9jdGxzLCBzeXNmcyBlbnRyaWVzLCBkZWJ1Z2ZzIGZpbGVzLCBvciBuZXRsaW5rIGNvbW1hbmRzIHRoYXQgdXNlcnNwYWNlIGNhbiBpbml0aWF0ZS5cblxuVGhlcmVmb3JlLCBXb3J0aEZ1enppbmc9ZmFsc2UuIEkgYW0gY29uZmlkZW50IGluIHRoYXQgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5OTUsIk91dHB1dFRva2VucyI6OTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDk6Mzk6NTUuMTk3OTk0MjY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV0bGluayBtdWx0aWNhc3Qgbm90aWZpY2F0aW9uIChgZXJyb3ItZXZlbnRgKSBzZW50IGZyb20gdGhlIGtlcm5lbCB0byB1c2Vyc3BhY2Ugd2hlbiBoYXJkd2FyZSBSQVMgZXJyb3JzIG9jY3VyLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB1c2Vyc3BhY2UtdHJpZ2dlcmFibGUgY29kZSBwYXRocyBvciBpbnB1dCBwYXJzaW5nIGxvZ2ljLCBhcyB0aGUgZXZlbnQgZ2VuZXJhdGlvbiBpcyBkcml2ZW4gYnkgaGFyZHdhcmUgZXZlbnRzIGFuZCB0aGUgbXVsdGljYXN0IHN1YnNjcmlwdGlvbiBpcyBoYW5kbGVkIGJ5IGdlbmVyaWMgbmV0bGluayBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldGxpbmsgbXVsdGljYXN0IG5vdGlmaWNhdGlvbiAoYGVycm9yLWV2ZW50YCkgc2VudCBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlcnNwYWNlIHdoZW4gaGFyZHdhcmUgUkFTIGVycm9ycyBvY2N1ci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdXNlcnNwYWNlLXRyaWdnZXJhYmxlIGNvZGUgcGF0aHMgb3IgaW5wdXQgcGFyc2luZyBsb2dpYywgYXMgdGhlIGV2ZW50IGdlbmVyYXRpb24gaXMgZHJpdmVuIGJ5IGhhcmR3YXJlIGV2ZW50cyBhbmQgdGhlIG11bHRpY2FzdCBzdWJzY3JpcHRpb24gaXMgaGFuZGxlZCBieSBnZW5lcmljIG5ldGxpbmsgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowmnnqm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 09:12:08 +0000 UTC FinishedAt: 2026-07-20 09:39:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXRsaW5rIG11bHRpY2FzdCBub3RpZmljYXRpb24gKGBlcnJvci1ldmVudGApIHNlbnQgZnJvbSB0aGUga2VybmVsIHRvIHVzZXJzcGFjZSB3aGVuIGhhcmR3YXJlIFJBUyBlcnJvcnMgb2NjdXIuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVzZXJzcGFjZS10cmlnZ2VyYWJsZSBjb2RlIHBhdGhzIG9yIGlucHV0IHBhcnNpbmcgbG9naWMsIGFzIHRoZSBldmVudCBnZW5lcmF0aW9uIGlzIGRyaXZlbiBieSBoYXJkd2FyZSBldmVudHMgYW5kIHRoZSBtdWx0aWNhc3Qgc3Vic2NyaXB0aW9uIGlzIGhhbmRsZWQgYnkgZ2VuZXJpYyBuZXRsaW5rIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTY1YWYyZjk1MjhmYmFlYmYxNGI3NzM1MTVjYjg5OTQwOWI2YjVhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDA5OjM5OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbmluZGV4IDgzYzIxODUzYjc0YjYwLi40MDZlNGM0OWJhYzFmZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxuQEAgLTU2LDYgJiM0Mzs1Niw3IEBAIFVzZXIgc3BhY2UgdG9vbHMgY2FuOlxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxuICogQ2xlYXIgc3BlY2lmaWMgZXJyb3IgY291bnRlcnMgd2l0aCB0aGUgYGBjbGVhci1lcnJvci1jb3VudGVyYGAgY29tbWFuZCwgdXNpbmcgYm90aFxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxuJiM0MzsqIFN1YnNjcmliZSB0byB0aGUgYGBlcnJvci1yZXBvcnRgYCBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBgYGVycm9yLWV2ZW50YGAuXG4gXG4gWUFNTC1iYXNlZCBJbnRlcmZhY2VcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuQEAgLTExMSwzICYjNDM7MTEyLDIzIEBAIEV4YW1wbGU6IENsZWFyIGFuIGVycm9yIGNvdW50ZXIgZm9yIGEgZ2l2ZW4gbm9kZVxuIFxuICAgICBzdWRvIHlubCAtLWZhbWlseSBkcm1fcmFzIC0tZG8gY2xlYXItZXJyb3ItY291bnRlciAtLWpzb24gJiMzOTt7XCYjMzQ7bm9kZS1pZFwmIzM0OzowLCBcJiMzNDtlcnJvci1pZFwmIzM0OzoxfSYjMzk7XG4gICAgIE5vbmVcbiYjNDM7XG4mIzQzO0V4YW1wbGU6IFN1YnNjcmliZSB0byBgYGVycm9yLXJlcG9ydGBgIG11bHRpY2FzdCBncm91cFxuJiM0MztcbiYjNDM7Li4gY29kZS1ibG9jazo6IGJhc2hcbiYjNDM7XG4mIzQzOyAgICBzdWRvIHlubCAtLWZhbWlseSBkcm1fcmFzIC0tb3V0cHV0LWpzb24gLS1zdWJzY3JpYmUgZXJyb3ItcmVwb3J0XG4mIzQzO1xuJiM0MzsuLiBjb2RlLWJsb2NrOjoganNvblxuJiM0MztcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtlcnJvci1ldmVudFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttc2dcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7ZGV2aWNlLW5hbWVcJiMzNDs6IFwmIzM0OzAwMDA6MDM6MDAuMFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7bm9kZS1pZFwmIzM0OzogMSxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7bm9kZS1uYW1lXCYjMzQ7OiBcJiMzNDt1bmNvcnJlY3RhYmxlLWVycm9yc1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7ZXJyb3ItaWRcJiMzNDs6IDEsXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2Vycm9yLW5hbWVcJiMzNDs6IFwmIzM0O2Vycm9yX25hbWUxXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtlcnJvci12YWx1ZVwmIzM0OzogMVxuJiM0MzsgICAgICAgIH1cbiYjNDM7ICAgIH1cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuaW5kZXggZTExMzA1NmY4YzAxNmMuLjhhZWQzZDQ1MTVlNWFmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuQEAgLTY5LDYgJiM0Mzs2OSwzMyBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIG5hbWU6IGVycm9yLXZhbHVlXG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAgIGRvYzogQ3VycmVudCB2YWx1ZSBvZiB0aGUgcmVxdWVzdGVkIGVycm9yIGNvdW50ZXIuXG4mIzQzOyAgLVxuJiM0MzsgICAgbmFtZTogZXJyb3ItZXZlbnQtYXR0cnNcbiYjNDM7ICAgIGF0dHJpYnV0ZXM6XG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBkZXZpY2UtbmFtZVxuJiM0MzsgICAgICAgIHR5cGU6IHN0cmluZ1xuJiM0MzsgICAgICAgIGRvYzogRGV2aWNlIChQQ0kgQkRGLCBVVUlEKSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IG5vZGUtaWRcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBkb2M6IElEIG9mIHRoZSBub2RlIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogbm9kZS1uYW1lXG4mIzQzOyAgICAgICAgdHlwZTogc3RyaW5nXG4mIzQzOyAgICAgICAgZG9jOiBOYW1lIG9mIHRoZSBub2RlIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogZXJyb3ItaWRcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBkb2M6IElEIG9mIHRoZSBlcnJvciBjb3VudGVyLlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogZXJyb3ItbmFtZVxuJiM0MzsgICAgICAgIHR5cGU6IHN0cmluZ1xuJiM0MzsgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgZXJyb3IuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBlcnJvci12YWx1ZVxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAgIGRvYzogQ3VycmVudCB2YWx1ZSBvZiB0aGUgZXJyb3IgY291bnRlci5cbiBcbiBvcGVyYXRpb25zOlxuICAgbGlzdDpcbkBAIC0xMjQsMyAmIzQzOzE1MSwyNCBAQCBvcGVyYXRpb25zOlxuICAgICAgIGRvOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlkLWF0dHJzXG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IGVycm9yLWV2ZW50XG4mIzQzOyAgICAgIGRvYzogXHUwMDNlLVxuJiM0MzsgICAgICAgICAgIFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuXG4mIzQzOyAgICAgICAgICAgVGhlIGV2ZW50IGluY2x1ZGVzIHRoZSBkZXZpY2UsIG5vZGUgYW5kIGVycm9yIGluZm9ybWF0aW9uXG4mIzQzOyAgICAgICAgICAgb2YgdGhlIGVycm9yIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC5cbiYjNDM7ICAgICAgYXR0cmlidXRlLXNldDogZXJyb3ItZXZlbnQtYXR0cnNcbiYjNDM7ICAgICAgbWNncnA6IGVycm9yLXJlcG9ydFxuJiM0MzsgICAgICBldmVudDpcbiYjNDM7ICAgICAgICBhdHRyaWJ1dGVzOlxuJiM0MzsgICAgICAgICAgLSBkZXZpY2UtbmFtZVxuJiM0MzsgICAgICAgICAgLSBub2RlLWlkXG4mIzQzOyAgICAgICAgICAtIG5vZGUtbmFtZVxuJiM0MzsgICAgICAgICAgLSBlcnJvci1pZFxuJiM0MzsgICAgICAgICAgLSBlcnJvci1uYW1lXG4mIzQzOyAgICAgICAgICAtIGVycm9yLXZhbHVlXG4mIzQzO1xuJiM0MzttY2FzdC1ncm91cHM6XG4mIzQzOyAgbGlzdDpcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogZXJyb3ItcmVwb3J0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcbmluZGV4IGQ2ZWFiMjlhMTM5NGNhLi4wYjc3ZTQzNThlYThmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcbkBAIC00MSw2ICYjNDM7NDEsMTEgQEBcbiAgKiAgICBVc2Vyc3BhY2UgbXVzdCBwcm92aWRlIE5vZGUgSUQsIEVycm9yIElELlxuICAqICAgIENsZWFycyBzcGVjaWZpYyBlcnJvciBjb3VudGVyIG9mIGEgbm9kZSBpZiBzdXBwb3J0ZWQuXG4gICpcbiYjNDM7ICogNC4gRVJST1JfUkVQT1JUOiBTdWJzY3JpYmUgdG8gdGhpcyBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBlcnJvciBldmVudHNcbiYjNDM7ICpcbiYjNDM7ICogNS4gRVJST1JfRVZFTlQ6IFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuIFRoZSBldmVudCBjb250YWlucyBkZXZpY2UsIG5vZGVcbiYjNDM7ICogICAgYW5kIGVycm9yIGluZm9ybWF0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC5cbiYjNDM7ICpcbiAgKiBOb2RlIHJlZ2lzdHJhdGlvbjpcbiAgKlxuICAqIC0gZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCk6IFJlZ2lzdGVycyBhIG5ldyBub2RlIGFuZCBhc3NpZ25zXG5AQCAtMTg2LDYgJiM0MzsxOTEsMzQgQEAgc3RhdGljIGludCBtc2dfcmVwbHlfdmFsdWUoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLFxuIFx0XHRcdCAgIHZhbHVlKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19ERVZJQ0VfTkFNRSwgbm9kZS1cdTAwM2VkZXZpY2VfbmFtZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsIG5vZGUtXHUwMDNlaWQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsIG5vZGUtXHUwMDNlbm9kZV9uYW1lKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfSUQsIGVycm9yX2lkKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSwgZXJyb3JfbmFtZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcbiBcdFx0XHQgICAgdTMyIGVycm9yX2lkKVxuIHtcbkBAIC0yMjIsNiAmIzQzOzI1NSw1NyBAQCBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXG4gXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoKSAtIFJlcG9ydCBhbiBlcnJvciBldmVudFxuJiM0MzsgKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGVycm9yX2lkOiBJRCBvZiB0aGUgZXJyb3JcbiYjNDM7ICogQGVycm9yX25hbWU6IE5hbWUgb2YgdGhlIGVycm9yXG4mIzQzOyAqIEB2YWx1ZTogVmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBlcnJvclxuJiM0MzsgKlxuJiM0MzsgKiBSZXBvcnQgYW4gZXJyb3ItZXZlbnQgdG8gdXNlcnNwYWNlIHVzaW5nIHRoZSBlcnJvci1yZXBvcnQgbXVsdGljYXN0IGdyb3VwLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcbiYjNDM7XHRcdFx0ICAgdTMyIHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGdlbmxfaW5mbyBpbmZvO1xuJiM0MztcdHN0cnVjdCBza19idWZmICptc2c7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqaGRyO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZXJyb3JfbmFtZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRnZW5sX2luZm9faW5pdF9udGYoXHUwMDI2aW5mbywgXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UKTtcbiYjNDM7XG4mIzQzO1x0bXNnID0gZ2VubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghbXNnKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGhkciA9IGdlbmxtc2dfaXB1dChtc2csIFx1MDAyNmluZm8pO1xuJiM0MztcdGlmICghaGRyKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU1TR1NJWkU7XG4mIzQzO1x0XHRnb3RvIGZyZWVfbXNnO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhtc2csIG5vZGUsIGVycm9yX2lkLCBlcnJvcl9uYW1lLCB2YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gY2FuY2VsX21zZztcbiYjNDM7XG4mIzQzO1x0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xuJiM0MztcdGdlbmxtc2dfbXVsdGljYXN0X2FsbG5zKFx1MDAyNmRybV9yYXNfbmxfZmFtaWx5LCBtc2csIDAsIERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JUKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztjYW5jZWxfbXNnOlxuJiM0MztcdGdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTtcbiYjNDM7ZnJlZV9tc2c6XG4mIzQzO1x0bmxtc2dfZnJlZShtc2cpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChkcm1fcmFzX25sX2Vycm9yX2V2ZW50KTtcbiYjNDM7XG4gLyoqXG4gICogZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoKSAtIER1bXAgYWxsIEVycm9yIENvdW50ZXJzXG4gICogQHNrYjogTmV0bGluayBtZXNzYWdlIGJ1ZmZlclxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG5pbmRleCBkZWExYzFiMjQ5NGU4MS4uOWQzMTIzY2M5ZjljYWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG5AQCAtNTgsNiAmIzQzOzU4LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHJtX3Jhc19ubF9vcHNbXSA9IHtcbiBcdH0sXG4gfTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBkcm1fcmFzX25sX21jZ3Jwc1tdID0ge1xuJiM0MztcdFtEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVF0gPSB7IFwmIzM0O2Vycm9yLXJlcG9ydFwmIzM0OywgfSxcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcdC5uYW1lXHRcdD0gRFJNX1JBU19GQU1JTFlfTkFNRSxcbiBcdC52ZXJzaW9uXHQ9IERSTV9SQVNfRkFNSUxZX1ZFUlNJT04sXG5AQCAtNjYsNCAmIzQzOzcwLDYgQEAgc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcdC5tb2R1bGVcdFx0PSBUSElTX01PRFVMRSxcbiBcdC5zcGxpdF9vcHNcdD0gZHJtX3Jhc19ubF9vcHMsXG4gXHQubl9zcGxpdF9vcHNcdD0gQVJSQVlfU0laRShkcm1fcmFzX25sX29wcyksXG4mIzQzO1x0Lm1jZ3Jwc1x0XHQ9IGRybV9yYXNfbmxfbWNncnBzLFxuJiM0MztcdC5uX21jZ3Jwc1x0PSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfbWNncnBzKSxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmggYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG5pbmRleCBhMzk4NjQzNTcyYTVhMC4uMDNlYzI3NWFjYTkyOTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG5AQCAtMjEsNiAmIzQzOzIxLDEwIEBAIGludCBkcm1fcmFzX25sX2dldF9lcnJvcl9jb3VudGVyX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIGludCBkcm1fcmFzX25sX2NsZWFyX2Vycm9yX2NvdW50ZXJfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbiBcbiYjNDM7ZW51bSB7XG4mIzQzO1x0RFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQsXG4mIzQzO307XG4mIzQzO1xuIGV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHk7XG4gXG4gI2VuZGlmIC8qIF9MSU5VWF9EUk1fUkFTX0dFTl9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbmluZGV4IDc5MzdkOGJhMGVkOWNlLi4wMjg3NTk0ZTEwMjY1MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbkBAIC0xODUsNiAmIzQzOzE4NSw0OCBAQCBzdGF0aWMgaW50IHJlZ2lzdGVyX25vZGVzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB4ZV9kcm1fcmFzX2V2ZW50KCkgLSBSZXBvcnQgZHJtX3JhcyBlcnJvciBldmVudCB0byB1c2Vyc3BhY2VcbiYjNDM7ICogQHhlOiB4ZSBkZXZpY2Ugc3RydWN0dXJlXG4mIzQzOyAqIEBjb21wb25lbnQ6IGVycm9yIGNvbXBvbmVudCAoc2VlIFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9jb21wb25lbnQpXG4mIzQzOyAqIEBzZXZlcml0eTogZXJyb3Igc2V2ZXJpdHkgKHNlZSBcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3Jfc2V2ZXJpdHkpXG4mIzQzOyAqIEB2YWx1ZTogdmFsdWUgb2YgZXJyb3IgY291bnRlclxuJiM0MzsgKlxuJiM0MzsgKiBSZXBvcnQgYW4gZXJyb3ItZXZlbnQgdG8gdXNlcnNwYWNlLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBjb21wb25lbnQsIHU4IHNldmVyaXR5LCB1MzIgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXHUwMDI2eGUtXHUwMDNlcmFzO1xuJiM0MztcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm87XG4mIzQzO1x0c3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBFdmVudCBpcyBzdXBwb3J0ZWQgb25seSBpZiBkcm1fcmFzIGlzIGVuYWJsZWQgKi9cbiYjNDM7XHRpZiAoIXhlLVx1MDAzZWluZm8uaGFzX2RybV9yYXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChjb21wb25lbnQgXHUwMDNlPSBEUk1fWEVfUkFTX0VSUl9DT01QX01BWCkge1xuJiM0MztcdFx0ZHJtX3dhcm4oXHUwMDI2eGUtXHUwMDNlZHJtLCBcJiMzNDt1bnN1cHBvcnRlZCBjb21wb25lbnQgJXVcXG5cJiMzNDssIGNvbXBvbmVudCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc2V2ZXJpdHkgXHUwMDNlPSBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYKSB7XG4mIzQzO1x0XHRkcm1fd2FybihcdTAwMjZ4ZS1cdTAwM2Vkcm0sIFwmIzM0O3Vuc3VwcG9ydGVkIHNldmVyaXR5ICV1XFxuXCYjMzQ7LCBzZXZlcml0eSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRub2RlID0gXHUwMDI2cmFzLVx1MDAzZW5vZGVbc2V2ZXJpdHldO1xuJiM0MztcdGluZm8gPSByYXMtXHUwMDNlaW5mb1tzZXZlcml0eV07XG4mIzQzO1xuJiM0MztcdGlmICghaW5mbyB8fCAhaW5mb1tjb21wb25lbnRdLm5hbWUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJldCA9IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQobm9kZSwgY29tcG9uZW50LCBpbmZvW2NvbXBvbmVudF0ubmFtZSwgdmFsdWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRkcm1fZXJyX3JhdGVsaW1pdGVkKFx1MDAyNnhlLVx1MDAzZWRybSwgXCYjMzQ7ZHJtX3JhcyBlcnJvci1ldmVudCBmYWlsZWQ6ICVkIGZvciAlcyAlc1xcblwmIzM0OywgcmV0LFxuJiM0MztcdFx0XHRcdCAgICBpbmZvW2NvbXBvbmVudF0ubmFtZSwgZXJyb3Jfc2V2ZXJpdHlbc2V2ZXJpdHldKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB4ZV9kcm1fcmFzX2luaXQoKSAtIEluaXRpYWxpemUgRFJNIFJBU1xuICAqIEB4ZTogeGUgZGV2aWNlIGluc3RhbmNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmhcbmluZGV4IDM2NWM3MGU5M2U4MmZkLi5hZGQ5NmJmMWE3YWJkNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmhcbkBAIC01LDExICYjNDM7NSwxNCBAQFxuICNpZm5kZWYgX1hFX0RSTV9SQVNfSF9cbiAjZGVmaW5lIF9YRV9EUk1fUkFTX0hfXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4gc3RydWN0IHhlX2RldmljZTtcbiBcbiAjZGVmaW5lIGZvcl9lYWNoX2Vycm9yX3NldmVyaXR5KGkpXHRcXFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgRFJNX1hFX1JBU19FUlJfU0VWX01BWDsgaSYjNDM7JiM0MzspXG4gXG4gaW50IHhlX2RybV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSk7XG4mIzQzO3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggY29tcG9uZW50LCB1OCBzZXZlcml0eSwgdTMyIHZhbHVlKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbmluZGV4IGVkNjA5OTEyZmRhMTQwLi40NjJjYmI1NDhmMDdiYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXG5AQCAtODksNiAmIzQzOzg5LDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBncHVfaGVhbHRoX3N0YXRlc1tdID0ge1xuIH07XG4gc3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKGdwdV9oZWFsdGhfc3RhdGVzKSA9PSBYRV9SQVNfSEVBTFRIX01BWCk7XG4gXG4mIzQzO3N0YXRpYyBpbnQgZ2V0X2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmNvdW50ZXIsIHUzMiAqdmFsdWUpO1xuJiM0MztcbiBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19zZXZlcml0eSh1OCBzZXZlcml0eSlcbiB7XG4gXHRzd2l0Y2ggKHNldmVyaXR5KSB7XG5AQCAtMTAxLDYgJiM0MzsxMDMsMTggQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdTggeGVfdG9fZHJtX3Jhc19zZXZlcml0eSh1OCBzZXZlcml0eSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoc2V2ZXJpdHkpIHtcbiYjNDM7XHRjYXNlIFhFX1JBU19TRVZfQ09SUkVDVEFCTEU6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFO1xuJiM0MztcdGNhc2UgWEVfUkFTX1NFVl9VTkNPUlJFQ1RBQkxFOlxuJiM0MztcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9VTkNPUlJFQ1RBQkxFO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX01BWDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudClcbiB7XG4gXHRzd2l0Y2ggKGNvbXBvbmVudCkge1xuQEAgLTExOSw2ICYjNDM7MTMzLDI0IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdTggeGVfdG9fZHJtX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChjb21wb25lbnQpIHtcbiYjNDM7XHRjYXNlIFhFX1JBU19DT01QX0RFVklDRV9NRU1PUlk6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9ERVZJQ0VfTUVNT1JZO1xuJiM0MztcdGNhc2UgWEVfUkFTX0NPTVBfQ09SRV9DT01QVVRFOlxuJiM0MztcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfQ09SRV9DT01QVVRFO1xuJiM0MztcdGNhc2UgWEVfUkFTX0NPTVBfUENJRTpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1BDSUU7XG4mIzQzO1x0Y2FzZSBYRV9SQVNfQ09NUF9GQUJSSUM6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9GQUJSSUM7XG4mIzQzO1x0Y2FzZSBYRV9SQVNfQ09NUF9TT0NfSU5URVJOQUw6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9TT0NfSU5URVJOQUw7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX01BWDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCByYXNfc3RhdHVzX3RvX2Vycm5vKHUzMiBzdGF0dXMpXG4ge1xuIFx0c3dpdGNoIChzdGF0dXMpIHtcbkBAIC0yMTcsNiAmIzQzOzI0OSwyNiBAQCBzdGF0aWMgdm9pZCByYXNfdXNwX2Flcl9pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuIFx0ZGV2X2RiZyhcdTAwMjZ1c3AtXHUwMDNlZGV2LCBcJiMzNDtVbmNvcnJlY3RhYmxlIEludGVybmFsIEVycm9ycyBkb3duZ3JhZGVkIGFuZCB1bm1hc2tlZFxcblwmIzM0Oyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCByYXNfc2VuZF9lcnJvcl9ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlciA9IHswfTtcbiYjNDM7XHR1OCBkcm1fc2V2ZXJpdHksIGRybV9jb21wb25lbnQ7XG4mIzQzO1x0dTMyIHZhbHVlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGNvdW50ZXIuY29tbW9uLnNldmVyaXR5ID0gc2V2ZXJpdHk7XG4mIzQzO1x0Y291bnRlci5jb21tb24uY29tcG9uZW50ID0gY29tcG9uZW50O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZXRfY291bnRlcih4ZSwgXHUwMDI2Y291bnRlciwgXHUwMDI2dmFsdWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRybV9zZXZlcml0eSA9IHhlX3RvX2RybV9yYXNfc2V2ZXJpdHkoc2V2ZXJpdHkpO1xuJiM0MztcdGRybV9jb21wb25lbnQgPSB4ZV90b19kcm1fcmFzX2NvbXBvbmVudChjb21wb25lbnQpO1xuJiM0MztcbiYjNDM7XHR4ZV9kcm1fcmFzX2V2ZW50KHhlLCBkcm1fY29tcG9uZW50LCBkcm1fc2V2ZXJpdHksIHZhbHVlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdTggaGFuZGxlX2NvcmVfY29tcHV0ZV9lcnJvcnMoc3RydWN0IHhlX3Jhc19lcnJvcl9hcnJheSAqYXJyKVxuIHtcbiBcdHN0cnVjdCB4ZV9yYXNfY29tcHV0ZV9lcnJvciAqZXJyb3JfaW5mbyA9ICh2b2lkICopYXJyLVx1MDAzZWRldGFpbHM7XG5AQCAtMjQxLDggJiM0MzsyOTMsMTAgQEAgdm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcbiBcdHN0cnVjdCB4ZV9yYXNfdGhyZXNob2xkX2Nyb3NzZWQgKnBlbmRpbmcgPSAodm9pZCAqKVx1MDAyNnJlc3BvbnNlLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICplcnJvcnMgPSBwZW5kaW5nLVx1MDAzZWNvdW50ZXJzO1xuIFx0dTMyIGlkLCBuY291bnRlcnMgPSBwZW5kaW5nLVx1MDAzZW5jb3VudGVycztcbiYjNDM7XHR1OCBzZW50ID0gMDtcbiBcbiBcdEJVSUxEX0JVR19PTihzaXplb2YocmVzcG9uc2UtXHUwMDNlZGF0YSkgXHUwMDNjIHNpemVvZigqcGVuZGluZykpO1xuJiM0MztcdEJVSUxEX0JVR19PTihCSVRTX1BFUl9UWVBFKHNlbnQpIFx1MDAzYyBYRV9SQVNfQ09NUF9NQVgpO1xuIFx0eGVfZGV2aWNlX2Fzc2VydF9tZW1fYWNjZXNzKHhlKTtcbiBcbiBcdGlmICghbmNvdW50ZXJzIHx8IG5jb3VudGVycyBcdTAwM2UgWEVfUkFTX05VTV9DT1VOVEVSUylcbkBAIC0yNTYsOCAmIzQzOzMxMCwyMSBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuIFx0XHRzZXZlcml0eSA9IGVycm9yc1tpZF0uY29tbW9uLnNldmVyaXR5O1xuIFx0XHRjb21wb25lbnQgPSBlcnJvcnNbaWRdLmNvbW1vbi5jb21wb25lbnQ7XG4gXG4mIzQzO1x0XHRpZiAoc2V2ZXJpdHkgIT0gWEVfUkFTX1NFVl9DT1JSRUNUQUJMRSkge1xuJiM0MztcdFx0XHR4ZV93YXJuKHhlLCBcJiMzNDtzeXNjdHJsOiB1bmV4cGVjdGVkIHNldmVyaXR5ICVzICgldSlcXG5cJiMzNDssIHNldl90b19zdHIoc2V2ZXJpdHkpLFxuJiM0MztcdFx0XHRcdHNldmVyaXR5KTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHR4ZV93YXJuKHhlLCBcJiMzNDtbUkFTXTogJXMgJXMgZGV0ZWN0ZWRcXG5cJiMzNDssXG4gXHRcdFx0Y29tcF90b19zdHIoY29tcG9uZW50KSwgc2V2X3RvX3N0cihzZXZlcml0eSkpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFNlbmQgZXZlbnQgb25jZSBwZXIgY29tcG9uZW50ICovXG4mIzQzO1x0XHRpZiAoc2VudCBcdTAwMjYgQklUKGNvbXBvbmVudCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0c2VudCB8PSBCSVQoY29tcG9uZW50KTtcbiYjNDM7XG4mIzQzO1x0XHRyYXNfc2VuZF9lcnJvcl9ldmVudCh4ZSwgc2V2ZXJpdHksIGNvbXBvbmVudCk7XG4gXHR9XG4gfVxuIFxuQEAgLTMxMSw2ICYjNDM7Mzc4LDcgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiBcdGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiBmaW5hbF9hY3Rpb247XG4gXHR1MzIgcmVtYWluaW5nID0gWEVfU1lTQ1RSTF9GTE9PRF9MSU1JVDtcbiBcdHN0cnVjdCB4ZV9yYXNfZ2V0X3NvY19lcnJvciByZXNwb25zZTtcbiYjNDM7XHR1OCBzZW50ID0gMDtcbiBcdHNpemVfdCBybGVuO1xuIFx0aW50IHJldDtcbiBcbkBAIC0zNTQsNiAmIzQzOzQyMiwxMiBAQCBlbnVtIHhlX3Jhc19yZWNvdmVyeV9hY3Rpb24geGVfcmFzX3Byb2Nlc3NfZXJyb3JzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuIFx0XHRcdHhlX2luZm8oeGUsIFwmIzM0O1tSQVNdOiAlcyAlcyBkZXRlY3RlZFxcblwmIzM0OywgY29tcF90b19zdHIoY29tcG9uZW50KSxcbiBcdFx0XHRcdHNldl90b19zdHIoc2V2ZXJpdHkpKTtcbiBcbiYjNDM7XHRcdFx0LyogU2VuZCBldmVudCBvbmNlIHBlciBjb21wb25lbnQgKi9cbiYjNDM7XHRcdFx0aWYgKCEoc2VudCBcdTAwMjYgQklUKGNvbXBvbmVudCkpKSB7XG4mIzQzO1x0XHRcdFx0c2VudCB8PSBCSVQoY29tcG9uZW50KTtcbiYjNDM7XHRcdFx0XHRyYXNfc2VuZF9lcnJvcl9ldmVudCh4ZSwgc2V2ZXJpdHksIGNvbXBvbmVudCk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4gXHRcdFx0c3dpdGNoIChjb21wb25lbnQpIHtcbiBcdFx0XHRjYXNlIFhFX1JBU19DT01QX0NPUkVfQ09NUFVURTpcbiBcdFx0XHRcdGFjdGlvbiA9IGhhbmRsZV9jb3JlX2NvbXB1dGVfZXJyb3JzKGFycik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXG5pbmRleCAwYmVlZGUzZGRjNGU0Yi4uZWUyY2FhMGVkYzZmOTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxuQEAgLTgwLDkgJiM0Mzs4MCwxNCBAQCBzdHJ1Y3QgZHJtX2RldmljZTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX1JBUylcbiBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xuIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XG4mIzQzO2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcbiYjNDM7XHRcdFx0ICAgdTMyIHZhbHVlKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCxcbiYjNDM7XHRcdFx0XHRcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXG4mIzQzO3sgcmV0dXJuIDA7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5pbmRleCAyMThhM2VlODY4MDUyNy4uZWFiODIzMWFhODdjYmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcbkBAIC0zOCwxMyAmIzQzOzM4LDI4IEBAIGVudW0ge1xuIFx0RFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYIC0gMSlcbiB9O1xuIFxuJiM0MztlbnVtIHtcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfREVWSUNFX05BTUUgPSAxLFxuJiM0MztcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX0lELFxuJiM0MztcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsXG4mIzQzO1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX0lELFxuJiM0MztcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9OQU1FLFxuJiM0MztcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSxcbiYjNDM7XG4mIzQzO1x0X19EUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYLFxuJiM0MztcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVggPSAoX19EUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYIC0gMSlcbiYjNDM7fTtcbiYjNDM7XG4gZW51bSB7XG4gXHREUk1fUkFTX0NNRF9MSVNUX05PREVTID0gMSxcbiBcdERSTV9SQVNfQ01EX0dFVF9FUlJPUl9DT1VOVEVSLFxuIFx0RFJNX1JBU19DTURfQ0xFQVJfRVJST1JfQ09VTlRFUixcbiYjNDM7XHREUk1fUkFTX0NNRF9FUlJPUl9FVkVOVCxcbiBcbiBcdF9fRFJNX1JBU19DTURfTUFYLFxuIFx0RFJNX1JBU19DTURfTUFYID0gKF9fRFJNX1JBU19DTURfTUFYIC0gMSlcbiB9O1xuIFxuJiM0MzsjZGVmaW5lIERSTV9SQVNfTUNHUlBfRVJST1JfUkVQT1JUXHRcJiMzNDtlcnJvci1yZXBvcnRcJiMzNDtcbiYjNDM7XG4gI2VuZGlmIC8qIF9VQVBJX0xJTlVYX0RSTV9SQVNfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXRsaW5rIG11bHRpY2FzdCBub3RpZmljYXRpb24gKGBlcnJvci1ldmVudGApIHNlbnQgZnJvbSB0aGUga2VybmVsIHRvIHVzZXJzcGFjZSB3aGVuIGhhcmR3YXJlIFJBUyBlcnJvcnMgb2NjdXIuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVzZXJzcGFjZS10cmlnZ2VyYWJsZSBjb2RlIHBhdGhzIG9yIGlucHV0IHBhcnNpbmcgbG9naWMsIGFzIHRoZSBldmVudCBnZW5lcmF0aW9uIGlzIGRyaXZlbiBieSBoYXJkd2FyZSBldmVudHMgYW5kIHRoZSBtdWx0aWNhc3Qgc3Vic2NyaXB0aW9uIGlzIGhhbmRsZWQgYnkgZ2VuZXJpYyBuZXRsaW5rIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5NjVhZjJmOTUyOGZiYWViZjE0Yjc3MzUxNWNiODk5NDA5YjZiNWE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjAgMDk6Mzk6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0CmluZGV4IDgzYzIxODUzYjc0YjYwLi40MDZlNGM0OWJhYzFmZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3QKQEAgLTU2LDYgJiM0Mzs1Niw3IEBAIFVzZXIgc3BhY2UgdG9vbHMgY2FuOgogICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuCiAqIENsZWFyIHNwZWNpZmljIGVycm9yIGNvdW50ZXJzIHdpdGggdGhlIGBgY2xlYXItZXJyb3ItY291bnRlcmBgIGNvbW1hbmQsIHVzaW5nIGJvdGgKICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLgomIzQzOyogU3Vic2NyaWJlIHRvIHRoZSBgYGVycm9yLXJlcG9ydGBgIG11bHRpY2FzdCBncm91cCB0byByZWNlaXZlIGBgZXJyb3ItZXZlbnRgYC4KIAogWUFNTC1iYXNlZCBJbnRlcmZhY2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTEsMyAmIzQzOzExMiwyMyBAQCBFeGFtcGxlOiBDbGVhciBhbiBlcnJvciBjb3VudGVyIGZvciBhIGdpdmVuIG5vZGUKIAogICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBjbGVhci1lcnJvci1jb3VudGVyIC0tanNvbiAmIzM5O3smIzM0O25vZGUtaWQmIzM0OzowLCAmIzM0O2Vycm9yLWlkJiMzNDs6MX0mIzM5OwogICAgIE5vbmUKJiM0MzsKJiM0MztFeGFtcGxlOiBTdWJzY3JpYmUgdG8gYGBlcnJvci1yZXBvcnRgYCBtdWx0aWNhc3QgZ3JvdXAKJiM0MzsKJiM0MzsuLiBjb2RlLWJsb2NrOjogYmFzaAomIzQzOwomIzQzOyAgICBzdWRvIHlubCAtLWZhbWlseSBkcm1fcmFzIC0tb3V0cHV0LWpzb24gLS1zdWJzY3JpYmUgZXJyb3ItcmVwb3J0CiYjNDM7CiYjNDM7Li4gY29kZS1ibG9jazo6IGpzb24KJiM0MzsKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7ZXJyb3ItZXZlbnQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bXNnJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O2RldmljZS1uYW1lJiMzNDs6ICYjMzQ7MDAwMDowMzowMC4wJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtub2RlLWlkJiMzNDs6IDEsCiYjNDM7ICAgICAgICAgICAgJiMzNDtub2RlLW5hbWUmIzM0OzogJiMzNDt1bmNvcnJlY3RhYmxlLWVycm9ycyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7ZXJyb3ItaWQmIzM0OzogMSwKJiM0MzsgICAgICAgICAgICAmIzM0O2Vycm9yLW5hbWUmIzM0OzogJiMzNDtlcnJvcl9uYW1lMSYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7ZXJyb3ItdmFsdWUmIzM0OzogMQomIzQzOyAgICAgICAgfQomIzQzOyAgICB9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbAppbmRleCBlMTEzMDU2ZjhjMDE2Yy4uOGFlZDNkNDUxNWU1YWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbApAQCAtNjksNiAmIzQzOzY5LDMzIEBAIGF0dHJpYnV0ZS1zZXRzOgogICAgICAgICBuYW1lOiBlcnJvci12YWx1ZQogICAgICAgICB0eXBlOiB1MzIKICAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgZXJyb3IgY291bnRlci4KJiM0MzsgIC0KJiM0MzsgICAgbmFtZTogZXJyb3ItZXZlbnQtYXR0cnMKJiM0MzsgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBkZXZpY2UtbmFtZQomIzQzOyAgICAgICAgdHlwZTogc3RyaW5nCiYjNDM7ICAgICAgICBkb2M6IERldmljZSAoUENJIEJERiwgVVVJRCkgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogbm9kZS1pZAomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBkb2M6IElEIG9mIHRoZSBub2RlIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IG5vZGUtbmFtZQomIzQzOyAgICAgICAgdHlwZTogc3RyaW5nCiYjNDM7ICAgICAgICBkb2M6IE5hbWUgb2YgdGhlIG5vZGUgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZXJyb3ItaWQKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZG9jOiBJRCBvZiB0aGUgZXJyb3IgY291bnRlci4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBlcnJvci1uYW1lCiYjNDM7ICAgICAgICB0eXBlOiBzdHJpbmcKJiM0MzsgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgZXJyb3IuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZXJyb3ItdmFsdWUKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSBlcnJvciBjb3VudGVyLgogCiBvcGVyYXRpb25zOgogICBsaXN0OgpAQCAtMTI0LDMgJiM0MzsxNTEsMjQgQEAgb3BlcmF0aW9uczoKICAgICAgIGRvOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRycwomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogZXJyb3ItZXZlbnQKJiM0MzsgICAgICBkb2M6ICZndDstCiYjNDM7ICAgICAgICAgICBSZXBvcnQgYW4gZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlLgomIzQzOyAgICAgICAgICAgVGhlIGV2ZW50IGluY2x1ZGVzIHRoZSBkZXZpY2UsIG5vZGUgYW5kIGVycm9yIGluZm9ybWF0aW9uCiYjNDM7ICAgICAgICAgICBvZiB0aGUgZXJyb3IgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LgomIzQzOyAgICAgIGF0dHJpYnV0ZS1zZXQ6IGVycm9yLWV2ZW50LWF0dHJzCiYjNDM7ICAgICAgbWNncnA6IGVycm9yLXJlcG9ydAomIzQzOyAgICAgIGV2ZW50OgomIzQzOyAgICAgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAgICAgLSBkZXZpY2UtbmFtZQomIzQzOyAgICAgICAgICAtIG5vZGUtaWQKJiM0MzsgICAgICAgICAgLSBub2RlLW5hbWUKJiM0MzsgICAgICAgICAgLSBlcnJvci1pZAomIzQzOyAgICAgICAgICAtIGVycm9yLW5hbWUKJiM0MzsgICAgICAgICAgLSBlcnJvci12YWx1ZQomIzQzOwomIzQzO21jYXN0LWdyb3VwczoKJiM0MzsgIGxpc3Q6CiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBlcnJvci1yZXBvcnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jCmluZGV4IGQ2ZWFiMjlhMTM5NGNhLi4wYjc3ZTQzNThlYThmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jCkBAIC00MSw2ICYjNDM7NDEsMTEgQEAKICAqICAgIFVzZXJzcGFjZSBtdXN0IHByb3ZpZGUgTm9kZSBJRCwgRXJyb3IgSUQuCiAgKiAgICBDbGVhcnMgc3BlY2lmaWMgZXJyb3IgY291bnRlciBvZiBhIG5vZGUgaWYgc3VwcG9ydGVkLgogICoKJiM0MzsgKiA0LiBFUlJPUl9SRVBPUlQ6IFN1YnNjcmliZSB0byB0aGlzIG11bHRpY2FzdCBncm91cCB0byByZWNlaXZlIGVycm9yIGV2ZW50cwomIzQzOyAqCiYjNDM7ICogNS4gRVJST1JfRVZFTlQ6IFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuIFRoZSBldmVudCBjb250YWlucyBkZXZpY2UsIG5vZGUKJiM0MzsgKiAgICBhbmQgZXJyb3IgaW5mb3JtYXRpb24gdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LgomIzQzOyAqCiAgKiBOb2RlIHJlZ2lzdHJhdGlvbjoKICAqCiAgKiAtIGRybV9yYXNfbm9kZV9yZWdpc3RlcigpOiBSZWdpc3RlcnMgYSBuZXcgbm9kZSBhbmQgYXNzaWducwpAQCAtMTg2LDYgJiM0MzsxOTEsMzQgQEAgc3RhdGljIGludCBtc2dfcmVwbHlfdmFsdWUoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLAogCQkJICAgdmFsdWUpOwogfQogCiYjNDM7c3RhdGljIGludCBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsCiYjNDM7CQkJCSAgICAgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19ERVZJQ0VfTkFNRSwgbm9kZS0mZ3Q7ZGV2aWNlX25hbWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9JRCwgbm9kZS0mZ3Q7aWQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9OQU1FLCBub2RlLSZndDtub2RlX25hbWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfSUQsIGVycm9yX2lkKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsIGVycm9yX25hbWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX1ZBTFVFLCB2YWx1ZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkb2l0X3JlcGx5X3ZhbHVlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHUzMiBub2RlX2lkLAogCQkJICAgIHUzMiBlcnJvcl9pZCkKIHsKQEAgLTIyMiw2ICYjNDM7MjU1LDU3IEBAIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCwKIAlyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pOwogfQogCiYjNDM7LyoqCiYjNDM7ICogZHJtX3Jhc19ubF9lcnJvcl9ldmVudCgpIC0gUmVwb3J0IGFuIGVycm9yIGV2ZW50CiYjNDM7ICogQG5vZGU6IE5vZGUgc3RydWN0dXJlCiYjNDM7ICogQGVycm9yX2lkOiBJRCBvZiB0aGUgZXJyb3IKJiM0MzsgKiBAZXJyb3JfbmFtZTogTmFtZSBvZiB0aGUgZXJyb3IKJiM0MzsgKiBAdmFsdWU6IFZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXJyb3IKJiM0MzsgKgomIzQzOyAqIFJlcG9ydCBhbiBlcnJvci1ldmVudCB0byB1c2Vyc3BhY2UgdXNpbmcgdGhlIGVycm9yLXJlcG9ydCBtdWx0aWNhc3QgZ3JvdXAuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsCiYjNDM7CQkJICAgdTMyIHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IGdlbmxfaW5mbyBpbmZvOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOwomIzQzOwlzdHJ1Y3QgbmxhdHRyICpoZHI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghZXJyb3JfbmFtZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlnZW5sX2luZm9faW5pdF9udGYoJmFtcDtpbmZvLCAmYW1wO2RybV9yYXNfbmxfZmFtaWx5LCBEUk1fUkFTX0NNRF9FUlJPUl9FVkVOVCk7CiYjNDM7CiYjNDM7CW1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFtc2cpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJaGRyID0gZ2VubG1zZ19pcHV0KG1zZywgJmFtcDtpbmZvKTsKJiM0MzsJaWYgKCFoZHIpIHsKJiM0MzsJCXJldCA9IC1FTVNHU0laRTsKJiM0MzsJCWdvdG8gZnJlZV9tc2c7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhtc2csIG5vZGUsIGVycm9yX2lkLCBlcnJvcl9uYW1lLCB2YWx1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGNhbmNlbF9tc2c7CiYjNDM7CiYjNDM7CWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKJiM0MzsJZ2VubG1zZ19tdWx0aWNhc3RfYWxsbnMoJmFtcDtkcm1fcmFzX25sX2ZhbWlseSwgbXNnLCAwLCBEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2NhbmNlbF9tc2c6CiYjNDM7CWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKJiM0MztmcmVlX21zZzoKJiM0MzsJbmxtc2dfZnJlZShtc2cpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGRybV9yYXNfbmxfZXJyb3JfZXZlbnQpOwomIzQzOwogLyoqCiAgKiBkcm1fcmFzX25sX2dldF9lcnJvcl9jb3VudGVyX2R1bXBpdCgpIC0gRHVtcCBhbGwgRXJyb3IgQ291bnRlcnMKICAqIEBza2I6IE5ldGxpbmsgbWVzc2FnZSBidWZmZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jCmluZGV4IGRlYTFjMWIyNDk0ZTgxLi45ZDMxMjNjYzlmOWNhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jCkBAIC01OCw2ICYjNDM7NTgsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0gewogCX0sCiB9OwogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBkcm1fcmFzX25sX21jZ3Jwc1tdID0gewomIzQzOwlbRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlRdID0geyAmIzM0O2Vycm9yLXJlcG9ydCYjMzQ7LCB9LAomIzQzO307CiYjNDM7CiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0gewogCS5uYW1lCQk9IERSTV9SQVNfRkFNSUxZX05BTUUsCiAJLnZlcnNpb24JPSBEUk1fUkFTX0ZBTUlMWV9WRVJTSU9OLApAQCAtNjYsNCAmIzQzOzcwLDYgQEAgc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHsKIAkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAogCS5zcGxpdF9vcHMJPSBkcm1fcmFzX25sX29wcywKIAkubl9zcGxpdF9vcHMJPSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfb3BzKSwKJiM0MzsJLm1jZ3JwcwkJPSBkcm1fcmFzX25sX21jZ3JwcywKJiM0MzsJLm5fbWNncnBzCT0gQVJSQVlfU0laRShkcm1fcmFzX25sX21jZ3JwcyksCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmgKaW5kZXggYTM5ODY0MzU3MmE1YTAuLjAzZWMyNzVhY2E5MjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmgKQEAgLTIxLDYgJiM0MzsyMSwxMCBAQCBpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIGludCBkcm1fcmFzX25sX2NsZWFyX2Vycm9yX2NvdW50ZXJfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQlzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKIAomIzQzO2VudW0gewomIzQzOwlEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVCwKJiM0Mzt9OwomIzQzOwogZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseTsKIAogI2VuZGlmIC8qIF9MSU5VWF9EUk1fUkFTX0dFTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYwppbmRleCA3OTM3ZDhiYTBlZDljZS4uMDI4NzU5NGUxMDI2NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYwpAQCAtMTg1LDYgJiM0MzsxODUsNDggQEAgc3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogeGVfZHJtX3Jhc19ldmVudCgpIC0gUmVwb3J0IGRybV9yYXMgZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlCiYjNDM7ICogQHhlOiB4ZSBkZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICogQGNvbXBvbmVudDogZXJyb3IgY29tcG9uZW50IChzZWUgJmFtcDtlbnVtIGRybV94ZV9yYXNfZXJyb3JfY29tcG9uZW50KQomIzQzOyAqIEBzZXZlcml0eTogZXJyb3Igc2V2ZXJpdHkgKHNlZSAmYW1wO2VudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSkKJiM0MzsgKiBAdmFsdWU6IHZhbHVlIG9mIGVycm9yIGNvdW50ZXIKJiM0MzsgKgomIzQzOyAqIFJlcG9ydCBhbiBlcnJvci1ldmVudCB0byB1c2Vyc3BhY2UuCiYjNDM7ICovCiYjNDM7dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBjb21wb25lbnQsIHU4IHNldmVyaXR5LCB1MzIgdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gJmFtcDt4ZS0mZ3Q7cmFzOwomIzQzOwlzdHJ1Y3QgeGVfZHJtX3Jhc19jb3VudGVyICppbmZvOwomIzQzOwlzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKiBFdmVudCBpcyBzdXBwb3J0ZWQgb25seSBpZiBkcm1fcmFzIGlzIGVuYWJsZWQgKi8KJiM0MzsJaWYgKCF4ZS0mZ3Q7aW5mby5oYXNfZHJtX3JhcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGNvbXBvbmVudCAmZ3Q7PSBEUk1fWEVfUkFTX0VSUl9DT01QX01BWCkgewomIzQzOwkJZHJtX3dhcm4oJmFtcDt4ZS0mZ3Q7ZHJtLCAmIzM0O3Vuc3VwcG9ydGVkIGNvbXBvbmVudCAldVxuJiMzNDssIGNvbXBvbmVudCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHNldmVyaXR5ICZndDs9IERSTV9YRV9SQVNfRVJSX1NFVl9NQVgpIHsKJiM0MzsJCWRybV93YXJuKCZhbXA7eGUtJmd0O2RybSwgJiMzNDt1bnN1cHBvcnRlZCBzZXZlcml0eSAldVxuJiMzNDssIHNldmVyaXR5KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlub2RlID0gJmFtcDtyYXMtJmd0O25vZGVbc2V2ZXJpdHldOwomIzQzOwlpbmZvID0gcmFzLSZndDtpbmZvW3NldmVyaXR5XTsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvIHx8ICFpbmZvW2NvbXBvbmVudF0ubmFtZSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcmV0ID0gZHJtX3Jhc19ubF9lcnJvcl9ldmVudChub2RlLCBjb21wb25lbnQsIGluZm9bY29tcG9uZW50XS5uYW1lLCB2YWx1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlkcm1fZXJyX3JhdGVsaW1pdGVkKCZhbXA7eGUtJmd0O2RybSwgJiMzNDtkcm1fcmFzIGVycm9yLWV2ZW50IGZhaWxlZDogJWQgZm9yICVzICVzXG4mIzM0OywgcmV0LAomIzQzOwkJCQkgICAgaW5mb1tjb21wb25lbnRdLm5hbWUsIGVycm9yX3NldmVyaXR5W3NldmVyaXR5XSk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB4ZV9kcm1fcmFzX2luaXQoKSAtIEluaXRpYWxpemUgRFJNIFJBUwogICogQHhlOiB4ZSBkZXZpY2UgaW5zdGFuY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oCmluZGV4IDM2NWM3MGU5M2U4MmZkLi5hZGQ5NmJmMWE3YWJkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oCkBAIC01LDExICYjNDM7NSwxNCBAQAogI2lmbmRlZiBfWEVfRFJNX1JBU19IXwogI2RlZmluZSBfWEVfRFJNX1JBU19IXwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiBzdHJ1Y3QgeGVfZGV2aWNlOwogCiAjZGVmaW5lIGZvcl9lYWNoX2Vycm9yX3NldmVyaXR5KGkpCVwKIAlmb3IgKGkgPSAwOyBpICZsdDsgRFJNX1hFX1JBU19FUlJfU0VWX01BWDsgaSYjNDM7JiM0MzspCiAKIGludCB4ZV9kcm1fcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpOwomIzQzO3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggY29tcG9uZW50LCB1OCBzZXZlcml0eSwgdTMyIHZhbHVlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMKaW5kZXggZWQ2MDk5MTJmZGExNDAuLjQ2MmNiYjU0OGYwN2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jCkBAIC04OSw2ICYjNDM7ODksOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdwdV9oZWFsdGhfc3RhdGVzW10gPSB7CiB9Owogc3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKGdwdV9oZWFsdGhfc3RhdGVzKSA9PSBYRV9SQVNfSEVBTFRIX01BWCk7CiAKJiM0MztzdGF0aWMgaW50IGdldF9jb3VudGVyKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICpjb3VudGVyLCB1MzIgKnZhbHVlKTsKJiM0MzsKIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KQogewogCXN3aXRjaCAoc2V2ZXJpdHkpIHsKQEAgLTEwMSw2ICYjNDM7MTAzLDE4IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KQogCX0KIH0KIAomIzQzO3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KQomIzQzO3sKJiM0MzsJc3dpdGNoIChzZXZlcml0eSkgewomIzQzOwljYXNlIFhFX1JBU19TRVZfQ09SUkVDVEFCTEU6CiYjNDM7CQlyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFOwomIzQzOwljYXNlIFhFX1JBU19TRVZfVU5DT1JSRUNUQUJMRToKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfVU5DT1JSRUNUQUJMRTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudCkKIHsKIAlzd2l0Y2ggKGNvbXBvbmVudCkgewpAQCAtMTE5LDYgJiM0MzsxMzMsMjQgQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgdTggeGVfdG9fZHJtX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KQomIzQzO3sKJiM0MzsJc3dpdGNoIChjb21wb25lbnQpIHsKJiM0MzsJY2FzZSBYRV9SQVNfQ09NUF9ERVZJQ0VfTUVNT1JZOgomIzQzOwkJcmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfREVWSUNFX01FTU9SWTsKJiM0MzsJY2FzZSBYRV9SQVNfQ09NUF9DT1JFX0NPTVBVVEU6CiYjNDM7CQlyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9DT1JFX0NPTVBVVEU7CiYjNDM7CWNhc2UgWEVfUkFTX0NPTVBfUENJRToKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1BDSUU7CiYjNDM7CWNhc2UgWEVfUkFTX0NPTVBfRkFCUklDOgomIzQzOwkJcmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfRkFCUklDOwomIzQzOwljYXNlIFhFX1JBU19DT01QX1NPQ19JTlRFUk5BTDoKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1NPQ19JTlRFUk5BTDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX01BWDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcmFzX3N0YXR1c190b19lcnJubyh1MzIgc3RhdHVzKQogewogCXN3aXRjaCAoc3RhdHVzKSB7CkBAIC0yMTcsNiAmIzQzOzI0OSwyNiBAQCBzdGF0aWMgdm9pZCByYXNfdXNwX2Flcl9pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKQogCWRldl9kYmcoJmFtcDt1c3AtJmd0O2RldiwgJiMzNDtVbmNvcnJlY3RhYmxlIEludGVybmFsIEVycm9ycyBkb3duZ3JhZGVkIGFuZCB1bm1hc2tlZFxuJiMzNDspOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXIgPSB7MH07CiYjNDM7CXU4IGRybV9zZXZlcml0eSwgZHJtX2NvbXBvbmVudDsKJiM0MzsJdTMyIHZhbHVlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwljb3VudGVyLmNvbW1vbi5zZXZlcml0eSA9IHNldmVyaXR5OwomIzQzOwljb3VudGVyLmNvbW1vbi5jb21wb25lbnQgPSBjb21wb25lbnQ7CiYjNDM7CiYjNDM7CXJldCA9IGdldF9jb3VudGVyKHhlLCAmYW1wO2NvdW50ZXIsICZhbXA7dmFsdWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkcm1fc2V2ZXJpdHkgPSB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHNldmVyaXR5KTsKJiM0MzsJZHJtX2NvbXBvbmVudCA9IHhlX3RvX2RybV9yYXNfY29tcG9uZW50KGNvbXBvbmVudCk7CiYjNDM7CiYjNDM7CXhlX2RybV9yYXNfZXZlbnQoeGUsIGRybV9jb21wb25lbnQsIGRybV9zZXZlcml0eSwgdmFsdWUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB1OCBoYW5kbGVfY29yZV9jb21wdXRlX2Vycm9ycyhzdHJ1Y3QgeGVfcmFzX2Vycm9yX2FycmF5ICphcnIpCiB7CiAJc3RydWN0IHhlX3Jhc19jb21wdXRlX2Vycm9yICplcnJvcl9pbmZvID0gKHZvaWQgKilhcnItJmd0O2RldGFpbHM7CkBAIC0yNDEsOCAmIzQzOzI5MywxMCBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLAogCXN0cnVjdCB4ZV9yYXNfdGhyZXNob2xkX2Nyb3NzZWQgKnBlbmRpbmcgPSAodm9pZCAqKSZhbXA7cmVzcG9uc2UtJmd0O2RhdGE7CiAJc3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqZXJyb3JzID0gcGVuZGluZy0mZ3Q7Y291bnRlcnM7CiAJdTMyIGlkLCBuY291bnRlcnMgPSBwZW5kaW5nLSZndDtuY291bnRlcnM7CiYjNDM7CXU4IHNlbnQgPSAwOwogCiAJQlVJTERfQlVHX09OKHNpemVvZihyZXNwb25zZS0mZ3Q7ZGF0YSkgJmx0OyBzaXplb2YoKnBlbmRpbmcpKTsKJiM0MzsJQlVJTERfQlVHX09OKEJJVFNfUEVSX1RZUEUoc2VudCkgJmx0OyBYRV9SQVNfQ09NUF9NQVgpOwogCXhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2Vzcyh4ZSk7CiAKIAlpZiAoIW5jb3VudGVycyB8fCBuY291bnRlcnMgJmd0OyBYRV9SQVNfTlVNX0NPVU5URVJTKQpAQCAtMjU2LDggJiM0MzszMTAsMjEgQEAgdm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwKIAkJc2V2ZXJpdHkgPSBlcnJvcnNbaWRdLmNvbW1vbi5zZXZlcml0eTsKIAkJY29tcG9uZW50ID0gZXJyb3JzW2lkXS5jb21tb24uY29tcG9uZW50OwogCiYjNDM7CQlpZiAoc2V2ZXJpdHkgIT0gWEVfUkFTX1NFVl9DT1JSRUNUQUJMRSkgewomIzQzOwkJCXhlX3dhcm4oeGUsICYjMzQ7c3lzY3RybDogdW5leHBlY3RlZCBzZXZlcml0eSAlcyAoJXUpXG4mIzM0Oywgc2V2X3RvX3N0cihzZXZlcml0eSksCiYjNDM7CQkJCXNldmVyaXR5KTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJeGVfd2Fybih4ZSwgJiMzNDtbUkFTXTogJXMgJXMgZGV0ZWN0ZWRcbiYjMzQ7LAogCQkJY29tcF90b19zdHIoY29tcG9uZW50KSwgc2V2X3RvX3N0cihzZXZlcml0eSkpOwomIzQzOwomIzQzOwkJLyogU2VuZCBldmVudCBvbmNlIHBlciBjb21wb25lbnQgKi8KJiM0MzsJCWlmIChzZW50ICZhbXA7IEJJVChjb21wb25lbnQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJc2VudCB8PSBCSVQoY29tcG9uZW50KTsKJiM0MzsKJiM0MzsJCXJhc19zZW5kX2Vycm9yX2V2ZW50KHhlLCBzZXZlcml0eSwgY29tcG9uZW50KTsKIAl9CiB9CiAKQEAgLTMxMSw2ICYjNDM7Mzc4LDcgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSkKIAllbnVtIHhlX3Jhc19yZWNvdmVyeV9hY3Rpb24gZmluYWxfYWN0aW9uOwogCXUzMiByZW1haW5pbmcgPSBYRV9TWVNDVFJMX0ZMT09EX0xJTUlUOwogCXN0cnVjdCB4ZV9yYXNfZ2V0X3NvY19lcnJvciByZXNwb25zZTsKJiM0MzsJdTggc2VudCA9IDA7CiAJc2l6ZV90IHJsZW47CiAJaW50IHJldDsKIApAQCAtMzU0LDYgJiM0Mzs0MjIsMTIgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSkKIAkJCXhlX2luZm8oeGUsICYjMzQ7W1JBU106ICVzICVzIGRldGVjdGVkXG4mIzM0OywgY29tcF90b19zdHIoY29tcG9uZW50KSwKIAkJCQlzZXZfdG9fc3RyKHNldmVyaXR5KSk7CiAKJiM0MzsJCQkvKiBTZW5kIGV2ZW50IG9uY2UgcGVyIGNvbXBvbmVudCAqLwomIzQzOwkJCWlmICghKHNlbnQgJmFtcDsgQklUKGNvbXBvbmVudCkpKSB7CiYjNDM7CQkJCXNlbnQgfD0gQklUKGNvbXBvbmVudCk7CiYjNDM7CQkJCXJhc19zZW5kX2Vycm9yX2V2ZW50KHhlLCBzZXZlcml0eSwgY29tcG9uZW50KTsKJiM0MzsJCQl9CiYjNDM7CiAJCQlzd2l0Y2ggKGNvbXBvbmVudCkgewogCQkJY2FzZSBYRV9SQVNfQ09NUF9DT1JFX0NPTVBVVEU6CiAJCQkJYWN0aW9uID0gaGFuZGxlX2NvcmVfY29tcHV0ZV9lcnJvcnMoYXJyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaAppbmRleCAwYmVlZGUzZGRjNGU0Yi4uZWUyY2FhMGVkYzZmOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2RybS9kcm1fcmFzLmgKQEAgLTgwLDkgJiM0Mzs4MCwxNCBAQCBzdHJ1Y3QgZHJtX2RldmljZTsKICNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fUkFTKQogaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTsKIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7CiYjNDM7aW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLAomIzQzOwkJCSAgIHUzMiB2YWx1ZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIGludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwKJiM0MzsJCQkJCSBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpCiYjNDM7eyByZXR1cm4gMDsgfQogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaAppbmRleCAyMThhM2VlODY4MDUyNy4uZWFiODIzMWFhODdjYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oCkBAIC0zOCwxMyAmIzQzOzM4LDI4IEBAIGVudW0gewogCURSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCAtIDEpCiB9OwogCiYjNDM7ZW51bSB7CiYjNDM7CURSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19ERVZJQ0VfTkFNRSA9IDEsCiYjNDM7CURSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX0lELAomIzQzOwlEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9OQU1FLAomIzQzOwlEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfSUQsCiYjNDM7CURSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9OQU1FLAomIzQzOwlEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfVkFMVUUsCiYjNDM7CiYjNDM7CV9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCwKJiM0MzsJRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVggLSAxKQomIzQzO307CiYjNDM7CiBlbnVtIHsKIAlEUk1fUkFTX0NNRF9MSVNUX05PREVTID0gMSwKIAlEUk1fUkFTX0NNRF9HRVRfRVJST1JfQ09VTlRFUiwKIAlEUk1fUkFTX0NNRF9DTEVBUl9FUlJPUl9DT1VOVEVSLAomIzQzOwlEUk1fUkFTX0NNRF9FUlJPUl9FVkVOVCwKIAogCV9fRFJNX1JBU19DTURfTUFYLAogCURSTV9SQVNfQ01EX01BWCA9IChfX0RSTV9SQVNfQ01EX01BWCAtIDEpCiB9OwogCiYjNDM7I2RlZmluZSBEUk1fUkFTX01DR1JQX0VSUk9SX1JFUE9SVAkmIzM0O2Vycm9yLXJlcG9ydCYjMzQ7CiYjNDM7CiAjZW5kaWYgLyogX1VBUElfTElOVVhfRFJNX1JBU19IICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MjAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXcgTmV0bGluayBNdWx0aWNhc3QgRXZlbnQgZm9yIERSTSBSQVMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBpdCYjMzk7cyBhYm91dCBhZGRpbmcgYW4gYGVycm9yLWV2ZW50YCBuZXRsaW5rIG11bHRpY2FzdCBldmVudCB0byB0aGUgZXhpc3RpbmcgYGRybV9yYXNgIG5ldGxpbmsgZmFtaWx5LiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IGl0JiMzOTtzIGdvb2QgdGhhdCB3ZSYjMzk7cmUgZXhwYW5kaW5nIG91ciBlcnJvciByZXBvcnRpbmcgY2FwYWJpbGl0aWVzLCBidXQgbGV0JiMzOTtzIHNlZSB3aGVyZSB0aGUgcmlza3MgbGllLgoKVGhlIHBhdGNoIHRvdWNoZXMgYSBidW5jaCBvZiBmaWxlcywgbW9zdGx5IGluIHRoZSBEUk0gYW5kIHNwZWNpZmljYWxseSB0aGUgYHhlYCBkcml2ZXIgYXJlYXMsIGFsb25nIHdpdGggcmVsYXRlZCBoZWFkZXIgYW5kIGRvY3VtZW50YXRpb24gZmlsZXMsIHdoaWNoIGlzIGV4cGVjdGVkIGZvciBzb21ldGhpbmcgbGlrZSB0aGlzLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIHRoZSBhY3R1YWwgbmV0bGluayBtdWx0aWNhc3QgZXZlbnQuICBJdCBtb2RpZmllcyB0aGUgYHhlYCBkcml2ZXIgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHRocm91Z2ggYHhlX2RybV9yYXNfZXZlbnRgIGFuZCBzdWJzZXF1ZW50bHkgdGhyb3VnaCBgcmFzX3NlbmRfZXJyb3JfZXZlbnRgLCBldmVudHVhbGx5IG9yaWdpbmF0aW5nIGZyb20gaGFyZHdhcmUgZXJyb3IgaGFuZGxlcnMgbGlrZSBgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWRgIGFuZCBgeGVfcmFzX3Byb2Nlc3NfZXJyb3JzYC4KCk5vdywgdGhlIG1haW4gcXVlc3Rpb24gaXMgYWx3YXlzOiAqaXMgdGhpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2U/KiBUaGUgZG9jdW1lbnRhdGlvbiBpcyBwcmV0dHkgY2xlYXIgYWJvdXQgYGVycm9yLWV2ZW50YCBiZWluZyAqdG8qIHVzZXJzcGFjZS4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtdWx0aWNhc3QgZ3JvdXAsIGBlcnJvci1yZXBvcnRgLCB0byB3aGljaCB1c2Vyc3BhY2UgY2FuIHN1YnNjcmliZS4gSXQgc2VlbXMgdGhlIGV2ZW50IGl0c2VsZiBpcyB0cmlnZ2VyZWQgYnkgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGJ5IHRoZSBgeGVgIGRyaXZlciB3aGVuIFJBUyBlcnJvcnMgaGFwcGVuLiBBIHF1aWNrIGRvdWJsZS1jaGVjazogaXMgdGhlcmUgYW55IHdheSBmb3IgdXNlcnNwYWNlIHRvIHRyaWdnZXIgYHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkYCBvciBgeGVfcmFzX3Byb2Nlc3NfZXJyb3JzYCBkaXJlY3RseT8gVGhlc2UgYXBwZWFyIHRvIGJlIGhhcmR3YXJlIGVycm9yIGhhbmRsZXJzLCBzbyBpdCBzZWVtcyB1bmxpa2VseS4KCkkgcXVpY2tseSBjaGVjayB0aGUgbmV0bGluayBwYXJ0OiBJdCBtZXJlbHkgZGVmaW5lcyB0aGUgbXVsdGljYXN0IGdyb3VwIGFuZCB0aGUgZXZlbnQgYXR0cmlidXRlcy4gVGhlcmUmIzM5O3Mgbm8gbmV3IGBkb2l0YCBvciBgZHVtcGl0YCBvcGVyYXRpb24gZm9yIHVzZXJzcGFjZSB0byBjYWxsLCBub3RoaW5nIHRoYXQgY291bGQgdHJpZ2dlciBhbiBldmVudCBvdGhlciB0aGFuIHN1YnNjcmliaW5nIHRvIHRoZSBtdWx0aWNhc3QgZ3JvdXAuIExvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24gb2YgYERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UYCBpbiB0aGUgYGluY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oYCwgYWxvbmcgd2l0aCB0aGUgYGRybV9yYXMueWFtbGAgZmlsZSwgaXQgY29uZmlybXMgdGhpcyBpcyBhbiBldmVudCAqc2VudCB0byogdXNlcnNwYWNlLCB3aXRoIGluZm9ybWF0aW9uIGxpa2UgZGV2aWNlIG5hbWUsIG5vZGUgSUQsIGFuZCBlcnJvciBkZXRhaWxzLgoKSSYjMzk7bSB2ZXJpZnlpbmcgYnkgZXhhbWluaW5nIGBkcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jYC4gYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgIGNsZWFybHkgY3JlYXRlcyBhbmQgc2VuZHMgdGhlIG5ldGxpbmsgbm90aWZpY2F0aW9uLiBUaGUgYG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnNgIGlzIHNvbGVseSBhYm91dCBwb3B1bGF0aW5nIHRoZSBldmVudCBkYXRhLiBUaGUgYHhlYCBkcml2ZXIgY2hhbmdlcyBhcmUgb25seSBhYm91dCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2hlbiBoYXJkd2FyZSBlcnJvcnMgYXJlIGVuY291bnRlcmVkLgoKU28sIHNpbmNlIGl0JiMzOTtzIG9ubHkgYW4gb3V0Ym91bmQgbmV0bGluayBub3RpZmljYXRpb24sIGFuZCBubyBuZXcgY29kZSBwYXRocyB0cmlnZ2VyZWQgKmJ5KiB1c2Vyc3BhY2UsIHRoZSByaXNrIG9mIGZ1enppbmcgaXMgbWluaW1hbC4uLiB1bmxlc3MsIG9mIGNvdXJzZSwgdGhlcmUmIzM5O3Mgc29tZSBzb3J0IG9mIGltcGxpY2l0IHZ1bG5lcmFiaWxpdHkgaW4gdGhlIG5ldGxpbmsgaW5mcmFzdHJ1Y3R1cmUgaXRzZWxmLCBvciwgYXMgYSBtb3JlIHJlbW90ZSBwb3NzaWJpbGl0eSwgaWYgdGhlc2UgaGFyZHdhcmUgZXZlbnRzIHRyaWdnZXJlZCBieSBzb21lIG90aGVyIG1lYW5zIGxpa2UgZGVidWdmcyBvciBzeXNmcy4gSSB3b3VsZCBub3cgdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIGluamVjdGlvbiBvciB0cmlnZ2VyaW5nIG9mIHRob3NlIGVycm9yIGV2ZW50cy4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCB0aGlzIGZlZWxzIGxpa2UgaXQgd2lsbCBiZSBhIGxvdyBwcmlvcml0eSBmb3IgZnV6emluZywgdW5sZXNzIGBncmVwcGVyYCByZXZlYWxzIHNvbWUgaGlkZGVuIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0yNzI9c3RhdGljIHU4IGhhbmRsZV9jb3JlX2NvbXB1dGVfZXJyb3JzKHN0cnVjdCB4ZV9yYXNfZXJyb3JfYXJyYXkgKmFycilcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMjg5LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jOjI5MDp2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTI5MS1cdFx0XHRcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmg9MTM9c3RydWN0IHhlX3N5c2N0cmxfZXZlbnRfcmVzcG9uc2U7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmgtMTQtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmg6MTU6dm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaC0xNi1cdFx0XHRcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYz0xNT1zdGF0aWMgdm9pZCBnZXRfcGVuZGluZ19ldmVudChzdHJ1Y3QgeGVfc3lzY3RybCAqc2MsIHN0cnVjdCB4ZV9zeXNjdHJsX21haWxib3hfY29tbWFuZCAqY29tbWFuZClcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jLTM4LVx0XHRpZiAocmVzcG9uc2UtXHUwMDNlZXZlbnQgPT0gWEVfU1lTQ1RSTF9FVkVOVF9USFJFU0hPTERfQ1JPU1NFRClcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmM6Mzk6XHRcdFx0eGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoeGUsIHJlc3BvbnNlKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtNDAtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA1NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBSQVMgRXJyb3IgRmxvdyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHNvIGB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZGAgZ2V0cyB0cmlnZ2VyZWQgZnJvbSBgeGVfc3lzY3RybF9ldmVudC5jYC4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhhcmR3YXJlIGV2ZW50IGhhbmRsaW5nIGxpdmVzLiBUaGF0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgYSBrZXkgcGFydCBvZiB0aGUgcmVhbC10aW1lIHJlc3BvbnNlIHRvIGEgUkFTIGV2ZW50LiBXaGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kIG5vdyBpcyB0aGUgcmVsYXRpb25zaGlwIG9mIHRoYXQgZnVuY3Rpb24gdG8gb3RoZXJzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBmbG93IG9mIHRoaXMgY29kZS4gV2hlcmUgZG9lcyBpdCBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgZXJyb3IgaGFuZGxpbmc/CgpJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IHRoaXMuLi4gaG93IGRvZXMgdGhhdCB0aHJlc2hvbGQgY3Jvc3NpbmcgcmVsYXRlIHRvIHRoZSBvdGhlciBSQVMgZXJyb3IgaGFuZGxpbmcgZnVuY3Rpb25zPyBXaGF0IGhhcHBlbnMgbmV4dD8gV2hlcmUgaXMgYHhlX3Jhc19wcm9jZXNzX2Vycm9yc2AgdXNlZD8gSSYjMzk7bGwgbmVlZCB0byBnbyBmaW5kIHdoZXJlIGB4ZV9yYXNfcHJvY2Vzc19lcnJvcnNgIGlzIGNhbGxlZC4gSXQmIzM5O3MgcHJvYmFibHkgaW52b2tlZCBlaXRoZXIgZnJvbSBoZXJlIGRpcmVjdGx5LCBvciBmcm9tIHNvbWV3aGVyZSBkZWVwZXIgaW4gdGhlIGNhbGwgc3RhY2suIFRoaXMgdGhyZXNob2xkIGNyb3NzZWQgZXZlbnQgaGFzIHRvIGZlZWQgaW50byBzb21lIGtpbmQgb2YgZXJyb3IgcHJvY2Vzc2luZywgcmlnaHQ/IFRoZSBrZXkgbm93IGlzIHRyYWNraW5nIGRvd24gdGhhdCBjb25uZWN0aW9uLCBmaWd1cmluZyBvdXQgaG93IHRoZSBkYXRhIGZsb3dzIGZyb20gb25lIHRvIHRoZSBuZXh0LCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBlcnJvciBoYW5kbGluZyBzdGF0ZSBtYWNoaW5lIGxvb2tzIGxpa2UuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNhbGwgZ3JhcGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hlX3Jhc19wcm9jZXNzX2Vycm9ycyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX2Vycm9yLmM9Nzg9c3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgeGVfcGNpX2Vycm9yX21taW9fZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX2Vycm9yLmMtODMtXHR4ZV9pbmZvKHhlLCBcJiMzNDtQQ0kgZXJyb3I6IE1NSU8gZW5hYmxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX2Vycm9yLmM6ODQ6XHRhY3Rpb24gPSB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoeGUpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9lcnJvci5jLTg1LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0zMzE9c3RhdGljIGludCBnZXRfY291bnRlcihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqY291bnRlciwgdTMyICp2YWx1ZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMzY2LS8qKlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jOjM2NzogKiB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoKSAtIFByb2Nlc3MgYW5kIGNvbnRhaW4gaGFyZHdhcmUgZXJyb3JzXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMzY4LSAqIEB4ZTogeGUgZGV2aWNlIGluc3RhbmNlXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTM3NC0gKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzozNzU6ZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy0zNzYte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz02Nzc9dm9pZCB4ZV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtNjk2LVx0ICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM6Njk3Olx0eGVfcmFzX3Byb2Nlc3NfZXJyb3JzKHhlKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy02OTgtXHRyZXQgPSBkZXZtX2RldmljZV9hZGRfZ3JvdXAoeGUtXHUwMDNlZHJtLmRldiwgXHUwMDI2Z3B1X2hlYWx0aF9ncm91cCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oPTE5PXZvaWQgeGVfcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oOjIwOmVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoc3RydWN0IHhlX2RldmljZSAqeGUpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oLTIxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA5OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTk1CgkJCQkJCQlvdXRwdXQ6IDk2CgkJCQkJCQl0aG91Z2h0czogNTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXM6IE5vIE5ldyBVc2Vyc3BhY2UgQXR0YWNrIFN1cmZhY2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgZm9jdXNlcyBvbiBpZGVudGlmeWluZyBuZXcgYXR0YWNrIHN1cmZhY2VzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCDigJMgc3BlY2lmaWNhbGx5LCBhbnl0aGluZyByZWFjaGFibGUgYnkgdXNlcnNwYWNlIHRoYXQgY291bGQgYmUgZnV6emVkLgoKSSYjMzk7dmUgdHJhY2VkIHRoZSBmbG93LiBgeGVfcmFzX3Byb2Nlc3NfZXJyb3JzYCBpcyB0cmlnZ2VyZWQgaW50ZXJuYWxseSDigJMgYnkgYHhlX3BjaV9lcnJvcl9tbWlvX2VuYWJsZWRgIGFuZCBgeGVfcmFzX2luaXRgLiBOb3RoaW5nIGhlcmUgc2VlbXMgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UgZXhjZXB0LCBwZXJoYXBzLCBkdXJpbmcgaW5pdGlhbGlzYXRpb24gb3IgZXJyb3IgcmVjb3ZlcnkuIFRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGEgbmV0bGluayBub3RpZmljYXRpb24uIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgc3VzcGljaW9uOyBpcyB0aGVyZSBhbnkgbmV3IHBhcnNpbmcgb2YgdXNlcnNwYWNlLXByb3ZpZGVkIGlucHV0PwoKSSBzZWUgdGhhdCBgZHJtX3Jhc2AgbmV0bGluayBmYW1pbHkgaXMgYWxyZWFkeSBlc3RhYmxpc2hlZC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBlcnJvci1ldmVudGAgdG8gYGRybV9yYXMueWFtbGAgYW5kIGBkcm1fcmFzLmNgLiBUaGF04oCZcyBteSBwcmltYXJ5IGNvbmNlcm4uIEhvd2V2ZXIsIHVwb24gaW5zcGVjdGlvbiwgYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgIGlzICpleHBvcnRlZCogYW5kIGNhbGxlZCBmcm9tIHRoZSBkcml2ZXIsIGJ1dCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgYWRkIGFueSBjb2RlIHRvIHBhcnNlIGluY29taW5nIHVzZXJzcGFjZSBpbnB1dC4gVGhlIG5ldyBjb2RlIGlzIGBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzYCwgd2hpY2ggY29uc3RydWN0cyB0aGUgbmV0bGluayBtZXNzYWdlICpzZW50KiB0byB1c2Vyc3BhY2UuCgpUaGUgdXNlcnNwYWNlIGludGVyYWN0aW9uIGlzIHNvbGVseSBzdWJzY3JpYmluZyB0byB0aGUgbXVsdGljYXN0IGdyb3VwLiBUaGF04oCZcyBnZW5lcmljIG5ldGxpbmsgdGVycml0b3J5LiBgZHJtX3Jhc2AgaXMgb25seSBjb25jZXJuZWQgd2l0aCB0aGUgKnNlbmRpbmcqIHNpZGUuIFRodXMsIHRoZXJlIGlzICpubyogbmV3IHVzZXJzcGFjZS1yZWFjaGFibGUgY29kZSBpbnRyb2R1Y2VkLiBUaGlzIGlzIGp1c3QgYSBub3RpZmljYXRpb24gY2hhbm5lbCwga2VybmVsIHRvIHVzZXJzcGFjZS4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSBkb2N1bWVudGF0aW9uIGNoYW5nZXMgZm9yIGBkcm1fcmFzLnlhbWxgLiBBaCwgaXQmIzM5O3MgYWRkaW5nIGBlcnJvci1ldmVudC1hdHRyc2AgYW5kIGFuIGBlcnJvci1ldmVudGAgb3BlcmF0aW9uLCBhbG9uZyB3aXRoIGFuIGBlcnJvci1yZXBvcnRgIG11bHRpY2FzdCBncm91cC4gVGhlIGBldmVudDpgIGRlc2lnbmF0aW9uIGZvciBgZXJyb3ItZXZlbnRgIGNvbmZpcm1zIGl0JiMzOTtzIGEgbm90aWZpY2F0aW9uIOKAkyB0aGVyZSBhcmUgbm8gYGRvOmAgb3IgYGR1bXA6YCBjb21tYW5kcyBoZXJlLgoKTXkgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBhZGQgYW55IG5ldyB1c2Vyc3BhY2UtdHJpZ2dlcmFibGUgY29kZSBwYXRocy4gYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgLCBgeGVfZHJtX3Jhc19ldmVudGAgYW5kIGByYXNfc2VuZF9lcnJvcl9ldmVudGAgYXJlIHNpbXBseSBmb3JtYXR0aW5nIGFuZCB0cmFuc21pdHRpbmcgZXJyb3IgaW5mb3JtYXRpb24uIFRoZXJlIGFyZSBubyBuZXcgaW9jdGxzLCBzeXNmcyBlbnRyaWVzLCBkZWJ1Z2ZzIGZpbGVzLCBvciBuZXRsaW5rIGNvbW1hbmRzIHRoYXQgdXNlcnNwYWNlIGNhbiBpbml0aWF0ZS4KClRoZXJlZm9yZSwgV29ydGhGdXp6aW5nPWZhbHNlLiBJIGFtIGNvbmZpZGVudCBpbiB0aGF0IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV0bGluayBtdWx0aWNhc3Qgbm90aWZpY2F0aW9uIChgZXJyb3ItZXZlbnRgKSBzZW50IGZyb20gdGhlIGtlcm5lbCB0byB1c2Vyc3BhY2Ugd2hlbiBoYXJkd2FyZSBSQVMgZXJyb3JzIG9jY3VyLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB1c2Vyc3BhY2UtdHJpZ2dlcmFibGUgY29kZSBwYXRocyBvciBpbnB1dCBwYXJzaW5nIGxvZ2ljLCBhcyB0aGUgZXZlbnQgZ2VuZXJhdGlvbiBpcyBkcml2ZW4gYnkgaGFyZHdhcmUgZXZlbnRzIGFuZCB0aGUgbXVsdGljYXN0IHN1YnNjcmlwdGlvbiBpcyBoYW5kbGVkIGJ5IGdlbmVyaWMgbmV0bGluayBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldGxpbmsgbXVsdGljYXN0IG5vdGlmaWNhdGlvbiAoYGVycm9yLWV2ZW50YCkgc2VudCBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlcnNwYWNlIHdoZW4gaGFyZHdhcmUgUkFTIGVycm9ycyBvY2N1ci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdXNlcnNwYWNlLXRyaWdnZXJhYmxlIGNvZGUgcGF0aHMgb3IgaW5wdXQgcGFyc2luZyBsb2dpYywgYXMgdGhlIGV2ZW50IGdlbmVyYXRpb24gaXMgZHJpdmVuIGJ5IGhhcmR3YXJlIGV2ZW50cyBhbmQgdGhlIG11bHRpY2FzdCBzdWJzY3JpcHRpb24gaXMgaGFuZGxlZCBieSBnZW5lcmljIG5ldGxpbmsgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTozOToyMy42NjY5MDkyNzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTUzMTExMzg4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldGxpbmsgbXVsdGljYXN0IG5vdGlmaWNhdGlvbiAoYGVycm9yLWV2ZW50YCkgc2VudCBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlcnNwYWNlIHdoZW4gaGFyZHdhcmUgUkFTIGVycm9ycyBvY2N1ci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdXNlcnNwYWNlLXRyaWdnZXJhYmxlIGNvZGUgcGF0aHMgb3IgaW5wdXQgcGFyc2luZyBsb2dpYywgYXMgdGhlIGV2ZW50IGdlbmVyYXRpb24gaXMgZHJpdmVuIGJ5IGhhcmR3YXJlIGV2ZW50cyBhbmQgdGhlIG11bHRpY2FzdCBzdWJzY3JpcHRpb24gaXMgaGFuZGxlZCBieSBnZW5lcmljIG5ldGxpbmsgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA5OjM5OjIzLjY2NjkxNjQ1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY1MTQwNTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTY1YWYyZjk1MjhmYmFlYmYxNGI3NzM1MTVjYjg5OTQwOWI2YjVhOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAwOTozOToyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XFxuaW5kZXggODNjMjE4NTNiNzRiNjAuLjQwNmU0YzQ5YmFjMWZkIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcXG5AQCAtNTYsNiArNTYsNyBAQCBVc2VyIHNwYWNlIHRvb2xzIGNhbjpcXG4gICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuXFxuICogQ2xlYXIgc3BlY2lmaWMgZXJyb3IgY291bnRlcnMgd2l0aCB0aGUgYGBjbGVhci1lcnJvci1jb3VudGVyYGAgY29tbWFuZCwgdXNpbmcgYm90aFxcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cXG4rKiBTdWJzY3JpYmUgdG8gdGhlIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgYGBlcnJvci1ldmVudGBgLlxcbiBcXG4gWUFNTC1iYXNlZCBJbnRlcmZhY2VcXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5AQCAtMTExLDMgKzExMiwyMyBAQCBFeGFtcGxlOiBDbGVhciBhbiBlcnJvciBjb3VudGVyIGZvciBhIGdpdmVuIG5vZGVcXG4gXFxuICAgICBzdWRvIHlubCAtLWZhbWlseSBkcm1fcmFzIC0tZG8gY2xlYXItZXJyb3ItY291bnRlciAtLWpzb24gJ3tcXFwibm9kZS1pZFxcXCI6MCwgXFxcImVycm9yLWlkXFxcIjoxfSdcXG4gICAgIE5vbmVcXG4rXFxuK0V4YW1wbGU6IFN1YnNjcmliZSB0byBgYGVycm9yLXJlcG9ydGBgIG11bHRpY2FzdCBncm91cFxcbitcXG4rLi4gY29kZS1ibG9jazo6IGJhc2hcXG4rXFxuKyAgICBzdWRvIHlubCAtLWZhbWlseSBkcm1fcmFzIC0tb3V0cHV0LWpzb24gLS1zdWJzY3JpYmUgZXJyb3ItcmVwb3J0XFxuK1xcbisuLiBjb2RlLWJsb2NrOjoganNvblxcbitcXG4rICAgIHtcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJlcnJvci1ldmVudFxcXCIsXFxuKyAgICAgICAgXFxcIm1zZ1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcImRldmljZS1uYW1lXFxcIjogXFxcIjAwMDA6MDM6MDAuMFxcXCIsXFxuKyAgICAgICAgICAgIFxcXCJub2RlLWlkXFxcIjogMSxcXG4rICAgICAgICAgICAgXFxcIm5vZGUtbmFtZVxcXCI6IFxcXCJ1bmNvcnJlY3RhYmxlLWVycm9yc1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCJlcnJvci1pZFxcXCI6IDEsXFxuKyAgICAgICAgICAgIFxcXCJlcnJvci1uYW1lXFxcIjogXFxcImVycm9yX25hbWUxXFxcIixcXG4rICAgICAgICAgICAgXFxcImVycm9yLXZhbHVlXFxcIjogMVxcbisgICAgICAgIH1cXG4rICAgIH1cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcXG5pbmRleCBlMTEzMDU2ZjhjMDE2Yy4uOGFlZDNkNDUxNWU1YWYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcXG5AQCAtNjksNiArNjksMzMgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcXG4gICAgICAgICB0eXBlOiB1MzJcXG4gICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBlcnJvciBjb3VudGVyLlxcbisgIC1cXG4rICAgIG5hbWU6IGVycm9yLWV2ZW50LWF0dHJzXFxuKyAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogZGV2aWNlLW5hbWVcXG4rICAgICAgICB0eXBlOiBzdHJpbmdcXG4rICAgICAgICBkb2M6IERldmljZSAoUENJIEJERiwgVVVJRCkgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBub2RlLWlkXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZG9jOiBJRCBvZiB0aGUgbm9kZSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IG5vZGUtbmFtZVxcbisgICAgICAgIHR5cGU6IHN0cmluZ1xcbisgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgbm9kZSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGVycm9yLWlkXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZG9jOiBJRCBvZiB0aGUgZXJyb3IgY291bnRlci5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGVycm9yLW5hbWVcXG4rICAgICAgICB0eXBlOiBzdHJpbmdcXG4rICAgICAgICBkb2M6IE5hbWUgb2YgdGhlIGVycm9yLlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIGVycm9yIGNvdW50ZXIuXFxuIFxcbiBvcGVyYXRpb25zOlxcbiAgIGxpc3Q6XFxuQEAgLTEyNCwzICsxNTEsMjQgQEAgb3BlcmF0aW9uczpcXG4gICAgICAgZG86XFxuICAgICAgICAgcmVxdWVzdDpcXG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xcbisgICAgLVxcbisgICAgICBuYW1lOiBlcnJvci1ldmVudFxcbisgICAgICBkb2M6IFxcdTAwM2UtXFxuKyAgICAgICAgICAgUmVwb3J0IGFuIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZS5cXG4rICAgICAgICAgICBUaGUgZXZlbnQgaW5jbHVkZXMgdGhlIGRldmljZSwgbm9kZSBhbmQgZXJyb3IgaW5mb3JtYXRpb25cXG4rICAgICAgICAgICBvZiB0aGUgZXJyb3IgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LlxcbisgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1ldmVudC1hdHRyc1xcbisgICAgICBtY2dycDogZXJyb3ItcmVwb3J0XFxuKyAgICAgIGV2ZW50OlxcbisgICAgICAgIGF0dHJpYnV0ZXM6XFxuKyAgICAgICAgICAtIGRldmljZS1uYW1lXFxuKyAgICAgICAgICAtIG5vZGUtaWRcXG4rICAgICAgICAgIC0gbm9kZS1uYW1lXFxuKyAgICAgICAgICAtIGVycm9yLWlkXFxuKyAgICAgICAgICAtIGVycm9yLW5hbWVcXG4rICAgICAgICAgIC0gZXJyb3ItdmFsdWVcXG4rXFxuK21jYXN0LWdyb3VwczpcXG4rICBsaXN0OlxcbisgICAgLVxcbisgICAgICBuYW1lOiBlcnJvci1yZXBvcnRcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcXG5pbmRleCBkNmVhYjI5YTEzOTRjYS4uMGI3N2U0MzU4ZWE4ZjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcXG5AQCAtNDEsNiArNDEsMTEgQEBcXG4gICogICAgVXNlcnNwYWNlIG11c3QgcHJvdmlkZSBOb2RlIElELCBFcnJvciBJRC5cXG4gICogICAgQ2xlYXJzIHNwZWNpZmljIGVycm9yIGNvdW50ZXIgb2YgYSBub2RlIGlmIHN1cHBvcnRlZC5cXG4gICpcXG4rICogNC4gRVJST1JfUkVQT1JUOiBTdWJzY3JpYmUgdG8gdGhpcyBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBlcnJvciBldmVudHNcXG4rICpcXG4rICogNS4gRVJST1JfRVZFTlQ6IFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuIFRoZSBldmVudCBjb250YWlucyBkZXZpY2UsIG5vZGVcXG4rICogICAgYW5kIGVycm9yIGluZm9ybWF0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC5cXG4rICpcXG4gICogTm9kZSByZWdpc3RyYXRpb246XFxuICAqXFxuICAqIC0gZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCk6IFJlZ2lzdGVycyBhIG5ldyBub2RlIGFuZCBhc3NpZ25zXFxuQEAgLTE4Niw2ICsxOTEsMzQgQEAgc3RhdGljIGludCBtc2dfcmVwbHlfdmFsdWUoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLFxcbiBcXHRcXHRcXHQgICB2YWx1ZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwgdTMyIHZhbHVlKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19ERVZJQ0VfTkFNRSwgbm9kZS1cXHUwMDNlZGV2aWNlX25hbWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9JRCwgbm9kZS1cXHUwMDNlaWQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9OQU1FLCBub2RlLVxcdTAwM2Vub2RlX25hbWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfSUQsIGVycm9yX2lkKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsIGVycm9yX25hbWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX1ZBTFVFLCB2YWx1ZSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcXG4gXFx0XFx0XFx0ICAgIHUzMiBlcnJvcl9pZClcXG4ge1xcbkBAIC0yMjIsNiArMjU1LDU3IEBAIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcXG4gXFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoKSAtIFJlcG9ydCBhbiBlcnJvciBldmVudFxcbisgKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmVcXG4rICogQGVycm9yX2lkOiBJRCBvZiB0aGUgZXJyb3JcXG4rICogQGVycm9yX25hbWU6IE5hbWUgb2YgdGhlIGVycm9yXFxuKyAqIEB2YWx1ZTogVmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBlcnJvclxcbisgKlxcbisgKiBSZXBvcnQgYW4gZXJyb3ItZXZlbnQgdG8gdXNlcnNwYWNlIHVzaW5nIHRoZSBlcnJvci1yZXBvcnQgbXVsdGljYXN0IGdyb3VwLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cXG4rICovXFxuK2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcXG4rXFx0XFx0XFx0ICAgdTMyIHZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBnZW5sX2luZm8gaW5mbztcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKm1zZztcXG4rXFx0c3RydWN0IG5sYXR0ciAqaGRyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFlcnJvcl9uYW1lKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGdlbmxfaW5mb19pbml0X250ZihcXHUwMDI2aW5mbywgXFx1MDAyNmRybV9yYXNfbmxfZmFtaWx5LCBEUk1fUkFTX0NNRF9FUlJPUl9FVkVOVCk7XFxuK1xcbitcXHRtc2cgPSBnZW5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghbXNnKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGhkciA9IGdlbmxtc2dfaXB1dChtc2csIFxcdTAwMjZpbmZvKTtcXG4rXFx0aWYgKCFoZHIpIHtcXG4rXFx0XFx0cmV0ID0gLUVNU0dTSVpFO1xcbitcXHRcXHRnb3RvIGZyZWVfbXNnO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzKG1zZywgbm9kZSwgZXJyb3JfaWQsIGVycm9yX25hbWUsIHZhbHVlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBjYW5jZWxfbXNnO1xcbitcXG4rXFx0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xcbitcXHRnZW5sbXNnX211bHRpY2FzdF9hbGxucyhcXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIG1zZywgMCwgRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitjYW5jZWxfbXNnOlxcbitcXHRnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7XFxuK2ZyZWVfbXNnOlxcbitcXHRubG1zZ19mcmVlKG1zZyk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChkcm1fcmFzX25sX2Vycm9yX2V2ZW50KTtcXG4rXFxuIC8qKlxcbiAgKiBkcm1fcmFzX25sX2dldF9lcnJvcl9jb3VudGVyX2R1bXBpdCgpIC0gRHVtcCBhbGwgRXJyb3IgQ291bnRlcnNcXG4gICogQHNrYjogTmV0bGluayBtZXNzYWdlIGJ1ZmZlclxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xcbmluZGV4IGRlYTFjMWIyNDk0ZTgxLi45ZDMxMjNjYzlmOWNhYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xcbkBAIC01OCw2ICs1OCwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRybV9yYXNfbmxfb3BzW10gPSB7XFxuIFxcdH0sXFxuIH07XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGRybV9yYXNfbmxfbWNncnBzW10gPSB7XFxuK1xcdFtEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVF0gPSB7IFxcXCJlcnJvci1yZXBvcnRcXFwiLCB9LFxcbit9O1xcbitcXG4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4gXFx0Lm5hbWVcXHRcXHQ9IERSTV9SQVNfRkFNSUxZX05BTUUsXFxuIFxcdC52ZXJzaW9uXFx0PSBEUk1fUkFTX0ZBTUlMWV9WRVJTSU9OLFxcbkBAIC02Niw0ICs3MCw2IEBAIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuIFxcdC5tb2R1bGVcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiBcXHQuc3BsaXRfb3BzXFx0PSBkcm1fcmFzX25sX29wcyxcXG4gXFx0Lm5fc3BsaXRfb3BzXFx0PSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfb3BzKSxcXG4rXFx0Lm1jZ3Jwc1xcdFxcdD0gZHJtX3Jhc19ubF9tY2dycHMsXFxuK1xcdC5uX21jZ3Jwc1xcdD0gQVJSQVlfU0laRShkcm1fcmFzX25sX21jZ3JwcyksXFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmggYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXFxuaW5kZXggYTM5ODY0MzU3MmE1YTAuLjAzZWMyNzVhY2E5MjkyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXFxuQEAgLTIxLDYgKzIxLDEwIEBAIGludCBkcm1fcmFzX25sX2dldF9lcnJvcl9jb3VudGVyX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuIFxcbitlbnVtIHtcXG4rXFx0RFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQsXFxuK307XFxuK1xcbiBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5O1xcbiBcXG4gI2VuZGlmIC8qIF9MSU5VWF9EUk1fUkFTX0dFTl9IICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXFxuaW5kZXggNzkzN2Q4YmEwZWQ5Y2UuLjAyODc1OTRlMTAyNjUwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXFxuQEAgLTE4NSw2ICsxODUsNDggQEAgc3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHhlX2RybV9yYXNfZXZlbnQoKSAtIFJlcG9ydCBkcm1fcmFzIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZVxcbisgKiBAeGU6IHhlIGRldmljZSBzdHJ1Y3R1cmVcXG4rICogQGNvbXBvbmVudDogZXJyb3IgY29tcG9uZW50IChzZWUgXFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9jb21wb25lbnQpXFxuKyAqIEBzZXZlcml0eTogZXJyb3Igc2V2ZXJpdHkgKHNlZSBcXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX3NldmVyaXR5KVxcbisgKiBAdmFsdWU6IHZhbHVlIG9mIGVycm9yIGNvdW50ZXJcXG4rICpcXG4rICogUmVwb3J0IGFuIGVycm9yLWV2ZW50IHRvIHVzZXJzcGFjZS5cXG4rICovXFxuK3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggY29tcG9uZW50LCB1OCBzZXZlcml0eSwgdTMyIHZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCB4ZV9kcm1fcmFzICpyYXMgPSBcXHUwMDI2eGUtXFx1MDAzZXJhcztcXG4rXFx0c3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqaW5mbztcXG4rXFx0c3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qIEV2ZW50IGlzIHN1cHBvcnRlZCBvbmx5IGlmIGRybV9yYXMgaXMgZW5hYmxlZCAqL1xcbitcXHRpZiAoIXhlLVxcdTAwM2VpbmZvLmhhc19kcm1fcmFzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoY29tcG9uZW50IFxcdTAwM2U9IERSTV9YRV9SQVNfRVJSX0NPTVBfTUFYKSB7XFxuK1xcdFxcdGRybV93YXJuKFxcdTAwMjZ4ZS1cXHUwMDNlZHJtLCBcXFwidW5zdXBwb3J0ZWQgY29tcG9uZW50ICV1XFxcXG5cXFwiLCBjb21wb25lbnQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzZXZlcml0eSBcXHUwMDNlPSBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYKSB7XFxuK1xcdFxcdGRybV93YXJuKFxcdTAwMjZ4ZS1cXHUwMDNlZHJtLCBcXFwidW5zdXBwb3J0ZWQgc2V2ZXJpdHkgJXVcXFxcblxcXCIsIHNldmVyaXR5KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRub2RlID0gXFx1MDAyNnJhcy1cXHUwMDNlbm9kZVtzZXZlcml0eV07XFxuK1xcdGluZm8gPSByYXMtXFx1MDAzZWluZm9bc2V2ZXJpdHldO1xcbitcXG4rXFx0aWYgKCFpbmZvIHx8ICFpbmZvW2NvbXBvbmVudF0ubmFtZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cmV0ID0gZHJtX3Jhc19ubF9lcnJvcl9ldmVudChub2RlLCBjb21wb25lbnQsIGluZm9bY29tcG9uZW50XS5uYW1lLCB2YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGRybV9lcnJfcmF0ZWxpbWl0ZWQoXFx1MDAyNnhlLVxcdTAwM2Vkcm0sIFxcXCJkcm1fcmFzIGVycm9yLWV2ZW50IGZhaWxlZDogJWQgZm9yICVzICVzXFxcXG5cXFwiLCByZXQsXFxuK1xcdFxcdFxcdFxcdCAgICBpbmZvW2NvbXBvbmVudF0ubmFtZSwgZXJyb3Jfc2V2ZXJpdHlbc2V2ZXJpdHldKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHhlX2RybV9yYXNfaW5pdCgpIC0gSW5pdGlhbGl6ZSBEUk0gUkFTXFxuICAqIEB4ZTogeGUgZGV2aWNlIGluc3RhbmNlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXFxuaW5kZXggMzY1YzcwZTkzZTgyZmQuLmFkZDk2YmYxYTdhYmQ2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmhcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXFxuQEAgLTUsMTEgKzUsMTQgQEBcXG4gI2lmbmRlZiBfWEVfRFJNX1JBU19IX1xcbiAjZGVmaW5lIF9YRV9EUk1fUkFTX0hfXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuIHN0cnVjdCB4ZV9kZXZpY2U7XFxuIFxcbiAjZGVmaW5lIGZvcl9lYWNoX2Vycm9yX3NldmVyaXR5KGkpXFx0XFxcXFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgRFJNX1hFX1JBU19FUlJfU0VWX01BWDsgaSsrKVxcbiBcXG4gaW50IHhlX2RybV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSk7XFxuK3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggY29tcG9uZW50LCB1OCBzZXZlcml0eSwgdTMyIHZhbHVlKTtcXG4gXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcXG5pbmRleCBlZDYwOTkxMmZkYTE0MC4uNDYyY2JiNTQ4ZjA3YmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXFxuQEAgLTg5LDYgKzg5LDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBncHVfaGVhbHRoX3N0YXRlc1tdID0ge1xcbiB9O1xcbiBzdGF0aWNfYXNzZXJ0KEFSUkFZX1NJWkUoZ3B1X2hlYWx0aF9zdGF0ZXMpID09IFhFX1JBU19IRUFMVEhfTUFYKTtcXG4gXFxuK3N0YXRpYyBpbnQgZ2V0X2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmNvdW50ZXIsIHUzMiAqdmFsdWUpO1xcbitcXG4gc3RhdGljIHU4IGRybV90b194ZV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpXFxuIHtcXG4gXFx0c3dpdGNoIChzZXZlcml0eSkge1xcbkBAIC0xMDEsNiArMTAzLDE4IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxcbit7XFxuK1xcdHN3aXRjaCAoc2V2ZXJpdHkpIHtcXG4rXFx0Y2FzZSBYRV9SQVNfU0VWX0NPUlJFQ1RBQkxFOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFO1xcbitcXHRjYXNlIFhFX1JBU19TRVZfVU5DT1JSRUNUQUJMRTpcXG4rXFx0XFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9VTkNPUlJFQ1RBQkxFO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX01BWDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KVxcbiB7XFxuIFxcdHN3aXRjaCAoY29tcG9uZW50KSB7XFxuQEAgLTExOSw2ICsxMzMsMjQgQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudClcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdTggeGVfdG9fZHJtX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KVxcbit7XFxuK1xcdHN3aXRjaCAoY29tcG9uZW50KSB7XFxuK1xcdGNhc2UgWEVfUkFTX0NPTVBfREVWSUNFX01FTU9SWTpcXG4rXFx0XFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfREVWSUNFX01FTU9SWTtcXG4rXFx0Y2FzZSBYRV9SQVNfQ09NUF9DT1JFX0NPTVBVVEU6XFxuK1xcdFxcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX0NPUkVfQ09NUFVURTtcXG4rXFx0Y2FzZSBYRV9SQVNfQ09NUF9QQ0lFOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9QQ0lFO1xcbitcXHRjYXNlIFhFX1JBU19DT01QX0ZBQlJJQzpcXG4rXFx0XFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfRkFCUklDO1xcbitcXHRjYXNlIFhFX1JBU19DT01QX1NPQ19JTlRFUk5BTDpcXG4rXFx0XFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfU09DX0lOVEVSTkFMO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9NQVg7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCByYXNfc3RhdHVzX3RvX2Vycm5vKHUzMiBzdGF0dXMpXFxuIHtcXG4gXFx0c3dpdGNoIChzdGF0dXMpIHtcXG5AQCAtMjE3LDYgKzI0OSwyNiBAQCBzdGF0aWMgdm9pZCByYXNfdXNwX2Flcl9pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxcbiBcXHRkZXZfZGJnKFxcdTAwMjZ1c3AtXFx1MDAzZWRldiwgXFxcIlVuY29ycmVjdGFibGUgSW50ZXJuYWwgRXJyb3JzIGRvd25ncmFkZWQgYW5kIHVubWFza2VkXFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpXFxuK3tcXG4rXFx0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyBjb3VudGVyID0gezB9O1xcbitcXHR1OCBkcm1fc2V2ZXJpdHksIGRybV9jb21wb25lbnQ7XFxuK1xcdHUzMiB2YWx1ZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGNvdW50ZXIuY29tbW9uLnNldmVyaXR5ID0gc2V2ZXJpdHk7XFxuK1xcdGNvdW50ZXIuY29tbW9uLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcXG4rXFxuK1xcdHJldCA9IGdldF9jb3VudGVyKHhlLCBcXHUwMDI2Y291bnRlciwgXFx1MDAyNnZhbHVlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZHJtX3NldmVyaXR5ID0geGVfdG9fZHJtX3Jhc19zZXZlcml0eShzZXZlcml0eSk7XFxuK1xcdGRybV9jb21wb25lbnQgPSB4ZV90b19kcm1fcmFzX2NvbXBvbmVudChjb21wb25lbnQpO1xcbitcXG4rXFx0eGVfZHJtX3Jhc19ldmVudCh4ZSwgZHJtX2NvbXBvbmVudCwgZHJtX3NldmVyaXR5LCB2YWx1ZSk7XFxuK31cXG4rXFxuIHN0YXRpYyB1OCBoYW5kbGVfY29yZV9jb21wdXRlX2Vycm9ycyhzdHJ1Y3QgeGVfcmFzX2Vycm9yX2FycmF5ICphcnIpXFxuIHtcXG4gXFx0c3RydWN0IHhlX3Jhc19jb21wdXRlX2Vycm9yICplcnJvcl9pbmZvID0gKHZvaWQgKilhcnItXFx1MDAzZWRldGFpbHM7XFxuQEAgLTI0MSw4ICsyOTMsMTAgQEAgdm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcXG4gXFx0c3RydWN0IHhlX3Jhc190aHJlc2hvbGRfY3Jvc3NlZCAqcGVuZGluZyA9ICh2b2lkICopXFx1MDAyNnJlc3BvbnNlLVxcdTAwM2VkYXRhO1xcbiBcXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICplcnJvcnMgPSBwZW5kaW5nLVxcdTAwM2Vjb3VudGVycztcXG4gXFx0dTMyIGlkLCBuY291bnRlcnMgPSBwZW5kaW5nLVxcdTAwM2VuY291bnRlcnM7XFxuK1xcdHU4IHNlbnQgPSAwO1xcbiBcXG4gXFx0QlVJTERfQlVHX09OKHNpemVvZihyZXNwb25zZS1cXHUwMDNlZGF0YSkgXFx1MDAzYyBzaXplb2YoKnBlbmRpbmcpKTtcXG4rXFx0QlVJTERfQlVHX09OKEJJVFNfUEVSX1RZUEUoc2VudCkgXFx1MDAzYyBYRV9SQVNfQ09NUF9NQVgpO1xcbiBcXHR4ZV9kZXZpY2VfYXNzZXJ0X21lbV9hY2Nlc3MoeGUpO1xcbiBcXG4gXFx0aWYgKCFuY291bnRlcnMgfHwgbmNvdW50ZXJzIFxcdTAwM2UgWEVfUkFTX05VTV9DT1VOVEVSUylcXG5AQCAtMjU2LDggKzMxMCwyMSBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxcbiBcXHRcXHRzZXZlcml0eSA9IGVycm9yc1tpZF0uY29tbW9uLnNldmVyaXR5O1xcbiBcXHRcXHRjb21wb25lbnQgPSBlcnJvcnNbaWRdLmNvbW1vbi5jb21wb25lbnQ7XFxuIFxcbitcXHRcXHRpZiAoc2V2ZXJpdHkgIT0gWEVfUkFTX1NFVl9DT1JSRUNUQUJMRSkge1xcbitcXHRcXHRcXHR4ZV93YXJuKHhlLCBcXFwic3lzY3RybDogdW5leHBlY3RlZCBzZXZlcml0eSAlcyAoJXUpXFxcXG5cXFwiLCBzZXZfdG9fc3RyKHNldmVyaXR5KSxcXG4rXFx0XFx0XFx0XFx0c2V2ZXJpdHkpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0eGVfd2Fybih4ZSwgXFxcIltSQVNdOiAlcyAlcyBkZXRlY3RlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0Y29tcF90b19zdHIoY29tcG9uZW50KSwgc2V2X3RvX3N0cihzZXZlcml0eSkpO1xcbitcXG4rXFx0XFx0LyogU2VuZCBldmVudCBvbmNlIHBlciBjb21wb25lbnQgKi9cXG4rXFx0XFx0aWYgKHNlbnQgXFx1MDAyNiBCSVQoY29tcG9uZW50KSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHNlbnQgfD0gQklUKGNvbXBvbmVudCk7XFxuK1xcbitcXHRcXHRyYXNfc2VuZF9lcnJvcl9ldmVudCh4ZSwgc2V2ZXJpdHksIGNvbXBvbmVudCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMzExLDYgKzM3OCw3IEBAIGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuIFxcdGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiBmaW5hbF9hY3Rpb247XFxuIFxcdHUzMiByZW1haW5pbmcgPSBYRV9TWVNDVFJMX0ZMT09EX0xJTUlUO1xcbiBcXHRzdHJ1Y3QgeGVfcmFzX2dldF9zb2NfZXJyb3IgcmVzcG9uc2U7XFxuK1xcdHU4IHNlbnQgPSAwO1xcbiBcXHRzaXplX3QgcmxlbjtcXG4gXFx0aW50IHJldDtcXG4gXFxuQEAgLTM1NCw2ICs0MjIsMTIgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4gXFx0XFx0XFx0eGVfaW5mbyh4ZSwgXFxcIltSQVNdOiAlcyAlcyBkZXRlY3RlZFxcXFxuXFxcIiwgY29tcF90b19zdHIoY29tcG9uZW50KSxcXG4gXFx0XFx0XFx0XFx0c2V2X3RvX3N0cihzZXZlcml0eSkpO1xcbiBcXG4rXFx0XFx0XFx0LyogU2VuZCBldmVudCBvbmNlIHBlciBjb21wb25lbnQgKi9cXG4rXFx0XFx0XFx0aWYgKCEoc2VudCBcXHUwMDI2IEJJVChjb21wb25lbnQpKSkge1xcbitcXHRcXHRcXHRcXHRzZW50IHw9IEJJVChjb21wb25lbnQpO1xcbitcXHRcXHRcXHRcXHRyYXNfc2VuZF9lcnJvcl9ldmVudCh4ZSwgc2V2ZXJpdHksIGNvbXBvbmVudCk7XFxuK1xcdFxcdFxcdH1cXG4rXFxuIFxcdFxcdFxcdHN3aXRjaCAoY29tcG9uZW50KSB7XFxuIFxcdFxcdFxcdGNhc2UgWEVfUkFTX0NPTVBfQ09SRV9DT01QVVRFOlxcbiBcXHRcXHRcXHRcXHRhY3Rpb24gPSBoYW5kbGVfY29yZV9jb21wdXRlX2Vycm9ycyhhcnIpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcXG5pbmRleCAwYmVlZGUzZGRjNGU0Yi4uZWUyY2FhMGVkYzZmOTIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXFxuKysrIGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXFxuQEAgLTgwLDkgKzgwLDE0IEBAIHN0cnVjdCBkcm1fZGV2aWNlO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX1JBUylcXG4gaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTtcXG4gdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTtcXG4raW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxcbitcXHRcXHRcXHQgICB1MzIgdmFsdWUpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGludCBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyByZXR1cm4gMDsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyB9XFxuK3N0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLFxcbitcXHRcXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwgdTMyIHZhbHVlKVxcbit7IHJldHVybiAwOyB9XFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcXG5pbmRleCAyMThhM2VlODY4MDUyNy4uZWFiODIzMWFhODdjYmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxcbkBAIC0zOCwxMyArMzgsMjggQEAgZW51bSB7XFxuIFxcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCAtIDEpXFxuIH07XFxuIFxcbitlbnVtIHtcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FID0gMSxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSxcXG4rXFxuK1xcdF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVggLSAxKVxcbit9O1xcbitcXG4gZW51bSB7XFxuIFxcdERSTV9SQVNfQ01EX0xJU1RfTk9ERVMgPSAxLFxcbiBcXHREUk1fUkFTX0NNRF9HRVRfRVJST1JfQ09VTlRFUixcXG4gXFx0RFJNX1JBU19DTURfQ0xFQVJfRVJST1JfQ09VTlRFUixcXG4rXFx0RFJNX1JBU19DTURfRVJST1JfRVZFTlQsXFxuIFxcbiBcXHRfX0RSTV9SQVNfQ01EX01BWCxcXG4gXFx0RFJNX1JBU19DTURfTUFYID0gKF9fRFJNX1JBU19DTURfTUFYIC0gMSlcXG4gfTtcXG4gXFxuKyNkZWZpbmUgRFJNX1JBU19NQ0dSUF9FUlJPUl9SRVBPUlRcXHRcXFwiZXJyb3ItcmVwb3J0XFxcIlxcbitcXG4gI2VuZGlmIC8qIF9VQVBJX0xJTlVYX0RSTV9SQVNfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTozOToyNC41MzI5OTgyMDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjY1MDE5ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV0bGluayBtdWx0aWNhc3Qgbm90aWZpY2F0aW9uIChgZXJyb3ItZXZlbnRgKSBzZW50IGZyb20gdGhlIGtlcm5lbCB0byB1c2Vyc3BhY2Ugd2hlbiBoYXJkd2FyZSBSQVMgZXJyb3JzIG9jY3VyLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB1c2Vyc3BhY2UtdHJpZ2dlcmFibGUgY29kZSBwYXRocyBvciBpbnB1dCBwYXJzaW5nIGxvZ2ljLCBhcyB0aGUgZXZlbnQgZ2VuZXJhdGlvbiBpcyBkcml2ZW4gYnkgaGFyZHdhcmUgZXZlbnRzIGFuZCB0aGUgbXVsdGljYXN0IHN1YnNjcmlwdGlvbiBpcyBoYW5kbGVkIGJ5IGdlbmVyaWMgbmV0bGluayBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NjVhZjJmOTUyOGZiYWViZjE0Yjc3MzUxNWNiODk5NDA5YjZiNWE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMDk6Mzk6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0XG5pbmRleCA4M2MyMTg1M2I3NGI2MC4uNDA2ZTRjNDliYWMxZmQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbkBAIC01Niw2ICs1Niw3IEBAIFVzZXIgc3BhY2UgdG9vbHMgY2FuOlxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxuICogQ2xlYXIgc3BlY2lmaWMgZXJyb3IgY291bnRlcnMgd2l0aCB0aGUgYGBjbGVhci1lcnJvci1jb3VudGVyYGAgY29tbWFuZCwgdXNpbmcgYm90aFxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxuKyogU3Vic2NyaWJlIHRvIHRoZSBgYGVycm9yLXJlcG9ydGBgIG11bHRpY2FzdCBncm91cCB0byByZWNlaXZlIGBgZXJyb3ItZXZlbnRgYC5cbiBcbiBZQU1MLWJhc2VkIEludGVyZmFjZVxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtMTExLDMgKzExMiwyMyBAQCBFeGFtcGxlOiBDbGVhciBhbiBlcnJvciBjb3VudGVyIGZvciBhIGdpdmVuIG5vZGVcbiBcbiAgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIGNsZWFyLWVycm9yLWNvdW50ZXIgLS1qc29uICd7XCJub2RlLWlkXCI6MCwgXCJlcnJvci1pZFwiOjF9J1xuICAgICBOb25lXG4rXG4rRXhhbXBsZTogU3Vic2NyaWJlIHRvIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwXG4rXG4rLi4gY29kZS1ibG9jazo6IGJhc2hcbitcbisgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLW91dHB1dC1qc29uIC0tc3Vic2NyaWJlIGVycm9yLXJlcG9ydFxuK1xuKy4uIGNvZGUtYmxvY2s6OiBqc29uXG4rXG4rICAgIHtcbisgICAgICAgIFwibmFtZVwiOiBcImVycm9yLWV2ZW50XCIsXG4rICAgICAgICBcIm1zZ1wiOiB7XG4rICAgICAgICAgICAgXCJkZXZpY2UtbmFtZVwiOiBcIjAwMDA6MDM6MDAuMFwiLFxuKyAgICAgICAgICAgIFwibm9kZS1pZFwiOiAxLFxuKyAgICAgICAgICAgIFwibm9kZS1uYW1lXCI6IFwidW5jb3JyZWN0YWJsZS1lcnJvcnNcIixcbisgICAgICAgICAgICBcImVycm9yLWlkXCI6IDEsXG4rICAgICAgICAgICAgXCJlcnJvci1uYW1lXCI6IFwiZXJyb3JfbmFtZTFcIixcbisgICAgICAgICAgICBcImVycm9yLXZhbHVlXCI6IDFcbisgICAgICAgIH1cbisgICAgfVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sXG5pbmRleCBlMTEzMDU2ZjhjMDE2Yy4uOGFlZDNkNDUxNWU1YWYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sXG5AQCAtNjksNiArNjksMzMgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICBuYW1lOiBlcnJvci12YWx1ZVxuICAgICAgICAgdHlwZTogdTMyXG4gICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBlcnJvciBjb3VudGVyLlxuKyAgLVxuKyAgICBuYW1lOiBlcnJvci1ldmVudC1hdHRyc1xuKyAgICBhdHRyaWJ1dGVzOlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGRldmljZS1uYW1lXG4rICAgICAgICB0eXBlOiBzdHJpbmdcbisgICAgICAgIGRvYzogRGV2aWNlIChQQ0kgQkRGLCBVVUlEKSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBub2RlLWlkXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGRvYzogSUQgb2YgdGhlIG5vZGUgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogbm9kZS1uYW1lXG4rICAgICAgICB0eXBlOiBzdHJpbmdcbisgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgbm9kZSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBlcnJvci1pZFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgICBkb2M6IElEIG9mIHRoZSBlcnJvciBjb3VudGVyLlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGVycm9yLW5hbWVcbisgICAgICAgIHR5cGU6IHN0cmluZ1xuKyAgICAgICAgZG9jOiBOYW1lIG9mIHRoZSBlcnJvci5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBlcnJvci12YWx1ZVxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIGVycm9yIGNvdW50ZXIuXG4gXG4gb3BlcmF0aW9uczpcbiAgIGxpc3Q6XG5AQCAtMTI0LDMgKzE1MSwyNCBAQCBvcGVyYXRpb25zOlxuICAgICAgIGRvOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlkLWF0dHJzXG4rICAgIC1cbisgICAgICBuYW1lOiBlcnJvci1ldmVudFxuKyAgICAgIGRvYzogXHUwMDNlLVxuKyAgICAgICAgICAgUmVwb3J0IGFuIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZS5cbisgICAgICAgICAgIFRoZSBldmVudCBpbmNsdWRlcyB0aGUgZGV2aWNlLCBub2RlIGFuZCBlcnJvciBpbmZvcm1hdGlvblxuKyAgICAgICAgICAgb2YgdGhlIGVycm9yIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC5cbisgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1ldmVudC1hdHRyc1xuKyAgICAgIG1jZ3JwOiBlcnJvci1yZXBvcnRcbisgICAgICBldmVudDpcbisgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgIC0gZGV2aWNlLW5hbWVcbisgICAgICAgICAgLSBub2RlLWlkXG4rICAgICAgICAgIC0gbm9kZS1uYW1lXG4rICAgICAgICAgIC0gZXJyb3ItaWRcbisgICAgICAgICAgLSBlcnJvci1uYW1lXG4rICAgICAgICAgIC0gZXJyb3ItdmFsdWVcbitcbittY2FzdC1ncm91cHM6XG4rICBsaXN0OlxuKyAgICAtXG4rICAgICAgbmFtZTogZXJyb3ItcmVwb3J0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcbmluZGV4IGQ2ZWFiMjlhMTM5NGNhLi4wYjc3ZTQzNThlYThmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcbkBAIC00MSw2ICs0MSwxMSBAQFxuICAqICAgIFVzZXJzcGFjZSBtdXN0IHByb3ZpZGUgTm9kZSBJRCwgRXJyb3IgSUQuXG4gICogICAgQ2xlYXJzIHNwZWNpZmljIGVycm9yIGNvdW50ZXIgb2YgYSBub2RlIGlmIHN1cHBvcnRlZC5cbiAgKlxuKyAqIDQuIEVSUk9SX1JFUE9SVDogU3Vic2NyaWJlIHRvIHRoaXMgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgZXJyb3IgZXZlbnRzXG4rICpcbisgKiA1LiBFUlJPUl9FVkVOVDogUmVwb3J0IGFuIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZS4gVGhlIGV2ZW50IGNvbnRhaW5zIGRldmljZSwgbm9kZVxuKyAqICAgIGFuZCBlcnJvciBpbmZvcm1hdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuXG4rICpcbiAgKiBOb2RlIHJlZ2lzdHJhdGlvbjpcbiAgKlxuICAqIC0gZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCk6IFJlZ2lzdGVycyBhIG5ldyBub2RlIGFuZCBhc3NpZ25zXG5AQCAtMTg2LDYgKzE5MSwzNCBAQCBzdGF0aWMgaW50IG1zZ19yZXBseV92YWx1ZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgZXJyb3JfaWQsXG4gXHRcdFx0ICAgdmFsdWUpO1xuIH1cbiBcbitzdGF0aWMgaW50IG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSxcbitcdFx0XHRcdCAgICAgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FLCBub2RlLVx1MDAzZWRldmljZV9uYW1lKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX0lELCBub2RlLVx1MDAzZWlkKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsIG5vZGUtXHUwMDNlbm9kZV9uYW1lKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCwgZXJyb3JfaWQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsIGVycm9yX25hbWUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSwgdmFsdWUpO1xuK31cbitcbiBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXG4gXHRcdFx0ICAgIHUzMiBlcnJvcl9pZClcbiB7XG5AQCAtMjIyLDYgKzI1NSw1NyBAQCBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXG4gXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xuIH1cbiBcbisvKipcbisgKiBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KCkgLSBSZXBvcnQgYW4gZXJyb3IgZXZlbnRcbisgKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmVcbisgKiBAZXJyb3JfaWQ6IElEIG9mIHRoZSBlcnJvclxuKyAqIEBlcnJvcl9uYW1lOiBOYW1lIG9mIHRoZSBlcnJvclxuKyAqIEB2YWx1ZTogVmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBlcnJvclxuKyAqXG4rICogUmVwb3J0IGFuIGVycm9yLWV2ZW50IHRvIHVzZXJzcGFjZSB1c2luZyB0aGUgZXJyb3ItcmVwb3J0IG11bHRpY2FzdCBncm91cC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcbitcdFx0XHQgICB1MzIgdmFsdWUpXG4re1xuK1x0c3RydWN0IGdlbmxfaW5mbyBpbmZvO1xuK1x0c3RydWN0IHNrX2J1ZmYgKm1zZztcbitcdHN0cnVjdCBubGF0dHIgKmhkcjtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWVycm9yX25hbWUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Z2VubF9pbmZvX2luaXRfbnRmKFx1MDAyNmluZm8sIFx1MDAyNmRybV9yYXNfbmxfZmFtaWx5LCBEUk1fUkFTX0NNRF9FUlJPUl9FVkVOVCk7XG4rXG4rXHRtc2cgPSBnZW5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIW1zZylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRoZHIgPSBnZW5sbXNnX2lwdXQobXNnLCBcdTAwMjZpbmZvKTtcbitcdGlmICghaGRyKSB7XG4rXHRcdHJldCA9IC1FTVNHU0laRTtcbitcdFx0Z290byBmcmVlX21zZztcbitcdH1cbitcbitcdHJldCA9IG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnMobXNnLCBub2RlLCBlcnJvcl9pZCwgZXJyb3JfbmFtZSwgdmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBjYW5jZWxfbXNnO1xuK1xuK1x0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xuK1x0Z2VubG1zZ19tdWx0aWNhc3RfYWxsbnMoXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIG1zZywgMCwgRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQpO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rY2FuY2VsX21zZzpcbitcdGdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTtcbitmcmVlX21zZzpcbitcdG5sbXNnX2ZyZWUobXNnKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0woZHJtX3Jhc19ubF9lcnJvcl9ldmVudCk7XG4rXG4gLyoqXG4gICogZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoKSAtIER1bXAgYWxsIEVycm9yIENvdW50ZXJzXG4gICogQHNrYjogTmV0bGluayBtZXNzYWdlIGJ1ZmZlclxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG5pbmRleCBkZWExYzFiMjQ5NGU4MS4uOWQzMTIzY2M5ZjljYWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG5AQCAtNTgsNiArNTgsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0ge1xuIFx0fSxcbiB9O1xuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgZHJtX3Jhc19ubF9tY2dycHNbXSA9IHtcbitcdFtEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVF0gPSB7IFwiZXJyb3ItcmVwb3J0XCIsIH0sXG4rfTtcbitcbiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuIFx0Lm5hbWVcdFx0PSBEUk1fUkFTX0ZBTUlMWV9OQU1FLFxuIFx0LnZlcnNpb25cdD0gRFJNX1JBU19GQU1JTFlfVkVSU0lPTixcbkBAIC02Niw0ICs3MCw2IEBAIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXHQubW9kdWxlXHRcdD0gVEhJU19NT0RVTEUsXG4gXHQuc3BsaXRfb3BzXHQ9IGRybV9yYXNfbmxfb3BzLFxuIFx0Lm5fc3BsaXRfb3BzXHQ9IEFSUkFZX1NJWkUoZHJtX3Jhc19ubF9vcHMpLFxuK1x0Lm1jZ3Jwc1x0XHQ9IGRybV9yYXNfbmxfbWNncnBzLFxuK1x0Lm5fbWNncnBzXHQ9IEFSUkFZX1NJWkUoZHJtX3Jhc19ubF9tY2dycHMpLFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbmluZGV4IGEzOTg2NDM1NzJhNWEwLi4wM2VjMjc1YWNhOTI5MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbkBAIC0yMSw2ICsyMSwxMCBAQCBpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0c3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gXG4rZW51bSB7XG4rXHREUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVCxcbit9O1xuK1xuIGV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHk7XG4gXG4gI2VuZGlmIC8qIF9MSU5VWF9EUk1fUkFTX0dFTl9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbmluZGV4IDc5MzdkOGJhMGVkOWNlLi4wMjg3NTk0ZTEwMjY1MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcbkBAIC0xODUsNiArMTg1LDQ4IEBAIHN0YXRpYyBpbnQgcmVnaXN0ZXJfbm9kZXMoc3RydWN0IHhlX2RldmljZSAqeGUpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiB4ZV9kcm1fcmFzX2V2ZW50KCkgLSBSZXBvcnQgZHJtX3JhcyBlcnJvciBldmVudCB0byB1c2Vyc3BhY2VcbisgKiBAeGU6IHhlIGRldmljZSBzdHJ1Y3R1cmVcbisgKiBAY29tcG9uZW50OiBlcnJvciBjb21wb25lbnQgKHNlZSBcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3JfY29tcG9uZW50KVxuKyAqIEBzZXZlcml0eTogZXJyb3Igc2V2ZXJpdHkgKHNlZSBcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3Jfc2V2ZXJpdHkpXG4rICogQHZhbHVlOiB2YWx1ZSBvZiBlcnJvciBjb3VudGVyXG4rICpcbisgKiBSZXBvcnQgYW4gZXJyb3ItZXZlbnQgdG8gdXNlcnNwYWNlLlxuKyAqL1xuK3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggY29tcG9uZW50LCB1OCBzZXZlcml0eSwgdTMyIHZhbHVlKVxuK3tcbitcdHN0cnVjdCB4ZV9kcm1fcmFzICpyYXMgPSBcdTAwMjZ4ZS1cdTAwM2VyYXM7XG4rXHRzdHJ1Y3QgeGVfZHJtX3Jhc19jb3VudGVyICppbmZvO1xuK1x0c3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZTtcbitcdGludCByZXQ7XG4rXG4rXHQvKiBFdmVudCBpcyBzdXBwb3J0ZWQgb25seSBpZiBkcm1fcmFzIGlzIGVuYWJsZWQgKi9cbitcdGlmICgheGUtXHUwMDNlaW5mby5oYXNfZHJtX3JhcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKGNvbXBvbmVudCBcdTAwM2U9IERSTV9YRV9SQVNfRVJSX0NPTVBfTUFYKSB7XG4rXHRcdGRybV93YXJuKFx1MDAyNnhlLVx1MDAzZWRybSwgXCJ1bnN1cHBvcnRlZCBjb21wb25lbnQgJXVcXG5cIiwgY29tcG9uZW50KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHNldmVyaXR5IFx1MDAzZT0gRFJNX1hFX1JBU19FUlJfU0VWX01BWCkge1xuK1x0XHRkcm1fd2FybihcdTAwMjZ4ZS1cdTAwM2Vkcm0sIFwidW5zdXBwb3J0ZWQgc2V2ZXJpdHkgJXVcXG5cIiwgc2V2ZXJpdHkpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRub2RlID0gXHUwMDI2cmFzLVx1MDAzZW5vZGVbc2V2ZXJpdHldO1xuK1x0aW5mbyA9IHJhcy1cdTAwM2VpbmZvW3NldmVyaXR5XTtcbitcbitcdGlmICghaW5mbyB8fCAhaW5mb1tjb21wb25lbnRdLm5hbWUpXG4rXHRcdHJldHVybjtcbitcbitcdHJldCA9IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQobm9kZSwgY29tcG9uZW50LCBpbmZvW2NvbXBvbmVudF0ubmFtZSwgdmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0ZHJtX2Vycl9yYXRlbGltaXRlZChcdTAwMjZ4ZS1cdTAwM2Vkcm0sIFwiZHJtX3JhcyBlcnJvci1ldmVudCBmYWlsZWQ6ICVkIGZvciAlcyAlc1xcblwiLCByZXQsXG4rXHRcdFx0XHQgICAgaW5mb1tjb21wb25lbnRdLm5hbWUsIGVycm9yX3NldmVyaXR5W3NldmVyaXR5XSk7XG4rfVxuK1xuIC8qKlxuICAqIHhlX2RybV9yYXNfaW5pdCgpIC0gSW5pdGlhbGl6ZSBEUk0gUkFTXG4gICogQHhlOiB4ZSBkZXZpY2UgaW5zdGFuY2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxuaW5kZXggMzY1YzcwZTkzZTgyZmQuLmFkZDk2YmYxYTdhYmQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxuQEAgLTUsMTEgKzUsMTQgQEBcbiAjaWZuZGVmIF9YRV9EUk1fUkFTX0hfXG4gI2RlZmluZSBfWEVfRFJNX1JBU19IX1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbiBzdHJ1Y3QgeGVfZGV2aWNlO1xuIFxuICNkZWZpbmUgZm9yX2VhY2hfZXJyb3Jfc2V2ZXJpdHkoaSlcdFxcXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYOyBpKyspXG4gXG4gaW50IHhlX2RybV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSk7XG4rdm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBjb21wb25lbnQsIHU4IHNldmVyaXR5LCB1MzIgdmFsdWUpO1xuIFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xuaW5kZXggZWQ2MDk5MTJmZGExNDAuLjQ2MmNiYjU0OGYwN2JhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbkBAIC04OSw2ICs4OSw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3B1X2hlYWx0aF9zdGF0ZXNbXSA9IHtcbiB9O1xuIHN0YXRpY19hc3NlcnQoQVJSQVlfU0laRShncHVfaGVhbHRoX3N0YXRlcykgPT0gWEVfUkFTX0hFQUxUSF9NQVgpO1xuIFxuK3N0YXRpYyBpbnQgZ2V0X2NvdW50ZXIoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmNvdW50ZXIsIHUzMiAqdmFsdWUpO1xuK1xuIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxuIHtcbiBcdHN3aXRjaCAoc2V2ZXJpdHkpIHtcbkBAIC0xMDEsNiArMTAzLDE4IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdTggeGVfdG9fZHJtX3Jhc19zZXZlcml0eSh1OCBzZXZlcml0eSlcbit7XG4rXHRzd2l0Y2ggKHNldmVyaXR5KSB7XG4rXHRjYXNlIFhFX1JBU19TRVZfQ09SUkVDVEFCTEU6XG4rXHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEU7XG4rXHRjYXNlIFhFX1JBU19TRVZfVU5DT1JSRUNUQUJMRTpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9VTkNPUlJFQ1RBQkxFO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9NQVg7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXG4ge1xuIFx0c3dpdGNoIChjb21wb25lbnQpIHtcbkBAIC0xMTksNiArMTMzLDI0IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXG4re1xuK1x0c3dpdGNoIChjb21wb25lbnQpIHtcbitcdGNhc2UgWEVfUkFTX0NPTVBfREVWSUNFX01FTU9SWTpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfREVWSUNFX01FTU9SWTtcbitcdGNhc2UgWEVfUkFTX0NPTVBfQ09SRV9DT01QVVRFOlxuK1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9DT1JFX0NPTVBVVEU7XG4rXHRjYXNlIFhFX1JBU19DT01QX1BDSUU6XG4rXHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1BDSUU7XG4rXHRjYXNlIFhFX1JBU19DT01QX0ZBQlJJQzpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfRkFCUklDO1xuK1x0Y2FzZSBYRV9SQVNfQ09NUF9TT0NfSU5URVJOQUw6XG4rXHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1NPQ19JTlRFUk5BTDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX01BWDtcbitcdH1cbit9XG4rXG4gc3RhdGljIGludCByYXNfc3RhdHVzX3RvX2Vycm5vKHUzMiBzdGF0dXMpXG4ge1xuIFx0c3dpdGNoIChzdGF0dXMpIHtcbkBAIC0yMTcsNiArMjQ5LDI2IEBAIHN0YXRpYyB2b2lkIHJhc191c3BfYWVyX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpXG4gXHRkZXZfZGJnKFx1MDAyNnVzcC1cdTAwM2VkZXYsIFwiVW5jb3JyZWN0YWJsZSBJbnRlcm5hbCBFcnJvcnMgZG93bmdyYWRlZCBhbmQgdW5tYXNrZWRcXG5cIik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJhc19zZW5kX2Vycm9yX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxuK3tcbitcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgY291bnRlciA9IHswfTtcbitcdHU4IGRybV9zZXZlcml0eSwgZHJtX2NvbXBvbmVudDtcbitcdHUzMiB2YWx1ZTtcbitcdGludCByZXQ7XG4rXG4rXHRjb3VudGVyLmNvbW1vbi5zZXZlcml0eSA9IHNldmVyaXR5O1xuK1x0Y291bnRlci5jb21tb24uY29tcG9uZW50ID0gY29tcG9uZW50O1xuK1xuK1x0cmV0ID0gZ2V0X2NvdW50ZXIoeGUsIFx1MDAyNmNvdW50ZXIsIFx1MDAyNnZhbHVlKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybjtcbitcbitcdGRybV9zZXZlcml0eSA9IHhlX3RvX2RybV9yYXNfc2V2ZXJpdHkoc2V2ZXJpdHkpO1xuK1x0ZHJtX2NvbXBvbmVudCA9IHhlX3RvX2RybV9yYXNfY29tcG9uZW50KGNvbXBvbmVudCk7XG4rXG4rXHR4ZV9kcm1fcmFzX2V2ZW50KHhlLCBkcm1fY29tcG9uZW50LCBkcm1fc2V2ZXJpdHksIHZhbHVlKTtcbit9XG4rXG4gc3RhdGljIHU4IGhhbmRsZV9jb3JlX2NvbXB1dGVfZXJyb3JzKHN0cnVjdCB4ZV9yYXNfZXJyb3JfYXJyYXkgKmFycilcbiB7XG4gXHRzdHJ1Y3QgeGVfcmFzX2NvbXB1dGVfZXJyb3IgKmVycm9yX2luZm8gPSAodm9pZCAqKWFyci1cdTAwM2VkZXRhaWxzO1xuQEAgLTI0MSw4ICsyOTMsMTAgQEAgdm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcbiBcdHN0cnVjdCB4ZV9yYXNfdGhyZXNob2xkX2Nyb3NzZWQgKnBlbmRpbmcgPSAodm9pZCAqKVx1MDAyNnJlc3BvbnNlLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICplcnJvcnMgPSBwZW5kaW5nLVx1MDAzZWNvdW50ZXJzO1xuIFx0dTMyIGlkLCBuY291bnRlcnMgPSBwZW5kaW5nLVx1MDAzZW5jb3VudGVycztcbitcdHU4IHNlbnQgPSAwO1xuIFxuIFx0QlVJTERfQlVHX09OKHNpemVvZihyZXNwb25zZS1cdTAwM2VkYXRhKSBcdTAwM2Mgc2l6ZW9mKCpwZW5kaW5nKSk7XG4rXHRCVUlMRF9CVUdfT04oQklUU19QRVJfVFlQRShzZW50KSBcdTAwM2MgWEVfUkFTX0NPTVBfTUFYKTtcbiBcdHhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2Vzcyh4ZSk7XG4gXG4gXHRpZiAoIW5jb3VudGVycyB8fCBuY291bnRlcnMgXHUwMDNlIFhFX1JBU19OVU1fQ09VTlRFUlMpXG5AQCAtMjU2LDggKzMxMCwyMSBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuIFx0XHRzZXZlcml0eSA9IGVycm9yc1tpZF0uY29tbW9uLnNldmVyaXR5O1xuIFx0XHRjb21wb25lbnQgPSBlcnJvcnNbaWRdLmNvbW1vbi5jb21wb25lbnQ7XG4gXG4rXHRcdGlmIChzZXZlcml0eSAhPSBYRV9SQVNfU0VWX0NPUlJFQ1RBQkxFKSB7XG4rXHRcdFx0eGVfd2Fybih4ZSwgXCJzeXNjdHJsOiB1bmV4cGVjdGVkIHNldmVyaXR5ICVzICgldSlcXG5cIiwgc2V2X3RvX3N0cihzZXZlcml0eSksXG4rXHRcdFx0XHRzZXZlcml0eSk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0eGVfd2Fybih4ZSwgXCJbUkFTXTogJXMgJXMgZGV0ZWN0ZWRcXG5cIixcbiBcdFx0XHRjb21wX3RvX3N0cihjb21wb25lbnQpLCBzZXZfdG9fc3RyKHNldmVyaXR5KSk7XG4rXG4rXHRcdC8qIFNlbmQgZXZlbnQgb25jZSBwZXIgY29tcG9uZW50ICovXG4rXHRcdGlmIChzZW50IFx1MDAyNiBCSVQoY29tcG9uZW50KSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0c2VudCB8PSBCSVQoY29tcG9uZW50KTtcbitcbitcdFx0cmFzX3NlbmRfZXJyb3JfZXZlbnQoeGUsIHNldmVyaXR5LCBjb21wb25lbnQpO1xuIFx0fVxuIH1cbiBcbkBAIC0zMTEsNiArMzc4LDcgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiBcdGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiBmaW5hbF9hY3Rpb247XG4gXHR1MzIgcmVtYWluaW5nID0gWEVfU1lTQ1RSTF9GTE9PRF9MSU1JVDtcbiBcdHN0cnVjdCB4ZV9yYXNfZ2V0X3NvY19lcnJvciByZXNwb25zZTtcbitcdHU4IHNlbnQgPSAwO1xuIFx0c2l6ZV90IHJsZW47XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTM1NCw2ICs0MjIsMTIgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiBcdFx0XHR4ZV9pbmZvKHhlLCBcIltSQVNdOiAlcyAlcyBkZXRlY3RlZFxcblwiLCBjb21wX3RvX3N0cihjb21wb25lbnQpLFxuIFx0XHRcdFx0c2V2X3RvX3N0cihzZXZlcml0eSkpO1xuIFxuK1x0XHRcdC8qIFNlbmQgZXZlbnQgb25jZSBwZXIgY29tcG9uZW50ICovXG4rXHRcdFx0aWYgKCEoc2VudCBcdTAwMjYgQklUKGNvbXBvbmVudCkpKSB7XG4rXHRcdFx0XHRzZW50IHw9IEJJVChjb21wb25lbnQpO1xuK1x0XHRcdFx0cmFzX3NlbmRfZXJyb3JfZXZlbnQoeGUsIHNldmVyaXR5LCBjb21wb25lbnQpO1xuK1x0XHRcdH1cbitcbiBcdFx0XHRzd2l0Y2ggKGNvbXBvbmVudCkge1xuIFx0XHRcdGNhc2UgWEVfUkFTX0NPTVBfQ09SRV9DT01QVVRFOlxuIFx0XHRcdFx0YWN0aW9uID0gaGFuZGxlX2NvcmVfY29tcHV0ZV9lcnJvcnMoYXJyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbmluZGV4IDBiZWVkZTNkZGM0ZTRiLi5lZTJjYWEwZWRjNmY5MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxuKysrIGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXG5AQCAtODAsOSArODAsMTQgQEAgc3RydWN0IGRybV9kZXZpY2U7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9SQVMpXG4gaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTtcbiB2b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xuK2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcbitcdFx0XHQgICB1MzIgdmFsdWUpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyB9XG4rc3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsXG4rXHRcdFx0XHRcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXG4reyByZXR1cm4gMDsgfVxuICNlbmRpZlxuIFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcbmluZGV4IDIxOGEzZWU4NjgwNTI3Li5lYWI4MjMxYWE4N2NiZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG4rKysgYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxuQEAgLTM4LDEzICszOCwyOCBAQCBlbnVtIHtcbiBcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCAtIDEpXG4gfTtcbiBcbitlbnVtIHtcbitcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19ERVZJQ0VfTkFNRSA9IDEsXG4rXHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9JRCxcbitcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsXG4rXHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfSUQsXG4rXHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSxcbitcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSxcbitcbitcdF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCxcbitcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVggPSAoX19EUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYIC0gMSlcbit9O1xuK1xuIGVudW0ge1xuIFx0RFJNX1JBU19DTURfTElTVF9OT0RFUyA9IDEsXG4gXHREUk1fUkFTX0NNRF9HRVRfRVJST1JfQ09VTlRFUixcbiBcdERSTV9SQVNfQ01EX0NMRUFSX0VSUk9SX0NPVU5URVIsXG4rXHREUk1fUkFTX0NNRF9FUlJPUl9FVkVOVCxcbiBcbiBcdF9fRFJNX1JBU19DTURfTUFYLFxuIFx0RFJNX1JBU19DTURfTUFYID0gKF9fRFJNX1JBU19DTURfTUFYIC0gMSlcbiB9O1xuIFxuKyNkZWZpbmUgRFJNX1JBU19NQ0dSUF9FUlJPUl9SRVBPUlRcdFwiZXJyb3ItcmVwb3J0XCJcbitcbiAjZW5kaWYgLyogX1VBUElfTElOVVhfRFJNX1JBU19IICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTozOToyNC41MzMwMDAzNTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjM4MzkzOTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgTmV3IE5ldGxpbmsgTXVsdGljYXN0IEV2ZW50IGZvciBEUk0gUkFTKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGl0J3MgYWJvdXQgYWRkaW5nIGFuIGBlcnJvci1ldmVudGAgbmV0bGluayBtdWx0aWNhc3QgZXZlbnQgdG8gdGhlIGV4aXN0aW5nIGBkcm1fcmFzYCBuZXRsaW5rIGZhbWlseS4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBpdCdzIGdvb2QgdGhhdCB3ZSdyZSBleHBhbmRpbmcgb3VyIGVycm9yIHJlcG9ydGluZyBjYXBhYmlsaXRpZXMsIGJ1dCBsZXQncyBzZWUgd2hlcmUgdGhlIHJpc2tzIGxpZS5cblxuVGhlIHBhdGNoIHRvdWNoZXMgYSBidW5jaCBvZiBmaWxlcywgbW9zdGx5IGluIHRoZSBEUk0gYW5kIHNwZWNpZmljYWxseSB0aGUgYHhlYCBkcml2ZXIgYXJlYXMsIGFsb25nIHdpdGggcmVsYXRlZCBoZWFkZXIgYW5kIGRvY3VtZW50YXRpb24gZmlsZXMsIHdoaWNoIGlzIGV4cGVjdGVkIGZvciBzb21ldGhpbmcgbGlrZSB0aGlzLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIHRoZSBhY3R1YWwgbmV0bGluayBtdWx0aWNhc3QgZXZlbnQuICBJdCBtb2RpZmllcyB0aGUgYHhlYCBkcml2ZXIgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHRocm91Z2ggYHhlX2RybV9yYXNfZXZlbnRgIGFuZCBzdWJzZXF1ZW50bHkgdGhyb3VnaCBgcmFzX3NlbmRfZXJyb3JfZXZlbnRgLCBldmVudHVhbGx5IG9yaWdpbmF0aW5nIGZyb20gaGFyZHdhcmUgZXJyb3IgaGFuZGxlcnMgbGlrZSBgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWRgIGFuZCBgeGVfcmFzX3Byb2Nlc3NfZXJyb3JzYC5cblxuTm93LCB0aGUgbWFpbiBxdWVzdGlvbiBpcyBhbHdheXM6ICppcyB0aGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZT8qIFRoZSBkb2N1bWVudGF0aW9uIGlzIHByZXR0eSBjbGVhciBhYm91dCBgZXJyb3ItZXZlbnRgIGJlaW5nICp0byogdXNlcnNwYWNlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG11bHRpY2FzdCBncm91cCwgYGVycm9yLXJlcG9ydGAsIHRvIHdoaWNoIHVzZXJzcGFjZSBjYW4gc3Vic2NyaWJlLiBJdCBzZWVtcyB0aGUgZXZlbnQgaXRzZWxmIGlzIHRyaWdnZXJlZCBieSB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgYnkgdGhlIGB4ZWAgZHJpdmVyIHdoZW4gUkFTIGVycm9ycyBoYXBwZW4uIEEgcXVpY2sgZG91YmxlLWNoZWNrOiBpcyB0aGVyZSBhbnkgd2F5IGZvciB1c2Vyc3BhY2UgdG8gdHJpZ2dlciBgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWRgIG9yIGB4ZV9yYXNfcHJvY2Vzc19lcnJvcnNgIGRpcmVjdGx5PyBUaGVzZSBhcHBlYXIgdG8gYmUgaGFyZHdhcmUgZXJyb3IgaGFuZGxlcnMsIHNvIGl0IHNlZW1zIHVubGlrZWx5LlxuXG5JIHF1aWNrbHkgY2hlY2sgdGhlIG5ldGxpbmsgcGFydDogSXQgbWVyZWx5IGRlZmluZXMgdGhlIG11bHRpY2FzdCBncm91cCBhbmQgdGhlIGV2ZW50IGF0dHJpYnV0ZXMuIFRoZXJlJ3Mgbm8gbmV3IGBkb2l0YCBvciBgZHVtcGl0YCBvcGVyYXRpb24gZm9yIHVzZXJzcGFjZSB0byBjYWxsLCBub3RoaW5nIHRoYXQgY291bGQgdHJpZ2dlciBhbiBldmVudCBvdGhlciB0aGFuIHN1YnNjcmliaW5nIHRvIHRoZSBtdWx0aWNhc3QgZ3JvdXAuIExvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24gb2YgYERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UYCBpbiB0aGUgYGluY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oYCwgYWxvbmcgd2l0aCB0aGUgYGRybV9yYXMueWFtbGAgZmlsZSwgaXQgY29uZmlybXMgdGhpcyBpcyBhbiBldmVudCAqc2VudCB0byogdXNlcnNwYWNlLCB3aXRoIGluZm9ybWF0aW9uIGxpa2UgZGV2aWNlIG5hbWUsIG5vZGUgSUQsIGFuZCBlcnJvciBkZXRhaWxzLlxuXG5JJ20gdmVyaWZ5aW5nIGJ5IGV4YW1pbmluZyBgZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY2AuIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YCBjbGVhcmx5IGNyZWF0ZXMgYW5kIHNlbmRzIHRoZSBuZXRsaW5rIG5vdGlmaWNhdGlvbi4gVGhlIGBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzYCBpcyBzb2xlbHkgYWJvdXQgcG9wdWxhdGluZyB0aGUgZXZlbnQgZGF0YS4gVGhlIGB4ZWAgZHJpdmVyIGNoYW5nZXMgYXJlIG9ubHkgYWJvdXQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdoZW4gaGFyZHdhcmUgZXJyb3JzIGFyZSBlbmNvdW50ZXJlZC5cblxuU28sIHNpbmNlIGl0J3Mgb25seSBhbiBvdXRib3VuZCBuZXRsaW5rIG5vdGlmaWNhdGlvbiwgYW5kIG5vIG5ldyBjb2RlIHBhdGhzIHRyaWdnZXJlZCAqYnkqIHVzZXJzcGFjZSwgdGhlIHJpc2sgb2YgZnV6emluZyBpcyBtaW5pbWFsLi4uIHVubGVzcywgb2YgY291cnNlLCB0aGVyZSdzIHNvbWUgc29ydCBvZiBpbXBsaWNpdCB2dWxuZXJhYmlsaXR5IGluIHRoZSBuZXRsaW5rIGluZnJhc3RydWN0dXJlIGl0c2VsZiwgb3IsIGFzIGEgbW9yZSByZW1vdGUgcG9zc2liaWxpdHksIGlmIHRoZXNlIGhhcmR3YXJlIGV2ZW50cyB0cmlnZ2VyZWQgYnkgc29tZSBvdGhlciBtZWFucyBsaWtlIGRlYnVnZnMgb3Igc3lzZnMuIEkgd291bGQgbm93IHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBpbmplY3Rpb24gb3IgdHJpZ2dlcmluZyBvZiB0aG9zZSBlcnJvciBldmVudHMuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSwgdGhpcyBmZWVscyBsaWtlIGl0IHdpbGwgYmUgYSBsb3cgcHJpb3JpdHkgZm9yIGZ1enppbmcsIHVubGVzcyBgZ3JlcHBlcmAgcmV2ZWFscyBzb21lIGhpZGRlbiBpbnRlcmFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkyMCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTozOTozNi45MTY5NDIxODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk5MDk2ODA2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM9MjcyPXN0YXRpYyB1OCBoYW5kbGVfY29yZV9jb21wdXRlX2Vycm9ycyhzdHJ1Y3QgeGVfcmFzX2Vycm9yX2FycmF5ICphcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMjg5LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzoyOTA6dm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMjkxLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaD0xMz1zdHJ1Y3QgeGVfc3lzY3RybF9ldmVudF9yZXNwb25zZTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmgtMTQtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oOjE1OnZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oLTE2LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZV9zeXNjdHJsX2V2ZW50X3Jlc3BvbnNlICpyZXNwb25zZSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3lzY3RybF9ldmVudC5jPTE1PXN0YXRpYyB2b2lkIGdldF9wZW5kaW5nX2V2ZW50KHN0cnVjdCB4ZV9zeXNjdHJsICpzYywgc3RydWN0IHhlX3N5c2N0cmxfbWFpbGJveF9jb21tYW5kICpjb21tYW5kKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYy0zOC1cXHRcXHRpZiAocmVzcG9uc2UtXFx1MDAzZWV2ZW50ID09IFhFX1NZU0NUUkxfRVZFTlRfVEhSRVNIT0xEX0NST1NTRUQpXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N5c2N0cmxfZXZlbnQuYzozOTpcXHRcXHRcXHR4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZCh4ZSwgcmVzcG9uc2UpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zeXNjdHJsX2V2ZW50LmMtNDAtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwOTozOTozOS45MDc5MTQ1N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTA5OTY5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFJBUyBFcnJvciBGbG93KipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHNvIGB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZGAgZ2V0cyB0cmlnZ2VyZWQgZnJvbSBgeGVfc3lzY3RybF9ldmVudC5jYC4gTWFrZXMgc2Vuc2UsIHRoYXQncyB3aGVyZSB0aGUgaGFyZHdhcmUgZXZlbnQgaGFuZGxpbmcgbGl2ZXMuIFRoYXQgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBhIGtleSBwYXJ0IG9mIHRoZSByZWFsLXRpbWUgcmVzcG9uc2UgdG8gYSBSQVMgZXZlbnQuIFdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgbm93IGlzIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhhdCBmdW5jdGlvbiB0byBvdGhlcnMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiB0aGlzIGNvZGUuIFdoZXJlIGRvZXMgaXQgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGVycm9yIGhhbmRsaW5nP1xuXG5JJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgdGhpcy4uLiBob3cgZG9lcyB0aGF0IHRocmVzaG9sZCBjcm9zc2luZyByZWxhdGUgdG8gdGhlIG90aGVyIFJBUyBlcnJvciBoYW5kbGluZyBmdW5jdGlvbnM/IFdoYXQgaGFwcGVucyBuZXh0PyBXaGVyZSBpcyBgeGVfcmFzX3Byb2Nlc3NfZXJyb3JzYCB1c2VkPyBJJ2xsIG5lZWQgdG8gZ28gZmluZCB3aGVyZSBgeGVfcmFzX3Byb2Nlc3NfZXJyb3JzYCBpcyBjYWxsZWQuIEl0J3MgcHJvYmFibHkgaW52b2tlZCBlaXRoZXIgZnJvbSBoZXJlIGRpcmVjdGx5LCBvciBmcm9tIHNvbWV3aGVyZSBkZWVwZXIgaW4gdGhlIGNhbGwgc3RhY2suIFRoaXMgdGhyZXNob2xkIGNyb3NzZWQgZXZlbnQgaGFzIHRvIGZlZWQgaW50byBzb21lIGtpbmQgb2YgZXJyb3IgcHJvY2Vzc2luZywgcmlnaHQ/IFRoZSBrZXkgbm93IGlzIHRyYWNraW5nIGRvd24gdGhhdCBjb25uZWN0aW9uLCBmaWd1cmluZyBvdXQgaG93IHRoZSBkYXRhIGZsb3dzIGZyb20gb25lIHRvIHRoZSBuZXh0LCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBlcnJvciBoYW5kbGluZyBzdGF0ZSBtYWNoaW5lIGxvb2tzIGxpa2UuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbCBncmFwaHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDU0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDk6Mzk6NDMuNDU4OTEzNjY2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDM3MjI0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGVfcmFzX3Byb2Nlc3NfZXJyb3JzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfZXJyb3IuYz03OD1zdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB4ZV9wY2lfZXJyb3JfbW1pb19lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9lcnJvci5jLTgzLVxcdHhlX2luZm8oeGUsIFxcXCJQQ0kgZXJyb3I6IE1NSU8gZW5hYmxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9lcnJvci5jOjg0OlxcdGFjdGlvbiA9IHhlX3Jhc19wcm9jZXNzX2Vycm9ycyh4ZSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9lcnJvci5jLTg1LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jPTMzMT1zdGF0aWMgaW50IGdldF9jb3VudGVyKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICpjb3VudGVyLCB1MzIgKnZhbHVlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTM2Ni0vKipcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmM6MzY3OiAqIHhlX3Jhc19wcm9jZXNzX2Vycm9ycygpIC0gUHJvY2VzcyBhbmQgY29udGFpbiBoYXJkd2FyZSBlcnJvcnNcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMzY4LSAqIEB4ZTogeGUgZGV2aWNlIGluc3RhbmNlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMzc0LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzozNzU6ZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMzc2LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz02Nzc9dm9pZCB4ZV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy02OTYtXFx0ICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jOjY5NzpcXHR4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoeGUpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy02OTgtXFx0cmV0ID0gZGV2bV9kZXZpY2VfYWRkX2dyb3VwKHhlLVxcdTAwM2Vkcm0uZGV2LCBcXHUwMDI2Z3B1X2hlYWx0aF9ncm91cCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmg9MTk9dm9pZCB4ZV9yYXNfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5oOjIwOmVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoc3RydWN0IHhlX2RldmljZSAqeGUpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuaC0yMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDk6Mzk6NDUuODAyNjQwMjI3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM5NTM1MjE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEFuYWx5c2lzOiBObyBOZXcgVXNlcnNwYWNlIEF0dGFjayBTdXJmYWNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBmb2N1c2VzIG9uIGlkZW50aWZ5aW5nIG5ldyBhdHRhY2sgc3VyZmFjZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIOKAkyBzcGVjaWZpY2FsbHksIGFueXRoaW5nIHJlYWNoYWJsZSBieSB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBiZSBmdXp6ZWQuXG5cbkkndmUgdHJhY2VkIHRoZSBmbG93LiBgeGVfcmFzX3Byb2Nlc3NfZXJyb3JzYCBpcyB0cmlnZ2VyZWQgaW50ZXJuYWxseSDigJMgYnkgYHhlX3BjaV9lcnJvcl9tbWlvX2VuYWJsZWRgIGFuZCBgeGVfcmFzX2luaXRgLiBOb3RoaW5nIGhlcmUgc2VlbXMgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UgZXhjZXB0LCBwZXJoYXBzLCBkdXJpbmcgaW5pdGlhbGlzYXRpb24gb3IgZXJyb3IgcmVjb3ZlcnkuIFRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGEgbmV0bGluayBub3RpZmljYXRpb24uIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgc3VzcGljaW9uOyBpcyB0aGVyZSBhbnkgbmV3IHBhcnNpbmcgb2YgdXNlcnNwYWNlLXByb3ZpZGVkIGlucHV0P1xuXG5JIHNlZSB0aGF0IGBkcm1fcmFzYCBuZXRsaW5rIGZhbWlseSBpcyBhbHJlYWR5IGVzdGFibGlzaGVkLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYGVycm9yLWV2ZW50YCB0byBgZHJtX3Jhcy55YW1sYCBhbmQgYGRybV9yYXMuY2AuIFRoYXTigJlzIG15IHByaW1hcnkgY29uY2Vybi4gSG93ZXZlciwgdXBvbiBpbnNwZWN0aW9uLCBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAgaXMgKmV4cG9ydGVkKiBhbmQgY2FsbGVkIGZyb20gdGhlIGRyaXZlciwgYnV0IHRoZSBwYXRjaCBkb2Vzbid0IGFkZCBhbnkgY29kZSB0byBwYXJzZSBpbmNvbWluZyB1c2Vyc3BhY2UgaW5wdXQuIFRoZSBuZXcgY29kZSBpcyBgbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRyc2AsIHdoaWNoIGNvbnN0cnVjdHMgdGhlIG5ldGxpbmsgbWVzc2FnZSAqc2VudCogdG8gdXNlcnNwYWNlLlxuXG5UaGUgdXNlcnNwYWNlIGludGVyYWN0aW9uIGlzIHNvbGVseSBzdWJzY3JpYmluZyB0byB0aGUgbXVsdGljYXN0IGdyb3VwLiBUaGF04oCZcyBnZW5lcmljIG5ldGxpbmsgdGVycml0b3J5LiBgZHJtX3Jhc2AgaXMgb25seSBjb25jZXJuZWQgd2l0aCB0aGUgKnNlbmRpbmcqIHNpZGUuIFRodXMsIHRoZXJlIGlzICpubyogbmV3IHVzZXJzcGFjZS1yZWFjaGFibGUgY29kZSBpbnRyb2R1Y2VkLiBUaGlzIGlzIGp1c3QgYSBub3RpZmljYXRpb24gY2hhbm5lbCwga2VybmVsIHRvIHVzZXJzcGFjZS5cblxuSSdtIGRvdWJsZS1jaGVja2luZyB0aGUgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzIGZvciBgZHJtX3Jhcy55YW1sYC4gQWgsIGl0J3MgYWRkaW5nIGBlcnJvci1ldmVudC1hdHRyc2AgYW5kIGFuIGBlcnJvci1ldmVudGAgb3BlcmF0aW9uLCBhbG9uZyB3aXRoIGFuIGBlcnJvci1yZXBvcnRgIG11bHRpY2FzdCBncm91cC4gVGhlIGBldmVudDpgIGRlc2lnbmF0aW9uIGZvciBgZXJyb3ItZXZlbnRgIGNvbmZpcm1zIGl0J3MgYSBub3RpZmljYXRpb24g4oCTIHRoZXJlIGFyZSBubyBgZG86YCBvciBgZHVtcDpgIGNvbW1hbmRzIGhlcmUuXG5cbk15IGNvbmNsdXNpb24gaXMgY2xlYXI6IHRoaXMgcGF0Y2ggZG9lc24ndCBhZGQgYW55IG5ldyB1c2Vyc3BhY2UtdHJpZ2dlcmFibGUgY29kZSBwYXRocy4gYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgLCBgeGVfZHJtX3Jhc19ldmVudGAgYW5kIGByYXNfc2VuZF9lcnJvcl9ldmVudGAgYXJlIHNpbXBseSBmb3JtYXR0aW5nIGFuZCB0cmFuc21pdHRpbmcgZXJyb3IgaW5mb3JtYXRpb24uIFRoZXJlIGFyZSBubyBuZXcgaW9jdGxzLCBzeXNmcyBlbnRyaWVzLCBkZWJ1Z2ZzIGZpbGVzLCBvciBuZXRsaW5rIGNvbW1hbmRzIHRoYXQgdXNlcnNwYWNlIGNhbiBpbml0aWF0ZS5cblxuVGhlcmVmb3JlLCBXb3J0aEZ1enppbmc9ZmFsc2UuIEkgYW0gY29uZmlkZW50IGluIHRoYXQgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5OTUsIk91dHB1dFRva2VucyI6OTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDk6Mzk6NTUuMTk3OTk0MjY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV0bGluayBtdWx0aWNhc3Qgbm90aWZpY2F0aW9uIChgZXJyb3ItZXZlbnRgKSBzZW50IGZyb20gdGhlIGtlcm5lbCB0byB1c2Vyc3BhY2Ugd2hlbiBoYXJkd2FyZSBSQVMgZXJyb3JzIG9jY3VyLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB1c2Vyc3BhY2UtdHJpZ2dlcmFibGUgY29kZSBwYXRocyBvciBpbnB1dCBwYXJzaW5nIGxvZ2ljLCBhcyB0aGUgZXZlbnQgZ2VuZXJhdGlvbiBpcyBkcml2ZW4gYnkgaGFyZHdhcmUgZXZlbnRzIGFuZCB0aGUgbXVsdGljYXN0IHN1YnNjcmlwdGlvbiBpcyBoYW5kbGVkIGJ5IGdlbmVyaWMgbmV0bGluayBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldGxpbmsgbXVsdGljYXN0IG5vdGlmaWNhdGlvbiAoYGVycm9yLWV2ZW50YCkgc2VudCBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlcnNwYWNlIHdoZW4gaGFyZHdhcmUgUkFTIGVycm9ycyBvY2N1ci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdXNlcnNwYWNlLXRyaWdnZXJhYmxlIGNvZGUgcGF0aHMgb3IgaW5wdXQgcGFyc2luZyBsb2dpYywgYXMgdGhlIGV2ZW50IGdlbmVyYXRpb24gaXMgZHJpdmVuIGJ5IGhhcmR3YXJlIGV2ZW50cyBhbmQgdGhlIG11bHRpY2FzdCBzdWJzY3JpcHRpb24gaXMgaGFuZGxlZCBieSBnZW5lcmljIG5ldGxpbmsgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowmnnqm[1] Phase: Running StartedAt: 2026-07-20 09:40:06 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmnnqm[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-20 09:40:06 +0000 UTC FinishedAt: 2026-07-20 09:40:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}