Name: series-workflowkptm7 Phase: Failed StartedAt: 2026-09-14 19:58:13 +0000 UTC FinishedAt: 2026-09-14 20:01:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkptm7[0] Phase: Succeeded StartedAt: 2026-09-14 19:58:13 +0000 UTC FinishedAt: 2026-09-14 20:01:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkptm7[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 19:58:13 +0000 UTC FinishedAt: 2026-09-14 20:01:22 +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+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiBkcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgdGhlIE1JSSBjb252ZXJ0ZXIgb24gUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJIIFNvQ3MgKEFSTS9SSVNDLVYgYXJjaGl0ZWN0dXJlcykuIEl0IHJlcXVpcmVzIFNvQy1zcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyBhbmQgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODYvYW1kNjQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyBpdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzhhNDllODE1NTQ0ZTkyZTI0YzEwNjRkZTI2OTUzNmRjNjFjZmY1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDE5OjU5OjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jXG5pbmRleCAyYjcyZmE5OGRkZjEzLi4xYmQ5NWRkZjk0MDBhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY1xuQEAgLTY4Myw3ICYjNDM7NjgzLDggQEAgc3RhdGljIGludCBtaWljX3BhcnNlX2R0KHN0cnVjdCBtaWljICptaWljLCB1MzIgKm1vZGVfY2ZnKVxuIFx0aWYgKCFkdF92YWwpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0bWVtc2V0KGR0X3ZhbCwgTUlJQ19NT0RDVFJMX0NPTkZfTk9ORSwgc2l6ZW9mKCpkdF92YWwpKTtcbiYjNDM7XHRtZW1zZXQoZHRfdmFsLCBNSUlDX01PRENUUkxfQ09ORl9OT05FLFxuJiM0MztcdCAgICAgICBzaXplb2YoKmR0X3ZhbCkgKiBtaWljLVx1MDAzZW9mX2RhdGEtXHUwMDNlY29uZl9jb252X2NvdW50KTtcbiBcbiBcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgXCYjMzQ7cmVuZXNhcyxtaWljLXN3aXRjaC1wb3J0aW5cJiMzNDssIFx1MDAyNmNvbmYpID09IDApXG4gXHRcdGR0X3ZhbFswXSA9IGNvbmY7XG5AQCAtNjkyLDYgJiM0Mzs2OTMsMTQgQEAgc3RhdGljIGludCBtaWljX3BhcnNlX2R0KHN0cnVjdCBtaWljICptaWljLCB1MzIgKm1vZGVfY2ZnKVxuIFx0XHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoY29udiwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZwb3J0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdGlmIChwb3J0IFx1MDAzYyBtaWljLVx1MDAzZW9mX2RhdGEtXHUwMDNlbWlpY19wb3J0X3N0YXJ0IHx8XG4mIzQzO1x0XHQgICAgcG9ydCBcdTAwM2UgbWlpYy1cdTAwM2VvZl9kYXRhLVx1MDAzZW1paWNfcG9ydF9tYXgpIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihtaWljLVx1MDAzZWRldiwgXCYjMzQ7UG9ydCBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZFxcblwmIzM0OywgcG9ydCk7XG4mIzQzO1x0XHRcdG9mX25vZGVfcHV0KGNvbnYpO1xuJiM0MztcdFx0XHRrZnJlZShkdF92YWwpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjb252LCBcJiMzNDtyZW5lc2FzLG1paWMtaW5wdXRcJiMzNDssIFx1MDAyNmNvbmYpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIG1vZGlmaWVkIGNvZGUgaXMgaW4gZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYywgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHRoZSBNSUkgY29udmVydGVyIG9uIFJlbmVzYXMgUlovTjEsIFJaL04ySCwgYW5kIFJaL1QySCBTb0NzIChBUk0vUklTQy1WIGFyY2hpdGVjdHVyZXMpLiBJdCByZXF1aXJlcyBTb0Mtc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMgYW5kIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgeDg2L2FtZDY0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgaXQgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIGFtZDY0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM4YTQ5ZTgxNTU0NGU5MmUyNGMxMDY0ZGUyNjk1MzZkYzYxY2ZmNTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAxOTo1OTozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jCmluZGV4IDJiNzJmYTk4ZGRmMTMuLjFiZDk1ZGRmOTQwMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYwpAQCAtNjgzLDcgJiM0Mzs2ODMsOCBAQCBzdGF0aWMgaW50IG1paWNfcGFyc2VfZHQoc3RydWN0IG1paWMgKm1paWMsIHUzMiAqbW9kZV9jZmcpCiAJaWYgKCFkdF92YWwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtc2V0KGR0X3ZhbCwgTUlJQ19NT0RDVFJMX0NPTkZfTk9ORSwgc2l6ZW9mKCpkdF92YWwpKTsKJiM0MzsJbWVtc2V0KGR0X3ZhbCwgTUlJQ19NT0RDVFJMX0NPTkZfTk9ORSwKJiM0MzsJICAgICAgIHNpemVvZigqZHRfdmFsKSAqIG1paWMtJmd0O29mX2RhdGEtJmd0O2NvbmZfY29udl9jb3VudCk7CiAKIAlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICYjMzQ7cmVuZXNhcyxtaWljLXN3aXRjaC1wb3J0aW4mIzM0OywgJmFtcDtjb25mKSA9PSAwKQogCQlkdF92YWxbMF0gPSBjb25mOwpAQCAtNjkyLDYgJiM0Mzs2OTMsMTQgQEAgc3RhdGljIGludCBtaWljX3BhcnNlX2R0KHN0cnVjdCBtaWljICptaWljLCB1MzIgKm1vZGVfY2ZnKQogCQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoY29udiwgJiMzNDtyZWcmIzM0OywgJmFtcDtwb3J0KSkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQlpZiAocG9ydCAmbHQ7IG1paWMtJmd0O29mX2RhdGEtJmd0O21paWNfcG9ydF9zdGFydCB8fAomIzQzOwkJICAgIHBvcnQgJmd0OyBtaWljLSZndDtvZl9kYXRhLSZndDttaWljX3BvcnRfbWF4KSB7CiYjNDM7CQkJZGV2X2VycihtaWljLSZndDtkZXYsICYjMzQ7UG9ydCBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZFxuJiMzNDssIHBvcnQpOwomIzQzOwkJCW9mX25vZGVfcHV0KGNvbnYpOwomIzQzOwkJCWtmcmVlKGR0X3ZhbCk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiAJCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjb252LCAmIzM0O3JlbmVzYXMsbWlpYy1pbnB1dCYjMzQ7LCAmYW1wO2NvbmYpKQogCQkJY29udGludWU7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2MgoJCQkJCQkJb3V0cHV0OiA3NwoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgSW50ZXJmYWNlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoYXQgZGlmZiwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoYXQgYHBjcy1yem4xLW1paWMuY2AgYWN0dWFsbHkgKmlzKi4gV2hhdCYjMzk7cyB0aGUgaGFyZHdhcmUgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoPyBXaGF0IHBsYXRmb3JtIGRvZXMgaXQgdGFyZ2V0PyBJcyBpdCBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgUmVuZXNhcyBwYXJ0LCBtYXliZSBhbiBSWi9OMT8gSSBhbHNvIGhhdmUgdG8gY2hlY2sgaXRzIEtjb25maWcgZW50cnkgLSBpcyB0aGlzIGNvZGUgYnVpbHQgY29uZGl0aW9uYWxseT8gSG93IGlzIGl0cyByZWFjaGFiaWxpdHkgY29udHJvbGxlZD8gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8KCk15IG5leHQgc3RlcCBpcyB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCB3aXRoaW4gdGhlIGZpbGUgaXRzZWxmIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBGb3IgdGhhdCwgSSB0aGluayBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBjb250ZXh0IHdpdGhpbiBgZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY2AgYW5kIGl0cyBhc3NvY2lhdGVkIEtjb25maWcgZmlsZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvZGUsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY3MtcnpuMS1taWljJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZT05PW9iai0kKENPTkZJR19QQ1NfTVRLX0xZTlhJKVx0JiM0Mzs9IHBjcy1tdGstbHlueGkub1xuZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19QQ1NfUlpOMV9NSUlDKVx0JiM0Mzs9IHBjcy1yem4xLW1paWMub1xuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtMTYtI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfcGxhdGZvcm0uaFx1MDAzZVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzoxNzojaW5jbHVkZSBcdTAwM2NsaW51eC9wY3MtcnpuMS1taWljLmhcdTAwM2VcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtMTgtI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy0yMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6MjM6I2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvbmV0L3Bjcy1yem4xLW1paWMuaFx1MDAzZVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy0yNC0jaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9uZXQvcmVuZXNhcyxyOWEwOWcwNzctcGNzLW1paWMuaFx1MDAzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjcwOlx0XHRcdG1paWMtXHUwMDNlbGlua19jZmcudmFsIFx1MDAyNj0gfm1hc2s7XG4gNjcxOlx0fVxuIDY3MjpcdFxuIDY3MzpcdHN0YXRpYyBpbnQgbWlpY19wYXJzZV9kdChzdHJ1Y3QgbWlpYyAqbWlpYywgdTMyICptb2RlX2NmZylcbiA2NzQ6XHR7XG4gNjc1Olx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gbWlpYy1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZTtcbiA2NzY6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29udjtcbiA2Nzc6XHRcdGJvb2wgYWN0aXZlX2xvdztcbiA2Nzg6XHRcdGludCBwb3J0LCByZXQ7XG4gNjc5Olx0XHRzOCAqZHRfdmFsO1xuIDY4MDpcdFx0dTMyIGNvbmY7XG4gNjgxOlx0XG4gNjgyOlx0XHRkdF92YWwgPSBrbWFsbG9jX29ianMoKmR0X3ZhbCwgbWlpYy1cdTAwM2VvZl9kYXRhLVx1MDAzZWNvbmZfY29udl9jb3VudCk7XG4gNjgzOlx0XHRpZiAoIWR0X3ZhbClcbiA2ODQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNjg1Olx0XG4gNjg2Olx0XHRtZW1zZXQoZHRfdmFsLCBNSUlDX01PRENUUkxfQ09ORl9OT05FLFxuIDY4NzpcdFx0ICAgICAgIHNpemVvZigqZHRfdmFsKSAqIG1paWMtXHUwMDNlb2ZfZGF0YS1cdTAwM2Vjb25mX2NvbnZfY291bnQpO1xuIDY4ODpcdFxuIDY4OTpcdFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBcJiMzNDtyZW5lc2FzLG1paWMtc3dpdGNoLXBvcnRpblwmIzM0OywgXHUwMDI2Y29uZikgPT0gMClcbiA2OTA6XHRcdFx0ZHRfdmFsWzBdID0gY29uZjtcbiA2OTE6XHRcbiA2OTI6XHRcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjb252KSB7XG4gNjkzOlx0XHRcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjb252LCBcJiMzNDtyZWdcJiMzNDssIFx1MDAyNnBvcnQpKVxuIDY5NDpcdFx0XHRcdGNvbnRpbnVlO1xuIDY5NTpcdFxuIDY5NjpcdFx0XHRpZiAocG9ydCBcdTAwM2MgbWlpYy1cdTAwM2VvZl9kYXRhLVx1MDAzZW1paWNfcG9ydF9zdGFydCB8fFxuIDY5NzpcdFx0XHQgICAgcG9ydCBcdTAwM2UgbWlpYy1cdTAwM2VvZl9kYXRhLVx1MDAzZW1paWNfcG9ydF9tYXgpIHtcbiA2OTg6XHRcdFx0XHRkZXZfZXJyKG1paWMtXHUwMDNlZGV2LCBcJiMzNDtQb3J0IG51bWJlciBvdXQgb2YgcmFuZ2U6ICVkXFxuXCYjMzQ7LCBwb3J0KTtcbiA2OTk6XHRcdFx0XHRvZl9ub2RlX3B1dChjb252KTtcbiA3MDA6XHRcdFx0XHRrZnJlZShkdF92YWwpO1xuIDcwMTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDcwMjpcdFx0XHR9XG4gNzAzOlx0XG4gNzA0Olx0XHRcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjb252LCBcJiMzNDtyZW5lc2FzLG1paWMtaW5wdXRcJiMzNDssIFx1MDAyNmNvbmYpKVxuIDcwNTpcdFx0XHRcdGNvbnRpbnVlO1xuIDcwNjpcdFxuIDcwNzpcdFx0XHQvKiBBZGp1c3QgZm9yIDAgYmFzZWQgaW5kZXggKi9cbiA3MDg6XHRcdFx0ZHRfdmFsW3BvcnQgJiM0MzsgIW1paWMtXHUwMDNlb2ZfZGF0YS1cdTAwM2VtaWljX3BvcnRfc3RhcnRdID0gY29uZjtcbiA3MDk6XHRcbiA3MTA6XHRcdFx0YWN0aXZlX2xvdyA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChjb252LCBcJiMzNDtyZW5lc2FzLG1paWMtcGh5LWxpbmstYWN0aXZlLWxvd1wmIzM0Oyk7XG4gNzExOlx0XG4gNzEyOlx0XHRcdG1paWNfY29uZmlndXJlX3BoeV9saW5rKG1paWMsIGNvbmYsIHBvcnQsIGFjdGl2ZV9sb3cpO1xuIDcxMzpcdFx0fVxuIDcxNDpcdFxuIDcxNTpcdFx0cmV0ID0gbWlpY19tYXRjaF9kdF9jb25mKG1paWMsIGR0X3ZhbCwgbW9kZV9jZmcpO1xuIDcxNjpcdFx0a2ZyZWUoZHRfdmFsKTtcbiA3MTc6XHRcbiA3MTg6XHRcdHJldHVybiByZXQ7XG4gNzE5Olx0fVxuIDcyMDpcdFxuIDcyMTpcdHN0YXRpYyB2b2lkIG1paWNfcmVzZXRfY29udHJvbF9idWxrX2Fzc2VydCh2b2lkICpkYXRhKVxuIDcyMjpcdHtcbiA3MjM6XHRcdHN0cnVjdCBtaWljICptaWljID0gZGF0YTtcbiA3MjQ6XHRcdGludCByZXQ7XG4gNzI1Olx0XG4gNzI2Olx0XHRyZXQgPSByZXNldF9jb250cm9sX2J1bGtfYXNzZXJ0KG1paWMtXHUwMDNlb2ZfZGF0YS1cdTAwM2VyZXNldF9jb3VudCwgbWlpYy1cdTAwM2Vyc3RzKTtcbiA3Mjc6XHRcdGlmIChyZXQpXG4gNzI4Olx0XHRcdGRldl9lcnIobWlpYy1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBhc3NlcnQgcmVzZXQgbGluZXNcXG5cJiMzNDspO1xuIDcyOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODg3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBDT05GSUdfUENTX1JaTjFfTUlJQ2AgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgQ09ORklHX1BDU19SWk4xX01JSUNgIG9wdGlvbi4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlc2UgYnVpbGQgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmF2aWdhdGUgdG8gYGRyaXZlcnMvbmV0L3Bjcy9LY29uZmlnYC4gSSBrbm93IHRoYXQmIzM5O3Mgd2hlcmUgdGhlc2UgbmV0d29yay1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRlbmQgdG8gcmVzaWRlLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhIGNvdXBsZSBvZiBrZXkgcGllY2VzIG9mIGluZm9ybWF0aW9uOgoKKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgY29uZGl0aW9ucyBuZWVkIHRvIGJlIG1ldCAqYmVmb3JlKiBgQ09ORklHX1BDU19SWk4xX01JSUNgIGJlY29tZXMgYXZhaWxhYmxlPyBJcyBpdCBkZXBlbmRlbnQgb24gYSBwYXJ0aWN1bGFyIFNvQyBmYW1pbHksIGEgc3BlY2lmaWMgUEhZIGRyaXZlciwgb3Igc29tZSBvdGhlciBlbmFibGluZyBmZWF0dXJlPyBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3Iga25vd2luZyB3aGVuIGFuZCB3aHkgdGhpcyBvcHRpb24gd291bGQgYmUgcmVsZXZhbnQuCiogICAqKkRlZmluaXRpb24vRGVzY3JpcHRpb246KiogV2hhdCAqaXMqIGBDT05GSUdfUENTX1JaTjFfTUlJQ2A/IElzIGl0IGVuYWJsaW5nIGEgcGFydGljdWxhciBQaHlzaWNhbCBDb2RpbmcgU3VibGF5ZXIgKFBDUykgZm9yIGEgc3BlY2lmaWMgUlpOMSBib2FyZCwgbGlrZWx5IGEgc3BlY2lmaWMgTUlJQyAoTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIENvbnRyb2xsZXIpPyBEb2VzIGl0IHJlZmVyIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZT8gVGhlIEtjb25maWcgZW50cnkgc2hvdWxkIHByb3ZpZGUgYSBicmllZiBkZXNjcmlwdGlvbiB0byBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZ2FpbiBhIGJhc2ljIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgYnkgZW5hYmxpbmcgdGhpcyBmbGFnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BDU19SWk4xX01JSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wY3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGNzL0tjb25maWc9MjE9Y29uZmlnIFBDU19NVEtfTFlOWElcbi0tXG5kcml2ZXJzL25ldC9wY3MvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L3Bjcy9LY29uZmlnOjI5OmNvbmZpZyBQQ1NfUlpOMV9NSUlDXG5kcml2ZXJzL25ldC9wY3MvS2NvbmZpZy0zMC1cdHRyaXN0YXRlIFwmIzM0O1JlbmVzYXMgUlovTjEsIFJaL04ySCwgUlovVDJIIE1JSSBjb252ZXJ0ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfUENTX01US19MWU5YSSlcdCYjNDM7PSBwY3MtbXRrLWx5bnhpLm9cbmRyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfUENTX1JaTjFfTUlJQylcdCYjNDM7PSBwY3MtcnpuMS1taWljLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDY3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwmIzM5O3MgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbiwgYW5kIHNwZWNpZmljYWxseSB0aGUgYGRyaXZlcnMvbmV0L3Bjcy9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDI5LCB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3RhcnRzIGZvciBhIGdpdmVuIGRyaXZlciBvciBmZWF0dXJlLiBJIGV4cGVjdCB0aGF0IGxpbmUgd2lsbCBjb250YWluIGEgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9uIG9yIG1heWJlIGEgc291cmNlIHRvIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBCYXNlZCBvbiBteSBleGlzdGluZyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9qZWN0LCBJIG5lZWQgdG8ga25vdyB0aGUgc3RhdGUgb2YgbmV0d29yayBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGNzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0XHRoZWxwXG4gIDI2Olx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGhlbHBlcnMgdG8gcGh5bGluayBmb3IgbWFuYWdpbmcgdGhlIEx5bnhJIFBDU1xuICAyNzpcdFx0ICB3aGljaCBpcyBwYXJ0IG9mIE1lZGlhVGVrJiMzOTtzIFNvQyBhbmQgRXRoZXJuZXQgc3dpdGNoIElDcy5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgUENTX1JaTjFfTUlJQ1xuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVuZXNhcyBSWi9OMSwgUlovTjJILCBSWi9UMkggTUlJIGNvbnZlcnRlclwmIzM0O1xuICAzMTpcdFx0ZGVwZW5kcyBvbiBPRlxuICAzMjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1JFTkVTQVMgfHwgQ09NUElMRV9URVNUXG4gIDMzOlx0XHRoZWxwXG4gIDM0Olx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgTUlJIGNvbnZlcnRlciBhdmFpbGFibGUgb25cbiAgMzU6XHRcdCAgUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJIIFNvQ3MuIFRoaXMgUENTIGNvbnZlcnRzIE1JSSB0b1xuICAzNjpcdFx0ICBSTUlJL1JHTUlJLCBvciBjYW4gYmUgc2V0IGluIHBhc3MtdGhyb3VnaCBtb2RlIGZvciBNSUkuXG4gIDM3Olx0XG4gIDM4Olx0ZW5kbWVudVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTA3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQQ1NfUlpOMV9NSUlDIERyaXZlcioqCgpPa2F5LCBzbyBgY29uZmlnIFBDU19SWk4xX01JSUNgIGlzIGRlcGVuZGVudCBvbiBib3RoIGBPRmAgYW5kIGVpdGhlciBgQVJDSF9SRU5FU0FTYCBvciBgQ09NUElMRV9URVNUYC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgYSBkZXZpY2UgZHJpdmVyLCBsaWtlbHkgdXNpbmcgdGhlIGRldmljZSB0cmVlIGZvciBjb25maWd1cmF0aW9uLCBhbmQgaXQgdGFyZ2V0cyBSZW5lc2FzIGFyY2hpdGVjdHVyZXMsIG9yIGF0IGxlYXN0IG5lZWRzIHRvIGJ1aWxkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiBUaGUgZGVzY3JpcHRpb24gaXRzZWxmIGNsYXJpZmllcyB0aGF0IHRoaXMgbW9kdWxlIGlzIGEgZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgdGhlIE1JSSBjb252ZXJ0ZXIgZm91bmQgb24gUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJIIFNvQ3MuIEEgTUlJIGNvbnZlcnRlciBtb2R1bGUgb24gdGhpcyBwcm9jZXNzb3IgaXMgdmVyeSB1c2VmdWwsIGFuZCB0aGUgZHJpdmVyIHByb3ZpZGVzIHRoZSBvcHRpb24gdG8gY29udmVydCBNSUkgdG8gUk1JSS9SR01JSSwgb3Igb3BlcmF0ZSBpbiBhIHBhc3MtdGhyb3VnaCBtb2RlIGZvciBNSUkuIFRoZSBtZW50aW9uIG9mIHNwZWNpZmljIFNvQyBtb2RlbHMgbmFycm93cyB0aGUgdGFyZ2V0LCBnaXZpbmcgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgaW50ZW5kZWQgaGFyZHdhcmUgZW52aXJvbm1lbnQuIE5vdywgbGV0JiMzOTtzIGRpdmUgZGVlcGVyIGludG8gaG93IHRoaXMgYHBjcy1yem4xLW1paWNgIGRyaXZlciBpcyBhY3R1YWxseSAqdXNlZCogaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIHByb2JlZCBhbmQgY2FsbGVkIOKAkyB3aGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIHR5cGljYWwgdXNlIGNhc2VzPyBUaGlzIHdpbGwgaW52b2x2ZSB0cmFjaW5nIHRoZSBtb2R1bGUmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZGV2aWNlIHRyZWUgYW5kIGxvb2tpbmcgYXQgaG93IG90aGVyIGRyaXZlcnMgbWlnaHQgaW50ZXJhY3Qgd2l0aCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlpY19wcm9iZXxyem4xX21paWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wY3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYz03MzE9c3RhdGljIGludCBtaWljX3Jlc2V0X2NvbnRyb2xfaW5pdChzdHJ1Y3QgbWlpYyAqbWlpYylcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTc2Mi1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6NzYzOnN0YXRpYyBpbnQgbWlpY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy03NjQte1xuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9ODE5PXN0YXRpYyB2b2lkIG1paWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy04MjMtXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjgyNDpzdGF0aWMgc3RydWN0IG1paWNfb2ZfZGF0YSByem4xX21paWNfb2ZfZGF0YSA9IHtcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODI1LVx0Lm1hdGNoX3RhYmxlID0gbW9kY3RybF9tYXRjaF90YWJsZSxcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jPTg1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtaWljX29mX210YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy04NTgtXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVuZXNhcyxyOWEwOWcwNzctbWlpY1wmIzM0OywgLmRhdGEgPSBcdTAwMjZyenQyaF9taWljX29mX2RhdGEgfSxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6ODU5Olx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlbmVzYXMscnpuMS1taWljXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnJ6bjFfbWlpY19vZl9kYXRhIH0sXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg2MC1cdHsgLyogc2VudGluZWwgKi8gfVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9ODY0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1paWNfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy04NjUtXHQuZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzo4NjY6XHRcdC5uYW1lXHQgPSBcJiMzNDtyem4xX21paWNcJiMzNDssXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg2Ny1cdFx0LnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLFxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODY5LVx0fSxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6ODcwOlx0LnByb2JlID0gbWlpY19wcm9iZSxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODcxLVx0LnJlbW92ZSA9IG1paWNfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDA3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBtaWljX2RyaXZlcmAmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYG1paWNfZHJpdmVyYCBpcyBhIHBsYXRmb3JtIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIFJlbmVzYXMgUlovTjEsIFJaL04ySCwgYW5kIFJaL1QySCBTb0NzLCBhbmQgaXQgcmVsaWVzIG9uIE9wZW4gRmlybXdhcmUgKE9GKSBkZXZpY2UgdHJlZXMsIHdoaWNoIGlzIGEga2V5IGluaXRpYWwgZmxhZy4gVGhlIGBzdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZWAgYml0IGltbWVkaWF0ZWx5IHNldHMgb2ZmIGFsYXJtIGJlbGxzLCBhcyB0aGF0IGNvdWxkIGNvbXBsaWNhdGUgdGhpbmdzLiBUaGUgY29kZSBiYXNlIGlzIGRlc2lnbmVkIGFyb3VuZCB0aGUgUmVuZXNhcyBhcmNoaXRlY3R1cmUgKGBBUkNIX1JFTkVTQVNgKSwgd2hpY2ggdHlwaWNhbGx5IGltcGxpZXMgYSBzcGVjaWZpYyBoYXJkd2FyZSBlbnZpcm9ubWVudC4KCk15IGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciBJIGNhbiBldmVuIGluc3RhbnRpYXRlIG9yIGZ1enogdGhpcyBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUsIHNpbmNlIEkmIzM5O20gdGFyZ2V0aW5nIGFtZDY0LiBMZXQmIzM5O3MgY29uZmlybSBteSBzdXNwaWNpb25zOiB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGluZGVlZCBhbWQ2NC4gVGhhdCByYWlzZXMgYSBodWdlIHJlZCBmbGFnOiBjYW4gYW4gT0YgZGV2aWNlIHRyZWUgcGxhdGZvcm0gZGV2aWNlIGJlIHByb2JlZCBvbiBhbWQ2NCB3aXRoaW4gUUVNVT8gQWxtb3N0IGNlcnRhaW5seSBub3Qgd2l0aG91dCBzcGVjaWZpYyBhcnJhbmdlbWVudHMgb3Igd29ya2Fyb3VuZHMuCgpFdmVuIGlmIEkgZm9yY2UgT0YgdG8gY29tcGlsZSB3aXRoIGBDT01QSUxFX1RFU1RgIG9yIGBDT05GSUdfT0ZgIGVuYWJsZWQgb24gYW1kNjQsIHRoZXJlJiMzOTtzIG5vIFJlbmVzYXMgU29DIGRldmljZSB0cmVlIHByZXNlbnQgb24gYW1kNjQsIGFuZCB0aGUgYHN1cHByZXNzX2JpbmRfYXR0cnNgIHByZXZlbnRzIGJpbmRpbmcgaXQgdmlhIHN5c2ZzIGAvc3lzL2J1cy9wbGF0Zm9ybS9kcml2ZXJzL3J6bjFfbWlpYy9iaW5kYC4gVGhpcyBpcyBhIGhhcmQgc3RvcC4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciBhbnkgT0YgY2hhbmdlc2V0cyBvciBzb21ldGhpbmcgY291bGQgbWFnaWNhbGx5IGluc3RhbnRpYXRlIGl0LCBidXQgbXkgaW50dWl0aW9uIHNheXMgdGhpcyBkcml2ZXIgd2FudHMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gYWN0dWFsbHkgZnVuY3Rpb24uIExldCYjMzk7cyBhcHBseSB0aGUgZXN0YWJsaXNoZWQgbmVnYXRpdmUgY3JpdGVyaWEgdG8gY29uZmlybSBteSBhc3Nlc3NtZW50LgoKSSBnbyBiYWNrIHRvIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gSXMgdGhpcyBkcml2ZXIgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBvciBpcyBpdCBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIGFtZDY0PyBUaGlzIGlzIHRoZSBjb3JlIHF1ZXN0aW9uLgoKSSBuZWVkIHRvIG5haWwgZG93biB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZTogUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJILiBSWi9OMSBpcyBBUk0gKENvcnRleC1BNykuIFJaL04yTCwgUlovVDJNIGV0Yy4gYXJlIEFSTSAoQ29ydGV4LVI1MikuIFJaL0cyTCBpcyBBUk02NC4gQW5kIGBBUkNIX1JFTkVTQVNgIHN1cHBvcnRzIEFSTSAvIEFSTTY0LiBPbiBhbWQ2NCwgYEFSQ0hfUkVORVNBU2AgaXMgKm5vdCogc2V0LiBJdCBvbmx5IGNvbXBpbGVzIGlmIGBDT05GSUdfQ09NUElMRV9URVNUYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBkZXBlbmRlbnQgb24gYE9GYCAoYENPTkZJR19PRmApLCB3aGljaCBpc24mIzM5O3QgdXNlZCBvbiBhbWQ2NC4KCk9uIGFtZDY0ICh4ODZfNjQpLCBBQ1BJIGlzIHRoZSBzdGFuZGFyZCBhbmQgcHJldmFsZW50IGRldmljZSB0cmVlIHN5c3RlbS4gVGhlIGRyaXZlciBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgYW4gU29DLWludGVybmFsIE1JSSBjb252ZXJ0ZXIgKGByZW5lc2FzLHJ6bjEtbWlpY2Agb3IgYHJlbmVzYXMscjlhMDlnMDc3LW1paWNgKS4gTXkgYmVzdCBiZXQgaXMgdG8gY2hlY2sgdGhlIGBtaWljX3Byb2JlYCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHdoaWNoIHJlc291cmNlcyB0aGUgZHJpdmVyIGFjdHVhbGx5IHJlcXVlc3RzLCBidXQgdGhlIGRpcmVjdGlvbiBJJiMzOTttIHNlZWluZyBpcyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IG91dCBvZiBzY29wZSBmb3Igc3RhbmRhcmQgUUVNVSBvbiBhbWQ2NC4gSSB0aGluayBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gbWFyayB0aGlzIGFzIE5PVCBmdXp6YWJsZSBhcyBpdCBpcyBhbG1vc3QgY2VydGFpbmx5IGEgU3RydWN0dXJhbGx5IFVucmVhY2hhYmxlIEhhcmR3YXJlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzYwOlx0XHRyZXR1cm4gMDtcbiA3NjE6XHR9XG4gNzYyOlx0XG4gNzYzOlx0c3RhdGljIGludCBtaWljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gNzY0Olx0e1xuIDc2NTpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4gNzY2Olx0XHRzdHJ1Y3QgbWlpYyAqbWlpYztcbiA3Njc6XHRcdHUzMiBtb2RlX2NmZztcbiA3Njg6XHRcdGludCByZXQ7XG4gNzY5Olx0XG4gNzcwOlx0XHRtaWljID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptaWljKSwgR0ZQX0tFUk5FTCk7XG4gNzcxOlx0XHRpZiAoIW1paWMpXG4gNzcyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDc3MzpcdFxuIDc3NDpcdFx0bWlpYy1cdTAwM2VvZl9kYXRhID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XG4gNzc1Olx0XHRtaWljLVx1MDAzZWRldiA9IGRldjtcbiA3NzY6XHRcbiA3Nzc6XHRcdHJldCA9IG1paWNfcGFyc2VfZHQobWlpYywgXHUwMDI2bW9kZV9jZmcpO1xuIDc3ODpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA3Nzk6XHRcdFx0cmV0dXJuIHJldDtcbiA3ODA6XHRcbiA3ODE6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1paWMtXHUwMDNlbG9jayk7XG4gNzgyOlx0XHRtaWljLVx1MDAzZWJhc2UgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7XG4gNzgzOlx0XHRpZiAoSVNfRVJSKG1paWMtXHUwMDNlYmFzZSkpXG4gNzg0Olx0XHRcdHJldHVybiBQVFJfRVJSKG1paWMtXHUwMDNlYmFzZSk7XG4gNzg1Olx0XG4gNzg2Olx0XHRyZXQgPSBtaWljX3Jlc2V0X2NvbnRyb2xfaW5pdChtaWljKTtcbiA3ODc6XHRcdGlmIChyZXQpXG4gNzg4Olx0XHRcdHJldHVybiByZXQ7XG4gNzg5Olx0XG4gNzkwOlx0XHRyZXQgPSBkZXZtX3BtX3J1bnRpbWVfZW5hYmxlKGRldik7XG4gNzkxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDc5MjpcdFx0XHRyZXR1cm4gcmV0O1xuIDc5MzpcdFxuIDc5NDpcdFx0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChkZXYpO1xuIDc5NTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA3OTY6XHRcdFx0cmV0dXJuIHJldDtcbiA3OTc6XHRcbiA3OTg6XHRcdHJldCA9IG1paWNfaW5pdF9odyhtaWljLCBtb2RlX2NmZyk7XG4gNzk5Olx0XHRpZiAocmV0KVxuIDgwMDpcdFx0XHRnb3RvIGRpc2FibGVfcnVudGltZV9wbTtcbiA4MDE6XHRcbiA4MDI6XHRcdG1paWNfcmVnX3JtdyhtaWljLCBNSUlDX1BIWV9MSU5LLCBtaWljLVx1MDAzZWxpbmtfY2ZnLm1hc2ssIG1paWMtXHUwMDNlbGlua19jZmcudmFsKTtcbiA4MDM6XHRcbiA4MDQ6XHRcdC8qIG1paWNfY3JlYXRlKCkgcmVsaWVzIG9uIHRoYXQgZmFjdCB0aGF0IGRhdGEgYXJlIGF0dGFjaGVkIHRvIHRoZVxuIDgwNTpcdFx0ICogcGxhdGZvcm0gZGV2aWNlIHRvIGRldGVybWluZSBpZiB0aGUgZHJpdmVyIGlzIHJlYWR5IHNvIHRoaXMgbmVlZHMgdG9cbiA4MDY6XHRcdCAqIGJlIHRoZSBsYXN0IHRoaW5nIHRvIGJlIGRvbmUgYWZ0ZXIgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZFxuIDgwNzpcdFx0ICogcHJvcGVybHkuXG4gODA4Olx0XHQgKi9cbiA4MDk6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1paWMpO1xuIDgxMDpcdFxuIDgxMTpcdFx0cmV0dXJuIDA7XG4gODEyOlx0XG4gODEzOlx0ZGlzYWJsZV9ydW50aW1lX3BtOlxuIDgxNDpcdFx0cG1fcnVudGltZV9wdXQoZGV2KTtcbiA4MTU6XHRcbiA4MTY6XHRcdHJldHVybiByZXQ7XG4gODE3Olx0fVxuIDgxODpcdFxuIDgxOTpcdHN0YXRpYyB2b2lkIG1paWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgdGhlIGBBUkNIX1JFTkVTQVNgIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgQVJDSF9SRU5FU0FTYCBhY3R1YWxseSByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dC4gTGV0JiMzOTtzIHNlZS4uLiBJIHNob3VsZCBjaGVjayB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBNeSBnby10byBhcHByb2FjaCBpcyB0byBsb2NhdGUgdGhlIGRlZmluaXRpb24uIE9rYXksIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgYGdyZXBgIGZvciBgY29uZmlnIEFSQ0hfUkVORVNBU2AgLiBUaGF0IHNob3VsZCBwaW5wb2ludCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlIHdoZXJlIHRoaXMgb3B0aW9uIGlzIGRlY2xhcmVkLCBhbmQgdGhlIHNlYXJjaCByZXN1bHRzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludC4gVGhpcyB3aWxsIGdpdmUgbWUgYWxsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIGFjdGl2ZS4gTm93IHRvIHNlYXJjaCwgYW5kIGhvcGVmdWxseSBmaWd1cmUgb3V0IGl0cyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFSQ0hfUkVORVNBUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnOjI6bWVudWNvbmZpZyBBUkNIX1JFTkVTQVNcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtSZW5lc2FzIEFSTSBTb0NzXCYjMzQ7XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3Jtcz0zMzU9Y29uZmlnIEFSQ0hfUkVBTFRFS1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXMtMzQxLVxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3JtczozNDI6Y29uZmlnIEFSQ0hfUkVORVNBU1xuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3Jtcy0zNDMtXHRib29sIFwmIzM0O1JlbmVzYXMgU29DIFBsYXRmb3Jtc1wmIzM0O1xuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy5zb2NzPTI0PWNvbmZpZyBBUkNIX01JQ1JPQ0hJUFxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy5zb2NzLTI4LVxuYXJjaC9yaXNjdi9LY29uZmlnLnNvY3M6Mjk6Y29uZmlnIEFSQ0hfUkVORVNBU1xuYXJjaC9yaXNjdi9LY29uZmlnLnNvY3MtMzAtXHRib29sIFwmIzM0O1JlbmVzYXMgUklTQy1WIFNvQ3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTczMwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlbmVzYXMgTUlJQyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVsYXRpb25zaGlwcyBoZXJlLiBGaXJzdCBvZmYsIGBBUkNIX1JFTkVTQVNgIGVuY29tcGFzc2VzIHF1aXRlIGEgZmV3IGFyY2hpdGVjdHVyZXMgLSBBUk0sIEFSTTY0LCBhbmQgUklTQy1WIFN5c3RlbS1vbi1DaGlwcy4gVGhlIHBvaW50IGlzLCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgd2hlbiBJIHNlZSBpdCwgSSAqa25vdyogaXQmIzM5O3Mgbm90IGFwcGxpY2FibGUgdG8gYGFtZDY0YC4gSXQmIzM5O3Mgbm90IGFuIGFtZDY0IGFyY2hpdGVjdHVyZSBkcml2ZXIuIEkgaGF2ZSB0byByZW1lbWJlciB0aGlzIGFzIEkgZGlnIGRlZXBlci4KCk5vdywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoaXMgYHBjcy1yem4xLW1paWMuY2AgZmlsZS4gVGhlIHByaW1hcnkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIGV4dGVudCBvZiBpdHMgdXNhZ2Ugb3V0c2lkZSBvZiB0aGUgYG1paWNfcHJvYmVgIGZ1bmN0aW9uLiBUaGlzIGlzIGNyaXRpY2FsLiBBcmUgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBpbnRlcmFjdGluZyB3aXRoIHRoaXMgZHJpdmVyPyBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbHMuIEkgbmVlZCB0byBiZSBzdXJlIGJlZm9yZSBtb3Zpbmcgb24uIEkmIzM5O2xsIHNlYXJjaCBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgYHJ6bjFfbWlpY2AgdGhyb3VnaG91dCB0aGUgZW50aXJlIGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyem4xWy1fXW1paWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvcmVuZXNhcyxyem4xLWE1cHN3LnlhbWw9MTk9cHJvcGVydGllczpcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9yZW5lc2FzLHJ6bjEtYTVwc3cueWFtbC03My0gICAgICAgICAgICAgIHBoYW5kbGUgcG9pbnRpbmcgdG8gYSBQQ1Mgc3ViLW5vZGUgY29tcGF0aWJsZSB3aXRoXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9yZW5lc2FzLHJ6bjEtYTVwc3cueWFtbDo3NDogICAgICAgICAgICAgIHJlbmVzYXMscnpuMS1taWljLnlhbWwjXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9yZW5lc2FzLHJ6bjEtYTVwc3cueWFtbC03NS1cbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sLTMtLS0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sOjQ6JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwjXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sLTUtJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbD0xNz1wcm9wZXJ0aWVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwtMjgtICAgICAgICAgICAgICAtIHJlbmVzYXMscjlhMDZnMDMyLW1paWNcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWw6Mjk6ICAgICAgICAgIC0gY29uc3Q6IHJlbmVzYXMscnpuMS1taWljXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sLTMwLSAgICAgIC0gaXRlbXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC02NC0gICAgZGVzY3JpcHRpb246IE1JSSBTd2l0Y2ggUE9SVElOIGNvbmZpZ3VyYXRpb24uIFRoaXMgdmFsdWUgc2hvdWxkIHVzZSBvbmUgb2ZcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWw6NjU6ICAgICAgdGhlIHZhbHVlcyBkZWZpbmVkIGluIGR0LWJpbmRpbmdzL25ldC9wY3MtcnpuMS1taWljLmggZm9yIFJaL04xIFNvQyBhbmRcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwtNjYtICAgICAgaW5jbHVkZS9kdC1iaW5kaW5ncy9uZXQvcmVuZXNhcyxyOWEwOWcwNzctcGNzLW1paWMuaCBmb3IgUlovTjJILCBSWi9UMkggU29Dcy5cbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sPTczPXBhdHRlcm5Qcm9wZXJ0aWVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwtODQtICAgICAgICBkZXNjcmlwdGlvbjogQ29udmVydGVyIGlucHV0IHBvcnQgY29uZmlndXJhdGlvbi4gVGhpcyB2YWx1ZSBzaG91bGQgdXNlXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sOjg1OiAgICAgICAgICBvbmUgb2YgdGhlIHZhbHVlcyBkZWZpbmVkIGluIGR0LWJpbmRpbmdzL25ldC9wY3MtcnpuMS1taWljLmggZm9yIFJaL04xIFNvQ1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC04Ni0gICAgICAgICAgYW5kIGluY2x1ZGUvZHQtYmluZGluZ3MvbmV0L3JlbmVzYXMscjlhMDlnMDc3LXBjcy1taWljLmggZm9yIFJaL04ySCwgUlovVDJIIFNvQ3MuXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbD0xMDI9YWxsT2Y6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC0xMDYtICAgICAgICAgIGNvbnRhaW5zOlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbDoxMDc6ICAgICAgICAgICAgY29uc3Q6IHJlbmVzYXMscnpuMS1taWljXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sLTEwOC0gICAgdGhlbjpcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sPTIxNz1leGFtcGxlczpcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwtMjE4LSAgLSB8XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sOjIxOTogICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvbmV0L3Bjcy1yem4xLW1paWMuaFx1MDAzZVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC0yMjAtICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2Nsb2NrL3I5YTA2ZzAzMi1zeXNjdHJsLmhcdTAwM2Vcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sLTIyNC0gICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sOjIyNTogICAgICBjb21wYXRpYmxlID0gXCYjMzQ7cmVuZXNhcyxyOWEwNmcwMzItbWlpY1wmIzM0OywgXCYjMzQ7cmVuZXNhcyxyem4xLW1paWNcJiMzNDs7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sLTIyNi0gICAgICByZWcgPSBcdTAwM2MweDQ0MDMwMDAwIDB4MTAwMDBcdTAwM2U7XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLHJ6bjEtZ21hYy55YW1sPTI1PXByb3BlcnRpZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLHJ6bjEtZ21hYy55YW1sLTQ0LSAgICAgIHBoYW5kbGUgcG9pbnRpbmcgdG8gYSBQQ1Mgc3ViLW5vZGUgY29tcGF0aWJsZSB3aXRoXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMscnpuMS1nbWFjLnlhbWw6NDU6ICAgICAgcmVuZXNhcyxyem4xLW1paWMueWFtbCNcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxyem4xLWdtYWMueWFtbC00Ni1cbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMscnp2MmgtZ2JldGgueWFtbD0yNj1wcm9wZXJ0aWVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxyenYyaC1nYmV0aC55YW1sLTE1My0gICAgICBwaGFuZGxlIHBvaW50aW5nIHRvIGEgUENTIHN1Yi1ub2RlIGNvbXBhdGlibGUgd2l0aFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLHJ6djJoLWdiZXRoLnlhbWw6MTU0OiAgICAgIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwjXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMscnp2MmgtZ2JldGgueWFtbC0xNTUtICAgICAgKFJlZmVyIFJaL1QySCBwb3J0aW9uIGluIHRoZSBEVC1iaW5kaW5nIGZpbGUpXG4tLVxuTUFJTlRBSU5FUlM9MjMyNjU9RjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL3JlbmVzYXMscnpuMS1hNXBzdy55YW1sXG5NQUlOVEFJTkVSUzoyMzI2NjpGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbFxuTUFJTlRBSU5FUlMtMjMyNjctRjpcdGRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3KlxuTUFJTlRBSU5FUlM6MjMyNjg6RjpcdGRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmNcbk1BSU5UQUlORVJTOjIzMjY5OkY6XHRpbmNsdWRlL2R0LWJpbmRpbmdzL25ldC9wY3MtcnpuMS1taWljLmhcbk1BSU5UQUlORVJTOjIzMjcwOkY6XHRpbmNsdWRlL2xpbnV4L3Bjcy1yem4xLW1paWMuaFxuTUFJTlRBSU5FUlMtMjMyNzEtRjpcdG5ldC9kc2EvdGFnX3J6bjFfYTVwc3cuY1xuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL3JlbmVzYXMvcjlhMDZnMDMyLXJ6bjFkNDAwLWRiLmR0cy0xMy0jaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9sZWRzL2NvbW1vbi5oXHUwMDNlXG5hcmNoL2FybS9ib290L2R0cy9yZW5lc2FzL3I5YTA2ZzAzMi1yem4xZDQwMC1kYi5kdHM6MTQ6I2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvbmV0L3Bjcy1yem4xLW1paWMuaFx1MDAzZVxuYXJjaC9hcm0vYm9vdC9kdHMvcmVuZXNhcy9yOWEwNmcwMzItcnpuMWQ0MDAtZGIuZHRzLTE1LSNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL3BpbmN0cmwvcnpuMS1waW5jdHJsLmhcdTAwM2Vcbi0tXG5hcmNoL2FybS9ib290L2R0cy9yZW5lc2FzL3I5YTA2ZzAzMi5kdHNpPTQ1Nz1cdFx0ZXRoX21paWM6IGV0aC1taWljQDQ0MDMwMDAwIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL3JlbmVzYXMvcjlhMDZnMDMyLmR0c2k6NDU4Olx0XHRcdGNvbXBhdGlibGUgPSBcJiMzNDtyZW5lc2FzLHI5YTA2ZzAzMi1taWljXCYjMzQ7LCBcJiMzNDtyZW5lc2FzLHJ6bjEtbWlpY1wmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL3JlbmVzYXMvcjlhMDZnMDMyLmR0c2ktNDU5LVx0XHRcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5oLTE0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5oOjE1OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy1yem4xLW1paWMuaFx1MDAzZVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuaC0xNi0jaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jOjIwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy1yem4xLW1paWMuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jLTIxLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jLTgtI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jOjk6I2luY2x1ZGUgXHUwMDNjbGludXgvcGNzLXJ6bjEtbWlpYy5oXHUwMDNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX1BDU19NVEtfTFlOWEkpXHQmIzQzOz0gcGNzLW10ay1seW54aS5vXG5kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX1BDU19SWk4xX01JSUMpXHQmIzQzOz0gcGNzLXJ6bjEtbWlpYy5vXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy0xNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9wbGF0Zm9ybS5oXHUwMDNlXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjE3OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy1yem4xLW1paWMuaFx1MDAzZVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy0xOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9waHlsaW5rLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTIyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzoyMzojaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9uZXQvcGNzLXJ6bjEtbWlpYy5oXHUwMDNlXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTI0LSNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL25ldC9yZW5lc2FzLHI5YTA5ZzA3Ny1wY3MtbWlpYy5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYz04MTk9c3RhdGljIHZvaWQgbWlpY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTgyMy1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6ODI0OnN0YXRpYyBzdHJ1Y3QgbWlpY19vZl9kYXRhIHJ6bjFfbWlpY19vZl9kYXRhID0ge1xuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy04MjUtXHQubWF0Y2hfdGFibGUgPSBtb2RjdHJsX21hdGNoX3RhYmxlLFxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9ODU3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1paWNfb2ZfbXRhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg1OC1cdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZW5lc2FzLHI5YTA5ZzA3Ny1taWljXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnJ6dDJoX21paWNfb2ZfZGF0YSB9LFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzo4NTk6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVuZXNhcyxyem4xLW1paWNcJiMzNDssIC5kYXRhID0gXHUwMDI2cnpuMV9taWljX29mX2RhdGEgfSxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODYwLVx0eyAvKiBzZW50aW5lbCAqLyB9XG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYz04NjQ9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWlpY19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg2NS1cdC5kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjg2NjpcdFx0Lm5hbWVcdCA9IFwmIzM0O3J6bjFfbWlpY1wmIzM0OyxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODY3LVx0XHQuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzY1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBSWi9OMSBNSUlDIERyaXZlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBSWi9OMSBNSUlDIGRyaXZlci4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgY3JhY2sgb3BlbiBgaW5jbHVkZS9saW51eC9wY3MtcnpuMS1taWljLmhgLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGhlYWRlciBmaWxlIHRvIGxheSBvdXQgdGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgdGhhdCBkZWZpbmUgdGhlIGhhcmR3YXJlIGludGVyZmFjZS4gSG9wZWZ1bGx5LCBpdCBjb250YWlucyBkZXRhaWxzIGFib3V0IHRoZSBNSUlDIHJlZ2lzdGVycyB0aGVtc2VsdmVzIOKAkyB0aGUgYml0ZmllbGRzLCB0aGVpciBhZGRyZXNzZXMsIHRoZSB2YXJpb3VzIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcnMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgY2xvY2sgY29uZmlndXJhdGlvbiBhbmQgbWFuYWdlbWVudCwgZ2l2ZW4gdGhlIGNyaXRpY2FsIHRpbWluZyByZXF1aXJlbWVudHMgb2YgRXRoZXJuZXQgUEhZIGNvbW11bmljYXRpb24uIEnigJltIGFsc28gbG9va2luZyBmb3IgYW55IGN1c3RvbSBvciBSWi9OMS1zcGVjaWZpYyBleHRlbnNpb25zIHRoYXQgbWlnaHQgYmUgaW5jbHVkZWQuIFRoaW5ncyBsaWtlIGludGVycnVwdCBtYXBwaW5ncywgRE1BIHNldHVwIHN0cnVjdHVyZXMgKGlmIERNQSBpcyB1c2VkKSwgYW5kIHBvdGVudGlhbGx5IHNvbWUgb2YgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdvb2RpZXMgYXJlIGluIHRoZXJlLiBJJiMzOTttIGhvcGluZyBmb3Igc29tZSBjbGVhbiwgd2VsbC1kZWZpbmVkIG1hY3JvcyB0aGF0IG1ha2UgaXQgZWFzaWVyIHRvIGdyb2sgdGhlIGhhcmR3YXJlIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGNzLXJ6bjEtbWlpYy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiAgIDI6XHQvKlxuICAgMzpcdCAqIENvcHlyaWdodCAoQykgMjAyMiBTY2huZWlkZXIgRWxlY3RyaWNcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENsw6ltZW50IEzDqWdlciBcdTAwM2NjbGVtZW50LmxlZ2VyQGJvb3RsaW4uY29tXHUwMDNlXG4gICA2Olx0ICovXG4gICA3Olx0XG4gICA4Olx0I2lmbmRlZiBfX0xJTlVYX1BDU19NSUlDX0hcbiAgIDk6XHQjZGVmaW5lIF9fTElOVVhfUENTX01JSUNfSFxuICAxMDpcdFxuICAxMTpcdHN0cnVjdCBwaHlsaW5rO1xuICAxMjpcdHN0cnVjdCBkZXZpY2Vfbm9kZTtcbiAgMTM6XHRcbiAgMTQ6XHRzdHJ1Y3QgcGh5bGlua19wY3MgKm1paWNfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucCk7XG4gIDE1Olx0XG4gIDE2Olx0dm9pZCBtaWljX2Rlc3Ryb3koc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpO1xuICAxNzpcdFxuICAxODpcdCNlbmRpZiAvKiBfX0xJTlVYX1BDU19NSUlDX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MDgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ2FsbHMgdG8gYG1paWNfY3JlYXRlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgYG1paWNfY3JlYXRlYC4uLndoYXQmIzM5O3MgKmFjdHVhbGx5KiBpbnZva2luZyBpdD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gSSB3YW50IHRvIHNlZSB0aGUgY2FsbCBncmFwaCwgYnV0IG5vdCBqdXN0IHRoZSBkaXJlY3QgY2FsbGVycy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgKndoeSogLSB3aGF0IGFyZSB0aGUgaGlnaGVyLWxldmVsIGZ1bmN0aW9ucyBvciBtb2R1bGVzIHRoYXQgZGVwZW5kIG9uIGBtaWljX2NyZWF0ZWA/IEFyZSB0aGVyZSBzcGVjaWZpYyBzY2VuYXJpb3Mgd2hlcmUgaXQmIzM5O3MgdXNlZD8gSXMgdGhpcyBhIGNvcmUgZnVuY3Rpb25hbGl0eSBwaWVjZSwgb3IgaXMgaXQgbW9yZSBvZiBhIHV0aWxpdHkgZnVuY3Rpb24gZm9yIHNwZWNpZmljIHN1YnN5c3RlbXM/CgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHJlc291cmNlcyBpbnZvbHZlZC4gRG9lcyBgbWlpY19jcmVhdGVgIGFsbG9jYXRlIGFueXRoaW5nPyBJZiBzbywgd2hhdD8gSG93JiMzOTtzIGl0IGluaXRpYWxpemVkPyBJJiMzOTtsbCBwcm9iYWJseSBiZSBpbnRlcmVzdGVkIGluIHRyYWNraW5nIHRoZSBsaWZldGltZSBvZiB0aGVzZSBhbGxvY2F0ZWQgcmVzb3VyY2VzIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWVzIGRvd24gdGhlIGxpbmUuCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gYG1paWNfY3JlYXRlYC4gQXJlIHRoZXkgY29uc2lzdGVudD8gQXJlIHRoZXJlIGFueSBjb21tb24gcGF0dGVybnMgb3Igc3VycHJpc2luZyBpbnB1dHM/IEkmIzM5O2xsIHdhbnQgdG8gcXVpY2tseSBsb29rIGZvciBhbnkgZWRnZSBjYXNlcywgbGlrZSBudWxsIHBvaW50ZXJzIG9yIHVuZXhwZWN0ZWQgdmFsdWVzIHRoYXQgbWlnaHQgbGVhZCB0byBjcmFzaGVzIG9yIHVuZGVmaW5lZCBiZWhhdmlvci4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoYXQgdGhlIGZ1bmN0aW9uICpyZXR1cm5zKi4gSXMgaXQgYSBzdWNjZXNzL2ZhaWx1cmUgY29kZT8gQSBoYW5kbGU/IFdoYXQga2luZCBvZiBlcnJvciBoYW5kbGluZyBpcyBpbXBsZW1lbnRlZD8gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBob3cgaXQmIzM5O3MgaGFuZGxlZCB1cCB0aGUgY2FsbCBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlpY19jcmVhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYz0xMTU3PXN0YXRpYyBpbnQgYTVwc3dfcGNzX2dldChzdHJ1Y3QgYTVwc3cgKmE1cHN3KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE4Mi1cbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM6MTE4MzpcdFx0cGNzID0gbWlpY19jcmVhdGUoYTVwc3ctXHUwMDNlZGV2LCBwY3Nfbm9kZSk7XG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExODQtXHRcdGlmIChJU19FUlIocGNzKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguYz02Mz1zdGF0aWMgaW50IHJlbmVzYXNfZ21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jLTcwLVx0aWYgKHBjc19ub2RlKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmM6NzE6XHRcdHBjcyA9IG1paWNfY3JlYXRlKHByaXYtXHUwMDNlZGV2aWNlLCBwY3Nfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMtNzItXHRcdG9mX25vZGVfcHV0KHBjc19ub2RlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmM9MTY9c3RhdGljIGludCByem4xX2R3bWFjX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtMjQtXHRpZiAocGNzX25vZGUpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYzoyNTpcdFx0cGNzID0gbWlpY19jcmVhdGUocHJpdi1cdTAwM2VkZXZpY2UsIHBjc19ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYy0yNi1cdFx0b2Zfbm9kZV9wdXQocGNzX25vZGUpO1xuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9NDQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzIG1paWNfcGh5bGlua19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy00NDktXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjQ1MDpzdHJ1Y3QgcGh5bGlua19wY3MgKm1paWNfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucClcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtNDUxLXtcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTUwOC19XG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjUwOTpFWFBPUlRfU1lNQk9MKG1paWNfY3JlYXRlKTtcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtNTEwLVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9NzYzPXN0YXRpYyBpbnQgbWlpY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODAzLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzo4MDQ6XHQvKiBtaWljX2NyZWF0ZSgpIHJlbGllcyBvbiB0aGF0IGZhY3QgdGhhdCBkYXRhIGFyZSBhdHRhY2hlZCB0byB0aGVcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODA1LVx0ICogcGxhdGZvcm0gZGV2aWNlIHRvIGRldGVybWluZSBpZiB0aGUgZHJpdmVyIGlzIHJlYWR5IHNvIHRoaXMgbmVlZHMgdG9cbi0tXG5pbmNsdWRlL2xpbnV4L3Bjcy1yem4xLW1paWMuaD0xMj1zdHJ1Y3QgZGV2aWNlX25vZGU7XG5pbmNsdWRlL2xpbnV4L3Bjcy1yem4xLW1paWMuaC0xMy1cbmluY2x1ZGUvbGludXgvcGNzLXJ6bjEtbWlpYy5oOjE0OnN0cnVjdCBwaHlsaW5rX3BjcyAqbWlpY19jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcbmluY2x1ZGUvbGludXgvcGNzLXJ6bjEtbWlpYy5oLTE1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIxNgoJCQkJCQkJb3V0cHV0OiAxNDEKCQkJCQkJCXRob3VnaHRzOiA5MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgUmVuZXNhcyBTb0MgRXRoZXJuZXQgQ29udHJvbGxlciBEcml2ZXIgb24gYW1kNjQqKgoKT2theSwgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGlzIGlzIGEgZGVhZCBlbmQgZm9yIGZ1enppbmcgb24gYW1kNjQuIGBtaWljX2NyZWF0ZWAgaXMgb25seSBjYWxsZWQgYnkgcGxhdGZvcm0gZHJpdmVycyBmb3IgUmVuZXNhcyBFdGhlcm5ldCBjb250cm9sbGVyczogUlovTjEgKHNwZWNpZmljKS4gVGhlIGNvZGUgbW9kaWZpZWQgYnkgdGhlIHBhdGNoIGlzIHdpdGhpbiBgbWlpY19wYXJzZV9kdGAsIHdoaWNoIGlzIG9ubHkgZXZlciBjYWxsZWQgZHVyaW5nIHRoZSBgbWlpY19wcm9iZWAgZnVuY3Rpb24uIGBtaWljX3Byb2JlYCBpcywgaW4gdHVybiwgdGhlIHByb2JlIGZ1bmN0aW9uIG9mIHRoZSBgbWlpY19kcml2ZXJgLiBUaGUgZHJpdmVyIHNwZWNpZmljYWxseSBsb29rcyBmb3IgZGV2aWNlcyB3aXRoICYjMzQ7cmVuZXNhcyxyem4xLW1paWMmIzM0OyBvciBzaW1pbGFyIGNvbXBhdGlibGUgc3RyaW5ncyBpbiB0aGUgRGV2aWNlIFRyZWUuIFRoaXMgaXMgYSBjbGVhciBpbmRpY2F0b3Igb2YgaXQgYmVpbmcgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIGEgUmVuZXNhcyBTb0MsIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgQVJNL1JJU0MtViBiYXNlZCBzeXN0ZW1zLgoKTm93LCB0aGUgaW1wb3J0YW50IGJpdDogSSYjMzk7bSBmdXp6aW5nIG9uIGFtZDY0LiBUaGVzZSBSZW5lc2FzIFNvQ3MgYXJlIEFSTS9SSVNDLVYgYmFzZWQsIHNvIHRoZXkgc2ltcGx5IGRvbiYjMzk7dCBleGlzdCBvbiB0aGlzIHRhcmdldCBhcmNoaXRlY3R1cmUuIFRoZXJlJiMzOTtzIG5vIGhhcmR3YXJlLCBubyBlbXVsYXRlZCBoYXJkd2FyZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgYW5kIHRoZXJlZm9yZSBubyBEZXZpY2UgVHJlZSBub2RlcyBmb3IgdGhlc2UgZGV2aWNlcy4gRnVydGhlcm1vcmUsIHRoZSBkcml2ZXIgaGFzIGBzdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZWAsIHdoaWNoIG1lYW5zIHRoZXJlJiMzOTtzIG5vIHdheSB0byBmb3JjZSBiaW5kaW5nIHZpYSBzeXNmcywgZXZlbiBpZiBhIGR1bW15IHBsYXRmb3JtIGRldmljZSAqY291bGQqIGJlIGNyZWF0ZWQuIFRoaXMgbGluZXMgdXAgcGVyZmVjdGx5IHdpdGggdGhlICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgbmVnYXRpdmUgY3JpdGVyaWEuIEFsbCB0aGUgcGllY2VzIGZpdDogaXQmIzM5O3MgYSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoIG9uIGFtZDY0LiBUaGUgbW9kaWZpZWQgY29kZSwgdGhlIERldmljZSBUcmVlIHBhcnNpbmcsIGV2ZXJ5dGhpbmcgaXMgZGVwZW5kZW50IG9uIFJlbmVzYXMtc3BlY2lmaWMgaGFyZHdhcmUgdGhhdCYjMzk7cyBzaW1wbHkgbm90IHByZXNlbnQgaW4gdGhpcyBzZXR1cC4gVGhpcyBpcyBkZWZpbml0ZWx5IG5vdCBhIHdvcnRod2hpbGUgZnV6emluZyB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiBkcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgdGhlIE1JSSBjb252ZXJ0ZXIgb24gUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJIIFNvQ3MgKEFSTS9SSVNDLVYgYXJjaGl0ZWN0dXJlcykuIEl0IHJlcXVpcmVzIFNvQy1zcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyBhbmQgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODYvYW1kNjQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyBpdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBjb2RlIGlzIGluIGRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMsIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciB0aGUgTUlJIGNvbnZlcnRlciBvbiBSZW5lc2FzIFJaL04xLCBSWi9OMkgsIGFuZCBSWi9UMkggU29DcyAoQVJNL1JJU0MtViBhcmNoaXRlY3R1cmVzKS4gSXQgcmVxdWlyZXMgU29DLXNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzIGFuZCBwaHlzaWNhbCBTb0MgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHg4Ni9hbWQ2NCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIGl0IHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1OTozMi41NDczNjA5OTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODU1Nzg2Nzc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIG1vZGlmaWVkIGNvZGUgaXMgaW4gZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYywgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHRoZSBNSUkgY29udmVydGVyIG9uIFJlbmVzYXMgUlovTjEsIFJaL04ySCwgYW5kIFJaL1QySCBTb0NzIChBUk0vUklTQy1WIGFyY2hpdGVjdHVyZXMpLiBJdCByZXF1aXJlcyBTb0Mtc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMgYW5kIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgeDg2L2FtZDY0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgaXQgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIGFtZDY0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTk6MzIuNTQ3MzY2NDQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ2NTkzOTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzhhNDllODE1NTQ0ZTkyZTI0YzEwNjRkZTI2OTUzNmRjNjFjZmY1NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAxOTo1OTozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY1xcbmluZGV4IDJiNzJmYTk4ZGRmMTMuLjFiZDk1ZGRmOTQwMGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmNcXG5AQCAtNjgzLDcgKzY4Myw4IEBAIHN0YXRpYyBpbnQgbWlpY19wYXJzZV9kdChzdHJ1Y3QgbWlpYyAqbWlpYywgdTMyICptb2RlX2NmZylcXG4gXFx0aWYgKCFkdF92YWwpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0bWVtc2V0KGR0X3ZhbCwgTUlJQ19NT0RDVFJMX0NPTkZfTk9ORSwgc2l6ZW9mKCpkdF92YWwpKTtcXG4rXFx0bWVtc2V0KGR0X3ZhbCwgTUlJQ19NT0RDVFJMX0NPTkZfTk9ORSxcXG4rXFx0ICAgICAgIHNpemVvZigqZHRfdmFsKSAqIG1paWMtXFx1MDAzZW9mX2RhdGEtXFx1MDAzZWNvbmZfY29udl9jb3VudCk7XFxuIFxcbiBcXHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIFxcXCJyZW5lc2FzLG1paWMtc3dpdGNoLXBvcnRpblxcXCIsIFxcdTAwMjZjb25mKSA9PSAwKVxcbiBcXHRcXHRkdF92YWxbMF0gPSBjb25mO1xcbkBAIC02OTIsNiArNjkzLDE0IEBAIHN0YXRpYyBpbnQgbWlpY19wYXJzZV9kdChzdHJ1Y3QgbWlpYyAqbWlpYywgdTMyICptb2RlX2NmZylcXG4gXFx0XFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGNvbnYsIFxcXCJyZWdcXFwiLCBcXHUwMDI2cG9ydCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0aWYgKHBvcnQgXFx1MDAzYyBtaWljLVxcdTAwM2VvZl9kYXRhLVxcdTAwM2VtaWljX3BvcnRfc3RhcnQgfHxcXG4rXFx0XFx0ICAgIHBvcnQgXFx1MDAzZSBtaWljLVxcdTAwM2VvZl9kYXRhLVxcdTAwM2VtaWljX3BvcnRfbWF4KSB7XFxuK1xcdFxcdFxcdGRldl9lcnIobWlpYy1cXHUwMDNlZGV2LCBcXFwiUG9ydCBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZFxcXFxuXFxcIiwgcG9ydCk7XFxuK1xcdFxcdFxcdG9mX25vZGVfcHV0KGNvbnYpO1xcbitcXHRcXHRcXHRrZnJlZShkdF92YWwpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGNvbnYsIFxcXCJyZW5lc2FzLG1paWMtaW5wdXRcXFwiLCBcXHUwMDI2Y29uZikpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTk6MzMuOTk0NjE5MDQ5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5NzExMDU5NjgyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiBkcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgdGhlIE1JSSBjb252ZXJ0ZXIgb24gUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJIIFNvQ3MgKEFSTS9SSVNDLVYgYXJjaGl0ZWN0dXJlcykuIEl0IHJlcXVpcmVzIFNvQy1zcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyBhbmQgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODYvYW1kNjQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyBpdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM4YTQ5ZTgxNTU0NGU5MmUyNGMxMDY0ZGUyNjk1MzZkYzYxY2ZmNTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAxOTo1OTozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jXG5pbmRleCAyYjcyZmE5OGRkZjEzLi4xYmQ5NWRkZjk0MDBhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY1xuKysrIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY1xuQEAgLTY4Myw3ICs2ODMsOCBAQCBzdGF0aWMgaW50IG1paWNfcGFyc2VfZHQoc3RydWN0IG1paWMgKm1paWMsIHUzMiAqbW9kZV9jZmcpXG4gXHRpZiAoIWR0X3ZhbClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRtZW1zZXQoZHRfdmFsLCBNSUlDX01PRENUUkxfQ09ORl9OT05FLCBzaXplb2YoKmR0X3ZhbCkpO1xuK1x0bWVtc2V0KGR0X3ZhbCwgTUlJQ19NT0RDVFJMX0NPTkZfTk9ORSxcbitcdCAgICAgICBzaXplb2YoKmR0X3ZhbCkgKiBtaWljLVx1MDAzZW9mX2RhdGEtXHUwMDNlY29uZl9jb252X2NvdW50KTtcbiBcbiBcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgXCJyZW5lc2FzLG1paWMtc3dpdGNoLXBvcnRpblwiLCBcdTAwMjZjb25mKSA9PSAwKVxuIFx0XHRkdF92YWxbMF0gPSBjb25mO1xuQEAgLTY5Miw2ICs2OTMsMTQgQEAgc3RhdGljIGludCBtaWljX3BhcnNlX2R0KHN0cnVjdCBtaWljICptaWljLCB1MzIgKm1vZGVfY2ZnKVxuIFx0XHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoY29udiwgXCJyZWdcIiwgXHUwMDI2cG9ydCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdGlmIChwb3J0IFx1MDAzYyBtaWljLVx1MDAzZW9mX2RhdGEtXHUwMDNlbWlpY19wb3J0X3N0YXJ0IHx8XG4rXHRcdCAgICBwb3J0IFx1MDAzZSBtaWljLVx1MDAzZW9mX2RhdGEtXHUwMDNlbWlpY19wb3J0X21heCkge1xuK1x0XHRcdGRldl9lcnIobWlpYy1cdTAwM2VkZXYsIFwiUG9ydCBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZFxcblwiLCBwb3J0KTtcbitcdFx0XHRvZl9ub2RlX3B1dChjb252KTtcbitcdFx0XHRrZnJlZShkdF92YWwpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4gXHRcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjb252LCBcInJlbmVzYXMsbWlpYy1pbnB1dFwiLCBcdTAwMjZjb25mKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU5OjMzLjk5NDYyMDY5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgyNTc4ODMzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIEludGVyZmFjZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhhdCBkaWZmLCBzcGVjaWZpY2FsbHkgdGhlIGBkcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgd2hhdCBgcGNzLXJ6bjEtbWlpYy5jYCBhY3R1YWxseSAqaXMqLiBXaGF0J3MgdGhlIGhhcmR3YXJlIGl0J3MgYXNzb2NpYXRlZCB3aXRoPyBXaGF0IHBsYXRmb3JtIGRvZXMgaXQgdGFyZ2V0PyBJcyBpdCBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgUmVuZXNhcyBwYXJ0LCBtYXliZSBhbiBSWi9OMT8gSSBhbHNvIGhhdmUgdG8gY2hlY2sgaXRzIEtjb25maWcgZW50cnkgLSBpcyB0aGlzIGNvZGUgYnVpbHQgY29uZGl0aW9uYWxseT8gSG93IGlzIGl0cyByZWFjaGFiaWxpdHkgY29udHJvbGxlZD8gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj9cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kIHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYgYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIEZvciB0aGF0LCBJIHRoaW5rIEknbGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgY29udGV4dCB3aXRoaW4gYGRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmNgIGFuZCBpdHMgYXNzb2NpYXRlZCBLY29uZmlnIGZpbGUuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNjIsIk91dHB1dFRva2VucyI6NzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1OTo0Mi4yNTI1MDcwNDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2NTk4MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNzLXJ6bjEtbWlpY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wY3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX1BDU19NVEtfTFlOWEkpXFx0Kz0gcGNzLW10ay1seW54aS5vXFxuZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19QQ1NfUlpOMV9NSUlDKVxcdCs9IHBjcy1yem4xLW1paWMub1xcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfcGxhdGZvcm0uaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjE3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY3MtcnpuMS1taWljLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy0xOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5bGluay5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6MjM6I2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL25ldC9wY3MtcnpuMS1taWljLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy0yNC0jaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvbmV0L3JlbmVzYXMscjlhMDlnMDc3LXBjcy1taWljLmhcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU5OjQyLjMwMTE3Njk0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDYwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY3MDpcXHRcXHRcXHRtaWljLVxcdTAwM2VsaW5rX2NmZy52YWwgXFx1MDAyNj0gfm1hc2s7XFxuIDY3MTpcXHR9XFxuIDY3MjpcXHRcXG4gNjczOlxcdHN0YXRpYyBpbnQgbWlpY19wYXJzZV9kdChzdHJ1Y3QgbWlpYyAqbWlpYywgdTMyICptb2RlX2NmZylcXG4gNjc0OlxcdHtcXG4gNjc1OlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBtaWljLVxcdTAwM2VkZXYtXFx1MDAzZW9mX25vZGU7XFxuIDY3NjpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbnY7XFxuIDY3NzpcXHRcXHRib29sIGFjdGl2ZV9sb3c7XFxuIDY3ODpcXHRcXHRpbnQgcG9ydCwgcmV0O1xcbiA2Nzk6XFx0XFx0czggKmR0X3ZhbDtcXG4gNjgwOlxcdFxcdHUzMiBjb25mO1xcbiA2ODE6XFx0XFxuIDY4MjpcXHRcXHRkdF92YWwgPSBrbWFsbG9jX29ianMoKmR0X3ZhbCwgbWlpYy1cXHUwMDNlb2ZfZGF0YS1cXHUwMDNlY29uZl9jb252X2NvdW50KTtcXG4gNjgzOlxcdFxcdGlmICghZHRfdmFsKVxcbiA2ODQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDY4NTpcXHRcXG4gNjg2OlxcdFxcdG1lbXNldChkdF92YWwsIE1JSUNfTU9EQ1RSTF9DT05GX05PTkUsXFxuIDY4NzpcXHRcXHQgICAgICAgc2l6ZW9mKCpkdF92YWwpICogbWlpYy1cXHUwMDNlb2ZfZGF0YS1cXHUwMDNlY29uZl9jb252X2NvdW50KTtcXG4gNjg4OlxcdFxcbiA2ODk6XFx0XFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBcXFwicmVuZXNhcyxtaWljLXN3aXRjaC1wb3J0aW5cXFwiLCBcXHUwMDI2Y29uZikgPT0gMClcXG4gNjkwOlxcdFxcdFxcdGR0X3ZhbFswXSA9IGNvbmY7XFxuIDY5MTpcXHRcXG4gNjkyOlxcdFxcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjb252KSB7XFxuIDY5MzpcXHRcXHRcXHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoY29udiwgXFxcInJlZ1xcXCIsIFxcdTAwMjZwb3J0KSlcXG4gNjk0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA2OTU6XFx0XFxuIDY5NjpcXHRcXHRcXHRpZiAocG9ydCBcXHUwMDNjIG1paWMtXFx1MDAzZW9mX2RhdGEtXFx1MDAzZW1paWNfcG9ydF9zdGFydCB8fFxcbiA2OTc6XFx0XFx0XFx0ICAgIHBvcnQgXFx1MDAzZSBtaWljLVxcdTAwM2VvZl9kYXRhLVxcdTAwM2VtaWljX3BvcnRfbWF4KSB7XFxuIDY5ODpcXHRcXHRcXHRcXHRkZXZfZXJyKG1paWMtXFx1MDAzZWRldiwgXFxcIlBvcnQgbnVtYmVyIG91dCBvZiByYW5nZTogJWRcXFxcblxcXCIsIHBvcnQpO1xcbiA2OTk6XFx0XFx0XFx0XFx0b2Zfbm9kZV9wdXQoY29udik7XFxuIDcwMDpcXHRcXHRcXHRcXHRrZnJlZShkdF92YWwpO1xcbiA3MDE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDcwMjpcXHRcXHRcXHR9XFxuIDcwMzpcXHRcXG4gNzA0OlxcdFxcdFxcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjb252LCBcXFwicmVuZXNhcyxtaWljLWlucHV0XFxcIiwgXFx1MDAyNmNvbmYpKVxcbiA3MDU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDcwNjpcXHRcXG4gNzA3OlxcdFxcdFxcdC8qIEFkanVzdCBmb3IgMCBiYXNlZCBpbmRleCAqL1xcbiA3MDg6XFx0XFx0XFx0ZHRfdmFsW3BvcnQgKyAhbWlpYy1cXHUwMDNlb2ZfZGF0YS1cXHUwMDNlbWlpY19wb3J0X3N0YXJ0XSA9IGNvbmY7XFxuIDcwOTpcXHRcXG4gNzEwOlxcdFxcdFxcdGFjdGl2ZV9sb3cgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woY29udiwgXFxcInJlbmVzYXMsbWlpYy1waHktbGluay1hY3RpdmUtbG93XFxcIik7XFxuIDcxMTpcXHRcXG4gNzEyOlxcdFxcdFxcdG1paWNfY29uZmlndXJlX3BoeV9saW5rKG1paWMsIGNvbmYsIHBvcnQsIGFjdGl2ZV9sb3cpO1xcbiA3MTM6XFx0XFx0fVxcbiA3MTQ6XFx0XFxuIDcxNTpcXHRcXHRyZXQgPSBtaWljX21hdGNoX2R0X2NvbmYobWlpYywgZHRfdmFsLCBtb2RlX2NmZyk7XFxuIDcxNjpcXHRcXHRrZnJlZShkdF92YWwpO1xcbiA3MTc6XFx0XFxuIDcxODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA3MTk6XFx0fVxcbiA3MjA6XFx0XFxuIDcyMTpcXHRzdGF0aWMgdm9pZCBtaWljX3Jlc2V0X2NvbnRyb2xfYnVsa19hc3NlcnQodm9pZCAqZGF0YSlcXG4gNzIyOlxcdHtcXG4gNzIzOlxcdFxcdHN0cnVjdCBtaWljICptaWljID0gZGF0YTtcXG4gNzI0OlxcdFxcdGludCByZXQ7XFxuIDcyNTpcXHRcXG4gNzI2OlxcdFxcdHJldCA9IHJlc2V0X2NvbnRyb2xfYnVsa19hc3NlcnQobWlpYy1cXHUwMDNlb2ZfZGF0YS1cXHUwMDNlcmVzZXRfY291bnQsIG1paWMtXFx1MDAzZXJzdHMpO1xcbiA3Mjc6XFx0XFx0aWYgKHJldClcXG4gNzI4OlxcdFxcdFxcdGRldl9lcnIobWlpYy1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGFzc2VydCByZXNldCBsaW5lc1xcXFxuXFxcIik7XFxuIDcyOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU5OjQyLjMwMTMxNDQyNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0NjQzMjYxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYENPTkZJR19QQ1NfUlpOMV9NSUlDYCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYENPTkZJR19QQ1NfUlpOMV9NSUlDYCBvcHRpb24uIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlc2UgYnVpbGQgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSdsbCBuYXZpZ2F0ZSB0byBgZHJpdmVycy9uZXQvcGNzL0tjb25maWdgLiBJIGtub3cgdGhhdCdzIHdoZXJlIHRoZXNlIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0ZW5kIHRvIHJlc2lkZS4gRnJvbSB0aGVyZSwgSSdsbCBiZSBsb29raW5nIGZvciBhIGNvdXBsZSBvZiBrZXkgcGllY2VzIG9mIGluZm9ybWF0aW9uOlxuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBvciBjb25kaXRpb25zIG5lZWQgdG8gYmUgbWV0ICpiZWZvcmUqIGBDT05GSUdfUENTX1JaTjFfTUlJQ2AgYmVjb21lcyBhdmFpbGFibGU/IElzIGl0IGRlcGVuZGVudCBvbiBhIHBhcnRpY3VsYXIgU29DIGZhbWlseSwgYSBzcGVjaWZpYyBQSFkgZHJpdmVyLCBvciBzb21lIG90aGVyIGVuYWJsaW5nIGZlYXR1cmU/IFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBrbm93aW5nIHdoZW4gYW5kIHdoeSB0aGlzIG9wdGlvbiB3b3VsZCBiZSByZWxldmFudC5cbiogICAqKkRlZmluaXRpb24vRGVzY3JpcHRpb246KiogV2hhdCAqaXMqIGBDT05GSUdfUENTX1JaTjFfTUlJQ2A/IElzIGl0IGVuYWJsaW5nIGEgcGFydGljdWxhciBQaHlzaWNhbCBDb2RpbmcgU3VibGF5ZXIgKFBDUykgZm9yIGEgc3BlY2lmaWMgUlpOMSBib2FyZCwgbGlrZWx5IGEgc3BlY2lmaWMgTUlJQyAoTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIENvbnRyb2xsZXIpPyBEb2VzIGl0IHJlZmVyIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZT8gVGhlIEtjb25maWcgZW50cnkgc2hvdWxkIHByb3ZpZGUgYSBicmllZiBkZXNjcmlwdGlvbiB0byBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gSSdtIGV4cGVjdGluZyB0byBnYWluIGEgYmFzaWMgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgY29udHJvbGxlZCBieSBlbmFibGluZyB0aGlzIGZsYWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4ODcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1OTo0NS43NjU2NDIxNzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MzM0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUENTX1JaTjFfTUlJQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wY3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGNzL0tjb25maWc9MjE9Y29uZmlnIFBDU19NVEtfTFlOWElcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9LY29uZmlnLTI4LVxcbmRyaXZlcnMvbmV0L3Bjcy9LY29uZmlnOjI5OmNvbmZpZyBQQ1NfUlpOMV9NSUlDXFxuZHJpdmVycy9uZXQvcGNzL0tjb25maWctMzAtXFx0dHJpc3RhdGUgXFxcIlJlbmVzYXMgUlovTjEsIFJaL04ySCwgUlovVDJIIE1JSSBjb252ZXJ0ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfUENTX01US19MWU5YSSlcXHQrPSBwY3MtbXRrLWx5bnhpLm9cXG5kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX1BDU19SWk4xX01JSUMpXFx0Kz0gcGNzLXJ6bjEtbWlpYy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU5OjQ1LjgxMzE4MTc4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2ODkwODQzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsJ3MgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGBkcml2ZXJzL25ldC9wY3MvS2NvbmZpZ2AgZmlsZS4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgMjksIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIHN0YXJ0cyBmb3IgYSBnaXZlbiBkcml2ZXIgb3IgZmVhdHVyZS4gSSBleHBlY3QgdGhhdCBsaW5lIHdpbGwgY29udGFpbiBhIHJlbGV2YW50IGBjb25maWdgIG9wdGlvbiBvciBtYXliZSBhIHNvdXJjZSB0byBsb29rIGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gbXkgZXhpc3RpbmcgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJvamVjdCwgSSBuZWVkIHRvIGtub3cgdGhlIHN0YXRlIG9mIG5ldHdvcmsgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU5OjUxLjUwMjI2ODYyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGNzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0XFx0aGVscFxcbiAgMjY6XFx0XFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBoZWxwZXJzIHRvIHBoeWxpbmsgZm9yIG1hbmFnaW5nIHRoZSBMeW54SSBQQ1NcXG4gIDI3OlxcdFxcdCAgd2hpY2ggaXMgcGFydCBvZiBNZWRpYVRlaydzIFNvQyBhbmQgRXRoZXJuZXQgc3dpdGNoIElDcy5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIFBDU19SWk4xX01JSUNcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJSZW5lc2FzIFJaL04xLCBSWi9OMkgsIFJaL1QySCBNSUkgY29udmVydGVyXFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBPRlxcbiAgMzI6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1JFTkVTQVMgfHwgQ09NUElMRV9URVNUXFxuICAzMzpcXHRcXHRoZWxwXFxuICAzNDpcXHRcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgTUlJIGNvbnZlcnRlciBhdmFpbGFibGUgb25cXG4gIDM1OlxcdFxcdCAgUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJIIFNvQ3MuIFRoaXMgUENTIGNvbnZlcnRzIE1JSSB0b1xcbiAgMzY6XFx0XFx0ICBSTUlJL1JHTUlJLCBvciBjYW4gYmUgc2V0IGluIHBhc3MtdGhyb3VnaCBtb2RlIGZvciBNSUkuXFxuICAzNzpcXHRcXG4gIDM4OlxcdGVuZG1lbnVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTk6NTEuNTAyMzMxNDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUxMjYzNjExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUENTX1JaTjFfTUlJQyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBgY29uZmlnIFBDU19SWk4xX01JSUNgIGlzIGRlcGVuZGVudCBvbiBib3RoIGBPRmAgYW5kIGVpdGhlciBgQVJDSF9SRU5FU0FTYCBvciBgQ09NUElMRV9URVNUYC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQncyBhIGRldmljZSBkcml2ZXIsIGxpa2VseSB1c2luZyB0aGUgZGV2aWNlIHRyZWUgZm9yIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCB0YXJnZXRzIFJlbmVzYXMgYXJjaGl0ZWN0dXJlcywgb3IgYXQgbGVhc3QgbmVlZHMgdG8gYnVpbGQgZm9yIHRlc3RpbmcgcHVycG9zZXMuIFRoZSBkZXNjcmlwdGlvbiBpdHNlbGYgY2xhcmlmaWVzIHRoYXQgdGhpcyBtb2R1bGUgaXMgYSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciB0aGUgTUlJIGNvbnZlcnRlciBmb3VuZCBvbiBSZW5lc2FzIFJaL04xLCBSWi9OMkgsIGFuZCBSWi9UMkggU29Dcy4gQSBNSUkgY29udmVydGVyIG1vZHVsZSBvbiB0aGlzIHByb2Nlc3NvciBpcyB2ZXJ5IHVzZWZ1bCwgYW5kIHRoZSBkcml2ZXIgcHJvdmlkZXMgdGhlIG9wdGlvbiB0byBjb252ZXJ0IE1JSSB0byBSTUlJL1JHTUlJLCBvciBvcGVyYXRlIGluIGEgcGFzcy10aHJvdWdoIG1vZGUgZm9yIE1JSS4gVGhlIG1lbnRpb24gb2Ygc3BlY2lmaWMgU29DIG1vZGVscyBuYXJyb3dzIHRoZSB0YXJnZXQsIGdpdmluZyBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBpbnRlbmRlZCBoYXJkd2FyZSBlbnZpcm9ubWVudC4gTm93LCBsZXQncyBkaXZlIGRlZXBlciBpbnRvIGhvdyB0aGlzIGBwY3MtcnpuMS1taWljYCBkcml2ZXIgaXMgYWN0dWFsbHkgKnVzZWQqIGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHByb2JlZCBhbmQgY2FsbGVkIOKAkyB3aGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIHR5cGljYWwgdXNlIGNhc2VzPyBUaGlzIHdpbGwgaW52b2x2ZSB0cmFjaW5nIHRoZSBtb2R1bGUncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBkZXZpY2UgdHJlZSBhbmQgbG9va2luZyBhdCBob3cgb3RoZXIgZHJpdmVycyBtaWdodCBpbnRlcmFjdCB3aXRoIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTA3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTk6NTQuMDE0OTcwNDQ3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDUzNzE1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWljX3Byb2JlfHJ6bjFfbWlpY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wY3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYz03MzE9c3RhdGljIGludCBtaWljX3Jlc2V0X2NvbnRyb2xfaW5pdChzdHJ1Y3QgbWlpYyAqbWlpYylcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtNzYyLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6NzYzOnN0YXRpYyBpbnQgbWlpY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtNzY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9ODE5PXN0YXRpYyB2b2lkIG1paWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTgyMy1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjgyNDpzdGF0aWMgc3RydWN0IG1paWNfb2ZfZGF0YSByem4xX21paWNfb2ZfZGF0YSA9IHtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTgyNS1cXHQubWF0Y2hfdGFibGUgPSBtb2RjdHJsX21hdGNoX3RhYmxlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYz04NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWlpY19vZl9tdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg1OC1cXHR7IC5jb21wYXRpYmxlID0gXFxcInJlbmVzYXMscjlhMDlnMDc3LW1paWNcXFwiLCAuZGF0YSA9IFxcdTAwMjZyenQyaF9taWljX29mX2RhdGEgfSxcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjg1OTpcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlbmVzYXMscnpuMS1taWljXFxcIiwgLmRhdGEgPSBcXHUwMDI2cnpuMV9taWljX29mX2RhdGEgfSxcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg2MC1cXHR7IC8qIHNlbnRpbmVsICovIH1cXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9ODY0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1paWNfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODY1LVxcdC5kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzo4NjY6XFx0XFx0Lm5hbWVcXHQgPSBcXFwicnpuMV9taWljXFxcIixcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg2Ny1cXHRcXHQuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg2OS1cXHR9LFxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6ODcwOlxcdC5wcm9iZSA9IG1paWNfcHJvYmUsXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy04NzEtXFx0LnJlbW92ZSA9IG1paWNfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1OTo1NC4wNjk1MTQ5NDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTU2MTk1NjU0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYG1paWNfZHJpdmVyYCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgbWlpY19kcml2ZXJgIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJIIFNvQ3MsIGFuZCBpdCByZWxpZXMgb24gT3BlbiBGaXJtd2FyZSAoT0YpIGRldmljZSB0cmVlcywgd2hpY2ggaXMgYSBrZXkgaW5pdGlhbCBmbGFnLiBUaGUgYHN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlYCBiaXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgYWxhcm0gYmVsbHMsIGFzIHRoYXQgY291bGQgY29tcGxpY2F0ZSB0aGluZ3MuIFRoZSBjb2RlIGJhc2UgaXMgZGVzaWduZWQgYXJvdW5kIHRoZSBSZW5lc2FzIGFyY2hpdGVjdHVyZSAoYEFSQ0hfUkVORVNBU2ApLCB3aGljaCB0eXBpY2FsbHkgaW1wbGllcyBhIHNwZWNpZmljIGhhcmR3YXJlIGVudmlyb25tZW50LlxuXG5NeSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgSSBjYW4gZXZlbiBpbnN0YW50aWF0ZSBvciBmdXp6IHRoaXMgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLCBzaW5jZSBJJ20gdGFyZ2V0aW5nIGFtZDY0LiBMZXQncyBjb25maXJtIG15IHN1c3BpY2lvbnM6IHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgaW5kZWVkIGFtZDY0LiBUaGF0IHJhaXNlcyBhIGh1Z2UgcmVkIGZsYWc6IGNhbiBhbiBPRiBkZXZpY2UgdHJlZSBwbGF0Zm9ybSBkZXZpY2UgYmUgcHJvYmVkIG9uIGFtZDY0IHdpdGhpbiBRRU1VPyBBbG1vc3QgY2VydGFpbmx5IG5vdCB3aXRob3V0IHNwZWNpZmljIGFycmFuZ2VtZW50cyBvciB3b3JrYXJvdW5kcy5cblxuRXZlbiBpZiBJIGZvcmNlIE9GIHRvIGNvbXBpbGUgd2l0aCBgQ09NUElMRV9URVNUYCBvciBgQ09ORklHX09GYCBlbmFibGVkIG9uIGFtZDY0LCB0aGVyZSdzIG5vIFJlbmVzYXMgU29DIGRldmljZSB0cmVlIHByZXNlbnQgb24gYW1kNjQsIGFuZCB0aGUgYHN1cHByZXNzX2JpbmRfYXR0cnNgIHByZXZlbnRzIGJpbmRpbmcgaXQgdmlhIHN5c2ZzIGAvc3lzL2J1cy9wbGF0Zm9ybS9kcml2ZXJzL3J6bjFfbWlpYy9iaW5kYC4gVGhpcyBpcyBhIGhhcmQgc3RvcC5cblxuSSdtIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgYW55IE9GIGNoYW5nZXNldHMgb3Igc29tZXRoaW5nIGNvdWxkIG1hZ2ljYWxseSBpbnN0YW50aWF0ZSBpdCwgYnV0IG15IGludHVpdGlvbiBzYXlzIHRoaXMgZHJpdmVyIHdhbnRzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIHRvIGFjdHVhbGx5IGZ1bmN0aW9uLiBMZXQncyBhcHBseSB0aGUgZXN0YWJsaXNoZWQgbmVnYXRpdmUgY3JpdGVyaWEgdG8gY29uZmlybSBteSBhc3Nlc3NtZW50LlxuXG5JIGdvIGJhY2sgdG8gdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBJcyB0aGlzIGRyaXZlciBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsIG9yIGlzIGl0IGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gYW1kNjQ/IFRoaXMgaXMgdGhlIGNvcmUgcXVlc3Rpb24uXG5cbkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmU6IFJlbmVzYXMgUlovTjEsIFJaL04ySCwgYW5kIFJaL1QySC4gUlovTjEgaXMgQVJNIChDb3J0ZXgtQTcpLiBSWi9OMkwsIFJaL1QyTSBldGMuIGFyZSBBUk0gKENvcnRleC1SNTIpLiBSWi9HMkwgaXMgQVJNNjQuIEFuZCBgQVJDSF9SRU5FU0FTYCBzdXBwb3J0cyBBUk0gLyBBUk02NC4gT24gYW1kNjQsIGBBUkNIX1JFTkVTQVNgIGlzICpub3QqIHNldC4gSXQgb25seSBjb21waWxlcyBpZiBgQ09ORklHX0NPTVBJTEVfVEVTVGAgaXMgZW5hYmxlZC4gSXQncyBkZXBlbmRlbnQgb24gYE9GYCAoYENPTkZJR19PRmApLCB3aGljaCBpc24ndCB1c2VkIG9uIGFtZDY0LlxuXG5PbiBhbWQ2NCAoeDg2XzY0KSwgQUNQSSBpcyB0aGUgc3RhbmRhcmQgYW5kIHByZXZhbGVudCBkZXZpY2UgdHJlZSBzeXN0ZW0uIFRoZSBkcml2ZXIgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIGFuIFNvQy1pbnRlcm5hbCBNSUkgY29udmVydGVyIChgcmVuZXNhcyxyem4xLW1paWNgIG9yIGByZW5lc2FzLHI5YTA5ZzA3Ny1taWljYCkuIE15IGJlc3QgYmV0IGlzIHRvIGNoZWNrIHRoZSBgbWlpY19wcm9iZWAgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB3aGljaCByZXNvdXJjZXMgdGhlIGRyaXZlciBhY3R1YWxseSByZXF1ZXN0cywgYnV0IHRoZSBkaXJlY3Rpb24gSSdtIHNlZWluZyBpcyB0aGF0IGl0J3MgcHJvYmFibHkgb3V0IG9mIHNjb3BlIGZvciBzdGFuZGFyZCBRRU1VIG9uIGFtZDY0LiBJIHRoaW5rIEknbSBnb2luZyB0byBoYXZlIHRvIG1hcmsgdGhpcyBhcyBOT1QgZnV6emFibGUgYXMgaXQgaXMgYWxtb3N0IGNlcnRhaW5seSBhIFN0cnVjdHVyYWxseSBVbnJlYWNoYWJsZSBIYXJkd2FyZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjAwOjA5LjY4OTA4MjY1MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc0OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDc2MTpcXHR9XFxuIDc2MjpcXHRcXG4gNzYzOlxcdHN0YXRpYyBpbnQgbWlpY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiA3NjQ6XFx0e1xcbiA3NjU6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gNzY2OlxcdFxcdHN0cnVjdCBtaWljICptaWljO1xcbiA3Njc6XFx0XFx0dTMyIG1vZGVfY2ZnO1xcbiA3Njg6XFx0XFx0aW50IHJldDtcXG4gNzY5OlxcdFxcbiA3NzA6XFx0XFx0bWlpYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWlpYyksIEdGUF9LRVJORUwpO1xcbiA3NzE6XFx0XFx0aWYgKCFtaWljKVxcbiA3NzI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDc3MzpcXHRcXG4gNzc0OlxcdFxcdG1paWMtXFx1MDAzZW9mX2RhdGEgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcXG4gNzc1OlxcdFxcdG1paWMtXFx1MDAzZWRldiA9IGRldjtcXG4gNzc2OlxcdFxcbiA3Nzc6XFx0XFx0cmV0ID0gbWlpY19wYXJzZV9kdChtaWljLCBcXHUwMDI2bW9kZV9jZmcpO1xcbiA3Nzg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDc3OTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA3ODA6XFx0XFxuIDc4MTpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bWlpYy1cXHUwMDNlbG9jayk7XFxuIDc4MjpcXHRcXHRtaWljLVxcdTAwM2ViYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApO1xcbiA3ODM6XFx0XFx0aWYgKElTX0VSUihtaWljLVxcdTAwM2ViYXNlKSlcXG4gNzg0OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKG1paWMtXFx1MDAzZWJhc2UpO1xcbiA3ODU6XFx0XFxuIDc4NjpcXHRcXHRyZXQgPSBtaWljX3Jlc2V0X2NvbnRyb2xfaW5pdChtaWljKTtcXG4gNzg3OlxcdFxcdGlmIChyZXQpXFxuIDc4ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA3ODk6XFx0XFxuIDc5MDpcXHRcXHRyZXQgPSBkZXZtX3BtX3J1bnRpbWVfZW5hYmxlKGRldik7XFxuIDc5MTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNzkyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDc5MzpcXHRcXG4gNzk0OlxcdFxcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoZGV2KTtcXG4gNzk1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA3OTY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNzk3OlxcdFxcbiA3OTg6XFx0XFx0cmV0ID0gbWlpY19pbml0X2h3KG1paWMsIG1vZGVfY2ZnKTtcXG4gNzk5OlxcdFxcdGlmIChyZXQpXFxuIDgwMDpcXHRcXHRcXHRnb3RvIGRpc2FibGVfcnVudGltZV9wbTtcXG4gODAxOlxcdFxcbiA4MDI6XFx0XFx0bWlpY19yZWdfcm13KG1paWMsIE1JSUNfUEhZX0xJTkssIG1paWMtXFx1MDAzZWxpbmtfY2ZnLm1hc2ssIG1paWMtXFx1MDAzZWxpbmtfY2ZnLnZhbCk7XFxuIDgwMzpcXHRcXG4gODA0OlxcdFxcdC8qIG1paWNfY3JlYXRlKCkgcmVsaWVzIG9uIHRoYXQgZmFjdCB0aGF0IGRhdGEgYXJlIGF0dGFjaGVkIHRvIHRoZVxcbiA4MDU6XFx0XFx0ICogcGxhdGZvcm0gZGV2aWNlIHRvIGRldGVybWluZSBpZiB0aGUgZHJpdmVyIGlzIHJlYWR5IHNvIHRoaXMgbmVlZHMgdG9cXG4gODA2OlxcdFxcdCAqIGJlIHRoZSBsYXN0IHRoaW5nIHRvIGJlIGRvbmUgYWZ0ZXIgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZFxcbiA4MDc6XFx0XFx0ICogcHJvcGVybHkuXFxuIDgwODpcXHRcXHQgKi9cXG4gODA5OlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1paWMpO1xcbiA4MTA6XFx0XFxuIDgxMTpcXHRcXHRyZXR1cm4gMDtcXG4gODEyOlxcdFxcbiA4MTM6XFx0ZGlzYWJsZV9ydW50aW1lX3BtOlxcbiA4MTQ6XFx0XFx0cG1fcnVudGltZV9wdXQoZGV2KTtcXG4gODE1OlxcdFxcbiA4MTY6XFx0XFx0cmV0dXJuIHJldDtcXG4gODE3OlxcdH1cXG4gODE4OlxcdFxcbiA4MTk6XFx0c3RhdGljIHZvaWQgbWlpY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MDA6MDkuNjg5MjUyOTUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxMzc2OTUzNTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBBUkNIX1JFTkVTQVNgIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBBUkNIX1JFTkVTQVNgIGFjdHVhbGx5IHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0LiBMZXQncyBzZWUuLi4gSSBzaG91bGQgY2hlY2sgd2hlcmUgaXQncyBkZWZpbmVkIGFuZCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIE15IGdvLXRvIGFwcHJvYWNoIGlzIHRvIGxvY2F0ZSB0aGUgZGVmaW5pdGlvbi4gT2theSwgbGV0J3Mgc3RhcnQgd2l0aCBhIGBncmVwYCBmb3IgYGNvbmZpZyBBUkNIX1JFTkVTQVNgIC4gVGhhdCBzaG91bGQgcGlucG9pbnQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSB3aGVyZSB0aGlzIG9wdGlvbiBpcyBkZWNsYXJlZCwgYW5kIHRoZSBzZWFyY2ggcmVzdWx0cyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoaXMgd2lsbCBnaXZlIG1lIGFsbCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29uZmlndXJhdGlvbiBpcyBhY3RpdmUuIE5vdyB0byBzZWFyY2gsIGFuZCBob3BlZnVsbHkgZmlndXJlIG91dCBpdHMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNDYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjAwOjQxLjA2NjIwOTc0M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5ODY1NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBUkNIX1JFTkVTQVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnOjI6bWVudWNvbmZpZyBBUkNIX1JFTkVTQVNcXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWctMy1cXHRib29sIFxcXCJSZW5lc2FzIEFSTSBTb0NzXFxcIlxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3Jtcz0zMzU9Y29uZmlnIEFSQ0hfUkVBTFRFS1xcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3Jtcy0zNDEtXFxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3JtczozNDI6Y29uZmlnIEFSQ0hfUkVORVNBU1xcbmFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXMtMzQzLVxcdGJvb2wgXFxcIlJlbmVzYXMgU29DIFBsYXRmb3Jtc1xcXCJcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy5zb2NzPTI0PWNvbmZpZyBBUkNIX01JQ1JPQ0hJUFxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLnNvY3MtMjgtXFxuYXJjaC9yaXNjdi9LY29uZmlnLnNvY3M6Mjk6Y29uZmlnIEFSQ0hfUkVORVNBU1xcbmFyY2gvcmlzY3YvS2NvbmZpZy5zb2NzLTMwLVxcdGJvb2wgXFxcIlJlbmVzYXMgUklTQy1WIFNvQ3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjAwOjQxLjM4NjA4MTY5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MjU0Nzk2ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlbmVzYXMgTUlJQyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlbGF0aW9uc2hpcHMgaGVyZS4gRmlyc3Qgb2ZmLCBgQVJDSF9SRU5FU0FTYCBlbmNvbXBhc3NlcyBxdWl0ZSBhIGZldyBhcmNoaXRlY3R1cmVzIC0gQVJNLCBBUk02NCwgYW5kIFJJU0MtViBTeXN0ZW0tb24tQ2hpcHMuIFRoZSBwb2ludCBpcywgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IHdoZW4gSSBzZWUgaXQsIEkgKmtub3cqIGl0J3Mgbm90IGFwcGxpY2FibGUgdG8gYGFtZDY0YC4gSXQncyBub3QgYW4gYW1kNjQgYXJjaGl0ZWN0dXJlIGRyaXZlci4gSSBoYXZlIHRvIHJlbWVtYmVyIHRoaXMgYXMgSSBkaWcgZGVlcGVyLlxuXG5Ob3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGlzIGBwY3MtcnpuMS1taWljLmNgIGZpbGUuIFRoZSBwcmltYXJ5IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBleHRlbnQgb2YgaXRzIHVzYWdlIG91dHNpZGUgb2YgdGhlIGBtaWljX3Byb2JlYCBmdW5jdGlvbi4gVGhpcyBpcyBjcml0aWNhbC4gQXJlIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIGRyaXZlcj8gSSBuZWVkIHRvIGZpbmQgdGhlIGNhbGxzLiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgbW92aW5nIG9uLiBJJ2xsIHNlYXJjaCBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgYHJ6bjFfbWlpY2AgdGhyb3VnaG91dCB0aGUgZW50aXJlIGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhpcyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzMzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MDA6NDYuNjQwODgxNDE2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQxOTI1NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ6bjFbLV9dbWlpY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9yZW5lc2FzLHJ6bjEtYTVwc3cueWFtbD0xOT1wcm9wZXJ0aWVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvcmVuZXNhcyxyem4xLWE1cHN3LnlhbWwtNzMtICAgICAgICAgICAgICBwaGFuZGxlIHBvaW50aW5nIHRvIGEgUENTIHN1Yi1ub2RlIGNvbXBhdGlibGUgd2l0aFxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL3JlbmVzYXMscnpuMS1hNXBzdy55YW1sOjc0OiAgICAgICAgICAgICAgcmVuZXNhcyxyem4xLW1paWMueWFtbCNcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9yZW5lc2FzLHJ6bjEtYTVwc3cueWFtbC03NS1cXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwtMy0tLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sOjQ6JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwjXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC01LSRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbD0xNz1wcm9wZXJ0aWVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC0yOC0gICAgICAgICAgICAgIC0gcmVuZXNhcyxyOWEwNmcwMzItbWlpY1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWw6Mjk6ICAgICAgICAgIC0gY29uc3Q6IHJlbmVzYXMscnpuMS1taWljXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC0zMC0gICAgICAtIGl0ZW1zOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC02NC0gICAgZGVzY3JpcHRpb246IE1JSSBTd2l0Y2ggUE9SVElOIGNvbmZpZ3VyYXRpb24uIFRoaXMgdmFsdWUgc2hvdWxkIHVzZSBvbmUgb2ZcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sOjY1OiAgICAgIHRoZSB2YWx1ZXMgZGVmaW5lZCBpbiBkdC1iaW5kaW5ncy9uZXQvcGNzLXJ6bjEtbWlpYy5oIGZvciBSWi9OMSBTb0MgYW5kXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC02Ni0gICAgICBpbmNsdWRlL2R0LWJpbmRpbmdzL25ldC9yZW5lc2FzLHI5YTA5ZzA3Ny1wY3MtbWlpYy5oIGZvciBSWi9OMkgsIFJaL1QySCBTb0NzLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbD03Mz1wYXR0ZXJuUHJvcGVydGllczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwtODQtICAgICAgICBkZXNjcmlwdGlvbjogQ29udmVydGVyIGlucHV0IHBvcnQgY29uZmlndXJhdGlvbi4gVGhpcyB2YWx1ZSBzaG91bGQgdXNlXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbDo4NTogICAgICAgICAgb25lIG9mIHRoZSB2YWx1ZXMgZGVmaW5lZCBpbiBkdC1iaW5kaW5ncy9uZXQvcGNzLXJ6bjEtbWlpYy5oIGZvciBSWi9OMSBTb0NcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sLTg2LSAgICAgICAgICBhbmQgaW5jbHVkZS9kdC1iaW5kaW5ncy9uZXQvcmVuZXNhcyxyOWEwOWcwNzctcGNzLW1paWMuaCBmb3IgUlovTjJILCBSWi9UMkggU29Dcy5cXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWw9MTAyPWFsbE9mOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC0xMDYtICAgICAgICAgIGNvbnRhaW5zOlxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWw6MTA3OiAgICAgICAgICAgIGNvbnN0OiByZW5lc2FzLHJ6bjEtbWlpY1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwtMTA4LSAgICB0aGVuOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbD0yMTc9ZXhhbXBsZXM6XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC0yMTgtICAtIHxcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sOjIxOTogICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL25ldC9wY3MtcnpuMS1taWljLmhcXHUwMDNlXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC0yMjAtICAgICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9jbG9jay9yOWEwNmcwMzItc3lzY3RybC5oXFx1MDAzZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC0yMjQtICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbDoyMjU6ICAgICAgY29tcGF0aWJsZSA9IFxcXCJyZW5lc2FzLHI5YTA2ZzAzMi1taWljXFxcIiwgXFxcInJlbmVzYXMscnpuMS1taWljXFxcIjtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sLTIyNi0gICAgICByZWcgPSBcXHUwMDNjMHg0NDAzMDAwMCAweDEwMDAwXFx1MDAzZTtcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxyem4xLWdtYWMueWFtbD0yNT1wcm9wZXJ0aWVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLHJ6bjEtZ21hYy55YW1sLTQ0LSAgICAgIHBoYW5kbGUgcG9pbnRpbmcgdG8gYSBQQ1Mgc3ViLW5vZGUgY29tcGF0aWJsZSB3aXRoXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLHJ6bjEtZ21hYy55YW1sOjQ1OiAgICAgIHJlbmVzYXMscnpuMS1taWljLnlhbWwjXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLHJ6bjEtZ21hYy55YW1sLTQ2LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLHJ6djJoLWdiZXRoLnlhbWw9MjY9cHJvcGVydGllczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxyenYyaC1nYmV0aC55YW1sLTE1My0gICAgICBwaGFuZGxlIHBvaW50aW5nIHRvIGEgUENTIHN1Yi1ub2RlIGNvbXBhdGlibGUgd2l0aFxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxyenYyaC1nYmV0aC55YW1sOjE1NDogICAgICBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sI1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxyenYyaC1nYmV0aC55YW1sLTE1NS0gICAgICAoUmVmZXIgUlovVDJIIHBvcnRpb24gaW4gdGhlIERULWJpbmRpbmcgZmlsZSlcXG4tLVxcbk1BSU5UQUlORVJTPTIzMjY1PUY6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvcmVuZXNhcyxyem4xLWE1cHN3LnlhbWxcXG5NQUlOVEFJTkVSUzoyMzI2NjpGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWxcXG5NQUlOVEFJTkVSUy0yMzI2Ny1GOlxcdGRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3Klxcbk1BSU5UQUlORVJTOjIzMjY4OkY6XFx0ZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY1xcbk1BSU5UQUlORVJTOjIzMjY5OkY6XFx0aW5jbHVkZS9kdC1iaW5kaW5ncy9uZXQvcGNzLXJ6bjEtbWlpYy5oXFxuTUFJTlRBSU5FUlM6MjMyNzA6RjpcXHRpbmNsdWRlL2xpbnV4L3Bjcy1yem4xLW1paWMuaFxcbk1BSU5UQUlORVJTLTIzMjcxLUY6XFx0bmV0L2RzYS90YWdfcnpuMV9hNXBzdy5jXFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9yZW5lc2FzL3I5YTA2ZzAzMi1yem4xZDQwMC1kYi5kdHMtMTMtI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2xlZHMvY29tbW9uLmhcXHUwMDNlXFxuYXJjaC9hcm0vYm9vdC9kdHMvcmVuZXNhcy9yOWEwNmcwMzItcnpuMWQ0MDAtZGIuZHRzOjE0OiNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9uZXQvcGNzLXJ6bjEtbWlpYy5oXFx1MDAzZVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3JlbmVzYXMvcjlhMDZnMDMyLXJ6bjFkNDAwLWRiLmR0cy0xNS0jaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvcGluY3RybC9yem4xLXBpbmN0cmwuaFxcdTAwM2VcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3JlbmVzYXMvcjlhMDZnMDMyLmR0c2k9NDU3PVxcdFxcdGV0aF9taWljOiBldGgtbWlpY0A0NDAzMDAwMCB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvcmVuZXNhcy9yOWEwNmcwMzIuZHRzaTo0NTg6XFx0XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJyZW5lc2FzLHI5YTA2ZzAzMi1taWljXFxcIiwgXFxcInJlbmVzYXMscnpuMS1taWljXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9yZW5lc2FzL3I5YTA2ZzAzMi5kdHNpLTQ1OS1cXHRcXHRcXHQjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmgtMTQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3Lmg6MTU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Bjcy1yem4xLW1paWMuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5oLTE2LSNpbmNsdWRlIFxcdTAwM2NuZXQvZHNhLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMtMTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jOjIwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY3MtcnpuMS1taWljLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jLTIxLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYy04LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYzo5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY3MtcnpuMS1taWljLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlsaW5rLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfUENTX01US19MWU5YSSlcXHQrPSBwY3MtbXRrLWx5bnhpLm9cXG5kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX1BDU19SWk4xX01JSUMpXFx0Kz0gcGNzLXJ6bjEtbWlpYy5vXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTE2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9wbGF0Zm9ybS5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6MTc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Bjcy1yem4xLW1paWMuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTE4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlsaW5rLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTIyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzoyMzojaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvbmV0L3Bjcy1yem4xLW1paWMuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTI0LSNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9uZXQvcmVuZXNhcyxyOWEwOWcwNzctcGNzLW1paWMuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9ODE5PXN0YXRpYyB2b2lkIG1paWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTgyMy1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjgyNDpzdGF0aWMgc3RydWN0IG1paWNfb2ZfZGF0YSByem4xX21paWNfb2ZfZGF0YSA9IHtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTgyNS1cXHQubWF0Y2hfdGFibGUgPSBtb2RjdHJsX21hdGNoX3RhYmxlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYz04NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWlpY19vZl9tdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg1OC1cXHR7IC5jb21wYXRpYmxlID0gXFxcInJlbmVzYXMscjlhMDlnMDc3LW1paWNcXFwiLCAuZGF0YSA9IFxcdTAwMjZyenQyaF9taWljX29mX2RhdGEgfSxcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjg1OTpcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlbmVzYXMscnpuMS1taWljXFxcIiwgLmRhdGEgPSBcXHUwMDI2cnpuMV9taWljX29mX2RhdGEgfSxcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg2MC1cXHR7IC8qIHNlbnRpbmVsICovIH1cXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9ODY0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1paWNfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODY1LVxcdC5kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzo4NjY6XFx0XFx0Lm5hbWVcXHQgPSBcXFwicnpuMV9taWljXFxcIixcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg2Ny1cXHRcXHQuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjAwOjQ5LjE4MjgxNDcwOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5OTc3NjIyMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIFJaL04xIE1JSUMgRHJpdmVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgUlovTjEgTUlJQyBkcml2ZXIuIFRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgY3JhY2sgb3BlbiBgaW5jbHVkZS9saW51eC9wY3MtcnpuMS1taWljLmhgLiBJJ20gZXhwZWN0aW5nIHRoaXMgaGVhZGVyIGZpbGUgdG8gbGF5IG91dCB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyB0aGF0IGRlZmluZSB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlLiBIb3BlZnVsbHksIGl0IGNvbnRhaW5zIGRldGFpbHMgYWJvdXQgdGhlIE1JSUMgcmVnaXN0ZXJzIHRoZW1zZWx2ZXMg4oCTIHRoZSBiaXRmaWVsZHMsIHRoZWlyIGFkZHJlc3NlcywgdGhlIHZhcmlvdXMgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVycy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGNsb2NrIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQsIGdpdmVuIHRoZSBjcml0aWNhbCB0aW1pbmcgcmVxdWlyZW1lbnRzIG9mIEV0aGVybmV0IFBIWSBjb21tdW5pY2F0aW9uLiBJ4oCZbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBjdXN0b20gb3IgUlovTjEtc3BlY2lmaWMgZXh0ZW5zaW9ucyB0aGF0IG1pZ2h0IGJlIGluY2x1ZGVkLiBUaGluZ3MgbGlrZSBpbnRlcnJ1cHQgbWFwcGluZ3MsIERNQSBzZXR1cCBzdHJ1Y3R1cmVzIChpZiBETUEgaXMgdXNlZCksIGFuZCBwb3RlbnRpYWxseSBzb21lIG9mIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMuIExldCdzIHNlZSB3aGF0IGdvb2RpZXMgYXJlIGluIHRoZXJlLiBJJ20gaG9waW5nIGZvciBzb21lIGNsZWFuLCB3ZWxsLWRlZmluZWQgbWFjcm9zIHRoYXQgbWFrZSBpdCBlYXNpZXIgdG8gZ3JvayB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzY1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MDA6NTkuMTYwNDM5MDU4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcGNzLXJ6bjEtbWlpYy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMjIgU2NobmVpZGVyIEVsZWN0cmljXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogQ2zDqW1lbnQgTMOpZ2VyIFxcdTAwM2NjbGVtZW50LmxlZ2VyQGJvb3RsaW4uY29tXFx1MDAzZVxcbiAgIDY6XFx0ICovXFxuICAgNzpcXHRcXG4gICA4OlxcdCNpZm5kZWYgX19MSU5VWF9QQ1NfTUlJQ19IXFxuICAgOTpcXHQjZGVmaW5lIF9fTElOVVhfUENTX01JSUNfSFxcbiAgMTA6XFx0XFxuICAxMTpcXHRzdHJ1Y3QgcGh5bGluaztcXG4gIDEyOlxcdHN0cnVjdCBkZXZpY2Vfbm9kZTtcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0c3RydWN0IHBoeWxpbmtfcGNzICptaWljX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApO1xcbiAgMTU6XFx0XFxuICAxNjpcXHR2b2lkIG1paWNfZGVzdHJveShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyk7XFxuICAxNzpcXHRcXG4gIDE4OlxcdCNlbmRpZiAvKiBfX0xJTlVYX1BDU19NSUlDX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MDA6NTkuMTYwNTAyNjc4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ4NzI0NjM4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxscyB0byBgbWlpY19jcmVhdGVgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYG1paWNfY3JlYXRlYC4uLndoYXQncyAqYWN0dWFsbHkqIGludm9raW5nIGl0P1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJIHdhbnQgdG8gc2VlIHRoZSBjYWxsIGdyYXBoLCBidXQgbm90IGp1c3QgdGhlIGRpcmVjdCBjYWxsZXJzLiBJJ20gbG9va2luZyBmb3IgdGhlICp3aHkqIC0gd2hhdCBhcmUgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMgb3IgbW9kdWxlcyB0aGF0IGRlcGVuZCBvbiBgbWlpY19jcmVhdGVgPyBBcmUgdGhlcmUgc3BlY2lmaWMgc2NlbmFyaW9zIHdoZXJlIGl0J3MgdXNlZD8gSXMgdGhpcyBhIGNvcmUgZnVuY3Rpb25hbGl0eSBwaWVjZSwgb3IgaXMgaXQgbW9yZSBvZiBhIHV0aWxpdHkgZnVuY3Rpb24gZm9yIHNwZWNpZmljIHN1YnN5c3RlbXM/XG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZXNvdXJjZXMgaW52b2x2ZWQuIERvZXMgYG1paWNfY3JlYXRlYCBhbGxvY2F0ZSBhbnl0aGluZz8gSWYgc28sIHdoYXQ/IEhvdydzIGl0IGluaXRpYWxpemVkPyBJJ2xsIHByb2JhYmx5IGJlIGludGVyZXN0ZWQgaW4gdHJhY2tpbmcgdGhlIGxpZmV0aW1lIG9mIHRoZXNlIGFsbG9jYXRlZCByZXNvdXJjZXMgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZXMgZG93biB0aGUgbGluZS5cblxuSSdtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gYG1paWNfY3JlYXRlYC4gQXJlIHRoZXkgY29uc2lzdGVudD8gQXJlIHRoZXJlIGFueSBjb21tb24gcGF0dGVybnMgb3Igc3VycHJpc2luZyBpbnB1dHM/IEknbGwgd2FudCB0byBxdWlja2x5IGxvb2sgZm9yIGFueSBlZGdlIGNhc2VzLCBsaWtlIG51bGwgcG9pbnRlcnMgb3IgdW5leHBlY3RlZCB2YWx1ZXMgdGhhdCBtaWdodCBsZWFkIHRvIGNyYXNoZXMgb3IgdW5kZWZpbmVkIGJlaGF2aW9yLiBBbmQgb2YgY291cnNlLCBJJ2xsIG5lZWQgdG8ga25vdyB3aGF0IHRoZSBmdW5jdGlvbiAqcmV0dXJucyouIElzIGl0IGEgc3VjY2Vzcy9mYWlsdXJlIGNvZGU/IEEgaGFuZGxlPyBXaGF0IGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQ/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBob3cgaXQncyBoYW5kbGVkIHVwIHRoZSBjYWxsIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkwOCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MDE6MDQuMDMyOTY5MDY1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE1MTY5NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1paWNfY3JlYXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM9MTE1Nz1zdGF0aWMgaW50IGE1cHN3X3Bjc19nZXQoc3RydWN0IGE1cHN3ICphNXBzdylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE4Mi1cXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jOjExODM6XFx0XFx0cGNzID0gbWlpY19jcmVhdGUoYTVwc3ctXFx1MDAzZWRldiwgcGNzX25vZGUpO1xcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE4NC1cXHRcXHRpZiAoSVNfRVJSKHBjcykpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguYz02Mz1zdGF0aWMgaW50IHJlbmVzYXNfZ21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMtNzAtXFx0aWYgKHBjc19ub2RlKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jOjcxOlxcdFxcdHBjcyA9IG1paWNfY3JlYXRlKHByaXYtXFx1MDAzZWRldmljZSwgcGNzX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguYy03Mi1cXHRcXHRvZl9ub2RlX3B1dChwY3Nfbm9kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmM9MTY9c3RhdGljIGludCByem4xX2R3bWFjX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYy0yNC1cXHRpZiAocGNzX25vZGUpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmM6MjU6XFx0XFx0cGNzID0gbWlpY19jcmVhdGUocHJpdi1cXHUwMDNlZGV2aWNlLCBwY3Nfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jLTI2LVxcdFxcdG9mX25vZGVfcHV0KHBjc19ub2RlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9NDQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzIG1paWNfcGh5bGlua19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTQ0OS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjQ1MDpzdHJ1Y3QgcGh5bGlua19wY3MgKm1paWNfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucClcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTQ1MS17XFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTUwOC19XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzo1MDk6RVhQT1JUX1NZTUJPTChtaWljX2NyZWF0ZSk7XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy01MTAtXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jPTc2Mz1zdGF0aWMgaW50IG1paWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODAzLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6ODA0OlxcdC8qIG1paWNfY3JlYXRlKCkgcmVsaWVzIG9uIHRoYXQgZmFjdCB0aGF0IGRhdGEgYXJlIGF0dGFjaGVkIHRvIHRoZVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODA1LVxcdCAqIHBsYXRmb3JtIGRldmljZSB0byBkZXRlcm1pbmUgaWYgdGhlIGRyaXZlciBpcyByZWFkeSBzbyB0aGlzIG5lZWRzIHRvXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Bjcy1yem4xLW1paWMuaD0xMj1zdHJ1Y3QgZGV2aWNlX25vZGU7XFxuaW5jbHVkZS9saW51eC9wY3MtcnpuMS1taWljLmgtMTMtXFxuaW5jbHVkZS9saW51eC9wY3MtcnpuMS1taWljLmg6MTQ6c3RydWN0IHBoeWxpbmtfcGNzICptaWljX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApO1xcbmluY2x1ZGUvbGludXgvcGNzLXJ6bjEtbWlpYy5oLTE1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDowMTowNS43NDgxNDQyNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MzU3MDQ0NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIFJlbmVzYXMgU29DIEV0aGVybmV0IENvbnRyb2xsZXIgRHJpdmVyIG9uIGFtZDY0KipcblxuT2theSwgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIGl0J3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYSBkZWFkIGVuZCBmb3IgZnV6emluZyBvbiBhbWQ2NC4gYG1paWNfY3JlYXRlYCBpcyBvbmx5IGNhbGxlZCBieSBwbGF0Zm9ybSBkcml2ZXJzIGZvciBSZW5lc2FzIEV0aGVybmV0IGNvbnRyb2xsZXJzOiBSWi9OMSAoc3BlY2lmaWMpLiBUaGUgY29kZSBtb2RpZmllZCBieSB0aGUgcGF0Y2ggaXMgd2l0aGluIGBtaWljX3BhcnNlX2R0YCwgd2hpY2ggaXMgb25seSBldmVyIGNhbGxlZCBkdXJpbmcgdGhlIGBtaWljX3Byb2JlYCBmdW5jdGlvbi4gYG1paWNfcHJvYmVgIGlzLCBpbiB0dXJuLCB0aGUgcHJvYmUgZnVuY3Rpb24gb2YgdGhlIGBtaWljX2RyaXZlcmAuIFRoZSBkcml2ZXIgc3BlY2lmaWNhbGx5IGxvb2tzIGZvciBkZXZpY2VzIHdpdGggXCJyZW5lc2FzLHJ6bjEtbWlpY1wiIG9yIHNpbWlsYXIgY29tcGF0aWJsZSBzdHJpbmdzIGluIHRoZSBEZXZpY2UgVHJlZS4gVGhpcyBpcyBhIGNsZWFyIGluZGljYXRvciBvZiBpdCBiZWluZyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgYSBSZW5lc2FzIFNvQywgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBBUk0vUklTQy1WIGJhc2VkIHN5c3RlbXMuXG5cbk5vdywgdGhlIGltcG9ydGFudCBiaXQ6IEknbSBmdXp6aW5nIG9uIGFtZDY0LiBUaGVzZSBSZW5lc2FzIFNvQ3MgYXJlIEFSTS9SSVNDLVYgYmFzZWQsIHNvIHRoZXkgc2ltcGx5IGRvbid0IGV4aXN0IG9uIHRoaXMgdGFyZ2V0IGFyY2hpdGVjdHVyZS4gVGhlcmUncyBubyBoYXJkd2FyZSwgbm8gZW11bGF0ZWQgaGFyZHdhcmUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIGFuZCB0aGVyZWZvcmUgbm8gRGV2aWNlIFRyZWUgbm9kZXMgZm9yIHRoZXNlIGRldmljZXMuIEZ1cnRoZXJtb3JlLCB0aGUgZHJpdmVyIGhhcyBgc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWVgLCB3aGljaCBtZWFucyB0aGVyZSdzIG5vIHdheSB0byBmb3JjZSBiaW5kaW5nIHZpYSBzeXNmcywgZXZlbiBpZiBhIGR1bW15IHBsYXRmb3JtIGRldmljZSAqY291bGQqIGJlIGNyZWF0ZWQuIFRoaXMgbGluZXMgdXAgcGVyZmVjdGx5IHdpdGggdGhlIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIgbmVnYXRpdmUgY3JpdGVyaWEuIEFsbCB0aGUgcGllY2VzIGZpdDogaXQncyBhIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGggb24gYW1kNjQuIFRoZSBtb2RpZmllZCBjb2RlLCB0aGUgRGV2aWNlIFRyZWUgcGFyc2luZywgZXZlcnl0aGluZyBpcyBkZXBlbmRlbnQgb24gUmVuZXNhcy1zcGVjaWZpYyBoYXJkd2FyZSB0aGF0J3Mgc2ltcGx5IG5vdCBwcmVzZW50IGluIHRoaXMgc2V0dXAuIFRoaXMgaXMgZGVmaW5pdGVseSBub3QgYSB3b3J0aHdoaWxlIGZ1enppbmcgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIxNiwiT3V0cHV0VG9rZW5zIjoxNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MDE6MTEuMTA1MTkxMzk1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiBkcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgdGhlIE1JSSBjb252ZXJ0ZXIgb24gUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJIIFNvQ3MgKEFSTS9SSVNDLVYgYXJjaGl0ZWN0dXJlcykuIEl0IHJlcXVpcmVzIFNvQy1zcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyBhbmQgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODYvYW1kNjQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyBpdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGluIGRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMsIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciB0aGUgTUlJIGNvbnZlcnRlciBvbiBSZW5lc2FzIFJaL04xLCBSWi9OMkgsIGFuZCBSWi9UMkggU29DcyAoQVJNL1JJU0MtViBhcmNoaXRlY3R1cmVzKS4gSXQgcmVxdWlyZXMgU29DLXNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzIGFuZCBwaHlzaWNhbCBTb0MgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHg4Ni9hbWQ2NCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIGl0IHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjAxOjExLjEwNTIxNzQ2NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkptm7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 19:58:13 +0000 UTC FinishedAt: 2026-09-14 20:01:12 +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+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiBkcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgdGhlIE1JSSBjb252ZXJ0ZXIgb24gUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJIIFNvQ3MgKEFSTS9SSVNDLVYgYXJjaGl0ZWN0dXJlcykuIEl0IHJlcXVpcmVzIFNvQy1zcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyBhbmQgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODYvYW1kNjQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyBpdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzhhNDllODE1NTQ0ZTkyZTI0YzEwNjRkZTI2OTUzNmRjNjFjZmY1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDE5OjU5OjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jXG5pbmRleCAyYjcyZmE5OGRkZjEzLi4xYmQ5NWRkZjk0MDBhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY1xuQEAgLTY4Myw3ICYjNDM7NjgzLDggQEAgc3RhdGljIGludCBtaWljX3BhcnNlX2R0KHN0cnVjdCBtaWljICptaWljLCB1MzIgKm1vZGVfY2ZnKVxuIFx0aWYgKCFkdF92YWwpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0bWVtc2V0KGR0X3ZhbCwgTUlJQ19NT0RDVFJMX0NPTkZfTk9ORSwgc2l6ZW9mKCpkdF92YWwpKTtcbiYjNDM7XHRtZW1zZXQoZHRfdmFsLCBNSUlDX01PRENUUkxfQ09ORl9OT05FLFxuJiM0MztcdCAgICAgICBzaXplb2YoKmR0X3ZhbCkgKiBtaWljLVx1MDAzZW9mX2RhdGEtXHUwMDNlY29uZl9jb252X2NvdW50KTtcbiBcbiBcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgXCYjMzQ7cmVuZXNhcyxtaWljLXN3aXRjaC1wb3J0aW5cJiMzNDssIFx1MDAyNmNvbmYpID09IDApXG4gXHRcdGR0X3ZhbFswXSA9IGNvbmY7XG5AQCAtNjkyLDYgJiM0Mzs2OTMsMTQgQEAgc3RhdGljIGludCBtaWljX3BhcnNlX2R0KHN0cnVjdCBtaWljICptaWljLCB1MzIgKm1vZGVfY2ZnKVxuIFx0XHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoY29udiwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZwb3J0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdGlmIChwb3J0IFx1MDAzYyBtaWljLVx1MDAzZW9mX2RhdGEtXHUwMDNlbWlpY19wb3J0X3N0YXJ0IHx8XG4mIzQzO1x0XHQgICAgcG9ydCBcdTAwM2UgbWlpYy1cdTAwM2VvZl9kYXRhLVx1MDAzZW1paWNfcG9ydF9tYXgpIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihtaWljLVx1MDAzZWRldiwgXCYjMzQ7UG9ydCBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZFxcblwmIzM0OywgcG9ydCk7XG4mIzQzO1x0XHRcdG9mX25vZGVfcHV0KGNvbnYpO1xuJiM0MztcdFx0XHRrZnJlZShkdF92YWwpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjb252LCBcJiMzNDtyZW5lc2FzLG1paWMtaW5wdXRcJiMzNDssIFx1MDAyNmNvbmYpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIG1vZGlmaWVkIGNvZGUgaXMgaW4gZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYywgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHRoZSBNSUkgY29udmVydGVyIG9uIFJlbmVzYXMgUlovTjEsIFJaL04ySCwgYW5kIFJaL1QySCBTb0NzIChBUk0vUklTQy1WIGFyY2hpdGVjdHVyZXMpLiBJdCByZXF1aXJlcyBTb0Mtc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMgYW5kIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgeDg2L2FtZDY0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgaXQgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIGFtZDY0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM4YTQ5ZTgxNTU0NGU5MmUyNGMxMDY0ZGUyNjk1MzZkYzYxY2ZmNTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAxOTo1OTozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jCmluZGV4IDJiNzJmYTk4ZGRmMTMuLjFiZDk1ZGRmOTQwMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYwpAQCAtNjgzLDcgJiM0Mzs2ODMsOCBAQCBzdGF0aWMgaW50IG1paWNfcGFyc2VfZHQoc3RydWN0IG1paWMgKm1paWMsIHUzMiAqbW9kZV9jZmcpCiAJaWYgKCFkdF92YWwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtc2V0KGR0X3ZhbCwgTUlJQ19NT0RDVFJMX0NPTkZfTk9ORSwgc2l6ZW9mKCpkdF92YWwpKTsKJiM0MzsJbWVtc2V0KGR0X3ZhbCwgTUlJQ19NT0RDVFJMX0NPTkZfTk9ORSwKJiM0MzsJICAgICAgIHNpemVvZigqZHRfdmFsKSAqIG1paWMtJmd0O29mX2RhdGEtJmd0O2NvbmZfY29udl9jb3VudCk7CiAKIAlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICYjMzQ7cmVuZXNhcyxtaWljLXN3aXRjaC1wb3J0aW4mIzM0OywgJmFtcDtjb25mKSA9PSAwKQogCQlkdF92YWxbMF0gPSBjb25mOwpAQCAtNjkyLDYgJiM0Mzs2OTMsMTQgQEAgc3RhdGljIGludCBtaWljX3BhcnNlX2R0KHN0cnVjdCBtaWljICptaWljLCB1MzIgKm1vZGVfY2ZnKQogCQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoY29udiwgJiMzNDtyZWcmIzM0OywgJmFtcDtwb3J0KSkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQlpZiAocG9ydCAmbHQ7IG1paWMtJmd0O29mX2RhdGEtJmd0O21paWNfcG9ydF9zdGFydCB8fAomIzQzOwkJICAgIHBvcnQgJmd0OyBtaWljLSZndDtvZl9kYXRhLSZndDttaWljX3BvcnRfbWF4KSB7CiYjNDM7CQkJZGV2X2VycihtaWljLSZndDtkZXYsICYjMzQ7UG9ydCBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZFxuJiMzNDssIHBvcnQpOwomIzQzOwkJCW9mX25vZGVfcHV0KGNvbnYpOwomIzQzOwkJCWtmcmVlKGR0X3ZhbCk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiAJCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjb252LCAmIzM0O3JlbmVzYXMsbWlpYy1pbnB1dCYjMzQ7LCAmYW1wO2NvbmYpKQogCQkJY29udGludWU7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2MgoJCQkJCQkJb3V0cHV0OiA3NwoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgSW50ZXJmYWNlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoYXQgZGlmZiwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoYXQgYHBjcy1yem4xLW1paWMuY2AgYWN0dWFsbHkgKmlzKi4gV2hhdCYjMzk7cyB0aGUgaGFyZHdhcmUgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoPyBXaGF0IHBsYXRmb3JtIGRvZXMgaXQgdGFyZ2V0PyBJcyBpdCBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgUmVuZXNhcyBwYXJ0LCBtYXliZSBhbiBSWi9OMT8gSSBhbHNvIGhhdmUgdG8gY2hlY2sgaXRzIEtjb25maWcgZW50cnkgLSBpcyB0aGlzIGNvZGUgYnVpbHQgY29uZGl0aW9uYWxseT8gSG93IGlzIGl0cyByZWFjaGFiaWxpdHkgY29udHJvbGxlZD8gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8KCk15IG5leHQgc3RlcCBpcyB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCB3aXRoaW4gdGhlIGZpbGUgaXRzZWxmIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBGb3IgdGhhdCwgSSB0aGluayBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBjb250ZXh0IHdpdGhpbiBgZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY2AgYW5kIGl0cyBhc3NvY2lhdGVkIEtjb25maWcgZmlsZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvZGUsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY3MtcnpuMS1taWljJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZT05PW9iai0kKENPTkZJR19QQ1NfTVRLX0xZTlhJKVx0JiM0Mzs9IHBjcy1tdGstbHlueGkub1xuZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19QQ1NfUlpOMV9NSUlDKVx0JiM0Mzs9IHBjcy1yem4xLW1paWMub1xuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtMTYtI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfcGxhdGZvcm0uaFx1MDAzZVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzoxNzojaW5jbHVkZSBcdTAwM2NsaW51eC9wY3MtcnpuMS1taWljLmhcdTAwM2VcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtMTgtI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy0yMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6MjM6I2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvbmV0L3Bjcy1yem4xLW1paWMuaFx1MDAzZVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy0yNC0jaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9uZXQvcmVuZXNhcyxyOWEwOWcwNzctcGNzLW1paWMuaFx1MDAzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjcwOlx0XHRcdG1paWMtXHUwMDNlbGlua19jZmcudmFsIFx1MDAyNj0gfm1hc2s7XG4gNjcxOlx0fVxuIDY3MjpcdFxuIDY3MzpcdHN0YXRpYyBpbnQgbWlpY19wYXJzZV9kdChzdHJ1Y3QgbWlpYyAqbWlpYywgdTMyICptb2RlX2NmZylcbiA2NzQ6XHR7XG4gNjc1Olx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gbWlpYy1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZTtcbiA2NzY6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29udjtcbiA2Nzc6XHRcdGJvb2wgYWN0aXZlX2xvdztcbiA2Nzg6XHRcdGludCBwb3J0LCByZXQ7XG4gNjc5Olx0XHRzOCAqZHRfdmFsO1xuIDY4MDpcdFx0dTMyIGNvbmY7XG4gNjgxOlx0XG4gNjgyOlx0XHRkdF92YWwgPSBrbWFsbG9jX29ianMoKmR0X3ZhbCwgbWlpYy1cdTAwM2VvZl9kYXRhLVx1MDAzZWNvbmZfY29udl9jb3VudCk7XG4gNjgzOlx0XHRpZiAoIWR0X3ZhbClcbiA2ODQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNjg1Olx0XG4gNjg2Olx0XHRtZW1zZXQoZHRfdmFsLCBNSUlDX01PRENUUkxfQ09ORl9OT05FLFxuIDY4NzpcdFx0ICAgICAgIHNpemVvZigqZHRfdmFsKSAqIG1paWMtXHUwMDNlb2ZfZGF0YS1cdTAwM2Vjb25mX2NvbnZfY291bnQpO1xuIDY4ODpcdFxuIDY4OTpcdFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBcJiMzNDtyZW5lc2FzLG1paWMtc3dpdGNoLXBvcnRpblwmIzM0OywgXHUwMDI2Y29uZikgPT0gMClcbiA2OTA6XHRcdFx0ZHRfdmFsWzBdID0gY29uZjtcbiA2OTE6XHRcbiA2OTI6XHRcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjb252KSB7XG4gNjkzOlx0XHRcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjb252LCBcJiMzNDtyZWdcJiMzNDssIFx1MDAyNnBvcnQpKVxuIDY5NDpcdFx0XHRcdGNvbnRpbnVlO1xuIDY5NTpcdFxuIDY5NjpcdFx0XHRpZiAocG9ydCBcdTAwM2MgbWlpYy1cdTAwM2VvZl9kYXRhLVx1MDAzZW1paWNfcG9ydF9zdGFydCB8fFxuIDY5NzpcdFx0XHQgICAgcG9ydCBcdTAwM2UgbWlpYy1cdTAwM2VvZl9kYXRhLVx1MDAzZW1paWNfcG9ydF9tYXgpIHtcbiA2OTg6XHRcdFx0XHRkZXZfZXJyKG1paWMtXHUwMDNlZGV2LCBcJiMzNDtQb3J0IG51bWJlciBvdXQgb2YgcmFuZ2U6ICVkXFxuXCYjMzQ7LCBwb3J0KTtcbiA2OTk6XHRcdFx0XHRvZl9ub2RlX3B1dChjb252KTtcbiA3MDA6XHRcdFx0XHRrZnJlZShkdF92YWwpO1xuIDcwMTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDcwMjpcdFx0XHR9XG4gNzAzOlx0XG4gNzA0Olx0XHRcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjb252LCBcJiMzNDtyZW5lc2FzLG1paWMtaW5wdXRcJiMzNDssIFx1MDAyNmNvbmYpKVxuIDcwNTpcdFx0XHRcdGNvbnRpbnVlO1xuIDcwNjpcdFxuIDcwNzpcdFx0XHQvKiBBZGp1c3QgZm9yIDAgYmFzZWQgaW5kZXggKi9cbiA3MDg6XHRcdFx0ZHRfdmFsW3BvcnQgJiM0MzsgIW1paWMtXHUwMDNlb2ZfZGF0YS1cdTAwM2VtaWljX3BvcnRfc3RhcnRdID0gY29uZjtcbiA3MDk6XHRcbiA3MTA6XHRcdFx0YWN0aXZlX2xvdyA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChjb252LCBcJiMzNDtyZW5lc2FzLG1paWMtcGh5LWxpbmstYWN0aXZlLWxvd1wmIzM0Oyk7XG4gNzExOlx0XG4gNzEyOlx0XHRcdG1paWNfY29uZmlndXJlX3BoeV9saW5rKG1paWMsIGNvbmYsIHBvcnQsIGFjdGl2ZV9sb3cpO1xuIDcxMzpcdFx0fVxuIDcxNDpcdFxuIDcxNTpcdFx0cmV0ID0gbWlpY19tYXRjaF9kdF9jb25mKG1paWMsIGR0X3ZhbCwgbW9kZV9jZmcpO1xuIDcxNjpcdFx0a2ZyZWUoZHRfdmFsKTtcbiA3MTc6XHRcbiA3MTg6XHRcdHJldHVybiByZXQ7XG4gNzE5Olx0fVxuIDcyMDpcdFxuIDcyMTpcdHN0YXRpYyB2b2lkIG1paWNfcmVzZXRfY29udHJvbF9idWxrX2Fzc2VydCh2b2lkICpkYXRhKVxuIDcyMjpcdHtcbiA3MjM6XHRcdHN0cnVjdCBtaWljICptaWljID0gZGF0YTtcbiA3MjQ6XHRcdGludCByZXQ7XG4gNzI1Olx0XG4gNzI2Olx0XHRyZXQgPSByZXNldF9jb250cm9sX2J1bGtfYXNzZXJ0KG1paWMtXHUwMDNlb2ZfZGF0YS1cdTAwM2VyZXNldF9jb3VudCwgbWlpYy1cdTAwM2Vyc3RzKTtcbiA3Mjc6XHRcdGlmIChyZXQpXG4gNzI4Olx0XHRcdGRldl9lcnIobWlpYy1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBhc3NlcnQgcmVzZXQgbGluZXNcXG5cJiMzNDspO1xuIDcyOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODg3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBDT05GSUdfUENTX1JaTjFfTUlJQ2AgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgQ09ORklHX1BDU19SWk4xX01JSUNgIG9wdGlvbi4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlc2UgYnVpbGQgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmF2aWdhdGUgdG8gYGRyaXZlcnMvbmV0L3Bjcy9LY29uZmlnYC4gSSBrbm93IHRoYXQmIzM5O3Mgd2hlcmUgdGhlc2UgbmV0d29yay1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRlbmQgdG8gcmVzaWRlLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhIGNvdXBsZSBvZiBrZXkgcGllY2VzIG9mIGluZm9ybWF0aW9uOgoKKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgY29uZGl0aW9ucyBuZWVkIHRvIGJlIG1ldCAqYmVmb3JlKiBgQ09ORklHX1BDU19SWk4xX01JSUNgIGJlY29tZXMgYXZhaWxhYmxlPyBJcyBpdCBkZXBlbmRlbnQgb24gYSBwYXJ0aWN1bGFyIFNvQyBmYW1pbHksIGEgc3BlY2lmaWMgUEhZIGRyaXZlciwgb3Igc29tZSBvdGhlciBlbmFibGluZyBmZWF0dXJlPyBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3Iga25vd2luZyB3aGVuIGFuZCB3aHkgdGhpcyBvcHRpb24gd291bGQgYmUgcmVsZXZhbnQuCiogICAqKkRlZmluaXRpb24vRGVzY3JpcHRpb246KiogV2hhdCAqaXMqIGBDT05GSUdfUENTX1JaTjFfTUlJQ2A/IElzIGl0IGVuYWJsaW5nIGEgcGFydGljdWxhciBQaHlzaWNhbCBDb2RpbmcgU3VibGF5ZXIgKFBDUykgZm9yIGEgc3BlY2lmaWMgUlpOMSBib2FyZCwgbGlrZWx5IGEgc3BlY2lmaWMgTUlJQyAoTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIENvbnRyb2xsZXIpPyBEb2VzIGl0IHJlZmVyIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZT8gVGhlIEtjb25maWcgZW50cnkgc2hvdWxkIHByb3ZpZGUgYSBicmllZiBkZXNjcmlwdGlvbiB0byBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZ2FpbiBhIGJhc2ljIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgYnkgZW5hYmxpbmcgdGhpcyBmbGFnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BDU19SWk4xX01JSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wY3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGNzL0tjb25maWc9MjE9Y29uZmlnIFBDU19NVEtfTFlOWElcbi0tXG5kcml2ZXJzL25ldC9wY3MvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L3Bjcy9LY29uZmlnOjI5OmNvbmZpZyBQQ1NfUlpOMV9NSUlDXG5kcml2ZXJzL25ldC9wY3MvS2NvbmZpZy0zMC1cdHRyaXN0YXRlIFwmIzM0O1JlbmVzYXMgUlovTjEsIFJaL04ySCwgUlovVDJIIE1JSSBjb252ZXJ0ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfUENTX01US19MWU5YSSlcdCYjNDM7PSBwY3MtbXRrLWx5bnhpLm9cbmRyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfUENTX1JaTjFfTUlJQylcdCYjNDM7PSBwY3MtcnpuMS1taWljLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDY3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwmIzM5O3MgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbiwgYW5kIHNwZWNpZmljYWxseSB0aGUgYGRyaXZlcnMvbmV0L3Bjcy9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDI5LCB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3RhcnRzIGZvciBhIGdpdmVuIGRyaXZlciBvciBmZWF0dXJlLiBJIGV4cGVjdCB0aGF0IGxpbmUgd2lsbCBjb250YWluIGEgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9uIG9yIG1heWJlIGEgc291cmNlIHRvIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBCYXNlZCBvbiBteSBleGlzdGluZyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9qZWN0LCBJIG5lZWQgdG8ga25vdyB0aGUgc3RhdGUgb2YgbmV0d29yayBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGNzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0XHRoZWxwXG4gIDI2Olx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGhlbHBlcnMgdG8gcGh5bGluayBmb3IgbWFuYWdpbmcgdGhlIEx5bnhJIFBDU1xuICAyNzpcdFx0ICB3aGljaCBpcyBwYXJ0IG9mIE1lZGlhVGVrJiMzOTtzIFNvQyBhbmQgRXRoZXJuZXQgc3dpdGNoIElDcy5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgUENTX1JaTjFfTUlJQ1xuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVuZXNhcyBSWi9OMSwgUlovTjJILCBSWi9UMkggTUlJIGNvbnZlcnRlclwmIzM0O1xuICAzMTpcdFx0ZGVwZW5kcyBvbiBPRlxuICAzMjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1JFTkVTQVMgfHwgQ09NUElMRV9URVNUXG4gIDMzOlx0XHRoZWxwXG4gIDM0Olx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgTUlJIGNvbnZlcnRlciBhdmFpbGFibGUgb25cbiAgMzU6XHRcdCAgUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJIIFNvQ3MuIFRoaXMgUENTIGNvbnZlcnRzIE1JSSB0b1xuICAzNjpcdFx0ICBSTUlJL1JHTUlJLCBvciBjYW4gYmUgc2V0IGluIHBhc3MtdGhyb3VnaCBtb2RlIGZvciBNSUkuXG4gIDM3Olx0XG4gIDM4Olx0ZW5kbWVudVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTA3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQQ1NfUlpOMV9NSUlDIERyaXZlcioqCgpPa2F5LCBzbyBgY29uZmlnIFBDU19SWk4xX01JSUNgIGlzIGRlcGVuZGVudCBvbiBib3RoIGBPRmAgYW5kIGVpdGhlciBgQVJDSF9SRU5FU0FTYCBvciBgQ09NUElMRV9URVNUYC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgYSBkZXZpY2UgZHJpdmVyLCBsaWtlbHkgdXNpbmcgdGhlIGRldmljZSB0cmVlIGZvciBjb25maWd1cmF0aW9uLCBhbmQgaXQgdGFyZ2V0cyBSZW5lc2FzIGFyY2hpdGVjdHVyZXMsIG9yIGF0IGxlYXN0IG5lZWRzIHRvIGJ1aWxkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiBUaGUgZGVzY3JpcHRpb24gaXRzZWxmIGNsYXJpZmllcyB0aGF0IHRoaXMgbW9kdWxlIGlzIGEgZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgdGhlIE1JSSBjb252ZXJ0ZXIgZm91bmQgb24gUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJIIFNvQ3MuIEEgTUlJIGNvbnZlcnRlciBtb2R1bGUgb24gdGhpcyBwcm9jZXNzb3IgaXMgdmVyeSB1c2VmdWwsIGFuZCB0aGUgZHJpdmVyIHByb3ZpZGVzIHRoZSBvcHRpb24gdG8gY29udmVydCBNSUkgdG8gUk1JSS9SR01JSSwgb3Igb3BlcmF0ZSBpbiBhIHBhc3MtdGhyb3VnaCBtb2RlIGZvciBNSUkuIFRoZSBtZW50aW9uIG9mIHNwZWNpZmljIFNvQyBtb2RlbHMgbmFycm93cyB0aGUgdGFyZ2V0LCBnaXZpbmcgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgaW50ZW5kZWQgaGFyZHdhcmUgZW52aXJvbm1lbnQuIE5vdywgbGV0JiMzOTtzIGRpdmUgZGVlcGVyIGludG8gaG93IHRoaXMgYHBjcy1yem4xLW1paWNgIGRyaXZlciBpcyBhY3R1YWxseSAqdXNlZCogaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIHByb2JlZCBhbmQgY2FsbGVkIOKAkyB3aGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIHR5cGljYWwgdXNlIGNhc2VzPyBUaGlzIHdpbGwgaW52b2x2ZSB0cmFjaW5nIHRoZSBtb2R1bGUmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZGV2aWNlIHRyZWUgYW5kIGxvb2tpbmcgYXQgaG93IG90aGVyIGRyaXZlcnMgbWlnaHQgaW50ZXJhY3Qgd2l0aCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlpY19wcm9iZXxyem4xX21paWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wY3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYz03MzE9c3RhdGljIGludCBtaWljX3Jlc2V0X2NvbnRyb2xfaW5pdChzdHJ1Y3QgbWlpYyAqbWlpYylcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTc2Mi1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6NzYzOnN0YXRpYyBpbnQgbWlpY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy03NjQte1xuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9ODE5PXN0YXRpYyB2b2lkIG1paWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy04MjMtXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjgyNDpzdGF0aWMgc3RydWN0IG1paWNfb2ZfZGF0YSByem4xX21paWNfb2ZfZGF0YSA9IHtcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODI1LVx0Lm1hdGNoX3RhYmxlID0gbW9kY3RybF9tYXRjaF90YWJsZSxcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jPTg1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtaWljX29mX210YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy04NTgtXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVuZXNhcyxyOWEwOWcwNzctbWlpY1wmIzM0OywgLmRhdGEgPSBcdTAwMjZyenQyaF9taWljX29mX2RhdGEgfSxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6ODU5Olx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlbmVzYXMscnpuMS1taWljXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnJ6bjFfbWlpY19vZl9kYXRhIH0sXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg2MC1cdHsgLyogc2VudGluZWwgKi8gfVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9ODY0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1paWNfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy04NjUtXHQuZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzo4NjY6XHRcdC5uYW1lXHQgPSBcJiMzNDtyem4xX21paWNcJiMzNDssXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg2Ny1cdFx0LnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLFxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODY5LVx0fSxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6ODcwOlx0LnByb2JlID0gbWlpY19wcm9iZSxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODcxLVx0LnJlbW92ZSA9IG1paWNfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDA3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBtaWljX2RyaXZlcmAmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYG1paWNfZHJpdmVyYCBpcyBhIHBsYXRmb3JtIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIFJlbmVzYXMgUlovTjEsIFJaL04ySCwgYW5kIFJaL1QySCBTb0NzLCBhbmQgaXQgcmVsaWVzIG9uIE9wZW4gRmlybXdhcmUgKE9GKSBkZXZpY2UgdHJlZXMsIHdoaWNoIGlzIGEga2V5IGluaXRpYWwgZmxhZy4gVGhlIGBzdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZWAgYml0IGltbWVkaWF0ZWx5IHNldHMgb2ZmIGFsYXJtIGJlbGxzLCBhcyB0aGF0IGNvdWxkIGNvbXBsaWNhdGUgdGhpbmdzLiBUaGUgY29kZSBiYXNlIGlzIGRlc2lnbmVkIGFyb3VuZCB0aGUgUmVuZXNhcyBhcmNoaXRlY3R1cmUgKGBBUkNIX1JFTkVTQVNgKSwgd2hpY2ggdHlwaWNhbGx5IGltcGxpZXMgYSBzcGVjaWZpYyBoYXJkd2FyZSBlbnZpcm9ubWVudC4KCk15IGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciBJIGNhbiBldmVuIGluc3RhbnRpYXRlIG9yIGZ1enogdGhpcyBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUsIHNpbmNlIEkmIzM5O20gdGFyZ2V0aW5nIGFtZDY0LiBMZXQmIzM5O3MgY29uZmlybSBteSBzdXNwaWNpb25zOiB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGluZGVlZCBhbWQ2NC4gVGhhdCByYWlzZXMgYSBodWdlIHJlZCBmbGFnOiBjYW4gYW4gT0YgZGV2aWNlIHRyZWUgcGxhdGZvcm0gZGV2aWNlIGJlIHByb2JlZCBvbiBhbWQ2NCB3aXRoaW4gUUVNVT8gQWxtb3N0IGNlcnRhaW5seSBub3Qgd2l0aG91dCBzcGVjaWZpYyBhcnJhbmdlbWVudHMgb3Igd29ya2Fyb3VuZHMuCgpFdmVuIGlmIEkgZm9yY2UgT0YgdG8gY29tcGlsZSB3aXRoIGBDT01QSUxFX1RFU1RgIG9yIGBDT05GSUdfT0ZgIGVuYWJsZWQgb24gYW1kNjQsIHRoZXJlJiMzOTtzIG5vIFJlbmVzYXMgU29DIGRldmljZSB0cmVlIHByZXNlbnQgb24gYW1kNjQsIGFuZCB0aGUgYHN1cHByZXNzX2JpbmRfYXR0cnNgIHByZXZlbnRzIGJpbmRpbmcgaXQgdmlhIHN5c2ZzIGAvc3lzL2J1cy9wbGF0Zm9ybS9kcml2ZXJzL3J6bjFfbWlpYy9iaW5kYC4gVGhpcyBpcyBhIGhhcmQgc3RvcC4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciBhbnkgT0YgY2hhbmdlc2V0cyBvciBzb21ldGhpbmcgY291bGQgbWFnaWNhbGx5IGluc3RhbnRpYXRlIGl0LCBidXQgbXkgaW50dWl0aW9uIHNheXMgdGhpcyBkcml2ZXIgd2FudHMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gYWN0dWFsbHkgZnVuY3Rpb24uIExldCYjMzk7cyBhcHBseSB0aGUgZXN0YWJsaXNoZWQgbmVnYXRpdmUgY3JpdGVyaWEgdG8gY29uZmlybSBteSBhc3Nlc3NtZW50LgoKSSBnbyBiYWNrIHRvIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gSXMgdGhpcyBkcml2ZXIgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBvciBpcyBpdCBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIGFtZDY0PyBUaGlzIGlzIHRoZSBjb3JlIHF1ZXN0aW9uLgoKSSBuZWVkIHRvIG5haWwgZG93biB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZTogUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJILiBSWi9OMSBpcyBBUk0gKENvcnRleC1BNykuIFJaL04yTCwgUlovVDJNIGV0Yy4gYXJlIEFSTSAoQ29ydGV4LVI1MikuIFJaL0cyTCBpcyBBUk02NC4gQW5kIGBBUkNIX1JFTkVTQVNgIHN1cHBvcnRzIEFSTSAvIEFSTTY0LiBPbiBhbWQ2NCwgYEFSQ0hfUkVORVNBU2AgaXMgKm5vdCogc2V0LiBJdCBvbmx5IGNvbXBpbGVzIGlmIGBDT05GSUdfQ09NUElMRV9URVNUYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBkZXBlbmRlbnQgb24gYE9GYCAoYENPTkZJR19PRmApLCB3aGljaCBpc24mIzM5O3QgdXNlZCBvbiBhbWQ2NC4KCk9uIGFtZDY0ICh4ODZfNjQpLCBBQ1BJIGlzIHRoZSBzdGFuZGFyZCBhbmQgcHJldmFsZW50IGRldmljZSB0cmVlIHN5c3RlbS4gVGhlIGRyaXZlciBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgYW4gU29DLWludGVybmFsIE1JSSBjb252ZXJ0ZXIgKGByZW5lc2FzLHJ6bjEtbWlpY2Agb3IgYHJlbmVzYXMscjlhMDlnMDc3LW1paWNgKS4gTXkgYmVzdCBiZXQgaXMgdG8gY2hlY2sgdGhlIGBtaWljX3Byb2JlYCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHdoaWNoIHJlc291cmNlcyB0aGUgZHJpdmVyIGFjdHVhbGx5IHJlcXVlc3RzLCBidXQgdGhlIGRpcmVjdGlvbiBJJiMzOTttIHNlZWluZyBpcyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IG91dCBvZiBzY29wZSBmb3Igc3RhbmRhcmQgUUVNVSBvbiBhbWQ2NC4gSSB0aGluayBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gbWFyayB0aGlzIGFzIE5PVCBmdXp6YWJsZSBhcyBpdCBpcyBhbG1vc3QgY2VydGFpbmx5IGEgU3RydWN0dXJhbGx5IFVucmVhY2hhYmxlIEhhcmR3YXJlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzYwOlx0XHRyZXR1cm4gMDtcbiA3NjE6XHR9XG4gNzYyOlx0XG4gNzYzOlx0c3RhdGljIGludCBtaWljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gNzY0Olx0e1xuIDc2NTpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4gNzY2Olx0XHRzdHJ1Y3QgbWlpYyAqbWlpYztcbiA3Njc6XHRcdHUzMiBtb2RlX2NmZztcbiA3Njg6XHRcdGludCByZXQ7XG4gNzY5Olx0XG4gNzcwOlx0XHRtaWljID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptaWljKSwgR0ZQX0tFUk5FTCk7XG4gNzcxOlx0XHRpZiAoIW1paWMpXG4gNzcyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDc3MzpcdFxuIDc3NDpcdFx0bWlpYy1cdTAwM2VvZl9kYXRhID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XG4gNzc1Olx0XHRtaWljLVx1MDAzZWRldiA9IGRldjtcbiA3NzY6XHRcbiA3Nzc6XHRcdHJldCA9IG1paWNfcGFyc2VfZHQobWlpYywgXHUwMDI2bW9kZV9jZmcpO1xuIDc3ODpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA3Nzk6XHRcdFx0cmV0dXJuIHJldDtcbiA3ODA6XHRcbiA3ODE6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1paWMtXHUwMDNlbG9jayk7XG4gNzgyOlx0XHRtaWljLVx1MDAzZWJhc2UgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7XG4gNzgzOlx0XHRpZiAoSVNfRVJSKG1paWMtXHUwMDNlYmFzZSkpXG4gNzg0Olx0XHRcdHJldHVybiBQVFJfRVJSKG1paWMtXHUwMDNlYmFzZSk7XG4gNzg1Olx0XG4gNzg2Olx0XHRyZXQgPSBtaWljX3Jlc2V0X2NvbnRyb2xfaW5pdChtaWljKTtcbiA3ODc6XHRcdGlmIChyZXQpXG4gNzg4Olx0XHRcdHJldHVybiByZXQ7XG4gNzg5Olx0XG4gNzkwOlx0XHRyZXQgPSBkZXZtX3BtX3J1bnRpbWVfZW5hYmxlKGRldik7XG4gNzkxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDc5MjpcdFx0XHRyZXR1cm4gcmV0O1xuIDc5MzpcdFxuIDc5NDpcdFx0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChkZXYpO1xuIDc5NTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA3OTY6XHRcdFx0cmV0dXJuIHJldDtcbiA3OTc6XHRcbiA3OTg6XHRcdHJldCA9IG1paWNfaW5pdF9odyhtaWljLCBtb2RlX2NmZyk7XG4gNzk5Olx0XHRpZiAocmV0KVxuIDgwMDpcdFx0XHRnb3RvIGRpc2FibGVfcnVudGltZV9wbTtcbiA4MDE6XHRcbiA4MDI6XHRcdG1paWNfcmVnX3JtdyhtaWljLCBNSUlDX1BIWV9MSU5LLCBtaWljLVx1MDAzZWxpbmtfY2ZnLm1hc2ssIG1paWMtXHUwMDNlbGlua19jZmcudmFsKTtcbiA4MDM6XHRcbiA4MDQ6XHRcdC8qIG1paWNfY3JlYXRlKCkgcmVsaWVzIG9uIHRoYXQgZmFjdCB0aGF0IGRhdGEgYXJlIGF0dGFjaGVkIHRvIHRoZVxuIDgwNTpcdFx0ICogcGxhdGZvcm0gZGV2aWNlIHRvIGRldGVybWluZSBpZiB0aGUgZHJpdmVyIGlzIHJlYWR5IHNvIHRoaXMgbmVlZHMgdG9cbiA4MDY6XHRcdCAqIGJlIHRoZSBsYXN0IHRoaW5nIHRvIGJlIGRvbmUgYWZ0ZXIgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZFxuIDgwNzpcdFx0ICogcHJvcGVybHkuXG4gODA4Olx0XHQgKi9cbiA4MDk6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1paWMpO1xuIDgxMDpcdFxuIDgxMTpcdFx0cmV0dXJuIDA7XG4gODEyOlx0XG4gODEzOlx0ZGlzYWJsZV9ydW50aW1lX3BtOlxuIDgxNDpcdFx0cG1fcnVudGltZV9wdXQoZGV2KTtcbiA4MTU6XHRcbiA4MTY6XHRcdHJldHVybiByZXQ7XG4gODE3Olx0fVxuIDgxODpcdFxuIDgxOTpcdHN0YXRpYyB2b2lkIG1paWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgdGhlIGBBUkNIX1JFTkVTQVNgIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgQVJDSF9SRU5FU0FTYCBhY3R1YWxseSByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dC4gTGV0JiMzOTtzIHNlZS4uLiBJIHNob3VsZCBjaGVjayB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBNeSBnby10byBhcHByb2FjaCBpcyB0byBsb2NhdGUgdGhlIGRlZmluaXRpb24uIE9rYXksIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgYGdyZXBgIGZvciBgY29uZmlnIEFSQ0hfUkVORVNBU2AgLiBUaGF0IHNob3VsZCBwaW5wb2ludCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlIHdoZXJlIHRoaXMgb3B0aW9uIGlzIGRlY2xhcmVkLCBhbmQgdGhlIHNlYXJjaCByZXN1bHRzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludC4gVGhpcyB3aWxsIGdpdmUgbWUgYWxsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIGFjdGl2ZS4gTm93IHRvIHNlYXJjaCwgYW5kIGhvcGVmdWxseSBmaWd1cmUgb3V0IGl0cyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFSQ0hfUkVORVNBUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnOjI6bWVudWNvbmZpZyBBUkNIX1JFTkVTQVNcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtSZW5lc2FzIEFSTSBTb0NzXCYjMzQ7XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3Jtcz0zMzU9Y29uZmlnIEFSQ0hfUkVBTFRFS1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXMtMzQxLVxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3JtczozNDI6Y29uZmlnIEFSQ0hfUkVORVNBU1xuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3Jtcy0zNDMtXHRib29sIFwmIzM0O1JlbmVzYXMgU29DIFBsYXRmb3Jtc1wmIzM0O1xuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy5zb2NzPTI0PWNvbmZpZyBBUkNIX01JQ1JPQ0hJUFxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy5zb2NzLTI4LVxuYXJjaC9yaXNjdi9LY29uZmlnLnNvY3M6Mjk6Y29uZmlnIEFSQ0hfUkVORVNBU1xuYXJjaC9yaXNjdi9LY29uZmlnLnNvY3MtMzAtXHRib29sIFwmIzM0O1JlbmVzYXMgUklTQy1WIFNvQ3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTczMwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlbmVzYXMgTUlJQyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVsYXRpb25zaGlwcyBoZXJlLiBGaXJzdCBvZmYsIGBBUkNIX1JFTkVTQVNgIGVuY29tcGFzc2VzIHF1aXRlIGEgZmV3IGFyY2hpdGVjdHVyZXMgLSBBUk0sIEFSTTY0LCBhbmQgUklTQy1WIFN5c3RlbS1vbi1DaGlwcy4gVGhlIHBvaW50IGlzLCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgd2hlbiBJIHNlZSBpdCwgSSAqa25vdyogaXQmIzM5O3Mgbm90IGFwcGxpY2FibGUgdG8gYGFtZDY0YC4gSXQmIzM5O3Mgbm90IGFuIGFtZDY0IGFyY2hpdGVjdHVyZSBkcml2ZXIuIEkgaGF2ZSB0byByZW1lbWJlciB0aGlzIGFzIEkgZGlnIGRlZXBlci4KCk5vdywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoaXMgYHBjcy1yem4xLW1paWMuY2AgZmlsZS4gVGhlIHByaW1hcnkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIGV4dGVudCBvZiBpdHMgdXNhZ2Ugb3V0c2lkZSBvZiB0aGUgYG1paWNfcHJvYmVgIGZ1bmN0aW9uLiBUaGlzIGlzIGNyaXRpY2FsLiBBcmUgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBpbnRlcmFjdGluZyB3aXRoIHRoaXMgZHJpdmVyPyBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbHMuIEkgbmVlZCB0byBiZSBzdXJlIGJlZm9yZSBtb3Zpbmcgb24uIEkmIzM5O2xsIHNlYXJjaCBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgYHJ6bjFfbWlpY2AgdGhyb3VnaG91dCB0aGUgZW50aXJlIGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyem4xWy1fXW1paWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvcmVuZXNhcyxyem4xLWE1cHN3LnlhbWw9MTk9cHJvcGVydGllczpcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9yZW5lc2FzLHJ6bjEtYTVwc3cueWFtbC03My0gICAgICAgICAgICAgIHBoYW5kbGUgcG9pbnRpbmcgdG8gYSBQQ1Mgc3ViLW5vZGUgY29tcGF0aWJsZSB3aXRoXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9yZW5lc2FzLHJ6bjEtYTVwc3cueWFtbDo3NDogICAgICAgICAgICAgIHJlbmVzYXMscnpuMS1taWljLnlhbWwjXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9yZW5lc2FzLHJ6bjEtYTVwc3cueWFtbC03NS1cbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sLTMtLS0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sOjQ6JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwjXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sLTUtJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbD0xNz1wcm9wZXJ0aWVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwtMjgtICAgICAgICAgICAgICAtIHJlbmVzYXMscjlhMDZnMDMyLW1paWNcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWw6Mjk6ICAgICAgICAgIC0gY29uc3Q6IHJlbmVzYXMscnpuMS1taWljXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sLTMwLSAgICAgIC0gaXRlbXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC02NC0gICAgZGVzY3JpcHRpb246IE1JSSBTd2l0Y2ggUE9SVElOIGNvbmZpZ3VyYXRpb24uIFRoaXMgdmFsdWUgc2hvdWxkIHVzZSBvbmUgb2ZcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWw6NjU6ICAgICAgdGhlIHZhbHVlcyBkZWZpbmVkIGluIGR0LWJpbmRpbmdzL25ldC9wY3MtcnpuMS1taWljLmggZm9yIFJaL04xIFNvQyBhbmRcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwtNjYtICAgICAgaW5jbHVkZS9kdC1iaW5kaW5ncy9uZXQvcmVuZXNhcyxyOWEwOWcwNzctcGNzLW1paWMuaCBmb3IgUlovTjJILCBSWi9UMkggU29Dcy5cbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sPTczPXBhdHRlcm5Qcm9wZXJ0aWVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwtODQtICAgICAgICBkZXNjcmlwdGlvbjogQ29udmVydGVyIGlucHV0IHBvcnQgY29uZmlndXJhdGlvbi4gVGhpcyB2YWx1ZSBzaG91bGQgdXNlXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sOjg1OiAgICAgICAgICBvbmUgb2YgdGhlIHZhbHVlcyBkZWZpbmVkIGluIGR0LWJpbmRpbmdzL25ldC9wY3MtcnpuMS1taWljLmggZm9yIFJaL04xIFNvQ1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC04Ni0gICAgICAgICAgYW5kIGluY2x1ZGUvZHQtYmluZGluZ3MvbmV0L3JlbmVzYXMscjlhMDlnMDc3LXBjcy1taWljLmggZm9yIFJaL04ySCwgUlovVDJIIFNvQ3MuXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbD0xMDI9YWxsT2Y6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC0xMDYtICAgICAgICAgIGNvbnRhaW5zOlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbDoxMDc6ICAgICAgICAgICAgY29uc3Q6IHJlbmVzYXMscnpuMS1taWljXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sLTEwOC0gICAgdGhlbjpcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sPTIxNz1leGFtcGxlczpcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwtMjE4LSAgLSB8XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sOjIxOTogICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvbmV0L3Bjcy1yem4xLW1paWMuaFx1MDAzZVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC0yMjAtICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2Nsb2NrL3I5YTA2ZzAzMi1zeXNjdHJsLmhcdTAwM2Vcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sLTIyNC0gICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sOjIyNTogICAgICBjb21wYXRpYmxlID0gXCYjMzQ7cmVuZXNhcyxyOWEwNmcwMzItbWlpY1wmIzM0OywgXCYjMzQ7cmVuZXNhcyxyem4xLW1paWNcJiMzNDs7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sLTIyNi0gICAgICByZWcgPSBcdTAwM2MweDQ0MDMwMDAwIDB4MTAwMDBcdTAwM2U7XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLHJ6bjEtZ21hYy55YW1sPTI1PXByb3BlcnRpZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLHJ6bjEtZ21hYy55YW1sLTQ0LSAgICAgIHBoYW5kbGUgcG9pbnRpbmcgdG8gYSBQQ1Mgc3ViLW5vZGUgY29tcGF0aWJsZSB3aXRoXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMscnpuMS1nbWFjLnlhbWw6NDU6ICAgICAgcmVuZXNhcyxyem4xLW1paWMueWFtbCNcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxyem4xLWdtYWMueWFtbC00Ni1cbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMscnp2MmgtZ2JldGgueWFtbD0yNj1wcm9wZXJ0aWVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxyenYyaC1nYmV0aC55YW1sLTE1My0gICAgICBwaGFuZGxlIHBvaW50aW5nIHRvIGEgUENTIHN1Yi1ub2RlIGNvbXBhdGlibGUgd2l0aFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLHJ6djJoLWdiZXRoLnlhbWw6MTU0OiAgICAgIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwjXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMscnp2MmgtZ2JldGgueWFtbC0xNTUtICAgICAgKFJlZmVyIFJaL1QySCBwb3J0aW9uIGluIHRoZSBEVC1iaW5kaW5nIGZpbGUpXG4tLVxuTUFJTlRBSU5FUlM9MjMyNjU9RjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL3JlbmVzYXMscnpuMS1hNXBzdy55YW1sXG5NQUlOVEFJTkVSUzoyMzI2NjpGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbFxuTUFJTlRBSU5FUlMtMjMyNjctRjpcdGRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3KlxuTUFJTlRBSU5FUlM6MjMyNjg6RjpcdGRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmNcbk1BSU5UQUlORVJTOjIzMjY5OkY6XHRpbmNsdWRlL2R0LWJpbmRpbmdzL25ldC9wY3MtcnpuMS1taWljLmhcbk1BSU5UQUlORVJTOjIzMjcwOkY6XHRpbmNsdWRlL2xpbnV4L3Bjcy1yem4xLW1paWMuaFxuTUFJTlRBSU5FUlMtMjMyNzEtRjpcdG5ldC9kc2EvdGFnX3J6bjFfYTVwc3cuY1xuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL3JlbmVzYXMvcjlhMDZnMDMyLXJ6bjFkNDAwLWRiLmR0cy0xMy0jaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9sZWRzL2NvbW1vbi5oXHUwMDNlXG5hcmNoL2FybS9ib290L2R0cy9yZW5lc2FzL3I5YTA2ZzAzMi1yem4xZDQwMC1kYi5kdHM6MTQ6I2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvbmV0L3Bjcy1yem4xLW1paWMuaFx1MDAzZVxuYXJjaC9hcm0vYm9vdC9kdHMvcmVuZXNhcy9yOWEwNmcwMzItcnpuMWQ0MDAtZGIuZHRzLTE1LSNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL3BpbmN0cmwvcnpuMS1waW5jdHJsLmhcdTAwM2Vcbi0tXG5hcmNoL2FybS9ib290L2R0cy9yZW5lc2FzL3I5YTA2ZzAzMi5kdHNpPTQ1Nz1cdFx0ZXRoX21paWM6IGV0aC1taWljQDQ0MDMwMDAwIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL3JlbmVzYXMvcjlhMDZnMDMyLmR0c2k6NDU4Olx0XHRcdGNvbXBhdGlibGUgPSBcJiMzNDtyZW5lc2FzLHI5YTA2ZzAzMi1taWljXCYjMzQ7LCBcJiMzNDtyZW5lc2FzLHJ6bjEtbWlpY1wmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL3JlbmVzYXMvcjlhMDZnMDMyLmR0c2ktNDU5LVx0XHRcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5oLTE0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5oOjE1OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy1yem4xLW1paWMuaFx1MDAzZVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuaC0xNi0jaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jOjIwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy1yem4xLW1paWMuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jLTIxLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jLTgtI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jOjk6I2luY2x1ZGUgXHUwMDNjbGludXgvcGNzLXJ6bjEtbWlpYy5oXHUwMDNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX1BDU19NVEtfTFlOWEkpXHQmIzQzOz0gcGNzLW10ay1seW54aS5vXG5kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX1BDU19SWk4xX01JSUMpXHQmIzQzOz0gcGNzLXJ6bjEtbWlpYy5vXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy0xNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9wbGF0Zm9ybS5oXHUwMDNlXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjE3OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy1yem4xLW1paWMuaFx1MDAzZVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy0xOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9waHlsaW5rLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTIyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzoyMzojaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9uZXQvcGNzLXJ6bjEtbWlpYy5oXHUwMDNlXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTI0LSNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL25ldC9yZW5lc2FzLHI5YTA5ZzA3Ny1wY3MtbWlpYy5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYz04MTk9c3RhdGljIHZvaWQgbWlpY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTgyMy1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6ODI0OnN0YXRpYyBzdHJ1Y3QgbWlpY19vZl9kYXRhIHJ6bjFfbWlpY19vZl9kYXRhID0ge1xuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy04MjUtXHQubWF0Y2hfdGFibGUgPSBtb2RjdHJsX21hdGNoX3RhYmxlLFxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9ODU3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1paWNfb2ZfbXRhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg1OC1cdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZW5lc2FzLHI5YTA5ZzA3Ny1taWljXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnJ6dDJoX21paWNfb2ZfZGF0YSB9LFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzo4NTk6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVuZXNhcyxyem4xLW1paWNcJiMzNDssIC5kYXRhID0gXHUwMDI2cnpuMV9taWljX29mX2RhdGEgfSxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODYwLVx0eyAvKiBzZW50aW5lbCAqLyB9XG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYz04NjQ9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWlpY19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg2NS1cdC5kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjg2NjpcdFx0Lm5hbWVcdCA9IFwmIzM0O3J6bjFfbWlpY1wmIzM0OyxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODY3LVx0XHQuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzY1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBSWi9OMSBNSUlDIERyaXZlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBSWi9OMSBNSUlDIGRyaXZlci4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgY3JhY2sgb3BlbiBgaW5jbHVkZS9saW51eC9wY3MtcnpuMS1taWljLmhgLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGhlYWRlciBmaWxlIHRvIGxheSBvdXQgdGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgdGhhdCBkZWZpbmUgdGhlIGhhcmR3YXJlIGludGVyZmFjZS4gSG9wZWZ1bGx5LCBpdCBjb250YWlucyBkZXRhaWxzIGFib3V0IHRoZSBNSUlDIHJlZ2lzdGVycyB0aGVtc2VsdmVzIOKAkyB0aGUgYml0ZmllbGRzLCB0aGVpciBhZGRyZXNzZXMsIHRoZSB2YXJpb3VzIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcnMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgY2xvY2sgY29uZmlndXJhdGlvbiBhbmQgbWFuYWdlbWVudCwgZ2l2ZW4gdGhlIGNyaXRpY2FsIHRpbWluZyByZXF1aXJlbWVudHMgb2YgRXRoZXJuZXQgUEhZIGNvbW11bmljYXRpb24uIEnigJltIGFsc28gbG9va2luZyBmb3IgYW55IGN1c3RvbSBvciBSWi9OMS1zcGVjaWZpYyBleHRlbnNpb25zIHRoYXQgbWlnaHQgYmUgaW5jbHVkZWQuIFRoaW5ncyBsaWtlIGludGVycnVwdCBtYXBwaW5ncywgRE1BIHNldHVwIHN0cnVjdHVyZXMgKGlmIERNQSBpcyB1c2VkKSwgYW5kIHBvdGVudGlhbGx5IHNvbWUgb2YgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdvb2RpZXMgYXJlIGluIHRoZXJlLiBJJiMzOTttIGhvcGluZyBmb3Igc29tZSBjbGVhbiwgd2VsbC1kZWZpbmVkIG1hY3JvcyB0aGF0IG1ha2UgaXQgZWFzaWVyIHRvIGdyb2sgdGhlIGhhcmR3YXJlIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGNzLXJ6bjEtbWlpYy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiAgIDI6XHQvKlxuICAgMzpcdCAqIENvcHlyaWdodCAoQykgMjAyMiBTY2huZWlkZXIgRWxlY3RyaWNcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENsw6ltZW50IEzDqWdlciBcdTAwM2NjbGVtZW50LmxlZ2VyQGJvb3RsaW4uY29tXHUwMDNlXG4gICA2Olx0ICovXG4gICA3Olx0XG4gICA4Olx0I2lmbmRlZiBfX0xJTlVYX1BDU19NSUlDX0hcbiAgIDk6XHQjZGVmaW5lIF9fTElOVVhfUENTX01JSUNfSFxuICAxMDpcdFxuICAxMTpcdHN0cnVjdCBwaHlsaW5rO1xuICAxMjpcdHN0cnVjdCBkZXZpY2Vfbm9kZTtcbiAgMTM6XHRcbiAgMTQ6XHRzdHJ1Y3QgcGh5bGlua19wY3MgKm1paWNfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucCk7XG4gIDE1Olx0XG4gIDE2Olx0dm9pZCBtaWljX2Rlc3Ryb3koc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpO1xuICAxNzpcdFxuICAxODpcdCNlbmRpZiAvKiBfX0xJTlVYX1BDU19NSUlDX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MDgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ2FsbHMgdG8gYG1paWNfY3JlYXRlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgYG1paWNfY3JlYXRlYC4uLndoYXQmIzM5O3MgKmFjdHVhbGx5KiBpbnZva2luZyBpdD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gSSB3YW50IHRvIHNlZSB0aGUgY2FsbCBncmFwaCwgYnV0IG5vdCBqdXN0IHRoZSBkaXJlY3QgY2FsbGVycy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgKndoeSogLSB3aGF0IGFyZSB0aGUgaGlnaGVyLWxldmVsIGZ1bmN0aW9ucyBvciBtb2R1bGVzIHRoYXQgZGVwZW5kIG9uIGBtaWljX2NyZWF0ZWA/IEFyZSB0aGVyZSBzcGVjaWZpYyBzY2VuYXJpb3Mgd2hlcmUgaXQmIzM5O3MgdXNlZD8gSXMgdGhpcyBhIGNvcmUgZnVuY3Rpb25hbGl0eSBwaWVjZSwgb3IgaXMgaXQgbW9yZSBvZiBhIHV0aWxpdHkgZnVuY3Rpb24gZm9yIHNwZWNpZmljIHN1YnN5c3RlbXM/CgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHJlc291cmNlcyBpbnZvbHZlZC4gRG9lcyBgbWlpY19jcmVhdGVgIGFsbG9jYXRlIGFueXRoaW5nPyBJZiBzbywgd2hhdD8gSG93JiMzOTtzIGl0IGluaXRpYWxpemVkPyBJJiMzOTtsbCBwcm9iYWJseSBiZSBpbnRlcmVzdGVkIGluIHRyYWNraW5nIHRoZSBsaWZldGltZSBvZiB0aGVzZSBhbGxvY2F0ZWQgcmVzb3VyY2VzIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWVzIGRvd24gdGhlIGxpbmUuCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gYG1paWNfY3JlYXRlYC4gQXJlIHRoZXkgY29uc2lzdGVudD8gQXJlIHRoZXJlIGFueSBjb21tb24gcGF0dGVybnMgb3Igc3VycHJpc2luZyBpbnB1dHM/IEkmIzM5O2xsIHdhbnQgdG8gcXVpY2tseSBsb29rIGZvciBhbnkgZWRnZSBjYXNlcywgbGlrZSBudWxsIHBvaW50ZXJzIG9yIHVuZXhwZWN0ZWQgdmFsdWVzIHRoYXQgbWlnaHQgbGVhZCB0byBjcmFzaGVzIG9yIHVuZGVmaW5lZCBiZWhhdmlvci4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoYXQgdGhlIGZ1bmN0aW9uICpyZXR1cm5zKi4gSXMgaXQgYSBzdWNjZXNzL2ZhaWx1cmUgY29kZT8gQSBoYW5kbGU/IFdoYXQga2luZCBvZiBlcnJvciBoYW5kbGluZyBpcyBpbXBsZW1lbnRlZD8gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBob3cgaXQmIzM5O3MgaGFuZGxlZCB1cCB0aGUgY2FsbCBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlpY19jcmVhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYz0xMTU3PXN0YXRpYyBpbnQgYTVwc3dfcGNzX2dldChzdHJ1Y3QgYTVwc3cgKmE1cHN3KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE4Mi1cbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM6MTE4MzpcdFx0cGNzID0gbWlpY19jcmVhdGUoYTVwc3ctXHUwMDNlZGV2LCBwY3Nfbm9kZSk7XG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExODQtXHRcdGlmIChJU19FUlIocGNzKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguYz02Mz1zdGF0aWMgaW50IHJlbmVzYXNfZ21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jLTcwLVx0aWYgKHBjc19ub2RlKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmM6NzE6XHRcdHBjcyA9IG1paWNfY3JlYXRlKHByaXYtXHUwMDNlZGV2aWNlLCBwY3Nfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMtNzItXHRcdG9mX25vZGVfcHV0KHBjc19ub2RlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmM9MTY9c3RhdGljIGludCByem4xX2R3bWFjX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtMjQtXHRpZiAocGNzX25vZGUpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYzoyNTpcdFx0cGNzID0gbWlpY19jcmVhdGUocHJpdi1cdTAwM2VkZXZpY2UsIHBjc19ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYy0yNi1cdFx0b2Zfbm9kZV9wdXQocGNzX25vZGUpO1xuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9NDQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzIG1paWNfcGh5bGlua19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy00NDktXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjQ1MDpzdHJ1Y3QgcGh5bGlua19wY3MgKm1paWNfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucClcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtNDUxLXtcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTUwOC19XG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjUwOTpFWFBPUlRfU1lNQk9MKG1paWNfY3JlYXRlKTtcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtNTEwLVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9NzYzPXN0YXRpYyBpbnQgbWlpY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODAzLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzo4MDQ6XHQvKiBtaWljX2NyZWF0ZSgpIHJlbGllcyBvbiB0aGF0IGZhY3QgdGhhdCBkYXRhIGFyZSBhdHRhY2hlZCB0byB0aGVcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODA1LVx0ICogcGxhdGZvcm0gZGV2aWNlIHRvIGRldGVybWluZSBpZiB0aGUgZHJpdmVyIGlzIHJlYWR5IHNvIHRoaXMgbmVlZHMgdG9cbi0tXG5pbmNsdWRlL2xpbnV4L3Bjcy1yem4xLW1paWMuaD0xMj1zdHJ1Y3QgZGV2aWNlX25vZGU7XG5pbmNsdWRlL2xpbnV4L3Bjcy1yem4xLW1paWMuaC0xMy1cbmluY2x1ZGUvbGludXgvcGNzLXJ6bjEtbWlpYy5oOjE0OnN0cnVjdCBwaHlsaW5rX3BjcyAqbWlpY19jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTtcbmluY2x1ZGUvbGludXgvcGNzLXJ6bjEtbWlpYy5oLTE1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIxNgoJCQkJCQkJb3V0cHV0OiAxNDEKCQkJCQkJCXRob3VnaHRzOiA5MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgUmVuZXNhcyBTb0MgRXRoZXJuZXQgQ29udHJvbGxlciBEcml2ZXIgb24gYW1kNjQqKgoKT2theSwgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGlzIGlzIGEgZGVhZCBlbmQgZm9yIGZ1enppbmcgb24gYW1kNjQuIGBtaWljX2NyZWF0ZWAgaXMgb25seSBjYWxsZWQgYnkgcGxhdGZvcm0gZHJpdmVycyBmb3IgUmVuZXNhcyBFdGhlcm5ldCBjb250cm9sbGVyczogUlovTjEgKHNwZWNpZmljKS4gVGhlIGNvZGUgbW9kaWZpZWQgYnkgdGhlIHBhdGNoIGlzIHdpdGhpbiBgbWlpY19wYXJzZV9kdGAsIHdoaWNoIGlzIG9ubHkgZXZlciBjYWxsZWQgZHVyaW5nIHRoZSBgbWlpY19wcm9iZWAgZnVuY3Rpb24uIGBtaWljX3Byb2JlYCBpcywgaW4gdHVybiwgdGhlIHByb2JlIGZ1bmN0aW9uIG9mIHRoZSBgbWlpY19kcml2ZXJgLiBUaGUgZHJpdmVyIHNwZWNpZmljYWxseSBsb29rcyBmb3IgZGV2aWNlcyB3aXRoICYjMzQ7cmVuZXNhcyxyem4xLW1paWMmIzM0OyBvciBzaW1pbGFyIGNvbXBhdGlibGUgc3RyaW5ncyBpbiB0aGUgRGV2aWNlIFRyZWUuIFRoaXMgaXMgYSBjbGVhciBpbmRpY2F0b3Igb2YgaXQgYmVpbmcgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIGEgUmVuZXNhcyBTb0MsIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgQVJNL1JJU0MtViBiYXNlZCBzeXN0ZW1zLgoKTm93LCB0aGUgaW1wb3J0YW50IGJpdDogSSYjMzk7bSBmdXp6aW5nIG9uIGFtZDY0LiBUaGVzZSBSZW5lc2FzIFNvQ3MgYXJlIEFSTS9SSVNDLVYgYmFzZWQsIHNvIHRoZXkgc2ltcGx5IGRvbiYjMzk7dCBleGlzdCBvbiB0aGlzIHRhcmdldCBhcmNoaXRlY3R1cmUuIFRoZXJlJiMzOTtzIG5vIGhhcmR3YXJlLCBubyBlbXVsYXRlZCBoYXJkd2FyZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgYW5kIHRoZXJlZm9yZSBubyBEZXZpY2UgVHJlZSBub2RlcyBmb3IgdGhlc2UgZGV2aWNlcy4gRnVydGhlcm1vcmUsIHRoZSBkcml2ZXIgaGFzIGBzdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZWAsIHdoaWNoIG1lYW5zIHRoZXJlJiMzOTtzIG5vIHdheSB0byBmb3JjZSBiaW5kaW5nIHZpYSBzeXNmcywgZXZlbiBpZiBhIGR1bW15IHBsYXRmb3JtIGRldmljZSAqY291bGQqIGJlIGNyZWF0ZWQuIFRoaXMgbGluZXMgdXAgcGVyZmVjdGx5IHdpdGggdGhlICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgbmVnYXRpdmUgY3JpdGVyaWEuIEFsbCB0aGUgcGllY2VzIGZpdDogaXQmIzM5O3MgYSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoIG9uIGFtZDY0LiBUaGUgbW9kaWZpZWQgY29kZSwgdGhlIERldmljZSBUcmVlIHBhcnNpbmcsIGV2ZXJ5dGhpbmcgaXMgZGVwZW5kZW50IG9uIFJlbmVzYXMtc3BlY2lmaWMgaGFyZHdhcmUgdGhhdCYjMzk7cyBzaW1wbHkgbm90IHByZXNlbnQgaW4gdGhpcyBzZXR1cC4gVGhpcyBpcyBkZWZpbml0ZWx5IG5vdCBhIHdvcnRod2hpbGUgZnV6emluZyB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiBkcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgdGhlIE1JSSBjb252ZXJ0ZXIgb24gUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJIIFNvQ3MgKEFSTS9SSVNDLVYgYXJjaGl0ZWN0dXJlcykuIEl0IHJlcXVpcmVzIFNvQy1zcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyBhbmQgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODYvYW1kNjQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyBpdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBjb2RlIGlzIGluIGRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMsIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciB0aGUgTUlJIGNvbnZlcnRlciBvbiBSZW5lc2FzIFJaL04xLCBSWi9OMkgsIGFuZCBSWi9UMkggU29DcyAoQVJNL1JJU0MtViBhcmNoaXRlY3R1cmVzKS4gSXQgcmVxdWlyZXMgU29DLXNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzIGFuZCBwaHlzaWNhbCBTb0MgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHg4Ni9hbWQ2NCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIGl0IHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1OTozMi41NDczNjA5OTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODU1Nzg2Nzc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIG1vZGlmaWVkIGNvZGUgaXMgaW4gZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYywgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHRoZSBNSUkgY29udmVydGVyIG9uIFJlbmVzYXMgUlovTjEsIFJaL04ySCwgYW5kIFJaL1QySCBTb0NzIChBUk0vUklTQy1WIGFyY2hpdGVjdHVyZXMpLiBJdCByZXF1aXJlcyBTb0Mtc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMgYW5kIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgeDg2L2FtZDY0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgaXQgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIGFtZDY0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTk6MzIuNTQ3MzY2NDQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ2NTkzOTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzhhNDllODE1NTQ0ZTkyZTI0YzEwNjRkZTI2OTUzNmRjNjFjZmY1NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAxOTo1OTozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY1xcbmluZGV4IDJiNzJmYTk4ZGRmMTMuLjFiZDk1ZGRmOTQwMGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmNcXG5AQCAtNjgzLDcgKzY4Myw4IEBAIHN0YXRpYyBpbnQgbWlpY19wYXJzZV9kdChzdHJ1Y3QgbWlpYyAqbWlpYywgdTMyICptb2RlX2NmZylcXG4gXFx0aWYgKCFkdF92YWwpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0bWVtc2V0KGR0X3ZhbCwgTUlJQ19NT0RDVFJMX0NPTkZfTk9ORSwgc2l6ZW9mKCpkdF92YWwpKTtcXG4rXFx0bWVtc2V0KGR0X3ZhbCwgTUlJQ19NT0RDVFJMX0NPTkZfTk9ORSxcXG4rXFx0ICAgICAgIHNpemVvZigqZHRfdmFsKSAqIG1paWMtXFx1MDAzZW9mX2RhdGEtXFx1MDAzZWNvbmZfY29udl9jb3VudCk7XFxuIFxcbiBcXHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIFxcXCJyZW5lc2FzLG1paWMtc3dpdGNoLXBvcnRpblxcXCIsIFxcdTAwMjZjb25mKSA9PSAwKVxcbiBcXHRcXHRkdF92YWxbMF0gPSBjb25mO1xcbkBAIC02OTIsNiArNjkzLDE0IEBAIHN0YXRpYyBpbnQgbWlpY19wYXJzZV9kdChzdHJ1Y3QgbWlpYyAqbWlpYywgdTMyICptb2RlX2NmZylcXG4gXFx0XFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGNvbnYsIFxcXCJyZWdcXFwiLCBcXHUwMDI2cG9ydCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0aWYgKHBvcnQgXFx1MDAzYyBtaWljLVxcdTAwM2VvZl9kYXRhLVxcdTAwM2VtaWljX3BvcnRfc3RhcnQgfHxcXG4rXFx0XFx0ICAgIHBvcnQgXFx1MDAzZSBtaWljLVxcdTAwM2VvZl9kYXRhLVxcdTAwM2VtaWljX3BvcnRfbWF4KSB7XFxuK1xcdFxcdFxcdGRldl9lcnIobWlpYy1cXHUwMDNlZGV2LCBcXFwiUG9ydCBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZFxcXFxuXFxcIiwgcG9ydCk7XFxuK1xcdFxcdFxcdG9mX25vZGVfcHV0KGNvbnYpO1xcbitcXHRcXHRcXHRrZnJlZShkdF92YWwpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGNvbnYsIFxcXCJyZW5lc2FzLG1paWMtaW5wdXRcXFwiLCBcXHUwMDI2Y29uZikpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTk6MzMuOTk0NjE5MDQ5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5NzExMDU5NjgyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiBkcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgdGhlIE1JSSBjb252ZXJ0ZXIgb24gUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJIIFNvQ3MgKEFSTS9SSVNDLVYgYXJjaGl0ZWN0dXJlcykuIEl0IHJlcXVpcmVzIFNvQy1zcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyBhbmQgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODYvYW1kNjQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyBpdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM4YTQ5ZTgxNTU0NGU5MmUyNGMxMDY0ZGUyNjk1MzZkYzYxY2ZmNTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAxOTo1OTozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jXG5pbmRleCAyYjcyZmE5OGRkZjEzLi4xYmQ5NWRkZjk0MDBhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY1xuKysrIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY1xuQEAgLTY4Myw3ICs2ODMsOCBAQCBzdGF0aWMgaW50IG1paWNfcGFyc2VfZHQoc3RydWN0IG1paWMgKm1paWMsIHUzMiAqbW9kZV9jZmcpXG4gXHRpZiAoIWR0X3ZhbClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRtZW1zZXQoZHRfdmFsLCBNSUlDX01PRENUUkxfQ09ORl9OT05FLCBzaXplb2YoKmR0X3ZhbCkpO1xuK1x0bWVtc2V0KGR0X3ZhbCwgTUlJQ19NT0RDVFJMX0NPTkZfTk9ORSxcbitcdCAgICAgICBzaXplb2YoKmR0X3ZhbCkgKiBtaWljLVx1MDAzZW9mX2RhdGEtXHUwMDNlY29uZl9jb252X2NvdW50KTtcbiBcbiBcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgXCJyZW5lc2FzLG1paWMtc3dpdGNoLXBvcnRpblwiLCBcdTAwMjZjb25mKSA9PSAwKVxuIFx0XHRkdF92YWxbMF0gPSBjb25mO1xuQEAgLTY5Miw2ICs2OTMsMTQgQEAgc3RhdGljIGludCBtaWljX3BhcnNlX2R0KHN0cnVjdCBtaWljICptaWljLCB1MzIgKm1vZGVfY2ZnKVxuIFx0XHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoY29udiwgXCJyZWdcIiwgXHUwMDI2cG9ydCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdGlmIChwb3J0IFx1MDAzYyBtaWljLVx1MDAzZW9mX2RhdGEtXHUwMDNlbWlpY19wb3J0X3N0YXJ0IHx8XG4rXHRcdCAgICBwb3J0IFx1MDAzZSBtaWljLVx1MDAzZW9mX2RhdGEtXHUwMDNlbWlpY19wb3J0X21heCkge1xuK1x0XHRcdGRldl9lcnIobWlpYy1cdTAwM2VkZXYsIFwiUG9ydCBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZFxcblwiLCBwb3J0KTtcbitcdFx0XHRvZl9ub2RlX3B1dChjb252KTtcbitcdFx0XHRrZnJlZShkdF92YWwpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4gXHRcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjb252LCBcInJlbmVzYXMsbWlpYy1pbnB1dFwiLCBcdTAwMjZjb25mKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU5OjMzLjk5NDYyMDY5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgyNTc4ODMzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIEludGVyZmFjZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhhdCBkaWZmLCBzcGVjaWZpY2FsbHkgdGhlIGBkcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgd2hhdCBgcGNzLXJ6bjEtbWlpYy5jYCBhY3R1YWxseSAqaXMqLiBXaGF0J3MgdGhlIGhhcmR3YXJlIGl0J3MgYXNzb2NpYXRlZCB3aXRoPyBXaGF0IHBsYXRmb3JtIGRvZXMgaXQgdGFyZ2V0PyBJcyBpdCBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgUmVuZXNhcyBwYXJ0LCBtYXliZSBhbiBSWi9OMT8gSSBhbHNvIGhhdmUgdG8gY2hlY2sgaXRzIEtjb25maWcgZW50cnkgLSBpcyB0aGlzIGNvZGUgYnVpbHQgY29uZGl0aW9uYWxseT8gSG93IGlzIGl0cyByZWFjaGFiaWxpdHkgY29udHJvbGxlZD8gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj9cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kIHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYgYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIEZvciB0aGF0LCBJIHRoaW5rIEknbGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgY29udGV4dCB3aXRoaW4gYGRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmNgIGFuZCBpdHMgYXNzb2NpYXRlZCBLY29uZmlnIGZpbGUuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNjIsIk91dHB1dFRva2VucyI6NzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1OTo0Mi4yNTI1MDcwNDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2NTk4MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNzLXJ6bjEtbWlpY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wY3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX1BDU19NVEtfTFlOWEkpXFx0Kz0gcGNzLW10ay1seW54aS5vXFxuZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19QQ1NfUlpOMV9NSUlDKVxcdCs9IHBjcy1yem4xLW1paWMub1xcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfcGxhdGZvcm0uaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjE3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY3MtcnpuMS1taWljLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy0xOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5bGluay5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6MjM6I2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL25ldC9wY3MtcnpuMS1taWljLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy0yNC0jaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvbmV0L3JlbmVzYXMscjlhMDlnMDc3LXBjcy1taWljLmhcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU5OjQyLjMwMTE3Njk0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDYwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY3MDpcXHRcXHRcXHRtaWljLVxcdTAwM2VsaW5rX2NmZy52YWwgXFx1MDAyNj0gfm1hc2s7XFxuIDY3MTpcXHR9XFxuIDY3MjpcXHRcXG4gNjczOlxcdHN0YXRpYyBpbnQgbWlpY19wYXJzZV9kdChzdHJ1Y3QgbWlpYyAqbWlpYywgdTMyICptb2RlX2NmZylcXG4gNjc0OlxcdHtcXG4gNjc1OlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBtaWljLVxcdTAwM2VkZXYtXFx1MDAzZW9mX25vZGU7XFxuIDY3NjpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbnY7XFxuIDY3NzpcXHRcXHRib29sIGFjdGl2ZV9sb3c7XFxuIDY3ODpcXHRcXHRpbnQgcG9ydCwgcmV0O1xcbiA2Nzk6XFx0XFx0czggKmR0X3ZhbDtcXG4gNjgwOlxcdFxcdHUzMiBjb25mO1xcbiA2ODE6XFx0XFxuIDY4MjpcXHRcXHRkdF92YWwgPSBrbWFsbG9jX29ianMoKmR0X3ZhbCwgbWlpYy1cXHUwMDNlb2ZfZGF0YS1cXHUwMDNlY29uZl9jb252X2NvdW50KTtcXG4gNjgzOlxcdFxcdGlmICghZHRfdmFsKVxcbiA2ODQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDY4NTpcXHRcXG4gNjg2OlxcdFxcdG1lbXNldChkdF92YWwsIE1JSUNfTU9EQ1RSTF9DT05GX05PTkUsXFxuIDY4NzpcXHRcXHQgICAgICAgc2l6ZW9mKCpkdF92YWwpICogbWlpYy1cXHUwMDNlb2ZfZGF0YS1cXHUwMDNlY29uZl9jb252X2NvdW50KTtcXG4gNjg4OlxcdFxcbiA2ODk6XFx0XFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBcXFwicmVuZXNhcyxtaWljLXN3aXRjaC1wb3J0aW5cXFwiLCBcXHUwMDI2Y29uZikgPT0gMClcXG4gNjkwOlxcdFxcdFxcdGR0X3ZhbFswXSA9IGNvbmY7XFxuIDY5MTpcXHRcXG4gNjkyOlxcdFxcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjb252KSB7XFxuIDY5MzpcXHRcXHRcXHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoY29udiwgXFxcInJlZ1xcXCIsIFxcdTAwMjZwb3J0KSlcXG4gNjk0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA2OTU6XFx0XFxuIDY5NjpcXHRcXHRcXHRpZiAocG9ydCBcXHUwMDNjIG1paWMtXFx1MDAzZW9mX2RhdGEtXFx1MDAzZW1paWNfcG9ydF9zdGFydCB8fFxcbiA2OTc6XFx0XFx0XFx0ICAgIHBvcnQgXFx1MDAzZSBtaWljLVxcdTAwM2VvZl9kYXRhLVxcdTAwM2VtaWljX3BvcnRfbWF4KSB7XFxuIDY5ODpcXHRcXHRcXHRcXHRkZXZfZXJyKG1paWMtXFx1MDAzZWRldiwgXFxcIlBvcnQgbnVtYmVyIG91dCBvZiByYW5nZTogJWRcXFxcblxcXCIsIHBvcnQpO1xcbiA2OTk6XFx0XFx0XFx0XFx0b2Zfbm9kZV9wdXQoY29udik7XFxuIDcwMDpcXHRcXHRcXHRcXHRrZnJlZShkdF92YWwpO1xcbiA3MDE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDcwMjpcXHRcXHRcXHR9XFxuIDcwMzpcXHRcXG4gNzA0OlxcdFxcdFxcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjb252LCBcXFwicmVuZXNhcyxtaWljLWlucHV0XFxcIiwgXFx1MDAyNmNvbmYpKVxcbiA3MDU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDcwNjpcXHRcXG4gNzA3OlxcdFxcdFxcdC8qIEFkanVzdCBmb3IgMCBiYXNlZCBpbmRleCAqL1xcbiA3MDg6XFx0XFx0XFx0ZHRfdmFsW3BvcnQgKyAhbWlpYy1cXHUwMDNlb2ZfZGF0YS1cXHUwMDNlbWlpY19wb3J0X3N0YXJ0XSA9IGNvbmY7XFxuIDcwOTpcXHRcXG4gNzEwOlxcdFxcdFxcdGFjdGl2ZV9sb3cgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woY29udiwgXFxcInJlbmVzYXMsbWlpYy1waHktbGluay1hY3RpdmUtbG93XFxcIik7XFxuIDcxMTpcXHRcXG4gNzEyOlxcdFxcdFxcdG1paWNfY29uZmlndXJlX3BoeV9saW5rKG1paWMsIGNvbmYsIHBvcnQsIGFjdGl2ZV9sb3cpO1xcbiA3MTM6XFx0XFx0fVxcbiA3MTQ6XFx0XFxuIDcxNTpcXHRcXHRyZXQgPSBtaWljX21hdGNoX2R0X2NvbmYobWlpYywgZHRfdmFsLCBtb2RlX2NmZyk7XFxuIDcxNjpcXHRcXHRrZnJlZShkdF92YWwpO1xcbiA3MTc6XFx0XFxuIDcxODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA3MTk6XFx0fVxcbiA3MjA6XFx0XFxuIDcyMTpcXHRzdGF0aWMgdm9pZCBtaWljX3Jlc2V0X2NvbnRyb2xfYnVsa19hc3NlcnQodm9pZCAqZGF0YSlcXG4gNzIyOlxcdHtcXG4gNzIzOlxcdFxcdHN0cnVjdCBtaWljICptaWljID0gZGF0YTtcXG4gNzI0OlxcdFxcdGludCByZXQ7XFxuIDcyNTpcXHRcXG4gNzI2OlxcdFxcdHJldCA9IHJlc2V0X2NvbnRyb2xfYnVsa19hc3NlcnQobWlpYy1cXHUwMDNlb2ZfZGF0YS1cXHUwMDNlcmVzZXRfY291bnQsIG1paWMtXFx1MDAzZXJzdHMpO1xcbiA3Mjc6XFx0XFx0aWYgKHJldClcXG4gNzI4OlxcdFxcdFxcdGRldl9lcnIobWlpYy1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGFzc2VydCByZXNldCBsaW5lc1xcXFxuXFxcIik7XFxuIDcyOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU5OjQyLjMwMTMxNDQyNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0NjQzMjYxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYENPTkZJR19QQ1NfUlpOMV9NSUlDYCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYENPTkZJR19QQ1NfUlpOMV9NSUlDYCBvcHRpb24uIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlc2UgYnVpbGQgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSdsbCBuYXZpZ2F0ZSB0byBgZHJpdmVycy9uZXQvcGNzL0tjb25maWdgLiBJIGtub3cgdGhhdCdzIHdoZXJlIHRoZXNlIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0ZW5kIHRvIHJlc2lkZS4gRnJvbSB0aGVyZSwgSSdsbCBiZSBsb29raW5nIGZvciBhIGNvdXBsZSBvZiBrZXkgcGllY2VzIG9mIGluZm9ybWF0aW9uOlxuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBvciBjb25kaXRpb25zIG5lZWQgdG8gYmUgbWV0ICpiZWZvcmUqIGBDT05GSUdfUENTX1JaTjFfTUlJQ2AgYmVjb21lcyBhdmFpbGFibGU/IElzIGl0IGRlcGVuZGVudCBvbiBhIHBhcnRpY3VsYXIgU29DIGZhbWlseSwgYSBzcGVjaWZpYyBQSFkgZHJpdmVyLCBvciBzb21lIG90aGVyIGVuYWJsaW5nIGZlYXR1cmU/IFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBrbm93aW5nIHdoZW4gYW5kIHdoeSB0aGlzIG9wdGlvbiB3b3VsZCBiZSByZWxldmFudC5cbiogICAqKkRlZmluaXRpb24vRGVzY3JpcHRpb246KiogV2hhdCAqaXMqIGBDT05GSUdfUENTX1JaTjFfTUlJQ2A/IElzIGl0IGVuYWJsaW5nIGEgcGFydGljdWxhciBQaHlzaWNhbCBDb2RpbmcgU3VibGF5ZXIgKFBDUykgZm9yIGEgc3BlY2lmaWMgUlpOMSBib2FyZCwgbGlrZWx5IGEgc3BlY2lmaWMgTUlJQyAoTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIENvbnRyb2xsZXIpPyBEb2VzIGl0IHJlZmVyIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZT8gVGhlIEtjb25maWcgZW50cnkgc2hvdWxkIHByb3ZpZGUgYSBicmllZiBkZXNjcmlwdGlvbiB0byBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gSSdtIGV4cGVjdGluZyB0byBnYWluIGEgYmFzaWMgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgY29udHJvbGxlZCBieSBlbmFibGluZyB0aGlzIGZsYWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4ODcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1OTo0NS43NjU2NDIxNzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MzM0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUENTX1JaTjFfTUlJQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wY3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGNzL0tjb25maWc9MjE9Y29uZmlnIFBDU19NVEtfTFlOWElcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9LY29uZmlnLTI4LVxcbmRyaXZlcnMvbmV0L3Bjcy9LY29uZmlnOjI5OmNvbmZpZyBQQ1NfUlpOMV9NSUlDXFxuZHJpdmVycy9uZXQvcGNzL0tjb25maWctMzAtXFx0dHJpc3RhdGUgXFxcIlJlbmVzYXMgUlovTjEsIFJaL04ySCwgUlovVDJIIE1JSSBjb252ZXJ0ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfUENTX01US19MWU5YSSlcXHQrPSBwY3MtbXRrLWx5bnhpLm9cXG5kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX1BDU19SWk4xX01JSUMpXFx0Kz0gcGNzLXJ6bjEtbWlpYy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU5OjQ1LjgxMzE4MTc4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2ODkwODQzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsJ3MgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGBkcml2ZXJzL25ldC9wY3MvS2NvbmZpZ2AgZmlsZS4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgMjksIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIHN0YXJ0cyBmb3IgYSBnaXZlbiBkcml2ZXIgb3IgZmVhdHVyZS4gSSBleHBlY3QgdGhhdCBsaW5lIHdpbGwgY29udGFpbiBhIHJlbGV2YW50IGBjb25maWdgIG9wdGlvbiBvciBtYXliZSBhIHNvdXJjZSB0byBsb29rIGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gbXkgZXhpc3RpbmcgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJvamVjdCwgSSBuZWVkIHRvIGtub3cgdGhlIHN0YXRlIG9mIG5ldHdvcmsgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE5OjU5OjUxLjUwMjI2ODYyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGNzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0XFx0aGVscFxcbiAgMjY6XFx0XFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBoZWxwZXJzIHRvIHBoeWxpbmsgZm9yIG1hbmFnaW5nIHRoZSBMeW54SSBQQ1NcXG4gIDI3OlxcdFxcdCAgd2hpY2ggaXMgcGFydCBvZiBNZWRpYVRlaydzIFNvQyBhbmQgRXRoZXJuZXQgc3dpdGNoIElDcy5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIFBDU19SWk4xX01JSUNcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJSZW5lc2FzIFJaL04xLCBSWi9OMkgsIFJaL1QySCBNSUkgY29udmVydGVyXFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBPRlxcbiAgMzI6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1JFTkVTQVMgfHwgQ09NUElMRV9URVNUXFxuICAzMzpcXHRcXHRoZWxwXFxuICAzNDpcXHRcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgTUlJIGNvbnZlcnRlciBhdmFpbGFibGUgb25cXG4gIDM1OlxcdFxcdCAgUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJIIFNvQ3MuIFRoaXMgUENTIGNvbnZlcnRzIE1JSSB0b1xcbiAgMzY6XFx0XFx0ICBSTUlJL1JHTUlJLCBvciBjYW4gYmUgc2V0IGluIHBhc3MtdGhyb3VnaCBtb2RlIGZvciBNSUkuXFxuICAzNzpcXHRcXG4gIDM4OlxcdGVuZG1lbnVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTk6NTEuNTAyMzMxNDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUxMjYzNjExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUENTX1JaTjFfTUlJQyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBgY29uZmlnIFBDU19SWk4xX01JSUNgIGlzIGRlcGVuZGVudCBvbiBib3RoIGBPRmAgYW5kIGVpdGhlciBgQVJDSF9SRU5FU0FTYCBvciBgQ09NUElMRV9URVNUYC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQncyBhIGRldmljZSBkcml2ZXIsIGxpa2VseSB1c2luZyB0aGUgZGV2aWNlIHRyZWUgZm9yIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCB0YXJnZXRzIFJlbmVzYXMgYXJjaGl0ZWN0dXJlcywgb3IgYXQgbGVhc3QgbmVlZHMgdG8gYnVpbGQgZm9yIHRlc3RpbmcgcHVycG9zZXMuIFRoZSBkZXNjcmlwdGlvbiBpdHNlbGYgY2xhcmlmaWVzIHRoYXQgdGhpcyBtb2R1bGUgaXMgYSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciB0aGUgTUlJIGNvbnZlcnRlciBmb3VuZCBvbiBSZW5lc2FzIFJaL04xLCBSWi9OMkgsIGFuZCBSWi9UMkggU29Dcy4gQSBNSUkgY29udmVydGVyIG1vZHVsZSBvbiB0aGlzIHByb2Nlc3NvciBpcyB2ZXJ5IHVzZWZ1bCwgYW5kIHRoZSBkcml2ZXIgcHJvdmlkZXMgdGhlIG9wdGlvbiB0byBjb252ZXJ0IE1JSSB0byBSTUlJL1JHTUlJLCBvciBvcGVyYXRlIGluIGEgcGFzcy10aHJvdWdoIG1vZGUgZm9yIE1JSS4gVGhlIG1lbnRpb24gb2Ygc3BlY2lmaWMgU29DIG1vZGVscyBuYXJyb3dzIHRoZSB0YXJnZXQsIGdpdmluZyBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBpbnRlbmRlZCBoYXJkd2FyZSBlbnZpcm9ubWVudC4gTm93LCBsZXQncyBkaXZlIGRlZXBlciBpbnRvIGhvdyB0aGlzIGBwY3MtcnpuMS1taWljYCBkcml2ZXIgaXMgYWN0dWFsbHkgKnVzZWQqIGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHByb2JlZCBhbmQgY2FsbGVkIOKAkyB3aGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIHR5cGljYWwgdXNlIGNhc2VzPyBUaGlzIHdpbGwgaW52b2x2ZSB0cmFjaW5nIHRoZSBtb2R1bGUncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBkZXZpY2UgdHJlZSBhbmQgbG9va2luZyBhdCBob3cgb3RoZXIgZHJpdmVycyBtaWdodCBpbnRlcmFjdCB3aXRoIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTA3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTk6NTk6NTQuMDE0OTcwNDQ3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDUzNzE1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWljX3Byb2JlfHJ6bjFfbWlpY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wY3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYz03MzE9c3RhdGljIGludCBtaWljX3Jlc2V0X2NvbnRyb2xfaW5pdChzdHJ1Y3QgbWlpYyAqbWlpYylcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtNzYyLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6NzYzOnN0YXRpYyBpbnQgbWlpY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtNzY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9ODE5PXN0YXRpYyB2b2lkIG1paWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTgyMy1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjgyNDpzdGF0aWMgc3RydWN0IG1paWNfb2ZfZGF0YSByem4xX21paWNfb2ZfZGF0YSA9IHtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTgyNS1cXHQubWF0Y2hfdGFibGUgPSBtb2RjdHJsX21hdGNoX3RhYmxlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYz04NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWlpY19vZl9tdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg1OC1cXHR7IC5jb21wYXRpYmxlID0gXFxcInJlbmVzYXMscjlhMDlnMDc3LW1paWNcXFwiLCAuZGF0YSA9IFxcdTAwMjZyenQyaF9taWljX29mX2RhdGEgfSxcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjg1OTpcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlbmVzYXMscnpuMS1taWljXFxcIiwgLmRhdGEgPSBcXHUwMDI2cnpuMV9taWljX29mX2RhdGEgfSxcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg2MC1cXHR7IC8qIHNlbnRpbmVsICovIH1cXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9ODY0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1paWNfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODY1LVxcdC5kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzo4NjY6XFx0XFx0Lm5hbWVcXHQgPSBcXFwicnpuMV9taWljXFxcIixcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg2Ny1cXHRcXHQuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg2OS1cXHR9LFxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6ODcwOlxcdC5wcm9iZSA9IG1paWNfcHJvYmUsXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy04NzEtXFx0LnJlbW92ZSA9IG1paWNfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxOTo1OTo1NC4wNjk1MTQ5NDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTU2MTk1NjU0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYG1paWNfZHJpdmVyYCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgbWlpY19kcml2ZXJgIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJIIFNvQ3MsIGFuZCBpdCByZWxpZXMgb24gT3BlbiBGaXJtd2FyZSAoT0YpIGRldmljZSB0cmVlcywgd2hpY2ggaXMgYSBrZXkgaW5pdGlhbCBmbGFnLiBUaGUgYHN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlYCBiaXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgYWxhcm0gYmVsbHMsIGFzIHRoYXQgY291bGQgY29tcGxpY2F0ZSB0aGluZ3MuIFRoZSBjb2RlIGJhc2UgaXMgZGVzaWduZWQgYXJvdW5kIHRoZSBSZW5lc2FzIGFyY2hpdGVjdHVyZSAoYEFSQ0hfUkVORVNBU2ApLCB3aGljaCB0eXBpY2FsbHkgaW1wbGllcyBhIHNwZWNpZmljIGhhcmR3YXJlIGVudmlyb25tZW50LlxuXG5NeSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgSSBjYW4gZXZlbiBpbnN0YW50aWF0ZSBvciBmdXp6IHRoaXMgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLCBzaW5jZSBJJ20gdGFyZ2V0aW5nIGFtZDY0LiBMZXQncyBjb25maXJtIG15IHN1c3BpY2lvbnM6IHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgaW5kZWVkIGFtZDY0LiBUaGF0IHJhaXNlcyBhIGh1Z2UgcmVkIGZsYWc6IGNhbiBhbiBPRiBkZXZpY2UgdHJlZSBwbGF0Zm9ybSBkZXZpY2UgYmUgcHJvYmVkIG9uIGFtZDY0IHdpdGhpbiBRRU1VPyBBbG1vc3QgY2VydGFpbmx5IG5vdCB3aXRob3V0IHNwZWNpZmljIGFycmFuZ2VtZW50cyBvciB3b3JrYXJvdW5kcy5cblxuRXZlbiBpZiBJIGZvcmNlIE9GIHRvIGNvbXBpbGUgd2l0aCBgQ09NUElMRV9URVNUYCBvciBgQ09ORklHX09GYCBlbmFibGVkIG9uIGFtZDY0LCB0aGVyZSdzIG5vIFJlbmVzYXMgU29DIGRldmljZSB0cmVlIHByZXNlbnQgb24gYW1kNjQsIGFuZCB0aGUgYHN1cHByZXNzX2JpbmRfYXR0cnNgIHByZXZlbnRzIGJpbmRpbmcgaXQgdmlhIHN5c2ZzIGAvc3lzL2J1cy9wbGF0Zm9ybS9kcml2ZXJzL3J6bjFfbWlpYy9iaW5kYC4gVGhpcyBpcyBhIGhhcmQgc3RvcC5cblxuSSdtIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgYW55IE9GIGNoYW5nZXNldHMgb3Igc29tZXRoaW5nIGNvdWxkIG1hZ2ljYWxseSBpbnN0YW50aWF0ZSBpdCwgYnV0IG15IGludHVpdGlvbiBzYXlzIHRoaXMgZHJpdmVyIHdhbnRzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIHRvIGFjdHVhbGx5IGZ1bmN0aW9uLiBMZXQncyBhcHBseSB0aGUgZXN0YWJsaXNoZWQgbmVnYXRpdmUgY3JpdGVyaWEgdG8gY29uZmlybSBteSBhc3Nlc3NtZW50LlxuXG5JIGdvIGJhY2sgdG8gdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBJcyB0aGlzIGRyaXZlciBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsIG9yIGlzIGl0IGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gYW1kNjQ/IFRoaXMgaXMgdGhlIGNvcmUgcXVlc3Rpb24uXG5cbkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmU6IFJlbmVzYXMgUlovTjEsIFJaL04ySCwgYW5kIFJaL1QySC4gUlovTjEgaXMgQVJNIChDb3J0ZXgtQTcpLiBSWi9OMkwsIFJaL1QyTSBldGMuIGFyZSBBUk0gKENvcnRleC1SNTIpLiBSWi9HMkwgaXMgQVJNNjQuIEFuZCBgQVJDSF9SRU5FU0FTYCBzdXBwb3J0cyBBUk0gLyBBUk02NC4gT24gYW1kNjQsIGBBUkNIX1JFTkVTQVNgIGlzICpub3QqIHNldC4gSXQgb25seSBjb21waWxlcyBpZiBgQ09ORklHX0NPTVBJTEVfVEVTVGAgaXMgZW5hYmxlZC4gSXQncyBkZXBlbmRlbnQgb24gYE9GYCAoYENPTkZJR19PRmApLCB3aGljaCBpc24ndCB1c2VkIG9uIGFtZDY0LlxuXG5PbiBhbWQ2NCAoeDg2XzY0KSwgQUNQSSBpcyB0aGUgc3RhbmRhcmQgYW5kIHByZXZhbGVudCBkZXZpY2UgdHJlZSBzeXN0ZW0uIFRoZSBkcml2ZXIgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIGFuIFNvQy1pbnRlcm5hbCBNSUkgY29udmVydGVyIChgcmVuZXNhcyxyem4xLW1paWNgIG9yIGByZW5lc2FzLHI5YTA5ZzA3Ny1taWljYCkuIE15IGJlc3QgYmV0IGlzIHRvIGNoZWNrIHRoZSBgbWlpY19wcm9iZWAgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB3aGljaCByZXNvdXJjZXMgdGhlIGRyaXZlciBhY3R1YWxseSByZXF1ZXN0cywgYnV0IHRoZSBkaXJlY3Rpb24gSSdtIHNlZWluZyBpcyB0aGF0IGl0J3MgcHJvYmFibHkgb3V0IG9mIHNjb3BlIGZvciBzdGFuZGFyZCBRRU1VIG9uIGFtZDY0LiBJIHRoaW5rIEknbSBnb2luZyB0byBoYXZlIHRvIG1hcmsgdGhpcyBhcyBOT1QgZnV6emFibGUgYXMgaXQgaXMgYWxtb3N0IGNlcnRhaW5seSBhIFN0cnVjdHVyYWxseSBVbnJlYWNoYWJsZSBIYXJkd2FyZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjAwOjA5LjY4OTA4MjY1MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc0OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDc2MTpcXHR9XFxuIDc2MjpcXHRcXG4gNzYzOlxcdHN0YXRpYyBpbnQgbWlpY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiA3NjQ6XFx0e1xcbiA3NjU6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gNzY2OlxcdFxcdHN0cnVjdCBtaWljICptaWljO1xcbiA3Njc6XFx0XFx0dTMyIG1vZGVfY2ZnO1xcbiA3Njg6XFx0XFx0aW50IHJldDtcXG4gNzY5OlxcdFxcbiA3NzA6XFx0XFx0bWlpYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWlpYyksIEdGUF9LRVJORUwpO1xcbiA3NzE6XFx0XFx0aWYgKCFtaWljKVxcbiA3NzI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDc3MzpcXHRcXG4gNzc0OlxcdFxcdG1paWMtXFx1MDAzZW9mX2RhdGEgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcXG4gNzc1OlxcdFxcdG1paWMtXFx1MDAzZWRldiA9IGRldjtcXG4gNzc2OlxcdFxcbiA3Nzc6XFx0XFx0cmV0ID0gbWlpY19wYXJzZV9kdChtaWljLCBcXHUwMDI2bW9kZV9jZmcpO1xcbiA3Nzg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDc3OTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA3ODA6XFx0XFxuIDc4MTpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bWlpYy1cXHUwMDNlbG9jayk7XFxuIDc4MjpcXHRcXHRtaWljLVxcdTAwM2ViYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApO1xcbiA3ODM6XFx0XFx0aWYgKElTX0VSUihtaWljLVxcdTAwM2ViYXNlKSlcXG4gNzg0OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKG1paWMtXFx1MDAzZWJhc2UpO1xcbiA3ODU6XFx0XFxuIDc4NjpcXHRcXHRyZXQgPSBtaWljX3Jlc2V0X2NvbnRyb2xfaW5pdChtaWljKTtcXG4gNzg3OlxcdFxcdGlmIChyZXQpXFxuIDc4ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA3ODk6XFx0XFxuIDc5MDpcXHRcXHRyZXQgPSBkZXZtX3BtX3J1bnRpbWVfZW5hYmxlKGRldik7XFxuIDc5MTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNzkyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDc5MzpcXHRcXG4gNzk0OlxcdFxcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoZGV2KTtcXG4gNzk1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA3OTY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNzk3OlxcdFxcbiA3OTg6XFx0XFx0cmV0ID0gbWlpY19pbml0X2h3KG1paWMsIG1vZGVfY2ZnKTtcXG4gNzk5OlxcdFxcdGlmIChyZXQpXFxuIDgwMDpcXHRcXHRcXHRnb3RvIGRpc2FibGVfcnVudGltZV9wbTtcXG4gODAxOlxcdFxcbiA4MDI6XFx0XFx0bWlpY19yZWdfcm13KG1paWMsIE1JSUNfUEhZX0xJTkssIG1paWMtXFx1MDAzZWxpbmtfY2ZnLm1hc2ssIG1paWMtXFx1MDAzZWxpbmtfY2ZnLnZhbCk7XFxuIDgwMzpcXHRcXG4gODA0OlxcdFxcdC8qIG1paWNfY3JlYXRlKCkgcmVsaWVzIG9uIHRoYXQgZmFjdCB0aGF0IGRhdGEgYXJlIGF0dGFjaGVkIHRvIHRoZVxcbiA4MDU6XFx0XFx0ICogcGxhdGZvcm0gZGV2aWNlIHRvIGRldGVybWluZSBpZiB0aGUgZHJpdmVyIGlzIHJlYWR5IHNvIHRoaXMgbmVlZHMgdG9cXG4gODA2OlxcdFxcdCAqIGJlIHRoZSBsYXN0IHRoaW5nIHRvIGJlIGRvbmUgYWZ0ZXIgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZFxcbiA4MDc6XFx0XFx0ICogcHJvcGVybHkuXFxuIDgwODpcXHRcXHQgKi9cXG4gODA5OlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1paWMpO1xcbiA4MTA6XFx0XFxuIDgxMTpcXHRcXHRyZXR1cm4gMDtcXG4gODEyOlxcdFxcbiA4MTM6XFx0ZGlzYWJsZV9ydW50aW1lX3BtOlxcbiA4MTQ6XFx0XFx0cG1fcnVudGltZV9wdXQoZGV2KTtcXG4gODE1OlxcdFxcbiA4MTY6XFx0XFx0cmV0dXJuIHJldDtcXG4gODE3OlxcdH1cXG4gODE4OlxcdFxcbiA4MTk6XFx0c3RhdGljIHZvaWQgbWlpY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MDA6MDkuNjg5MjUyOTUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxMzc2OTUzNTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBBUkNIX1JFTkVTQVNgIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBBUkNIX1JFTkVTQVNgIGFjdHVhbGx5IHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0LiBMZXQncyBzZWUuLi4gSSBzaG91bGQgY2hlY2sgd2hlcmUgaXQncyBkZWZpbmVkIGFuZCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIE15IGdvLXRvIGFwcHJvYWNoIGlzIHRvIGxvY2F0ZSB0aGUgZGVmaW5pdGlvbi4gT2theSwgbGV0J3Mgc3RhcnQgd2l0aCBhIGBncmVwYCBmb3IgYGNvbmZpZyBBUkNIX1JFTkVTQVNgIC4gVGhhdCBzaG91bGQgcGlucG9pbnQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSB3aGVyZSB0aGlzIG9wdGlvbiBpcyBkZWNsYXJlZCwgYW5kIHRoZSBzZWFyY2ggcmVzdWx0cyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoaXMgd2lsbCBnaXZlIG1lIGFsbCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29uZmlndXJhdGlvbiBpcyBhY3RpdmUuIE5vdyB0byBzZWFyY2gsIGFuZCBob3BlZnVsbHkgZmlndXJlIG91dCBpdHMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNDYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjAwOjQxLjA2NjIwOTc0M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5ODY1NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBUkNIX1JFTkVTQVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnOjI6bWVudWNvbmZpZyBBUkNIX1JFTkVTQVNcXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWctMy1cXHRib29sIFxcXCJSZW5lc2FzIEFSTSBTb0NzXFxcIlxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3Jtcz0zMzU9Y29uZmlnIEFSQ0hfUkVBTFRFS1xcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3Jtcy0zNDEtXFxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3JtczozNDI6Y29uZmlnIEFSQ0hfUkVORVNBU1xcbmFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXMtMzQzLVxcdGJvb2wgXFxcIlJlbmVzYXMgU29DIFBsYXRmb3Jtc1xcXCJcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy5zb2NzPTI0PWNvbmZpZyBBUkNIX01JQ1JPQ0hJUFxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLnNvY3MtMjgtXFxuYXJjaC9yaXNjdi9LY29uZmlnLnNvY3M6Mjk6Y29uZmlnIEFSQ0hfUkVORVNBU1xcbmFyY2gvcmlzY3YvS2NvbmZpZy5zb2NzLTMwLVxcdGJvb2wgXFxcIlJlbmVzYXMgUklTQy1WIFNvQ3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjAwOjQxLjM4NjA4MTY5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MjU0Nzk2ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlbmVzYXMgTUlJQyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlbGF0aW9uc2hpcHMgaGVyZS4gRmlyc3Qgb2ZmLCBgQVJDSF9SRU5FU0FTYCBlbmNvbXBhc3NlcyBxdWl0ZSBhIGZldyBhcmNoaXRlY3R1cmVzIC0gQVJNLCBBUk02NCwgYW5kIFJJU0MtViBTeXN0ZW0tb24tQ2hpcHMuIFRoZSBwb2ludCBpcywgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IHdoZW4gSSBzZWUgaXQsIEkgKmtub3cqIGl0J3Mgbm90IGFwcGxpY2FibGUgdG8gYGFtZDY0YC4gSXQncyBub3QgYW4gYW1kNjQgYXJjaGl0ZWN0dXJlIGRyaXZlci4gSSBoYXZlIHRvIHJlbWVtYmVyIHRoaXMgYXMgSSBkaWcgZGVlcGVyLlxuXG5Ob3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGlzIGBwY3MtcnpuMS1taWljLmNgIGZpbGUuIFRoZSBwcmltYXJ5IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBleHRlbnQgb2YgaXRzIHVzYWdlIG91dHNpZGUgb2YgdGhlIGBtaWljX3Byb2JlYCBmdW5jdGlvbi4gVGhpcyBpcyBjcml0aWNhbC4gQXJlIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIGRyaXZlcj8gSSBuZWVkIHRvIGZpbmQgdGhlIGNhbGxzLiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgbW92aW5nIG9uLiBJJ2xsIHNlYXJjaCBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgYHJ6bjFfbWlpY2AgdGhyb3VnaG91dCB0aGUgZW50aXJlIGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhpcyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzMzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MDA6NDYuNjQwODgxNDE2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQxOTI1NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ6bjFbLV9dbWlpY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9yZW5lc2FzLHJ6bjEtYTVwc3cueWFtbD0xOT1wcm9wZXJ0aWVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvcmVuZXNhcyxyem4xLWE1cHN3LnlhbWwtNzMtICAgICAgICAgICAgICBwaGFuZGxlIHBvaW50aW5nIHRvIGEgUENTIHN1Yi1ub2RlIGNvbXBhdGlibGUgd2l0aFxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL3JlbmVzYXMscnpuMS1hNXBzdy55YW1sOjc0OiAgICAgICAgICAgICAgcmVuZXNhcyxyem4xLW1paWMueWFtbCNcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9yZW5lc2FzLHJ6bjEtYTVwc3cueWFtbC03NS1cXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwtMy0tLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sOjQ6JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwjXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC01LSRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbD0xNz1wcm9wZXJ0aWVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC0yOC0gICAgICAgICAgICAgIC0gcmVuZXNhcyxyOWEwNmcwMzItbWlpY1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWw6Mjk6ICAgICAgICAgIC0gY29uc3Q6IHJlbmVzYXMscnpuMS1taWljXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC0zMC0gICAgICAtIGl0ZW1zOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC02NC0gICAgZGVzY3JpcHRpb246IE1JSSBTd2l0Y2ggUE9SVElOIGNvbmZpZ3VyYXRpb24uIFRoaXMgdmFsdWUgc2hvdWxkIHVzZSBvbmUgb2ZcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sOjY1OiAgICAgIHRoZSB2YWx1ZXMgZGVmaW5lZCBpbiBkdC1iaW5kaW5ncy9uZXQvcGNzLXJ6bjEtbWlpYy5oIGZvciBSWi9OMSBTb0MgYW5kXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC02Ni0gICAgICBpbmNsdWRlL2R0LWJpbmRpbmdzL25ldC9yZW5lc2FzLHI5YTA5ZzA3Ny1wY3MtbWlpYy5oIGZvciBSWi9OMkgsIFJaL1QySCBTb0NzLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbD03Mz1wYXR0ZXJuUHJvcGVydGllczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwtODQtICAgICAgICBkZXNjcmlwdGlvbjogQ29udmVydGVyIGlucHV0IHBvcnQgY29uZmlndXJhdGlvbi4gVGhpcyB2YWx1ZSBzaG91bGQgdXNlXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbDo4NTogICAgICAgICAgb25lIG9mIHRoZSB2YWx1ZXMgZGVmaW5lZCBpbiBkdC1iaW5kaW5ncy9uZXQvcGNzLXJ6bjEtbWlpYy5oIGZvciBSWi9OMSBTb0NcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sLTg2LSAgICAgICAgICBhbmQgaW5jbHVkZS9kdC1iaW5kaW5ncy9uZXQvcmVuZXNhcyxyOWEwOWcwNzctcGNzLW1paWMuaCBmb3IgUlovTjJILCBSWi9UMkggU29Dcy5cXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWw9MTAyPWFsbE9mOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC0xMDYtICAgICAgICAgIGNvbnRhaW5zOlxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWw6MTA3OiAgICAgICAgICAgIGNvbnN0OiByZW5lc2FzLHJ6bjEtbWlpY1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWwtMTA4LSAgICB0aGVuOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbD0yMTc9ZXhhbXBsZXM6XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC0yMTgtICAtIHxcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sOjIxOTogICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL25ldC9wY3MtcnpuMS1taWljLmhcXHUwMDNlXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC0yMjAtICAgICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9jbG9jay9yOWEwNmcwMzItc3lzY3RybC5oXFx1MDAzZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbC0yMjQtICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3MvcmVuZXNhcyxyem4xLW1paWMueWFtbDoyMjU6ICAgICAgY29tcGF0aWJsZSA9IFxcXCJyZW5lc2FzLHI5YTA2ZzAzMi1taWljXFxcIiwgXFxcInJlbmVzYXMscnpuMS1taWljXFxcIjtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sLTIyNi0gICAgICByZWcgPSBcXHUwMDNjMHg0NDAzMDAwMCAweDEwMDAwXFx1MDAzZTtcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxyem4xLWdtYWMueWFtbD0yNT1wcm9wZXJ0aWVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLHJ6bjEtZ21hYy55YW1sLTQ0LSAgICAgIHBoYW5kbGUgcG9pbnRpbmcgdG8gYSBQQ1Mgc3ViLW5vZGUgY29tcGF0aWJsZSB3aXRoXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLHJ6bjEtZ21hYy55YW1sOjQ1OiAgICAgIHJlbmVzYXMscnpuMS1taWljLnlhbWwjXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLHJ6bjEtZ21hYy55YW1sLTQ2LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLHJ6djJoLWdiZXRoLnlhbWw9MjY9cHJvcGVydGllczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxyenYyaC1nYmV0aC55YW1sLTE1My0gICAgICBwaGFuZGxlIHBvaW50aW5nIHRvIGEgUENTIHN1Yi1ub2RlIGNvbXBhdGlibGUgd2l0aFxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxyenYyaC1nYmV0aC55YW1sOjE1NDogICAgICBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yZW5lc2FzLHJ6bjEtbWlpYy55YW1sI1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxyenYyaC1nYmV0aC55YW1sLTE1NS0gICAgICAoUmVmZXIgUlovVDJIIHBvcnRpb24gaW4gdGhlIERULWJpbmRpbmcgZmlsZSlcXG4tLVxcbk1BSU5UQUlORVJTPTIzMjY1PUY6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvcmVuZXNhcyxyem4xLWE1cHN3LnlhbWxcXG5NQUlOVEFJTkVSUzoyMzI2NjpGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JlbmVzYXMscnpuMS1taWljLnlhbWxcXG5NQUlOVEFJTkVSUy0yMzI2Ny1GOlxcdGRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3Klxcbk1BSU5UQUlORVJTOjIzMjY4OkY6XFx0ZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuY1xcbk1BSU5UQUlORVJTOjIzMjY5OkY6XFx0aW5jbHVkZS9kdC1iaW5kaW5ncy9uZXQvcGNzLXJ6bjEtbWlpYy5oXFxuTUFJTlRBSU5FUlM6MjMyNzA6RjpcXHRpbmNsdWRlL2xpbnV4L3Bjcy1yem4xLW1paWMuaFxcbk1BSU5UQUlORVJTLTIzMjcxLUY6XFx0bmV0L2RzYS90YWdfcnpuMV9hNXBzdy5jXFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9yZW5lc2FzL3I5YTA2ZzAzMi1yem4xZDQwMC1kYi5kdHMtMTMtI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2xlZHMvY29tbW9uLmhcXHUwMDNlXFxuYXJjaC9hcm0vYm9vdC9kdHMvcmVuZXNhcy9yOWEwNmcwMzItcnpuMWQ0MDAtZGIuZHRzOjE0OiNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9uZXQvcGNzLXJ6bjEtbWlpYy5oXFx1MDAzZVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3JlbmVzYXMvcjlhMDZnMDMyLXJ6bjFkNDAwLWRiLmR0cy0xNS0jaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvcGluY3RybC9yem4xLXBpbmN0cmwuaFxcdTAwM2VcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3JlbmVzYXMvcjlhMDZnMDMyLmR0c2k9NDU3PVxcdFxcdGV0aF9taWljOiBldGgtbWlpY0A0NDAzMDAwMCB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvcmVuZXNhcy9yOWEwNmcwMzIuZHRzaTo0NTg6XFx0XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJyZW5lc2FzLHI5YTA2ZzAzMi1taWljXFxcIiwgXFxcInJlbmVzYXMscnpuMS1taWljXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9yZW5lc2FzL3I5YTA2ZzAzMi5kdHNpLTQ1OS1cXHRcXHRcXHQjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmgtMTQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3Lmg6MTU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Bjcy1yem4xLW1paWMuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5oLTE2LSNpbmNsdWRlIFxcdTAwM2NuZXQvZHNhLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMtMTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jOjIwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY3MtcnpuMS1taWljLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jLTIxLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYy04LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYzo5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY3MtcnpuMS1taWljLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlsaW5rLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfUENTX01US19MWU5YSSlcXHQrPSBwY3MtbXRrLWx5bnhpLm9cXG5kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX1BDU19SWk4xX01JSUMpXFx0Kz0gcGNzLXJ6bjEtbWlpYy5vXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTE2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9wbGF0Zm9ybS5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6MTc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Bjcy1yem4xLW1paWMuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTE4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlsaW5rLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTIyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzoyMzojaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvbmV0L3Bjcy1yem4xLW1paWMuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTI0LSNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9uZXQvcmVuZXNhcyxyOWEwOWcwNzctcGNzLW1paWMuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9ODE5PXN0YXRpYyB2b2lkIG1paWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTgyMy1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjgyNDpzdGF0aWMgc3RydWN0IG1paWNfb2ZfZGF0YSByem4xX21paWNfb2ZfZGF0YSA9IHtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTgyNS1cXHQubWF0Y2hfdGFibGUgPSBtb2RjdHJsX21hdGNoX3RhYmxlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYz04NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWlpY19vZl9tdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg1OC1cXHR7IC5jb21wYXRpYmxlID0gXFxcInJlbmVzYXMscjlhMDlnMDc3LW1paWNcXFwiLCAuZGF0YSA9IFxcdTAwMjZyenQyaF9taWljX29mX2RhdGEgfSxcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjg1OTpcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlbmVzYXMscnpuMS1taWljXFxcIiwgLmRhdGEgPSBcXHUwMDI2cnpuMV9taWljX29mX2RhdGEgfSxcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg2MC1cXHR7IC8qIHNlbnRpbmVsICovIH1cXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9ODY0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1paWNfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODY1LVxcdC5kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzo4NjY6XFx0XFx0Lm5hbWVcXHQgPSBcXFwicnpuMV9taWljXFxcIixcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTg2Ny1cXHRcXHQuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjAwOjQ5LjE4MjgxNDcwOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5OTc3NjIyMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIFJaL04xIE1JSUMgRHJpdmVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgUlovTjEgTUlJQyBkcml2ZXIuIFRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgY3JhY2sgb3BlbiBgaW5jbHVkZS9saW51eC9wY3MtcnpuMS1taWljLmhgLiBJJ20gZXhwZWN0aW5nIHRoaXMgaGVhZGVyIGZpbGUgdG8gbGF5IG91dCB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyB0aGF0IGRlZmluZSB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlLiBIb3BlZnVsbHksIGl0IGNvbnRhaW5zIGRldGFpbHMgYWJvdXQgdGhlIE1JSUMgcmVnaXN0ZXJzIHRoZW1zZWx2ZXMg4oCTIHRoZSBiaXRmaWVsZHMsIHRoZWlyIGFkZHJlc3NlcywgdGhlIHZhcmlvdXMgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVycy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGNsb2NrIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQsIGdpdmVuIHRoZSBjcml0aWNhbCB0aW1pbmcgcmVxdWlyZW1lbnRzIG9mIEV0aGVybmV0IFBIWSBjb21tdW5pY2F0aW9uLiBJ4oCZbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBjdXN0b20gb3IgUlovTjEtc3BlY2lmaWMgZXh0ZW5zaW9ucyB0aGF0IG1pZ2h0IGJlIGluY2x1ZGVkLiBUaGluZ3MgbGlrZSBpbnRlcnJ1cHQgbWFwcGluZ3MsIERNQSBzZXR1cCBzdHJ1Y3R1cmVzIChpZiBETUEgaXMgdXNlZCksIGFuZCBwb3RlbnRpYWxseSBzb21lIG9mIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMuIExldCdzIHNlZSB3aGF0IGdvb2RpZXMgYXJlIGluIHRoZXJlLiBJJ20gaG9waW5nIGZvciBzb21lIGNsZWFuLCB3ZWxsLWRlZmluZWQgbWFjcm9zIHRoYXQgbWFrZSBpdCBlYXNpZXIgdG8gZ3JvayB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzY1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MDA6NTkuMTYwNDM5MDU4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcGNzLXJ6bjEtbWlpYy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMjIgU2NobmVpZGVyIEVsZWN0cmljXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogQ2zDqW1lbnQgTMOpZ2VyIFxcdTAwM2NjbGVtZW50LmxlZ2VyQGJvb3RsaW4uY29tXFx1MDAzZVxcbiAgIDY6XFx0ICovXFxuICAgNzpcXHRcXG4gICA4OlxcdCNpZm5kZWYgX19MSU5VWF9QQ1NfTUlJQ19IXFxuICAgOTpcXHQjZGVmaW5lIF9fTElOVVhfUENTX01JSUNfSFxcbiAgMTA6XFx0XFxuICAxMTpcXHRzdHJ1Y3QgcGh5bGluaztcXG4gIDEyOlxcdHN0cnVjdCBkZXZpY2Vfbm9kZTtcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0c3RydWN0IHBoeWxpbmtfcGNzICptaWljX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApO1xcbiAgMTU6XFx0XFxuICAxNjpcXHR2b2lkIG1paWNfZGVzdHJveShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyk7XFxuICAxNzpcXHRcXG4gIDE4OlxcdCNlbmRpZiAvKiBfX0xJTlVYX1BDU19NSUlDX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MDA6NTkuMTYwNTAyNjc4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ4NzI0NjM4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxscyB0byBgbWlpY19jcmVhdGVgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYG1paWNfY3JlYXRlYC4uLndoYXQncyAqYWN0dWFsbHkqIGludm9raW5nIGl0P1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJIHdhbnQgdG8gc2VlIHRoZSBjYWxsIGdyYXBoLCBidXQgbm90IGp1c3QgdGhlIGRpcmVjdCBjYWxsZXJzLiBJJ20gbG9va2luZyBmb3IgdGhlICp3aHkqIC0gd2hhdCBhcmUgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMgb3IgbW9kdWxlcyB0aGF0IGRlcGVuZCBvbiBgbWlpY19jcmVhdGVgPyBBcmUgdGhlcmUgc3BlY2lmaWMgc2NlbmFyaW9zIHdoZXJlIGl0J3MgdXNlZD8gSXMgdGhpcyBhIGNvcmUgZnVuY3Rpb25hbGl0eSBwaWVjZSwgb3IgaXMgaXQgbW9yZSBvZiBhIHV0aWxpdHkgZnVuY3Rpb24gZm9yIHNwZWNpZmljIHN1YnN5c3RlbXM/XG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZXNvdXJjZXMgaW52b2x2ZWQuIERvZXMgYG1paWNfY3JlYXRlYCBhbGxvY2F0ZSBhbnl0aGluZz8gSWYgc28sIHdoYXQ/IEhvdydzIGl0IGluaXRpYWxpemVkPyBJJ2xsIHByb2JhYmx5IGJlIGludGVyZXN0ZWQgaW4gdHJhY2tpbmcgdGhlIGxpZmV0aW1lIG9mIHRoZXNlIGFsbG9jYXRlZCByZXNvdXJjZXMgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZXMgZG93biB0aGUgbGluZS5cblxuSSdtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gYG1paWNfY3JlYXRlYC4gQXJlIHRoZXkgY29uc2lzdGVudD8gQXJlIHRoZXJlIGFueSBjb21tb24gcGF0dGVybnMgb3Igc3VycHJpc2luZyBpbnB1dHM/IEknbGwgd2FudCB0byBxdWlja2x5IGxvb2sgZm9yIGFueSBlZGdlIGNhc2VzLCBsaWtlIG51bGwgcG9pbnRlcnMgb3IgdW5leHBlY3RlZCB2YWx1ZXMgdGhhdCBtaWdodCBsZWFkIHRvIGNyYXNoZXMgb3IgdW5kZWZpbmVkIGJlaGF2aW9yLiBBbmQgb2YgY291cnNlLCBJJ2xsIG5lZWQgdG8ga25vdyB3aGF0IHRoZSBmdW5jdGlvbiAqcmV0dXJucyouIElzIGl0IGEgc3VjY2Vzcy9mYWlsdXJlIGNvZGU/IEEgaGFuZGxlPyBXaGF0IGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQ/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBob3cgaXQncyBoYW5kbGVkIHVwIHRoZSBjYWxsIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkwOCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MDE6MDQuMDMyOTY5MDY1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE1MTY5NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1paWNfY3JlYXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM9MTE1Nz1zdGF0aWMgaW50IGE1cHN3X3Bjc19nZXQoc3RydWN0IGE1cHN3ICphNXBzdylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE4Mi1cXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jOjExODM6XFx0XFx0cGNzID0gbWlpY19jcmVhdGUoYTVwc3ctXFx1MDAzZWRldiwgcGNzX25vZGUpO1xcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE4NC1cXHRcXHRpZiAoSVNfRVJSKHBjcykpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguYz02Mz1zdGF0aWMgaW50IHJlbmVzYXNfZ21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMtNzAtXFx0aWYgKHBjc19ub2RlKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jOjcxOlxcdFxcdHBjcyA9IG1paWNfY3JlYXRlKHByaXYtXFx1MDAzZWRldmljZSwgcGNzX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguYy03Mi1cXHRcXHRvZl9ub2RlX3B1dChwY3Nfbm9kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmM9MTY9c3RhdGljIGludCByem4xX2R3bWFjX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYy0yNC1cXHRpZiAocGNzX25vZGUpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmM6MjU6XFx0XFx0cGNzID0gbWlpY19jcmVhdGUocHJpdi1cXHUwMDNlZGV2aWNlLCBwY3Nfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jLTI2LVxcdFxcdG9mX25vZGVfcHV0KHBjc19ub2RlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM9NDQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzIG1paWNfcGh5bGlua19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTQ0OS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jOjQ1MDpzdHJ1Y3QgcGh5bGlua19wY3MgKm1paWNfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucClcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTQ1MS17XFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLTUwOC19XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYzo1MDk6RVhQT1JUX1NZTUJPTChtaWljX2NyZWF0ZSk7XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy1yem4xLW1paWMuYy01MTAtXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jPTc2Mz1zdGF0aWMgaW50IG1paWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODAzLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmM6ODA0OlxcdC8qIG1paWNfY3JlYXRlKCkgcmVsaWVzIG9uIHRoYXQgZmFjdCB0aGF0IGRhdGEgYXJlIGF0dGFjaGVkIHRvIHRoZVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMtODA1LVxcdCAqIHBsYXRmb3JtIGRldmljZSB0byBkZXRlcm1pbmUgaWYgdGhlIGRyaXZlciBpcyByZWFkeSBzbyB0aGlzIG5lZWRzIHRvXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Bjcy1yem4xLW1paWMuaD0xMj1zdHJ1Y3QgZGV2aWNlX25vZGU7XFxuaW5jbHVkZS9saW51eC9wY3MtcnpuMS1taWljLmgtMTMtXFxuaW5jbHVkZS9saW51eC9wY3MtcnpuMS1taWljLmg6MTQ6c3RydWN0IHBoeWxpbmtfcGNzICptaWljX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApO1xcbmluY2x1ZGUvbGludXgvcGNzLXJ6bjEtbWlpYy5oLTE1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDowMTowNS43NDgxNDQyNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MzU3MDQ0NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIFJlbmVzYXMgU29DIEV0aGVybmV0IENvbnRyb2xsZXIgRHJpdmVyIG9uIGFtZDY0KipcblxuT2theSwgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIGl0J3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYSBkZWFkIGVuZCBmb3IgZnV6emluZyBvbiBhbWQ2NC4gYG1paWNfY3JlYXRlYCBpcyBvbmx5IGNhbGxlZCBieSBwbGF0Zm9ybSBkcml2ZXJzIGZvciBSZW5lc2FzIEV0aGVybmV0IGNvbnRyb2xsZXJzOiBSWi9OMSAoc3BlY2lmaWMpLiBUaGUgY29kZSBtb2RpZmllZCBieSB0aGUgcGF0Y2ggaXMgd2l0aGluIGBtaWljX3BhcnNlX2R0YCwgd2hpY2ggaXMgb25seSBldmVyIGNhbGxlZCBkdXJpbmcgdGhlIGBtaWljX3Byb2JlYCBmdW5jdGlvbi4gYG1paWNfcHJvYmVgIGlzLCBpbiB0dXJuLCB0aGUgcHJvYmUgZnVuY3Rpb24gb2YgdGhlIGBtaWljX2RyaXZlcmAuIFRoZSBkcml2ZXIgc3BlY2lmaWNhbGx5IGxvb2tzIGZvciBkZXZpY2VzIHdpdGggXCJyZW5lc2FzLHJ6bjEtbWlpY1wiIG9yIHNpbWlsYXIgY29tcGF0aWJsZSBzdHJpbmdzIGluIHRoZSBEZXZpY2UgVHJlZS4gVGhpcyBpcyBhIGNsZWFyIGluZGljYXRvciBvZiBpdCBiZWluZyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgYSBSZW5lc2FzIFNvQywgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBBUk0vUklTQy1WIGJhc2VkIHN5c3RlbXMuXG5cbk5vdywgdGhlIGltcG9ydGFudCBiaXQ6IEknbSBmdXp6aW5nIG9uIGFtZDY0LiBUaGVzZSBSZW5lc2FzIFNvQ3MgYXJlIEFSTS9SSVNDLVYgYmFzZWQsIHNvIHRoZXkgc2ltcGx5IGRvbid0IGV4aXN0IG9uIHRoaXMgdGFyZ2V0IGFyY2hpdGVjdHVyZS4gVGhlcmUncyBubyBoYXJkd2FyZSwgbm8gZW11bGF0ZWQgaGFyZHdhcmUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIGFuZCB0aGVyZWZvcmUgbm8gRGV2aWNlIFRyZWUgbm9kZXMgZm9yIHRoZXNlIGRldmljZXMuIEZ1cnRoZXJtb3JlLCB0aGUgZHJpdmVyIGhhcyBgc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWVgLCB3aGljaCBtZWFucyB0aGVyZSdzIG5vIHdheSB0byBmb3JjZSBiaW5kaW5nIHZpYSBzeXNmcywgZXZlbiBpZiBhIGR1bW15IHBsYXRmb3JtIGRldmljZSAqY291bGQqIGJlIGNyZWF0ZWQuIFRoaXMgbGluZXMgdXAgcGVyZmVjdGx5IHdpdGggdGhlIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIgbmVnYXRpdmUgY3JpdGVyaWEuIEFsbCB0aGUgcGllY2VzIGZpdDogaXQncyBhIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGggb24gYW1kNjQuIFRoZSBtb2RpZmllZCBjb2RlLCB0aGUgRGV2aWNlIFRyZWUgcGFyc2luZywgZXZlcnl0aGluZyBpcyBkZXBlbmRlbnQgb24gUmVuZXNhcy1zcGVjaWZpYyBoYXJkd2FyZSB0aGF0J3Mgc2ltcGx5IG5vdCBwcmVzZW50IGluIHRoaXMgc2V0dXAuIFRoaXMgaXMgZGVmaW5pdGVseSBub3QgYSB3b3J0aHdoaWxlIGZ1enppbmcgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIxNiwiT3V0cHV0VG9rZW5zIjoxNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MDE6MTEuMTA1MTkxMzk1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiBkcml2ZXJzL25ldC9wY3MvcGNzLXJ6bjEtbWlpYy5jLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgdGhlIE1JSSBjb252ZXJ0ZXIgb24gUmVuZXNhcyBSWi9OMSwgUlovTjJILCBhbmQgUlovVDJIIFNvQ3MgKEFSTS9SSVNDLVYgYXJjaGl0ZWN0dXJlcykuIEl0IHJlcXVpcmVzIFNvQy1zcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyBhbmQgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODYvYW1kNjQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyBpdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGluIGRyaXZlcnMvbmV0L3Bjcy9wY3MtcnpuMS1taWljLmMsIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciB0aGUgTUlJIGNvbnZlcnRlciBvbiBSZW5lc2FzIFJaL04xLCBSWi9OMkgsIGFuZCBSWi9UMkggU29DcyAoQVJNL1JJU0MtViBhcmNoaXRlY3R1cmVzKS4gSXQgcmVxdWlyZXMgU29DLXNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzIGFuZCBwaHlzaWNhbCBTb0MgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHg4Ni9hbWQ2NCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIGl0IHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjAxOjExLjEwNTIxNzQ2NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkptm7[1] Phase: Running StartedAt: 2026-09-14 20:01:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkptm7[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-14 20:01:22 +0000 UTC FinishedAt: 2026-09-14 20:01:26 +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,}