Name: series-workflowq2qrd Phase: Failed StartedAt: 2026-09-10 23:26:22 +0000 UTC FinishedAt: 2026-09-11 01:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qrd[0] Phase: Succeeded StartedAt: 2026-09-10 23:26:22 +0000 UTC FinishedAt: 2026-09-11 01:05:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qrd[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 23:26:22 +0000 UTC FinishedAt: 2026-09-11 01:05:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gc2V0dXBfc2htZW1fd2luZG93KCkgd2l0aGluIHRoZSBwY25ldF9jcyBkcml2ZXIsIHdoaWNoIHN1cHBvcnRzIGxlZ2FjeSBQQ01DSUEgTkUyMDAwIG5ldHdvcmsgYWRhcHRlcnMgKENPTkZJR19QQ01DSUFfUENORVQpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ01DSUEgaGFyZHdhcmUgc29ja2V0IGNvbnRyb2xsZXJzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBvciBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTQxM2FiYjYxNzkwYTJlNDQ3YjRkNjc0ODFkNDk2NjIzMDllMTg5OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDAxOjA0OjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuY1xuaW5kZXggMTlmOWM1ZGIzZjNiYS4uMGNmM2MwZjNjZWQ3YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXG5AQCAtMTQzNCwxNCAmIzQzOzE0MzQsMTQgQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcbiAgICAgb2Zmc2V0IC09IG9mZnNldCAlIHdpbmRvd19zaXplO1xuICAgICByZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstXHUwMDNlcmVzb3VyY2VbM10sIG9mZnNldCk7XG4gICAgIGlmIChyZXQpXG4tXHQgICAgZ290byBmYWlsZWQ7XG4mIzQzO1x0ICAgIGdvdG8gcmVsZWFzZTtcbiBcbiAgICAgLyogVHJ5IHNjcmliYmxpbmcgb24gdGhlIGJ1ZmZlciAqL1xuICAgICBpbmZvLVx1MDAzZWJhc2UgPSBpb3JlbWFwKGxpbmstXHUwMDNlcmVzb3VyY2VbM10tXHUwMDNlc3RhcnQsXG4gXHRcdFx0cmVzb3VyY2Vfc2l6ZShsaW5rLVx1MDAzZXJlc291cmNlWzNdKSk7XG4gICAgIGlmICh1bmxpa2VseSghaW5mby1cdTAwM2ViYXNlKSkge1xuIFx0ICAgIHJldCA9IC1FTk9NRU07XG4tXHQgICAgZ290byBmYWlsZWQ7XG4mIzQzO1x0ICAgIGdvdG8gcmVsZWFzZTtcbiAgICAgfVxuIFxuICAgICBmb3IgKGkgPSAwOyBpIFx1MDAzYyAoVFhfUEFHRVNcdTAwM2NcdTAwM2M4KTsgaSAmIzQzOz0gMilcbkBAIC0xNDUyLDkgJiM0MzsxNDUyLDggQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcbiAgICAgcGNuZXRfcmVzZXRfODM5MChkZXYpO1xuICAgICBpZiAoaSAhPSAoVFhfUEFHRVNcdTAwM2NcdTAwM2M4KSkge1xuIFx0aW91bm1hcChpbmZvLVx1MDAzZWJhc2UpO1xuLVx0cGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstXHUwMDNlcmVzb3VyY2VbM10pO1xuIFx0aW5mby1cdTAwM2ViYXNlID0gTlVMTDtcbi1cdGdvdG8gZmFpbGVkO1xuJiM0MztcdGdvdG8gcmVsZWFzZTtcbiAgICAgfVxuIFxuICAgICBlaV9zdGF0dXMubWVtID0gaW5mby1cdTAwM2ViYXNlICYjNDM7IG9mZnNldDtcbkBAIC0xNDc1LDYgJiM0MzsxNDc0LDggQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcbiAgICAgaW5mby1cdTAwM2VmbGFncyB8PSBVU0VfU0hNRU07XG4gICAgIHJldHVybiAwO1xuIFxuJiM0MztyZWxlYXNlOlxuJiM0MztcdHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLCBsaW5rLVx1MDAzZXJlc291cmNlWzNdKTtcbiBmYWlsZWQ6XG4gICAgIHJldHVybiAxO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBzZXR1cF9zaG1lbV93aW5kb3coKSB3aXRoaW4gdGhlIHBjbmV0X2NzIGRyaXZlciwgd2hpY2ggc3VwcG9ydHMgbGVnYWN5IFBDTUNJQSBORTIwMDAgbmV0d29yayBhZGFwdGVycyAoQ09ORklHX1BDTUNJQV9QQ05FVCkuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDTUNJQSBoYXJkd2FyZSBzb2NrZXQgY29udHJvbGxlcnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIG9yIHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNDEzYWJiNjE3OTBhMmU0NDdiNGQ2NzQ4MWQ0OTY2MjMwOWUxODk5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDE6MDQ6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMKaW5kZXggMTlmOWM1ZGIzZjNiYS4uMGNmM2MwZjNjZWQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYwpAQCAtMTQzNCwxNCAmIzQzOzE0MzQsMTQgQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZywKICAgICBvZmZzZXQgLT0gb2Zmc2V0ICUgd2luZG93X3NpemU7CiAgICAgcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLSZndDtyZXNvdXJjZVszXSwgb2Zmc2V0KTsKICAgICBpZiAocmV0KQotCSAgICBnb3RvIGZhaWxlZDsKJiM0MzsJICAgIGdvdG8gcmVsZWFzZTsKIAogICAgIC8qIFRyeSBzY3JpYmJsaW5nIG9uIHRoZSBidWZmZXIgKi8KICAgICBpbmZvLSZndDtiYXNlID0gaW9yZW1hcChsaW5rLSZndDtyZXNvdXJjZVszXS0mZ3Q7c3RhcnQsCiAJCQlyZXNvdXJjZV9zaXplKGxpbmstJmd0O3Jlc291cmNlWzNdKSk7CiAgICAgaWYgKHVubGlrZWx5KCFpbmZvLSZndDtiYXNlKSkgewogCSAgICByZXQgPSAtRU5PTUVNOwotCSAgICBnb3RvIGZhaWxlZDsKJiM0MzsJICAgIGdvdG8gcmVsZWFzZTsKICAgICB9CiAKICAgICBmb3IgKGkgPSAwOyBpICZsdDsgKFRYX1BBR0VTJmx0OyZsdDs4KTsgaSAmIzQzOz0gMikKQEAgLTE0NTIsOSAmIzQzOzE0NTIsOCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLAogICAgIHBjbmV0X3Jlc2V0XzgzOTAoZGV2KTsKICAgICBpZiAoaSAhPSAoVFhfUEFHRVMmbHQ7Jmx0OzgpKSB7CiAJaW91bm1hcChpbmZvLSZndDtiYXNlKTsKLQlwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbGluay0mZ3Q7cmVzb3VyY2VbM10pOwogCWluZm8tJmd0O2Jhc2UgPSBOVUxMOwotCWdvdG8gZmFpbGVkOwomIzQzOwlnb3RvIHJlbGVhc2U7CiAgICAgfQogCiAgICAgZWlfc3RhdHVzLm1lbSA9IGluZm8tJmd0O2Jhc2UgJiM0Mzsgb2Zmc2V0OwpAQCAtMTQ3NSw2ICYjNDM7MTQ3NCw4IEBAIHN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsCiAgICAgaW5mby0mZ3Q7ZmxhZ3MgfD0gVVNFX1NITUVNOwogICAgIHJldHVybiAwOwogCiYjNDM7cmVsZWFzZToKJiM0MzsJcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstJmd0O3Jlc291cmNlWzNdKTsKIGZhaWxlZDoKICAgICByZXR1cm4gMTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCYjMzk7cyB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQuIFRoZSBsb2NhdGlvbiBpcyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IGRyaXZlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmUuIEEgcXVpY2sgY2hlY2sgdGVsbHMgbWUgaXQmIzM5O3MgdGhlIFBDTUNJQS9DYXJkIFNlcnZpY2VzIGRyaXZlciBmb3IgTlM4MzkwLWJhc2VkIEV0aGVybmV0IGNhcmRzLCBzcGVjaWZpY2FsbHkgYHBjbmV0X2NzYC4gTm93IHRoZSBrZXkgcXVlc3Rpb246IGlzIFBDTUNJQSBzb21ldGhpbmcgdGhhdCYjMzk7cyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VPyBJIGhhdmUgdG8gcmVtZW1iZXIgLSBpcyBQQ01DSUEgaGFyZHdhcmUgb3IgaXMgaXQgZW11bGF0ZWQ/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlcyDigJMgcHJvYmFibHkgYGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZ2Agb3IgbWF5YmUgc29tZXRoaW5nIGluIGBkcml2ZXJzL3BjbWNpYS9gIOKAkyBvciBqdXN0IGRvIGEgcXVpY2sgYGdyZXBwZXJgIHNlYXJjaCB0byBiZSBzdXJlLiBUaGlzIHdpbGwgZGljdGF0ZSBob3cgZmVhc2libGUgdGVzdGluZyB0aGlzIHBhdGNoIGFjdHVhbGx5IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BDTUNJQV9QQ05FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZz0xMjM9Y29uZmlnIEFQTkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWctMTMzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnOjEzNDpjb25maWcgUENNQ0lBX1BDTkVUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWctMTM1LVx0dHJpc3RhdGUgXCYjMzQ7TkUyMDAwIGNvbXBhdGlibGUgUENNQ0lBIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL01ha2VmaWxlPTEzPW9iai0kKENPTkZJR19ORTJLX1BDSSkgJiM0Mzs9IG5lMmstcGNpLm8gODM5MC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19QQ01DSUFfUENORVQpICYjNDM7PSBwY25ldF9jcy5vIDgzOTAub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9NYWtlZmlsZS0xNS1vYmotJChDT05GSUdfU1ROSUMpICYjNDM7PSBzdG5pYy5vIDgzOTAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4ODcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIDgzOTAgS2NvbmZpZyBGaWxlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgODM5MCBkcml2ZXIgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZ2AsIGFyb3VuZCBsaW5lIDEzNC4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIHdlJiMzOTtsbCBmaW5kIHRoZSBjb3JlIG9wdGlvbnMgcmVsYXRlZCB0byB3aGF0ZXZlciBzcGVjaWZpYyBmZWF0dXJlIG9yIHZhcmlhbnQgSSYjMzk7bSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gQ291bGQgYmUgYSBuZXcgTklDLCBhIHNwZWNpZmljIGludGVycnVwdCBjb25maWd1cmF0aW9uLCBvciBtYXliZSBldmVuIGEgZGVidWdnaW5nIGZsYWcuIEVpdGhlciB3YXksIHRoYXQgS2NvbmZpZyBmaWxlIGlzIHRoZSBwbGFjZSB0byBzdGFydCBwZWVsaW5nIGJhY2sgdGhlIGxheWVycyBvbiBob3cgdGhpcyBhbmNpZW50LCB5ZXQgc3RpbGwgcmVsZXZhbnQsIGFyY2hpdGVjdHVyZSBpcyBoYW5kbGVkIGJ5IHRoZSBrZXJuZWwuIExpbmUgMTM0IGlzIGEgZGVjZW50IHBsYWNlIHRvIGJlZ2luIGFzIEkgdXN1YWxseSBmaW5kIHRoZSBvcHRpb25zIEkmIzM5O20gbG9va2luZyBmb3IgYXJlIGFyb3VuZCB0aGlzIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFxuIDEzMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTMyOlx0XHQgIHdpbGwgYmUgY2FsbGVkIGFwbmUuXG4gMTMzOlx0XG4gMTM0Olx0Y29uZmlnIFBDTUNJQV9QQ05FVFxuIDEzNTpcdFx0dHJpc3RhdGUgXCYjMzQ7TkUyMDAwIGNvbXBhdGlibGUgUENNQ0lBIHN1cHBvcnRcJiMzNDtcbiAxMzY6XHRcdGRlcGVuZHMgb24gUENNQ0lBIFx1MDAyNlx1MDAyNiBIQVNfSU9QT1JUXG4gMTM3Olx0XHRzZWxlY3QgQ1JDMzJcbiAxMzg6XHRcdGhlbHBcbiAxMzk6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIGF0dGFjaCBhbiBORTIwMDAgY29tcGF0aWJsZSBQQ01DSUFcbiAxNDA6XHRcdCAgKFBDLWNhcmQpIEV0aGVybmV0IG9yIEZhc3QgRXRoZXJuZXQgY2FyZCB0byB5b3VyIGNvbXB1dGVyLlxuIDE0MTpcdFxuIDE0MjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAxNDM6XHRcdCAgY2FsbGVkIHBjbmV0X2NzLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNDQ6XHRcbiAxNDU6XHRjb25maWcgU1ROSUNcbiAxNDY6XHRcdHRyaXN0YXRlIFwmIzM0O05hdGlvbmFsIERQODM5MDJBViAgc3VwcG9ydFwmIzM0O1xuIDE0NzpcdFx0ZGVwZW5kcyBvbiBTVVBFUkhcbiAxNDg6XHRcdHNlbGVjdCBDUkMzMlxuIDE0OTpcdFx0aGVscFxuIDE1MDpcdFx0ICBTdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBEUDgzOTAyQVZcbiAxNTE6XHRcdCAgU1QtTklDIFNlcmlhbCBOZXR3b3JrIEludGVyZmFjZSBDb250cm9sbGVyIGZvciBUd2lzdGVkIFBhaXIuICBUaGlzXG4gMTUyOlx0XHQgIGlzIGEgMTBNYml0L3NlYyBFdGhlcm5ldCBjb250cm9sbGVyLiAgUHJvZHVjdCBvdmVydmlldyBhbmQgc3BlY3MgYXRcbiAxNTM6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvRFAvRFA4MzkwMkEuaHRtbFx1MDAzZS5cbiAxNTQ6XHRcbiAxNTU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNTY6XHRcbiAxNTc6XHRjb25maWcgWk9SUk84MzkwXG4gMTU4Olx0XHR0cmlzdGF0ZSBcJiMzNDtab3JybyBOUzgzOTAtYmFzZWQgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuIDE1OTpcdFx0ZGVwZW5kcyBvbiBaT1JST1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFBDTUNJQSBGdXp6aW5nIEZlYXNpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBQQ01DSUEgc2l0dWF0aW9uLiBNeSBmaXJzdCBxdWVzdGlvbiBpcywgY2FuIHdlIGV2ZW4gKmNvbnNpZGVyKiBmdXp6aW5nIFBDTUNJQSBkZXZpY2VzPyBBcmUgdGhleSBzb21ldGhpbmcgdGhhdCBRRU1VIG9yIHN5emthbGxlciBjYW4gaGFuZGxlLCBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGEgY29tcGxldGVseSBwaHlzaWNhbCwgbGVnYWN5IGJ1cyB0aGF0JiMzOTtzIGEgZGVhZCBlbmQgZm9yIHVzPwoKVGhlIHJlYWwgc3RpY2tpbmcgcG9pbnQgaGVyZSBpcyBlbXVsYXRpb24uIENhbiB3ZSBwcm9iZSBvciBlbXVsYXRlIHRoZXNlIFBDTUNJQS9QQyBjYXJkIGRldmljZXM/IEJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBsZXQmIzM5O3MgY29uc3VsdCBTZWN0aW9uIDIgb2YgdGhlIHRyaWFnZSBwaGlsb3NvcGh5LiBTcGVjaWZpY2FsbHkgdGhlICYjMzQ7bmVnYXRpdmUgY3JpdGVyaWEuJiMzNDsgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSBmYWxsIGludG8gYSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IHNjZW5hcmlvLgoKUmVtZW1iZXIsIHRoZSBwaGlsb3NvcGh5IHNheXMgd2UmIzM5O3JlICpvdXQqIGlmIHRoZSBjb2RlIHJlbGllcyBvbiAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4mIzM0OyBUaGlzIHNwZWNpZmljYWxseSBjYWxscyBvdXQgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMgYW5kIGRyaXZlcnMgdGhhdCBkZW1hbmQgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIElzIFBDTUNJQSBpbiAqdGhhdCogY2F0ZWdvcnk/IEl0JiMzOTtzIHJlYWxseSBkb3duIHRvIHdoZXRoZXIgaXQgY2FuIGJlIGFjY2Vzc2VkIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC4KClNvLCB0aGUga2V5IHF1ZXN0aW9uIGlzOiBJcyBQQ01DSUEgZW11bGF0ZWQgaW4gUUVNVT8gRG9lcyBhIHZpcnR1YWwgUENNQ0lBIGJ1cyBvciBkcml2ZXIgZXhpc3QgaW4gTGludXg/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIFBDTUNJQSByZXF1aXJlcyBhICpwaHlzaWNhbCogUENNQ0lBIHNvY2tldCBjb250cm9sbGVyLiBTdHVmZiBsaWtlIGk4MjM2NSwgcGQ2NzI5LCBvciB5ZW50YV9zb2NrZXQgaXMgYSBiYWQgc2lnbi4KClRpbWUgdG8gYnJlYWsgb3V0IHRoZSBrZXJuZWwgY29kZS4gTGV0JiMzOTtzIGBncmVwYCBmb3IgJiMzNDtwY21jaWEmIzM0OyBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXQmIzM5O3MgaGFuZGxlZCAob3IgKm5vdCogaGFuZGxlZCkgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19QQ01DSUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjbWNpYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY21jaWEvTWFrZWZpbGU9MTA9cGNtY2lhLXlcdFx0XHRcdFx0JiM0Mzs9IGRzLm8gcGNtY2lhX3Jlc291cmNlLm8gY2lzdHBsLm8gcGNtY2lhX2Npcy5vXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfUENNQ0lBKVx0XHRcdFx0JiM0Mzs9IHBjbWNpYS5vXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZS0xMi1cbi0tXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfUEQ2NzI5KVx0XHRcdFx0JiM0Mzs9IHBkNjcyOS5vXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZToyMzpvYmotJChDT05GSUdfUENNQ0lBX1NPQ19DT01NT04pXHRcdFx0JiM0Mzs9IHNvY19jb21tb24ub1xuZHJpdmVycy9wY21jaWEvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX1BDTUNJQV9TQTExWFhfQkFTRSlcdFx0JiM0Mzs9IHNhMTF4eF9iYXNlLm9cbmRyaXZlcnMvcGNtY2lhL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19QQ01DSUFfU0ExMTAwKVx0XHRcdCYjNDM7PSBzYTExMDBfY3Mub1xuZHJpdmVycy9wY21jaWEvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX1BDTUNJQV9TQTExMTEpXHRcdFx0JiM0Mzs9IHNhMTExMV9jcy5vXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfUENNQ0lBX0JDTTYzWFgpXHRcdFx0JiM0Mzs9IGJjbTYzeHhfcGNtY2lhLm9cbmRyaXZlcnMvcGNtY2lhL01ha2VmaWxlLTI4LW9iai0kKENPTkZJR19PTUFQX0NGKVx0XHRcdFx0JiM0Mzs9IG9tYXBfY2Yub1xuZHJpdmVycy9wY21jaWEvTWFrZWZpbGU9Mjk9b2JqLSQoQ09ORklHX0VMRUNUUkFfQ0YpXHRcdFx0JiM0Mzs9IGVsZWN0cmFfY2Yub1xuZHJpdmVycy9wY21jaWEvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEKVx0XHQmIzQzOz0gZGIxeHh4X3NzLm9cbmRyaXZlcnMvcGNtY2lhL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19QQ01DSUFfTUFYMTYwMClcdFx0XHQmIzQzOz0gbWF4MTYwMC5vXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZS0zMi1cbi0tXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZT00MT1weGEyeHgtb2JqLSQoQ09ORklHX1BYQV9TSEFSUFNMKVx0XHQmIzQzOz0gcHhhMnh4X3NoYXJwc2wub1xuZHJpdmVycy9wY21jaWEvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX1BDTUNJQV9QWEEyWFgpXHRcdFx0JiM0Mzs9IHB4YTJ4eF9iYXNlLm8gJChweGEyeHgtb2JqLXkpXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZTo0MzpvYmotJChDT05GSUdfUENNQ0lBX1hYUzE1MDApXHRcdFx0JiM0Mzs9IHh4czE1MDBfc3Mub1xuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmM9Njc1PXN0YXRpYyB2b2lkIHBjbWNpYV9yZXF1ZXJ5KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKVxuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmMtNzI5LVxuZHJpdmVycy9wY21jaWEvZHMuYzo3MzA6I2lmZGVmIENPTkZJR19QQ01DSUFfTE9BRF9DSVNcbmRyaXZlcnMvcGNtY2lhL2RzLmMtNzMxLVxuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmM9NzQxPXN0YXRpYyBpbnQgcGNtY2lhX2xvYWRfZmlybXdhcmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldiwgY2hhciAqZmlsZW5hbWUpXG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYy03ODgtXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjc4OTojZWxzZSAvKiAhQ09ORklHX1BDTUNJQV9MT0FEX0NJUyAqL1xuZHJpdmVycy9wY21jaWEvZHMuYy03OTAtXG4tLVxuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmM9NzA1PUVYUE9SVF9TWU1CT0wocGNtY2lhX3JlcXVlc3RfaXJxKTtcbi0tXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYy03MDctXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYzo3MDg6I2lmZGVmIENPTkZJR19QQ01DSUFfUFJPQkVcbmRyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jLTcwOS1cbi0tXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYz03NjI9dm9pZCBwY21jaWFfY2xlYW51cF9pcnEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpXG4tLVxuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMtNzY3LVxuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmM6NzY4OiNlbHNlIC8qIENPTkZJR19QQ01DSUFfUFJPQkUgKi9cbmRyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jLTc2OS1cbi0tXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYz03NzU9dm9pZCBwY21jaWFfY2xlYW51cF9pcnEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpXG4tLVxuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMtNzgwLVxuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmM6NzgxOiNlbmRpZiAgLyogQ09ORklHX1BDTUNJQV9QUk9CRSAqL1xuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMtNzgyLVxuLS1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9NDE9SU5UX01PRFVMRV9QQVJNKHByb2JlX21lbSxcdDEpO1x0XHQvKiBtZW1vcnkgcHJvYmU/ICovXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjQyOiNpZmRlZiBDT05GSUdfUENNQ0lBX1BST0JFXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTQzLUlOVF9NT0RVTEVfUEFSTShwcm9iZV9pbyxcdDEpO1x0XHQvKiBJTyBwb3J0IHByb2JlPyAqL1xuLS1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9MTMyPXN0YXRpYyBpbnQgc3ViX2ludGVydmFsKHN0cnVjdCByZXNvdXJjZV9tYXAgKm1hcCwgdV9sb25nIGJhc2UsIHVfbG9uZyBudW0pXG4tLVxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy0xNzktXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjE4MDojaWZkZWYgQ09ORklHX1BDTUNJQV9QUk9CRVxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy0xODEtc3RhdGljIHZvaWQgZG9faW9fcHJvYmUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBiYXNlLFxuLS1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9NDAxPXN0YXRpYyBpbnQgZG9fbWVtX3Byb2JlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1X2xvbmcgYmFzZSwgdV9sb25nIG51bSxcbi0tXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTQ0Ny1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM6NDQ4OiNpZmRlZiBDT05GSUdfUENNQ0lBX1BST0JFXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTQ0OS1cbi0tXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jPTQ4MT1zdGF0aWMgaW50IHZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IHByb2JlX21hc2spXG4tLVxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy01MjctXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjUyODojZWxzZSAvKiBDT05GSUdfUENNQ0lBX1BST0JFICovXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTUyOS1cbi0tXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jPTUzNz1zdGF0aWMgaW50IHZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IHByb2JlX21hc2spXG4tLVxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy01NTEtXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjU1MjojZW5kaWYgLyogQ09ORklHX1BDTUNJQV9QUk9CRSAqL1xuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy01NTMtXG4tLVxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYz04OTE9c3RhdGljIGludCBhZGp1c3RfaW8oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBhY3Rpb24sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtOTE3LVx0XHR9XG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjkxODojaWZkZWYgQ09ORklHX1BDTUNJQV9QUk9CRVxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy05MTktXHRcdGlmIChwcm9iZV9pbylcbi0tXG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmM9NTM9c3RhdGljIGlycXJldHVybl90IHNvY19jb21tb25fcGNtY2lhX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXYpO1xuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jLTU0LVxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jOjU1OiNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHXG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMtNTYtXG4tLVxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oPTQ2PWludCBzb2NfcGNtY2lhX3JlZ3VsYXRvcl9zZXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QsXG4tLVxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oLTQ4LVxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oOjQ5OiNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHXG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmgtNTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI4MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBQQ25ldF9DUyBEcml2ZXIqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2hhcmVkIG1lbW9yeSB3aW5kb3cgaXMgYmVpbmcgc2V0IHVwIGluIHRoaXMgUENuZXQgZHJpdmVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoZXJlIHRoYXQgYHNldHVwX3NobWVtX3dpbmRvd2AgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jYC4gVGhhdCBmaWxlIGlzIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIFBDbmV0IENhcmQgU2VydmljZXMgKFBDTUNJQSkgaW50ZXJmYWNlLiBIb3BlZnVsbHksIHRyYWNpbmcgdGhlIGNhbGxzIHRvIGBzZXR1cF9zaG1lbV93aW5kb3dgIHdpbGwgcmV2ZWFsIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBhbmQgaG93IHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbiBpcyBiZWluZyBjb25maWd1cmVkIGZvciBkYXRhIHRyYW5zZmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXR1cF9zaG1lbV93aW5kb3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9MTAyPXN0YXRpYyBpbnQgc2V0X2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6MTAzOnN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMtMTA0LVx0XHRcdCAgICAgIGludCBzdG9wX3BnLCBpbnQgY21fb2Zmc2V0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9NTY1PXN0YXRpYyBpbnQgcGNuZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy02MDktICAgIGlmICgodXNlX3NobWVtID09IDApIHx8ICghaGFzX3NobWVtIFx1MDAyNlx1MDAyNiAodXNlX3NobWVtID09IC0xKSkgfHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYzo2MTA6XHQoc2V0dXBfc2htZW1fd2luZG93KGxpbmssIHN0YXJ0X3BnLCBzdG9wX3BnLCBjbV9vZmZzZXQpICE9IDApKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTYxMS1cdHNldHVwX2RtYV9jb25maWcobGluaywgc3RhcnRfcGcsIHN0b3BfcGcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYz0xNDAxPXN0YXRpYyB2b2lkIHNobWVtX2Jsb2NrX291dHB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTE0MTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6MTQxMTpzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTE0MTItXHRcdFx0ICAgICAgaW50IHN0b3BfcGcsIGludCBjbV9vZmZzZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMDQKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIFBDbmV0IERyaXZlciYjMzk7cyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHBjbmV0X3Byb2JlYCBhbmQgYHBjbmV0X2NvbmZpZ2AgZnVuY3Rpb25zIGFyZSB1c2VkIHdpdGhpbiB0aGUgYHBjbmV0X2NzLmNgIGRyaXZlciBmaWxlLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyB0aGUgZHJpdmVyIGlzIGZpbmRpbmcgYW5kIHNldHRpbmcgdXAgdGhlIFBDbmV0IG5ldHdvcmsgaW50ZXJmYWNlLiBNeSBmb2N1cyBpcyBvbiB0aGUgKmNhbGwqIHN0cnVjdHVyZSDigJMgaG93IGFyZSB0aGVzZSBmdW5jdGlvbnMgaW52b2tlZCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucz8gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzLCBhbnkgc3BlY2lmaWMgZGF0YSBiZWluZyBwYXNzZWQsIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGZ1bmN0aW9uIGNhbGxzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb24gdGhlIGluaXRpYWxpemF0aW9uIGFuZCBjb25maWd1cmF0aW9uIGZsb3cgb2YgdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmsgY2FyZCBkcml2ZXIuIFVuZGVyc3RhbmRpbmcgdGhpcyBjYWxsIHN0cnVjdHVyZSB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBpbnNpZ2h0IGludG8gaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0ICAgICAgSEFTX01JU0NfUkVHIHwgSEFTX0lCTV9NSVNDIH0sXG4gMTgxOlx0ICAgIHsgLyogUGFuYXNvbmljIFZFTDIxMSAqLyAweDBmZjAsIDB4MDAsIDB4ODAsIDB4NDUsXG4gMTgyOlx0ICAgICAgSEFTX01JU0NfUkVHIHwgSEFTX0lCTV9NSVNDIH0sXG4gMTgzOlx0ICAgIHsgLyogUHJlTWF4IFBFLTIwMCAqLyAweDA3ZjAsIDB4MDAsIDB4MjAsIDB4ZTAsIDAgfSxcbiAxODQ6XHQgICAgeyAvKiBSUFRJIEVQNDAwICovIDB4MDExMCwgMHgwMCwgMHg0MCwgMHg5NSwgMCB9LFxuIDE4NTpcdCAgICB7IC8qIFNDTSBFdGhlcm5ldCAqLyAweDBmZjAsIDB4MDAsIDB4MjAsIDB4Y2IsIDAgfSxcbiAxODY6XHQgICAgeyAvKiBTb2NrZXQgRUEgKi8gMHg0MDAwLCAweDAwLCAweGMwLCAweDFiLFxuIDE4NzpcdCAgICAgIERFTEFZX09VVFBVVCB8IEhBU19NSVNDX1JFRyB8IFVTRV9CSUdfQlVGIH0sXG4gMTg4Olx0ICAgIHsgLyogU29ja2V0IExQLUUgQ0YmIzQzOyAqLyAweDAxYzAsIDB4MDAsIDB4YzAsIDB4MWIsIDAgfSxcbiAxODk6XHQgICAgeyAvKiBTdXBlclNvY2tldCBSRTQ1MFQgKi8gMHgwMTEwLCAweDAwLCAweGUwLCAweDk4LCAwIH0sXG4gMTkwOlx0ICAgIHsgLyogVm9sa3RlayBOUEwtNDAyQ1QgKi8gMHgwMDYwLCAweDAwLCAweDQwLCAweDA1LCAwIH0sXG4gMTkxOlx0ICAgIHsgLyogTkVDIFBDLTk4MDFOLUoxMiAqLyAweDBmZjAsIDB4MDAsIDB4MDAsIDB4NGMsIDAgfSxcbiAxOTI6XHQgICAgeyAvKiBQQ01DSUEgVGVjaG5vbG9neSBPRU0gKi8gMHgwMWM4LCAweDAwLCAweGEwLCAweDBjLCAwIH1cbiAxOTM6XHR9O1xuIDE5NDpcdFxuIDE5NTpcdCNkZWZpbmUgTlJfSU5GT1x0XHRBUlJBWV9TSVpFKGh3X2luZm8pXG4gMTk2Olx0XG4gMTk3Olx0c3RhdGljIHN0cnVjdCBod19pbmZvIGRlZmF1bHRfaW5mbyA9IHsgMCwgMCwgMCwgMCwgMCB9O1xuIDE5ODpcdHN0YXRpYyBzdHJ1Y3QgaHdfaW5mbyBkbDEwMDE5X2luZm8gPSB7IDAsIDAsIDAsIDAsIElTX0RMMTAwMTl8SEFTX01JSSB9O1xuIDE5OTpcdHN0YXRpYyBzdHJ1Y3QgaHdfaW5mbyBkbDEwMDIyX2luZm8gPSB7IDAsIDAsIDAsIDAsIElTX0RMMTAwMjJ8SEFTX01JSSB9O1xuIDIwMDpcdFxuIDIwMTpcdHN0cnVjdCBwY25ldF9kZXYge1xuIDIwMjpcdFx0c3RydWN0IHBjbWNpYV9kZXZpY2VcdCpwX2RldjtcbiAyMDM6XHQgICAgdV9pbnRcdFx0ZmxhZ3M7XG4gMjA0Olx0ICAgIHZvaWRcdFx0X19pb21lbSAqYmFzZTtcbiAyMDU6XHQgICAgc3RydWN0IHRpbWVyX2xpc3RcdHdhdGNoZG9nO1xuIDIwNjpcdCAgICBpbnRcdFx0XHRzdGFsZSwgZmFzdF9wb2xsO1xuIDIwNzpcdCAgICB1X2NoYXJcdFx0cGh5X2lkO1xuIDIwODpcdCAgICB1X2NoYXJcdFx0ZXRoX3BoeSwgcG5hX3BoeTtcbiAyMDk6XHQgICAgdV9zaG9ydFx0XHRsaW5rX3N0YXR1cztcbiAyMTA6XHQgICAgdV9sb25nXHRcdG1paV9yZXNldDtcbiAyMTE6XHR9O1xuIDIxMjpcdFxuIDIxMzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHBjbmV0X2RldiAqUFJJVihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDIxNDpcdHtcbiAyMTU6XHRcdGNoYXIgKnAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDIxNjpcdFx0cmV0dXJuIChzdHJ1Y3QgcGNuZXRfZGV2ICopKHAgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBlaV9kZXZpY2UpKTtcbiAyMTc6XHR9XG4gMjE4Olx0XG4gMjE5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwY25ldF9uZXRkZXZfb3BzID0ge1xuIDIyMDpcdFx0Lm5kb19vcGVuXHRcdD0gcGNuZXRfb3BlbixcbiAyMjE6XHRcdC5uZG9fc3RvcFx0XHQ9IHBjbmV0X2Nsb3NlLFxuIDIyMjpcdFx0Lm5kb19zZXRfY29uZmlnXHRcdD0gc2V0X2NvbmZpZyxcbiAyMjM6XHRcdC5uZG9fc3RhcnRfeG1pdCBcdD0gZWlfc3RhcnRfeG1pdCxcbiAyMjQ6XHRcdC5uZG9fZ2V0X3N0YXRzXHRcdD0gZWlfZ2V0X3N0YXRzLFxuIDIyNTpcdFx0Lm5kb19ldGhfaW9jdGxcdFx0PSBlaV9pb2N0bCxcbiAyMjY6XHRcdC5uZG9fc2V0X3J4X21vZGVcdD0gZWlfc2V0X211bHRpY2FzdF9saXN0LFxuIDIyNzpcdFx0Lm5kb190eF90aW1lb3V0IFx0PSBlaV90eF90aW1lb3V0LFxuIDIyODpcdFx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgXHQ9IGV0aF9tYWNfYWRkcixcbiAyMjk6XHRcdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbiAyMzA6XHQjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbiAyMzE6XHRcdC5uZG9fcG9sbF9jb250cm9sbGVyIFx0PSBlaV9wb2xsLFxuIDIzMjpcdCNlbmRpZlxuIDIzMzpcdH07XG4gMjM0Olx0XG4gMjM1Olx0c3RhdGljIGludCBwY25ldF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaylcbiAyMzY6XHR7XG4gMjM3Olx0ICAgIHN0cnVjdCBwY25ldF9kZXYgKmluZm87XG4gMjM4Olx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gMjM5Olx0XG4gMjQwOlx0ICAgIGRldl9kYmcoXHUwMDI2bGluay1cdTAwM2VkZXYsIFwmIzM0O3BjbmV0X2F0dGFjaCgpXFxuXCYjMzQ7KTtcbiAyNDE6XHRcbiAyNDI6XHQgICAgLyogQ3JlYXRlIG5ldyBldGhlcm5ldCBkZXZpY2UgKi9cbiAyNDM6XHQgICAgZGV2ID0gX19hbGxvY19laV9uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwY25ldF9kZXYpKTtcbiAyNDQ6XHQgICAgaWYgKCFkZXYpIHJldHVybiAtRU5PTUVNO1xuIDI0NTpcdCAgICBpbmZvID0gUFJJVihkZXYpO1xuIDI0NjpcdCAgICBpbmZvLVx1MDAzZXBfZGV2ID0gbGluaztcbiAyNDc6XHQgICAgbGluay1cdTAwM2Vwcml2ID0gZGV2O1xuIDI0ODpcdFxuIDI0OTpcdCAgICBsaW5rLVx1MDAzZWNvbmZpZ19mbGFncyB8PSBDT05GX0VOQUJMRV9JUlEgfCBDT05GX0FVVE9fU0VUX0lPO1xuIDI1MDpcdFxuIDI1MTpcdCAgICBkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNnBjbmV0X25ldGRldl9vcHM7XG4gMjUyOlx0XG4gMjUzOlx0ICAgIHJldHVybiBwY25ldF9jb25maWcobGluayk7XG4gMjU0Olx0fSAvKiBwY25ldF9hdHRhY2ggKi9cbiAyNTU6XHRcbiAyNTY6XHRzdGF0aWMgdm9pZCBwY25ldF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspXG4gMjU3Olx0e1xuIDI1ODpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstXHUwMDNlcHJpdjtcbiAyNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgYXMgaWYgSSYjMzk7bSB0aGlua2luZyBpdDoKCioqUENNQ0lBIERyaXZlciBSZWdpc3RyYXRpb24gYW5kIFByb2JpbmcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGlzIFBDTUNJQSBzaXR1YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVycyBmb3IgdGhlc2UgZGV2aWNlcyBhcmUgYWN0dWFsbHkgaG9va2VkIGludG8gdGhlIHN5c3RlbSBhbmQsIGNydWNpYWxseSwgaG93IHRoZSBkZXZpY2VzIHRoZW1zZWx2ZXMgYXJlIGRpc2NvdmVyZWQgYW5kIGluaXRpYWxpemVkLiBUaGUga2V5IGhlcmUgaXMgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgc2VhcmNoIGZvciB0aGF0IGNvcmUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIOKAkyBJJiMzOTttIHRoaW5raW5nIGVpdGhlciBgcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcmAgb3IgbWF5YmUganVzdCBzb21ldGhpbmcgbGlrZSBgcGNtY2lhX2RyaXZlcmAgYXMgYSBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9uLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludCBJIG5lZWQgdG8gZm9sbG93IHRoZSB0cmFpbCBvZiBob3cgZXZlcnl0aGluZyBnZXRzIHRpZWQgdG9nZXRoZXIuIE9uY2UgSSBmaW5kIHRoYXQgcmVnaXN0cmF0aW9uIHBvaW50LCB0aGUgcHJvYmluZyBsb2dpYyBzaG91bGQgYmVjb21lIG11Y2ggY2xlYXJlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BjbWNpYV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9MTcwOT1zdGF0aWMgc3RydWN0IHBjbWNpYV9kcml2ZXIgcGNuZXRfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0xNzE3LX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6MTcxODptb2R1bGVfcGNtY2lhX2RyaXZlcihwY25ldF9kcml2ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI1MQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQQ01DSUEgRHJpdmVyIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBwY25ldF9jc2AsIHdoaWNoIEkgdW5kZXJzdGFuZCBpcyBhIFBDTUNJQSBkcml2ZXIsIHJlcHJlc2VudGVkIGFzIGEgYHN0cnVjdCBwY21jaWFfZHJpdmVyYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB3aGV0aGVyIFBDTUNJQSBoYXJkd2FyZSDigJMgdGhhdCYjMzk7cyBQQyBDYXJkIG9yIENhcmRCdXMg4oCTIGNhbiBhY3R1YWxseSBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXAuIFlvdSBrbm93LCBRRU1VIG9yIGV2ZW4gR0NFIGZvciB0aGF0IG1hdHRlci4KClRoZSBiaWcgcXVlc3Rpb246IERvZXMgUUVNVSBvciBzeXprYWxsZXIgaGF2ZSBhbnkgc29saWQgUENNQ0lBIGRldmljZSBlbXVsYXRpb24gb3IgZnV6emluZyBjYXBhYmlsaXRpZXM/IEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgcHNldWRvLXN5c2NhbGxzIG9yIHZpcnR1YWwgZGV2aWNlcyByZWxhdGVkIHRvIFBDTUNJQSB3aXRoaW4gc3l6a2FsbGVyLiBPciwgbW9yZSBnZW5lcmFsbHksIGlmIFFFTVUgaXRzZWxmIGVtdWxhdGVzIFBDTUNJQSBhbmQgYHBjbWNpYV9zb2NrZXRgIGF0IGFsbC4KCkkgc3VwcG9zZSBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBzeXprYWxsZXIgc3BlY2lmaWNhdGlvbnMgb3IgZGlnIHRocm91Z2ggdGhlIGtlcm5lbCBkcml2ZXJzIGZvciBhbnkgUENNQ0lBIHJlbGF0ZWQgYml0cy4gSXMgdGhpcyBldmVuIHNvbWV0aGluZyB1c2Vyc3BhY2UgY2FuIG1hbmlwdWxhdGUsIG9yIGlzIFBDTUNJQSBmdW5kYW1lbnRhbGx5IGEgbGVnYWN5IGhhcmR3YXJlIGJ1cz8KClJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9wY21jaWEvYCBkaXJlY3RvcnkgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIFRoYXQmIzM5O3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNtY2lhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YmNtNjN4eF9wY21jaWEuYyYjMzQ7LAogICAgJiMzNDtiY202M3h4X3BjbWNpYS5oJiMzNDssCiAgICAmIzM0O2NhcmRidXMuYyYjMzQ7LAogICAgJiMzNDtjaXJydXMuaCYjMzQ7LAogICAgJiMzNDtjaXN0cGwuYyYjMzQ7LAogICAgJiMzNDtjcy5jJiMzNDssCiAgICAmIzM0O2NzX2ludGVybmFsLmgmIzM0OywKICAgICYjMzQ7ZGIxeHh4X3NzLmMmIzM0OywKICAgICYjMzQ7ZHMuYyYjMzQ7LAogICAgJiMzNDtlbGVjdHJhX2NmLmMmIzM0OywKICAgICYjMzQ7aTgyMzY1LmgmIzM0OywKICAgICYjMzQ7bWF4MTYwMC5jJiMzNDssCiAgICAmIzM0O21heDE2MDAuaCYjMzQ7LAogICAgJiMzNDtvMm1pY3JvLmgmIzM0OywKICAgICYjMzQ7b21hcF9jZi5jJiMzNDssCiAgICAmIzM0O3BjbWNpYV9jaXMuYyYjMzQ7LAogICAgJiMzNDtwY21jaWFfcmVzb3VyY2UuYyYjMzQ7LAogICAgJiMzNDtwZDY3MjkuYyYjMzQ7LAogICAgJiMzNDtwZDY3MjkuaCYjMzQ7LAogICAgJiMzNDtweGEyeHhfYmFzZS5jJiMzNDssCiAgICAmIzM0O3B4YTJ4eF9iYXNlLmgmIzM0OywKICAgICYjMzQ7cHhhMnh4X3NoYXJwc2wuYyYjMzQ7LAogICAgJiMzNDtyaWNvaC5oJiMzNDssCiAgICAmIzM0O3JzcmNfbWdyLmMmIzM0OywKICAgICYjMzQ7cnNyY19ub25zdGF0aWMuYyYjMzQ7LAogICAgJiMzNDtzYTExMDBfZ2VuZXJpYy5jJiMzNDssCiAgICAmIzM0O3NhMTEwMF9nZW5lcmljLmgmIzM0OywKICAgICYjMzQ7c2ExMTAwX2gzNjAwLmMmIzM0OywKICAgICYjMzQ7c2ExMTExX2dlbmVyaWMuYyYjMzQ7LAogICAgJiMzNDtzYTExMTFfZ2VuZXJpYy5oJiMzNDssCiAgICAmIzM0O3NhMTExMV9qb3JuYWRhNzIwLmMmIzM0OywKICAgICYjMzQ7c2ExMTExX25lcG9uc2V0LmMmIzM0OywKICAgICYjMzQ7c2ExMXh4X2Jhc2UuYyYjMzQ7LAogICAgJiMzNDtzYTExeHhfYmFzZS5oJiMzNDssCiAgICAmIzM0O3NvY19jb21tb24uYyYjMzQ7LAogICAgJiMzNDtzb2NfY29tbW9uLmgmIzM0OywKICAgICYjMzQ7c29ja2V0X3N5c2ZzLmMmIzM0OywKICAgICYjMzQ7dGkxMTN4LmgmIzM0OywKICAgICYjMzQ7dG9waWMuaCYjMzQ7LAogICAgJiMzNDt2ZzQ2OC5oJiMzNDssCiAgICAmIzM0O3h4czE1MDBfc3MuYyYjMzQ7LAogICAgJiMzNDt5ZW50YV9zb2NrZXQuYyYjMzQ7LAogICAgJiMzNDt5ZW50YV9zb2NrZXQuaCYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogbnVsbAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTM4CgkJCQkJCQlvdXRwdXQ6IDExNAoJCQkJCQkJdGhvdWdodHM6IDk3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQQ01DSUEgRXRoZXJuZXQgRHJpdmVyIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGV4cGVydCBpbnR1aXRpb24gaXMgcGluZ2luZyBtZSBhYm91dCBsZWdhY3kgaGFyZHdhcmUuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgd2l0aCBgcGNuZXRfY3MuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaGFuZGxlcyBQQ01DSUEgTkUyMDAwIEV0aGVybmV0IGNhcmRzIOKAkyBhbmNpZW50IHRlY2hub2xvZ3ksIGJ1dCBzdGlsbCBpbXBvcnRhbnQgaW4gdGhlIGhpc3RvcmljYWwgY29udGV4dCBvZiBzeXN0ZW0gZGVzaWduLgoKRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudHMuIFRoZSByZWxldmFudCBQQ01DSUEgc29ja2V0IGRyaXZlcnMgSSBoYXZlIHRvIHRoaW5rIGFib3V0IGhlcmUgYXJlIHRoZSBsaWtlcyBvZiBgeWVudGFfc29ja2V0LmNgIHdoaWNoIG1hbmFnZXMgUENJLXRvLUNhcmRCdXMgYnJpZGdlcywgYWxvbmcgd2l0aCBgaTgyMzY1YCwgYHBkNjcyOWAsIGFuZCB2YXJpb3VzIEFSTSBTb0MgcGNtY2lhIGJyaWRnZXMgKGBzYTExMDBgLCBgc2ExMTExYCwgYHB4YTJ4eGAsIGBiY202M3h4YCwgYG9tYXBfY2ZgKS4gTm9uZSBvZiB0aGVzZSBjb250cm9sbGVycyBhcmUgZW11bGF0ZWQgaW4gYSBzdGFuZGFyZCBRRU1VIHg4Nl82NCBWTSBvciBHQ0UgaW5zdGFuY2UsIHdoaWNoIGlzIHRoZSBjb3JuZXJzdG9uZSBvZiBvdXIgZnV6emluZyBlbnZpcm9ubWVudC4gRm9yZ2V0IFBDTUNJQSBldGhlcm5ldCwgdGhleSBhcmUgKm5ldmVyKiBwYXJ0IG9mIHRoaXMgdmlydHVhbCBsYW5kc2NhcGUuCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBTZWN0aW9uIDIgb2Ygb3VyIGd1aWRlbGluZXMuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlOyBpdCYjMzk7cyB0aGUgbGl0bXVzIHRlc3QuIFdlIG5lZWQgdG8gc2VlIGlmIHRoZSBoYXJkd2FyZSBpbiBxdWVzdGlvbiBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIEFuZCB0aGF0JiMzOTtzIHdoZW4gaXQgaGl0cyBtZTogUENNQ0lBIGNhcmRzIGFyZSBwaHlzaWNhbCBsZWdhY3kgaGFyZHdhcmUgKFBDIENhcmQgLyAxNi1iaXQgUENNQ0lBIC8gQ2FyZEJ1cykuIE5vLCB3ZSBoYXZlIG5vdGhpbmcuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHBsdWdnaW5nIGEgY2FyZCBpbnRvIGEgcGh5c2ljYWwgc29ja2V0LgoKU28sIGlzIGBwY25ldF9jc2AgYW4gZXRoZXJuZXQgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ01DSUEgTkUyMDAwIGNhcmRzPyBZZXMhIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgY29uZmlybSB0aGlzOiAmIzM0O05FMjAwMCBjb21wYXRpYmxlIFBDTUNJQSBzdXBwb3J0JiMzNDsuIFBlcmZlY3QuCgpOb3csIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYHNldHVwX3NobWVtX3dpbmRvd2AsIHRoZSBjb2RlIHRoYXQmIzM5O3MgYmVpbmcgcGF0Y2hlZCwgKnJlcXVpcmVzKiB0aGF0IFBDTUNJQSBkZXZpY2UuIENhbiBpdCBiZSByZWFjaGVkIHdpdGhvdXQgdGhlIHBoeXNpY2FsIHRoaW5nPyBJIG5lZWQgdG8gYW5hbHl6ZSBgcGNuZXRfY3MuY2AgZGlyZWN0bHkuIGBwY25ldF9wcm9iZWAgaXMgb25seSBjYWxsZWQgaWYgYSBjYXJkIGlzIGF0dGFjaGVkLCBhbmQgYHNldHVwX3NobWVtX3dpbmRvd2AgaXMgY2FsbGVkIGR1cmluZyBwcm9iZS4gVGhlcmVmb3JlLCBpdCYjMzk7cyB1bnJlYWNoYWJsZSB3aXRob3V0IHRoYXQgcGh5c2ljYWwgc29ja2V0IGFuZCBjYXJkLiBCaW5nby4KCkxldCYjMzk7cyBkaXNzZWN0IHRoZSBwYXRjaCBpdHNlbGY6IEl0IGZpeGVzIGEgd2luZG93IGxlYWsgaW4gYHNldHVwX3NobWVtX3dpbmRvd2Agd2hlbiBgcGNtY2lhX3JlcXVlc3Rfd2luZG93KClgIHN1Y2NlZWRlZCBlYXJsaWVyLiBJbiBwYXJ0aWN1bGFyLCBpdCBpcyBjYWxsaW5nIGBwY21jaWFfbWFwX21lbV9wYWdlKClgIGFuZCBgcGNtY2lhX3JlbGVhc2Vfd2luZG93KClgLgoKV2l0aCB0aGUgZmFpbHVyZSBpbiBgaW9yZW1hcGAgb3IgYHBjbWNpYV9tYXBfbWVtX3BhZ2UoKWAsIHdlIGBnb3RvIHJlbGVhc2VgLCBhbmQgdGhlIGtleSBoZXJlIGlzIGl0IHJlbGVhc2VzIHRoZSByZXNvdXJjZXM6IGBwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbGluay0mZ3Q7cmVzb3VyY2VbM10pO2AuIFRoaXMgaXMgYSBjbGFzc2ljIGVycm9yIGhhbmRsaW5nIGNvcnJlY3Rpb24gaW4gcmVzb3VyY2UgbWFuYWdlbWVudC4KCk5vdywgSSYjMzk7bSBjb25maWRlbnQuIFNpbmNlIFBDTUNJQSBldGhlcm5ldCBjYXJkcyAoYHBjbmV0X2NzYCkgKnJlcXVpcmUqIHBoeXNpY2FsIFBDTUNJQSAvIFBDLWNhcmQgaGFyZHdhcmUgdGhhdCYjMzk7cyBhYnNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIHRoaXMgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIEl0JiMzOTtzIGEgdGV4dGJvb2sgZXhhbXBsZS4KClRpbWUgdG8gYXBwbHkgdGhlIGd1aWRlbGluZXM6CgoqICAgKipTZWN0aW9uIDIqKjoKICAgICogICBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6IF9DaGVja18KICAgICogICBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6IF9Eb2VzbiYjMzk7dCBhcHBseSBoZXJlXwoKVGh1cywgdGhlIHZlcmRpY3Q6IGBXb3J0aEZ1enppbmc6IGZhbHNlYCwgYEZvY3VzU3ltYm9sczogW11gLCBgRW5hYmxlQ29uZmlnczogW11gLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgcGF0Y2ggaXMgaW4gYSBkcml2ZXIgZm9yIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IGVtdWxhdGVkLiBJJiMzOTttIGNhbGxpbmcgaXQgYSBkYXkuIFRpbWUgdG8gc3VibWl0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHNldHVwX3NobWVtX3dpbmRvdygpIHdpdGhpbiB0aGUgcGNuZXRfY3MgZHJpdmVyLCB3aGljaCBzdXBwb3J0cyBsZWdhY3kgUENNQ0lBIE5FMjAwMCBuZXR3b3JrIGFkYXB0ZXJzIChDT05GSUdfUENNQ0lBX1BDTkVUKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENNQ0lBIGhhcmR3YXJlIHNvY2tldCBjb250cm9sbGVycyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgb3IgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gc2V0dXBfc2htZW1fd2luZG93KCkgd2l0aGluIHRoZSBwY25ldF9jcyBkcml2ZXIsIHdoaWNoIHN1cHBvcnRzIGxlZ2FjeSBQQ01DSUEgTkUyMDAwIG5ldHdvcmsgYWRhcHRlcnMgKENPTkZJR19QQ01DSUFfUENORVQpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ01DSUEgaGFyZHdhcmUgc29ja2V0IGNvbnRyb2xsZXJzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBvciBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6MTUuMDY0MDE5NjQzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQxMzU1NzYxNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBzZXR1cF9zaG1lbV93aW5kb3coKSB3aXRoaW4gdGhlIHBjbmV0X2NzIGRyaXZlciwgd2hpY2ggc3VwcG9ydHMgbGVnYWN5IFBDTUNJQSBORTIwMDAgbmV0d29yayBhZGFwdGVycyAoQ09ORklHX1BDTUNJQV9QQ05FVCkuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDTUNJQSBoYXJkd2FyZSBzb2NrZXQgY29udHJvbGxlcnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIG9yIHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjA0OjE1LjA2NDAyNDkwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwOTA1NjU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU0MTNhYmI2MTc5MGEyZTQ0N2I0ZDY3NDgxZDQ5NjYyMzA5ZTE4OTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDE6MDQ6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXFxuaW5kZXggMTlmOWM1ZGIzZjNiYS4uMGNmM2MwZjNjZWQ3YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNcXG5AQCAtMTQzNCwxNCArMTQzNCwxNCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxcbiAgICAgb2Zmc2V0IC09IG9mZnNldCAlIHdpbmRvd19zaXplO1xcbiAgICAgcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLVxcdTAwM2VyZXNvdXJjZVszXSwgb2Zmc2V0KTtcXG4gICAgIGlmIChyZXQpXFxuLVxcdCAgICBnb3RvIGZhaWxlZDtcXG4rXFx0ICAgIGdvdG8gcmVsZWFzZTtcXG4gXFxuICAgICAvKiBUcnkgc2NyaWJibGluZyBvbiB0aGUgYnVmZmVyICovXFxuICAgICBpbmZvLVxcdTAwM2ViYXNlID0gaW9yZW1hcChsaW5rLVxcdTAwM2VyZXNvdXJjZVszXS1cXHUwMDNlc3RhcnQsXFxuIFxcdFxcdFxcdHJlc291cmNlX3NpemUobGluay1cXHUwMDNlcmVzb3VyY2VbM10pKTtcXG4gICAgIGlmICh1bmxpa2VseSghaW5mby1cXHUwMDNlYmFzZSkpIHtcXG4gXFx0ICAgIHJldCA9IC1FTk9NRU07XFxuLVxcdCAgICBnb3RvIGZhaWxlZDtcXG4rXFx0ICAgIGdvdG8gcmVsZWFzZTtcXG4gICAgIH1cXG4gXFxuICAgICBmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKFRYX1BBR0VTXFx1MDAzY1xcdTAwM2M4KTsgaSArPSAyKVxcbkBAIC0xNDUyLDkgKzE0NTIsOCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxcbiAgICAgcGNuZXRfcmVzZXRfODM5MChkZXYpO1xcbiAgICAgaWYgKGkgIT0gKFRYX1BBR0VTXFx1MDAzY1xcdTAwM2M4KSkge1xcbiBcXHRpb3VubWFwKGluZm8tXFx1MDAzZWJhc2UpO1xcbi1cXHRwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbGluay1cXHUwMDNlcmVzb3VyY2VbM10pO1xcbiBcXHRpbmZvLVxcdTAwM2ViYXNlID0gTlVMTDtcXG4tXFx0Z290byBmYWlsZWQ7XFxuK1xcdGdvdG8gcmVsZWFzZTtcXG4gICAgIH1cXG4gXFxuICAgICBlaV9zdGF0dXMubWVtID0gaW5mby1cXHUwMDNlYmFzZSArIG9mZnNldDtcXG5AQCAtMTQ3NSw2ICsxNDc0LDggQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcXG4gICAgIGluZm8tXFx1MDAzZWZsYWdzIHw9IFVTRV9TSE1FTTtcXG4gICAgIHJldHVybiAwO1xcbiBcXG4rcmVsZWFzZTpcXG4rXFx0cGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstXFx1MDAzZXJlc291cmNlWzNdKTtcXG4gZmFpbGVkOlxcbiAgICAgcmV0dXJuIDE7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6MTYuODczNzUzNTg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MjMyNTgyNzUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gc2V0dXBfc2htZW1fd2luZG93KCkgd2l0aGluIHRoZSBwY25ldF9jcyBkcml2ZXIsIHdoaWNoIHN1cHBvcnRzIGxlZ2FjeSBQQ01DSUEgTkUyMDAwIG5ldHdvcmsgYWRhcHRlcnMgKENPTkZJR19QQ01DSUFfUENORVQpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ01DSUEgaGFyZHdhcmUgc29ja2V0IGNvbnRyb2xsZXJzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBvciBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU0MTNhYmI2MTc5MGEyZTQ0N2I0ZDY3NDgxZDQ5NjYyMzA5ZTE4OTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMTowNDoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuY1xuaW5kZXggMTlmOWM1ZGIzZjNiYS4uMGNmM2MwZjNjZWQ3YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXG5AQCAtMTQzNCwxNCArMTQzNCwxNCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxuICAgICBvZmZzZXQgLT0gb2Zmc2V0ICUgd2luZG93X3NpemU7XG4gICAgIHJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay1cdTAwM2VyZXNvdXJjZVszXSwgb2Zmc2V0KTtcbiAgICAgaWYgKHJldClcbi1cdCAgICBnb3RvIGZhaWxlZDtcbitcdCAgICBnb3RvIHJlbGVhc2U7XG4gXG4gICAgIC8qIFRyeSBzY3JpYmJsaW5nIG9uIHRoZSBidWZmZXIgKi9cbiAgICAgaW5mby1cdTAwM2ViYXNlID0gaW9yZW1hcChsaW5rLVx1MDAzZXJlc291cmNlWzNdLVx1MDAzZXN0YXJ0LFxuIFx0XHRcdHJlc291cmNlX3NpemUobGluay1cdTAwM2VyZXNvdXJjZVszXSkpO1xuICAgICBpZiAodW5saWtlbHkoIWluZm8tXHUwMDNlYmFzZSkpIHtcbiBcdCAgICByZXQgPSAtRU5PTUVNO1xuLVx0ICAgIGdvdG8gZmFpbGVkO1xuK1x0ICAgIGdvdG8gcmVsZWFzZTtcbiAgICAgfVxuIFxuICAgICBmb3IgKGkgPSAwOyBpIFx1MDAzYyAoVFhfUEFHRVNcdTAwM2NcdTAwM2M4KTsgaSArPSAyKVxuQEAgLTE0NTIsOSArMTQ1Miw4IEBAIHN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsXG4gICAgIHBjbmV0X3Jlc2V0XzgzOTAoZGV2KTtcbiAgICAgaWYgKGkgIT0gKFRYX1BBR0VTXHUwMDNjXHUwMDNjOCkpIHtcbiBcdGlvdW5tYXAoaW5mby1cdTAwM2ViYXNlKTtcbi1cdHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLCBsaW5rLVx1MDAzZXJlc291cmNlWzNdKTtcbiBcdGluZm8tXHUwMDNlYmFzZSA9IE5VTEw7XG4tXHRnb3RvIGZhaWxlZDtcbitcdGdvdG8gcmVsZWFzZTtcbiAgICAgfVxuIFxuICAgICBlaV9zdGF0dXMubWVtID0gaW5mby1cdTAwM2ViYXNlICsgb2Zmc2V0O1xuQEAgLTE0NzUsNiArMTQ3NCw4IEBAIHN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsXG4gICAgIGluZm8tXHUwMDNlZmxhZ3MgfD0gVVNFX1NITUVNO1xuICAgICByZXR1cm4gMDtcbiBcbityZWxlYXNlOlxuK1x0cGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstXHUwMDNlcmVzb3VyY2VbM10pO1xuIGZhaWxlZDpcbiAgICAgcmV0dXJuIDE7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6MTYuODczNzU1MDk1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI5NjU1MTg3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQgZGVjaWRlIGlmIGl0J3Mgd29ydGggdGhlIGZ1enppbmcgZWZmb3J0LiBUaGUgbG9jYXRpb24gaXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBkcml2ZXIgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUuIEEgcXVpY2sgY2hlY2sgdGVsbHMgbWUgaXQncyB0aGUgUENNQ0lBL0NhcmQgU2VydmljZXMgZHJpdmVyIGZvciBOUzgzOTAtYmFzZWQgRXRoZXJuZXQgY2FyZHMsIHNwZWNpZmljYWxseSBgcGNuZXRfY3NgLiBOb3cgdGhlIGtleSBxdWVzdGlvbjogaXMgUENNQ0lBIHNvbWV0aGluZyB0aGF0J3MgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVT8gSSBoYXZlIHRvIHJlbWVtYmVyIC0gaXMgUENNQ0lBIGhhcmR3YXJlIG9yIGlzIGl0IGVtdWxhdGVkPyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlcyDigJMgcHJvYmFibHkgYGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZ2Agb3IgbWF5YmUgc29tZXRoaW5nIGluIGBkcml2ZXJzL3BjbWNpYS9gIOKAkyBvciBqdXN0IGRvIGEgcXVpY2sgYGdyZXBwZXJgIHNlYXJjaCB0byBiZSBzdXJlLiBUaGlzIHdpbGwgZGljdGF0ZSBob3cgZmVhc2libGUgdGVzdGluZyB0aGlzIHBhdGNoIGFjdHVhbGx5IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6MjkuODM5Mjc1ODExWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjc2NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBDTUNJQV9QQ05FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWc9MTIzPWNvbmZpZyBBUE5FXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWctMTMzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZzoxMzQ6Y29uZmlnIFBDTUNJQV9QQ05FVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMzUtXFx0dHJpc3RhdGUgXFxcIk5FMjAwMCBjb21wYXRpYmxlIFBDTUNJQSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfTkUyS19QQ0kpICs9IG5lMmstcGNpLm8gODM5MC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfUENNQ0lBX1BDTkVUKSArPSBwY25ldF9jcy5vIDgzOTAub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvTWFrZWZpbGUtMTUtb2JqLSQoQ09ORklHX1NUTklDKSArPSBzdG5pYy5vIDgzOTAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTowNDoyOS45MDE1NTU4ODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTM4ODkwNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIDgzOTAgS2NvbmZpZyBGaWxlKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSA4MzkwIGRyaXZlciBjb25maWd1cmF0aW9uLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWdgLCBhcm91bmQgbGluZSAxMzQuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgd2UnbGwgZmluZCB0aGUgY29yZSBvcHRpb25zIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgc3BlY2lmaWMgZmVhdHVyZSBvciB2YXJpYW50IEknbSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gQ291bGQgYmUgYSBuZXcgTklDLCBhIHNwZWNpZmljIGludGVycnVwdCBjb25maWd1cmF0aW9uLCBvciBtYXliZSBldmVuIGEgZGVidWdnaW5nIGZsYWcuIEVpdGhlciB3YXksIHRoYXQgS2NvbmZpZyBmaWxlIGlzIHRoZSBwbGFjZSB0byBzdGFydCBwZWVsaW5nIGJhY2sgdGhlIGxheWVycyBvbiBob3cgdGhpcyBhbmNpZW50LCB5ZXQgc3RpbGwgcmVsZXZhbnQsIGFyY2hpdGVjdHVyZSBpcyBoYW5kbGVkIGJ5IHRoZSBrZXJuZWwuIExpbmUgMTM0IGlzIGEgZGVjZW50IHBsYWNlIHRvIGJlZ2luIGFzIEkgdXN1YWxseSBmaW5kIHRoZSBvcHRpb25zIEknbSBsb29raW5nIGZvciBhcmUgYXJvdW5kIHRoaXMgYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg4NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjA0OjM1LjQ0MDQ0ODM3OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFxuIDEzMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTMyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgYXBuZS5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0Y29uZmlnIFBDTUNJQV9QQ05FVFxcbiAxMzU6XFx0XFx0dHJpc3RhdGUgXFxcIk5FMjAwMCBjb21wYXRpYmxlIFBDTUNJQSBzdXBwb3J0XFxcIlxcbiAxMzY6XFx0XFx0ZGVwZW5kcyBvbiBQQ01DSUEgXFx1MDAyNlxcdTAwMjYgSEFTX0lPUE9SVFxcbiAxMzc6XFx0XFx0c2VsZWN0IENSQzMyXFxuIDEzODpcXHRcXHRoZWxwXFxuIDEzOTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBhdHRhY2ggYW4gTkUyMDAwIGNvbXBhdGlibGUgUENNQ0lBXFxuIDE0MDpcXHRcXHQgIChQQy1jYXJkKSBFdGhlcm5ldCBvciBGYXN0IEV0aGVybmV0IGNhcmQgdG8geW91ciBjb21wdXRlci5cXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcXG4gMTQzOlxcdFxcdCAgY2FsbGVkIHBjbmV0X2NzLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTQ0OlxcdFxcbiAxNDU6XFx0Y29uZmlnIFNUTklDXFxuIDE0NjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmF0aW9uYWwgRFA4MzkwMkFWICBzdXBwb3J0XFxcIlxcbiAxNDc6XFx0XFx0ZGVwZW5kcyBvbiBTVVBFUkhcXG4gMTQ4OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAxNDk6XFx0XFx0aGVscFxcbiAxNTA6XFx0XFx0ICBTdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBEUDgzOTAyQVZcXG4gMTUxOlxcdFxcdCAgU1QtTklDIFNlcmlhbCBOZXR3b3JrIEludGVyZmFjZSBDb250cm9sbGVyIGZvciBUd2lzdGVkIFBhaXIuICBUaGlzXFxuIDE1MjpcXHRcXHQgIGlzIGEgMTBNYml0L3NlYyBFdGhlcm5ldCBjb250cm9sbGVyLiAgUHJvZHVjdCBvdmVydmlldyBhbmQgc3BlY3MgYXRcXG4gMTUzOlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL0RQL0RQODM5MDJBLmh0bWxcXHUwMDNlLlxcbiAxNTQ6XFx0XFxuIDE1NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE1NjpcXHRcXG4gMTU3OlxcdGNvbmZpZyBaT1JSTzgzOTBcXG4gMTU4OlxcdFxcdHRyaXN0YXRlIFxcXCJab3JybyBOUzgzOTAtYmFzZWQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gMTU5OlxcdFxcdGRlcGVuZHMgb24gWk9SUk9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6MzUuNDQwNTE0OTM4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMzMzk0MTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgUENNQ0lBIEZ1enppbmcgRmVhc2liaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBQQ01DSUEgc2l0dWF0aW9uLiBNeSBmaXJzdCBxdWVzdGlvbiBpcywgY2FuIHdlIGV2ZW4gKmNvbnNpZGVyKiBmdXp6aW5nIFBDTUNJQSBkZXZpY2VzPyBBcmUgdGhleSBzb21ldGhpbmcgdGhhdCBRRU1VIG9yIHN5emthbGxlciBjYW4gaGFuZGxlLCBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGEgY29tcGxldGVseSBwaHlzaWNhbCwgbGVnYWN5IGJ1cyB0aGF0J3MgYSBkZWFkIGVuZCBmb3IgdXM/XG5cblRoZSByZWFsIHN0aWNraW5nIHBvaW50IGhlcmUgaXMgZW11bGF0aW9uLiBDYW4gd2UgcHJvYmUgb3IgZW11bGF0ZSB0aGVzZSBQQ01DSUEvUEMgY2FyZCBkZXZpY2VzPyBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgbGV0J3MgY29uc3VsdCBTZWN0aW9uIDIgb2YgdGhlIHRyaWFnZSBwaGlsb3NvcGh5LiBTcGVjaWZpY2FsbHkgdGhlIFwibmVnYXRpdmUgY3JpdGVyaWEuXCIgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGltbWVkaWF0ZWx5IGZhbGwgaW50byBhIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgc2NlbmFyaW8uXG5cblJlbWVtYmVyLCB0aGUgcGhpbG9zb3BoeSBzYXlzIHdlJ3JlICpvdXQqIGlmIHRoZSBjb2RlIHJlbGllcyBvbiBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS5cIiBUaGlzIHNwZWNpZmljYWxseSBjYWxscyBvdXQgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMgYW5kIGRyaXZlcnMgdGhhdCBkZW1hbmQgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIElzIFBDTUNJQSBpbiAqdGhhdCogY2F0ZWdvcnk/IEl0J3MgcmVhbGx5IGRvd24gdG8gd2hldGhlciBpdCBjYW4gYmUgYWNjZXNzZWQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LlxuXG5TbywgdGhlIGtleSBxdWVzdGlvbiBpczogSXMgUENNQ0lBIGVtdWxhdGVkIGluIFFFTVU/IERvZXMgYSB2aXJ0dWFsIFBDTUNJQSBidXMgb3IgZHJpdmVyIGV4aXN0IGluIExpbnV4PyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBQQ01DSUEgcmVxdWlyZXMgYSAqcGh5c2ljYWwqIFBDTUNJQSBzb2NrZXQgY29udHJvbGxlci4gU3R1ZmYgbGlrZSBpODIzNjUsIHBkNjcyOSwgb3IgeWVudGFfc29ja2V0IGlzIGEgYmFkIHNpZ24uXG5cblRpbWUgdG8gYnJlYWsgb3V0IHRoZSBrZXJuZWwgY29kZS4gTGV0J3MgYGdyZXBgIGZvciBcInBjbWNpYVwiIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdCdzIGhhbmRsZWQgKG9yICpub3QqIGhhbmRsZWQpIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYzNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjA0OjM5Ljc3NDQ1OTQxOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjM4MzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfUENNQ0lBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvcGNtY2lhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjbWNpYS9NYWtlZmlsZT0xMD1wY21jaWEteVxcdFxcdFxcdFxcdFxcdCs9IGRzLm8gcGNtY2lhX3Jlc291cmNlLm8gY2lzdHBsLm8gcGNtY2lhX2Npcy5vXFxuZHJpdmVycy9wY21jaWEvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1BDTUNJQSlcXHRcXHRcXHRcXHQrPSBwY21jaWEub1xcbmRyaXZlcnMvcGNtY2lhL01ha2VmaWxlLTEyLVxcbi0tXFxuZHJpdmVycy9wY21jaWEvTWFrZWZpbGU9MjI9b2JqLSQoQ09ORklHX1BENjcyOSlcXHRcXHRcXHRcXHQrPSBwZDY3Mjkub1xcbmRyaXZlcnMvcGNtY2lhL01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19QQ01DSUFfU09DX0NPTU1PTilcXHRcXHRcXHQrPSBzb2NfY29tbW9uLm9cXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfUENNQ0lBX1NBMTFYWF9CQVNFKVxcdFxcdCs9IHNhMTF4eF9iYXNlLm9cXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfUENNQ0lBX1NBMTEwMClcXHRcXHRcXHQrPSBzYTExMDBfY3Mub1xcbmRyaXZlcnMvcGNtY2lhL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19QQ01DSUFfU0ExMTExKVxcdFxcdFxcdCs9IHNhMTExMV9jcy5vXFxuZHJpdmVycy9wY21jaWEvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX1BDTUNJQV9CQ002M1hYKVxcdFxcdFxcdCs9IGJjbTYzeHhfcGNtY2lhLm9cXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZS0yOC1vYmotJChDT05GSUdfT01BUF9DRilcXHRcXHRcXHRcXHQrPSBvbWFwX2NmLm9cXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZT0yOT1vYmotJChDT05GSUdfRUxFQ1RSQV9DRilcXHRcXHRcXHQrPSBlbGVjdHJhX2NmLm9cXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQpXFx0XFx0Kz0gZGIxeHh4X3NzLm9cXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfUENNQ0lBX01BWDE2MDApXFx0XFx0XFx0Kz0gbWF4MTYwMC5vXFxuZHJpdmVycy9wY21jaWEvTWFrZWZpbGUtMzItXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZT00MT1weGEyeHgtb2JqLSQoQ09ORklHX1BYQV9TSEFSUFNMKVxcdFxcdCs9IHB4YTJ4eF9zaGFycHNsLm9cXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZTo0MjpvYmotJChDT05GSUdfUENNQ0lBX1BYQTJYWClcXHRcXHRcXHQrPSBweGEyeHhfYmFzZS5vICQocHhhMnh4LW9iai15KVxcbmRyaXZlcnMvcGNtY2lhL01ha2VmaWxlOjQzOm9iai0kKENPTkZJR19QQ01DSUFfWFhTMTUwMClcXHRcXHRcXHQrPSB4eHMxNTAwX3NzLm9cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmM9Njc1PXN0YXRpYyB2b2lkIHBjbWNpYV9yZXF1ZXJ5KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKVxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy03MjktXFxuZHJpdmVycy9wY21jaWEvZHMuYzo3MzA6I2lmZGVmIENPTkZJR19QQ01DSUFfTE9BRF9DSVNcXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTczMS1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmM9NzQxPXN0YXRpYyBpbnQgcGNtY2lhX2xvYWRfZmlybXdhcmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldiwgY2hhciAqZmlsZW5hbWUpXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTc4OC1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjc4OTojZWxzZSAvKiAhQ09ORklHX1BDTUNJQV9MT0FEX0NJUyAqL1xcbmRyaXZlcnMvcGNtY2lhL2RzLmMtNzkwLVxcbi0tXFxuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmM9NzA1PUVYUE9SVF9TWU1CT0wocGNtY2lhX3JlcXVlc3RfaXJxKTtcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jLTcwNy1cXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYzo3MDg6I2lmZGVmIENPTkZJR19QQ01DSUFfUFJPQkVcXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYy03MDktXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYz03NjI9dm9pZCBwY21jaWFfY2xlYW51cF9pcnEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYy03NjctXFxuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmM6NzY4OiNlbHNlIC8qIENPTkZJR19QQ01DSUFfUFJPQkUgKi9cXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYy03NjktXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYz03NzU9dm9pZCBwY21jaWFfY2xlYW51cF9pcnEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYy03ODAtXFxuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmM6NzgxOiNlbmRpZiAgLyogQ09ORklHX1BDTUNJQV9QUk9CRSAqL1xcbmRyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jLTc4Mi1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9NDE9SU5UX01PRFVMRV9QQVJNKHByb2JlX21lbSxcXHQxKTtcXHRcXHQvKiBtZW1vcnkgcHJvYmU/ICovXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYzo0MjojaWZkZWYgQ09ORklHX1BDTUNJQV9QUk9CRVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtNDMtSU5UX01PRFVMRV9QQVJNKHByb2JlX2lvLFxcdDEpO1xcdFxcdC8qIElPIHBvcnQgcHJvYmU/ICovXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jPTEzMj1zdGF0aWMgaW50IHN1Yl9pbnRlcnZhbChzdHJ1Y3QgcmVzb3VyY2VfbWFwICptYXAsIHVfbG9uZyBiYXNlLCB1X2xvbmcgbnVtKVxcbi0tXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy0xNzktXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYzoxODA6I2lmZGVmIENPTkZJR19QQ01DSUFfUFJPQkVcXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTE4MS1zdGF0aWMgdm9pZCBkb19pb19wcm9iZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGJhc2UsXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jPTQwMT1zdGF0aWMgaW50IGRvX21lbV9wcm9iZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdV9sb25nIGJhc2UsIHVfbG9uZyBudW0sXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTQ0Ny1cXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjQ0ODojaWZkZWYgQ09ORklHX1BDTUNJQV9QUk9CRVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtNDQ5LVxcbi0tXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYz00ODE9c3RhdGljIGludCB2YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBwcm9iZV9tYXNrKVxcbi0tXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy01MjctXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYzo1Mjg6I2Vsc2UgLyogQ09ORklHX1BDTUNJQV9QUk9CRSAqL1xcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtNTI5LVxcbi0tXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYz01Mzc9c3RhdGljIGludCB2YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBwcm9iZV9tYXNrKVxcbi0tXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy01NTEtXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYzo1NTI6I2VuZGlmIC8qIENPTkZJR19QQ01DSUFfUFJPQkUgKi9cXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTU1My1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9ODkxPXN0YXRpYyBpbnQgYWRqdXN0X2lvKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgYWN0aW9uLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtOTE3LVxcdFxcdH1cXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjkxODojaWZkZWYgQ09ORklHX1BDTUNJQV9QUk9CRVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtOTE5LVxcdFxcdGlmIChwcm9iZV9pbylcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYz01Mz1zdGF0aWMgaXJxcmV0dXJuX3Qgc29jX2NvbW1vbl9wY21jaWFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldik7XFxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jLTU0LVxcbmRyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYzo1NTojaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVR1xcbmRyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYy01Ni1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaD00Nj1pbnQgc29jX3BjbWNpYV9yZWd1bGF0b3Jfc2V0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0LFxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oLTQ4LVxcbmRyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaDo0OTojaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVR1xcbmRyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaC01MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6MzkuODM2ODUwNzU4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExODM1ODIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFBDbmV0X0NTIERyaXZlcioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNoYXJlZCBtZW1vcnkgd2luZG93IGlzIGJlaW5nIHNldCB1cCBpbiB0aGlzIFBDbmV0IGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBkaXJlY3RseSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGVyZSB0aGF0IGBzZXR1cF9zaG1lbV93aW5kb3dgIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZC4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jYC4gVGhhdCBmaWxlIGlzIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIFBDbmV0IENhcmQgU2VydmljZXMgKFBDTUNJQSkgaW50ZXJmYWNlLiBIb3BlZnVsbHksIHRyYWNpbmcgdGhlIGNhbGxzIHRvIGBzZXR1cF9zaG1lbV93aW5kb3dgIHdpbGwgcmV2ZWFsIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBhbmQgaG93IHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbiBpcyBiZWluZyBjb25maWd1cmVkIGZvciBkYXRhIHRyYW5zZmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjgxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6NDEuOTU1MjExNDkxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjgxMjgwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0dXBfc2htZW1fd2luZG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYz0xMDI9c3RhdGljIGludCBzZXRfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZm1hcCAqbWFwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6MTAzOnN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTEwNC1cXHRcXHRcXHQgICAgICBpbnQgc3RvcF9wZywgaW50IGNtX29mZnNldCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9NTY1PXN0YXRpYyBpbnQgcGNuZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTYwOS0gICAgaWYgKCh1c2Vfc2htZW0gPT0gMCkgfHwgKCFoYXNfc2htZW0gXFx1MDAyNlxcdTAwMjYgKHVzZV9zaG1lbSA9PSAtMSkpIHx8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjYxMDpcXHQoc2V0dXBfc2htZW1fd2luZG93KGxpbmssIHN0YXJ0X3BnLCBzdG9wX3BnLCBjbV9vZmZzZXQpICE9IDApKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy02MTEtXFx0c2V0dXBfZG1hX2NvbmZpZyhsaW5rLCBzdGFydF9wZywgc3RvcF9wZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9MTQwMT1zdGF0aWMgdm9pZCBzaG1lbV9ibG9ja19vdXRwdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTE0MTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjE0MTE6c3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMtMTQxMi1cXHRcXHRcXHQgICAgICBpbnQgc3RvcF9wZywgaW50IGNtX29mZnNldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6NDIuNzIzMzQ0NTI5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NzM5NDU3NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgUENuZXQgRHJpdmVyJ3MgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHBjbmV0X3Byb2JlYCBhbmQgYHBjbmV0X2NvbmZpZ2AgZnVuY3Rpb25zIGFyZSB1c2VkIHdpdGhpbiB0aGUgYHBjbmV0X2NzLmNgIGRyaXZlciBmaWxlLiBUaGF0J3MgdGhlIGNvcmUgb2YgaG93IHRoZSBkcml2ZXIgaXMgZmluZGluZyBhbmQgc2V0dGluZyB1cCB0aGUgUENuZXQgbmV0d29yayBpbnRlcmZhY2UuIE15IGZvY3VzIGlzIG9uIHRoZSAqY2FsbCogc3RydWN0dXJlIOKAkyBob3cgYXJlIHRoZXNlIGZ1bmN0aW9ucyBpbnZva2VkLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zPyBJJ20gbG9va2luZyBmb3IgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cywgYW55IHNwZWNpZmljIGRhdGEgYmVpbmcgcGFzc2VkLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBmdW5jdGlvbiBjYWxscy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiBmbG93IG9mIHRoaXMgcGFydGljdWxhciBuZXR3b3JrIGNhcmQgZHJpdmVyLiBVbmRlcnN0YW5kaW5nIHRoaXMgY2FsbCBzdHJ1Y3R1cmUgd2lsbCBwcm92aWRlIGNydWNpYWwgaW5zaWdodCBpbnRvIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAwNCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjA0OjQ1LjU5NzI5MjQ5MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHQgICAgICBIQVNfTUlTQ19SRUcgfCBIQVNfSUJNX01JU0MgfSxcXG4gMTgxOlxcdCAgICB7IC8qIFBhbmFzb25pYyBWRUwyMTEgKi8gMHgwZmYwLCAweDAwLCAweDgwLCAweDQ1LFxcbiAxODI6XFx0ICAgICAgSEFTX01JU0NfUkVHIHwgSEFTX0lCTV9NSVNDIH0sXFxuIDE4MzpcXHQgICAgeyAvKiBQcmVNYXggUEUtMjAwICovIDB4MDdmMCwgMHgwMCwgMHgyMCwgMHhlMCwgMCB9LFxcbiAxODQ6XFx0ICAgIHsgLyogUlBUSSBFUDQwMCAqLyAweDAxMTAsIDB4MDAsIDB4NDAsIDB4OTUsIDAgfSxcXG4gMTg1OlxcdCAgICB7IC8qIFNDTSBFdGhlcm5ldCAqLyAweDBmZjAsIDB4MDAsIDB4MjAsIDB4Y2IsIDAgfSxcXG4gMTg2OlxcdCAgICB7IC8qIFNvY2tldCBFQSAqLyAweDQwMDAsIDB4MDAsIDB4YzAsIDB4MWIsXFxuIDE4NzpcXHQgICAgICBERUxBWV9PVVRQVVQgfCBIQVNfTUlTQ19SRUcgfCBVU0VfQklHX0JVRiB9LFxcbiAxODg6XFx0ICAgIHsgLyogU29ja2V0IExQLUUgQ0YrICovIDB4MDFjMCwgMHgwMCwgMHhjMCwgMHgxYiwgMCB9LFxcbiAxODk6XFx0ICAgIHsgLyogU3VwZXJTb2NrZXQgUkU0NTBUICovIDB4MDExMCwgMHgwMCwgMHhlMCwgMHg5OCwgMCB9LFxcbiAxOTA6XFx0ICAgIHsgLyogVm9sa3RlayBOUEwtNDAyQ1QgKi8gMHgwMDYwLCAweDAwLCAweDQwLCAweDA1LCAwIH0sXFxuIDE5MTpcXHQgICAgeyAvKiBORUMgUEMtOTgwMU4tSjEyICovIDB4MGZmMCwgMHgwMCwgMHgwMCwgMHg0YywgMCB9LFxcbiAxOTI6XFx0ICAgIHsgLyogUENNQ0lBIFRlY2hub2xvZ3kgT0VNICovIDB4MDFjOCwgMHgwMCwgMHhhMCwgMHgwYywgMCB9XFxuIDE5MzpcXHR9O1xcbiAxOTQ6XFx0XFxuIDE5NTpcXHQjZGVmaW5lIE5SX0lORk9cXHRcXHRBUlJBWV9TSVpFKGh3X2luZm8pXFxuIDE5NjpcXHRcXG4gMTk3OlxcdHN0YXRpYyBzdHJ1Y3QgaHdfaW5mbyBkZWZhdWx0X2luZm8gPSB7IDAsIDAsIDAsIDAsIDAgfTtcXG4gMTk4OlxcdHN0YXRpYyBzdHJ1Y3QgaHdfaW5mbyBkbDEwMDE5X2luZm8gPSB7IDAsIDAsIDAsIDAsIElTX0RMMTAwMTl8SEFTX01JSSB9O1xcbiAxOTk6XFx0c3RhdGljIHN0cnVjdCBod19pbmZvIGRsMTAwMjJfaW5mbyA9IHsgMCwgMCwgMCwgMCwgSVNfREwxMDAyMnxIQVNfTUlJIH07XFxuIDIwMDpcXHRcXG4gMjAxOlxcdHN0cnVjdCBwY25ldF9kZXYge1xcbiAyMDI6XFx0XFx0c3RydWN0IHBjbWNpYV9kZXZpY2VcXHQqcF9kZXY7XFxuIDIwMzpcXHQgICAgdV9pbnRcXHRcXHRmbGFncztcXG4gMjA0OlxcdCAgICB2b2lkXFx0XFx0X19pb21lbSAqYmFzZTtcXG4gMjA1OlxcdCAgICBzdHJ1Y3QgdGltZXJfbGlzdFxcdHdhdGNoZG9nO1xcbiAyMDY6XFx0ICAgIGludFxcdFxcdFxcdHN0YWxlLCBmYXN0X3BvbGw7XFxuIDIwNzpcXHQgICAgdV9jaGFyXFx0XFx0cGh5X2lkO1xcbiAyMDg6XFx0ICAgIHVfY2hhclxcdFxcdGV0aF9waHksIHBuYV9waHk7XFxuIDIwOTpcXHQgICAgdV9zaG9ydFxcdFxcdGxpbmtfc3RhdHVzO1xcbiAyMTA6XFx0ICAgIHVfbG9uZ1xcdFxcdG1paV9yZXNldDtcXG4gMjExOlxcdH07XFxuIDIxMjpcXHRcXG4gMjEzOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHBjbmV0X2RldiAqUFJJVihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAyMTQ6XFx0e1xcbiAyMTU6XFx0XFx0Y2hhciAqcCA9IG5ldGRldl9wcml2KGRldik7XFxuIDIxNjpcXHRcXHRyZXR1cm4gKHN0cnVjdCBwY25ldF9kZXYgKikocCArIHNpemVvZihzdHJ1Y3QgZWlfZGV2aWNlKSk7XFxuIDIxNzpcXHR9XFxuIDIxODpcXHRcXG4gMjE5OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcGNuZXRfbmV0ZGV2X29wcyA9IHtcXG4gMjIwOlxcdFxcdC5uZG9fb3BlblxcdFxcdD0gcGNuZXRfb3BlbixcXG4gMjIxOlxcdFxcdC5uZG9fc3RvcFxcdFxcdD0gcGNuZXRfY2xvc2UsXFxuIDIyMjpcXHRcXHQubmRvX3NldF9jb25maWdcXHRcXHQ9IHNldF9jb25maWcsXFxuIDIyMzpcXHRcXHQubmRvX3N0YXJ0X3htaXQgXFx0PSBlaV9zdGFydF94bWl0LFxcbiAyMjQ6XFx0XFx0Lm5kb19nZXRfc3RhdHNcXHRcXHQ9IGVpX2dldF9zdGF0cyxcXG4gMjI1OlxcdFxcdC5uZG9fZXRoX2lvY3RsXFx0XFx0PSBlaV9pb2N0bCxcXG4gMjI2OlxcdFxcdC5uZG9fc2V0X3J4X21vZGVcXHQ9IGVpX3NldF9tdWx0aWNhc3RfbGlzdCxcXG4gMjI3OlxcdFxcdC5uZG9fdHhfdGltZW91dCBcXHQ9IGVpX3R4X3RpbWVvdXQsXFxuIDIyODpcXHRcXHQubmRvX3NldF9tYWNfYWRkcmVzcyBcXHQ9IGV0aF9tYWNfYWRkcixcXG4gMjI5OlxcdFxcdC5uZG9fdmFsaWRhdGVfYWRkclxcdD0gZXRoX3ZhbGlkYXRlX2FkZHIsXFxuIDIzMDpcXHQjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG4gMjMxOlxcdFxcdC5uZG9fcG9sbF9jb250cm9sbGVyIFxcdD0gZWlfcG9sbCxcXG4gMjMyOlxcdCNlbmRpZlxcbiAyMzM6XFx0fTtcXG4gMjM0OlxcdFxcbiAyMzU6XFx0c3RhdGljIGludCBwY25ldF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaylcXG4gMjM2OlxcdHtcXG4gMjM3OlxcdCAgICBzdHJ1Y3QgcGNuZXRfZGV2ICppbmZvO1xcbiAyMzg6XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIDIzOTpcXHRcXG4gMjQwOlxcdCAgICBkZXZfZGJnKFxcdTAwMjZsaW5rLVxcdTAwM2VkZXYsIFxcXCJwY25ldF9hdHRhY2goKVxcXFxuXFxcIik7XFxuIDI0MTpcXHRcXG4gMjQyOlxcdCAgICAvKiBDcmVhdGUgbmV3IGV0aGVybmV0IGRldmljZSAqL1xcbiAyNDM6XFx0ICAgIGRldiA9IF9fYWxsb2NfZWlfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgcGNuZXRfZGV2KSk7XFxuIDI0NDpcXHQgICAgaWYgKCFkZXYpIHJldHVybiAtRU5PTUVNO1xcbiAyNDU6XFx0ICAgIGluZm8gPSBQUklWKGRldik7XFxuIDI0NjpcXHQgICAgaW5mby1cXHUwMDNlcF9kZXYgPSBsaW5rO1xcbiAyNDc6XFx0ICAgIGxpbmstXFx1MDAzZXByaXYgPSBkZXY7XFxuIDI0ODpcXHRcXG4gMjQ5OlxcdCAgICBsaW5rLVxcdTAwM2Vjb25maWdfZmxhZ3MgfD0gQ09ORl9FTkFCTEVfSVJRIHwgQ09ORl9BVVRPX1NFVF9JTztcXG4gMjUwOlxcdFxcbiAyNTE6XFx0ICAgIGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZwY25ldF9uZXRkZXZfb3BzO1xcbiAyNTI6XFx0XFxuIDI1MzpcXHQgICAgcmV0dXJuIHBjbmV0X2NvbmZpZyhsaW5rKTtcXG4gMjU0OlxcdH0gLyogcGNuZXRfYXR0YWNoICovXFxuIDI1NTpcXHRcXG4gMjU2OlxcdHN0YXRpYyB2b2lkIHBjbmV0X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaylcXG4gMjU3OlxcdHtcXG4gMjU4OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLVxcdTAwM2Vwcml2O1xcbiAyNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjA0OjQ1LjU5NzQxNzAwMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDUwNzExMzIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgYXMgaWYgSSdtIHRoaW5raW5nIGl0OlxuXG4qKlBDTUNJQSBEcml2ZXIgUmVnaXN0cmF0aW9uIGFuZCBQcm9iaW5nKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGlzIFBDTUNJQSBzaXR1YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVycyBmb3IgdGhlc2UgZGV2aWNlcyBhcmUgYWN0dWFsbHkgaG9va2VkIGludG8gdGhlIHN5c3RlbSBhbmQsIGNydWNpYWxseSwgaG93IHRoZSBkZXZpY2VzIHRoZW1zZWx2ZXMgYXJlIGRpc2NvdmVyZWQgYW5kIGluaXRpYWxpemVkLiBUaGUga2V5IGhlcmUgaXMgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWFyY2ggZm9yIHRoYXQgY29yZSByZWdpc3RyYXRpb24gZnVuY3Rpb24g4oCTIEknbSB0aGlua2luZyBlaXRoZXIgYHBjbWNpYV9yZWdpc3Rlcl9kcml2ZXJgIG9yIG1heWJlIGp1c3Qgc29tZXRoaW5nIGxpa2UgYHBjbWNpYV9kcml2ZXJgIGFzIGEgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnQgSSBuZWVkIHRvIGZvbGxvdyB0aGUgdHJhaWwgb2YgaG93IGV2ZXJ5dGhpbmcgZ2V0cyB0aWVkIHRvZ2V0aGVyLiBPbmNlIEkgZmluZCB0aGF0IHJlZ2lzdHJhdGlvbiBwb2ludCwgdGhlIHByb2JpbmcgbG9naWMgc2hvdWxkIGJlY29tZSBtdWNoIGNsZWFyZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4ODUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjA0OjU2LjEwNDUzMjQ5OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkzMjAxNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BjbWNpYV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jPTE3MDk9c3RhdGljIHN0cnVjdCBwY21jaWFfZHJpdmVyIHBjbmV0X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0xNzE3LX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjE3MTg6bW9kdWxlX3BjbWNpYV9kcml2ZXIocGNuZXRfZHJpdmVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6NTYuMjAzODU4MjQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyODk2MTE1MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBDTUNJQSBEcml2ZXIgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBwY25ldF9jc2AsIHdoaWNoIEkgdW5kZXJzdGFuZCBpcyBhIFBDTUNJQSBkcml2ZXIsIHJlcHJlc2VudGVkIGFzIGEgYHN0cnVjdCBwY21jaWFfZHJpdmVyYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB3aGV0aGVyIFBDTUNJQSBoYXJkd2FyZSDigJMgdGhhdCdzIFBDIENhcmQgb3IgQ2FyZEJ1cyDigJMgY2FuIGFjdHVhbGx5IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBzZXR1cC4gWW91IGtub3csIFFFTVUgb3IgZXZlbiBHQ0UgZm9yIHRoYXQgbWF0dGVyLlxuXG5UaGUgYmlnIHF1ZXN0aW9uOiBEb2VzIFFFTVUgb3Igc3l6a2FsbGVyIGhhdmUgYW55IHNvbGlkIFBDTUNJQSBkZXZpY2UgZW11bGF0aW9uIG9yIGZ1enppbmcgY2FwYWJpbGl0aWVzPyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIHBzZXVkby1zeXNjYWxscyBvciB2aXJ0dWFsIGRldmljZXMgcmVsYXRlZCB0byBQQ01DSUEgd2l0aGluIHN5emthbGxlci4gT3IsIG1vcmUgZ2VuZXJhbGx5LCBpZiBRRU1VIGl0c2VsZiBlbXVsYXRlcyBQQ01DSUEgYW5kIGBwY21jaWFfc29ja2V0YCBhdCBhbGwuXG5cbkkgc3VwcG9zZSBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBzeXprYWxsZXIgc3BlY2lmaWNhdGlvbnMgb3IgZGlnIHRocm91Z2ggdGhlIGtlcm5lbCBkcml2ZXJzIGZvciBhbnkgUENNQ0lBIHJlbGF0ZWQgYml0cy4gSXMgdGhpcyBldmVuIHNvbWV0aGluZyB1c2Vyc3BhY2UgY2FuIG1hbmlwdWxhdGUsIG9yIGlzIFBDTUNJQSBmdW5kYW1lbnRhbGx5IGEgbGVnYWN5IGhhcmR3YXJlIGJ1cz9cblxuUmlnaHQsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL3BjbWNpYS9gIGRpcmVjdG9yeSBhbmQgc2VlIHdoYXQncyB3aGF0LiBUaGF0J3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjUxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjA1OjA5LjA5OTk3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9wY21jaWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYmNtNjN4eF9wY21jaWEuY1wiLFxuICAgIFwiYmNtNjN4eF9wY21jaWEuaFwiLFxuICAgIFwiY2FyZGJ1cy5jXCIsXG4gICAgXCJjaXJydXMuaFwiLFxuICAgIFwiY2lzdHBsLmNcIixcbiAgICBcImNzLmNcIixcbiAgICBcImNzX2ludGVybmFsLmhcIixcbiAgICBcImRiMXh4eF9zcy5jXCIsXG4gICAgXCJkcy5jXCIsXG4gICAgXCJlbGVjdHJhX2NmLmNcIixcbiAgICBcImk4MjM2NS5oXCIsXG4gICAgXCJtYXgxNjAwLmNcIixcbiAgICBcIm1heDE2MDAuaFwiLFxuICAgIFwibzJtaWNyby5oXCIsXG4gICAgXCJvbWFwX2NmLmNcIixcbiAgICBcInBjbWNpYV9jaXMuY1wiLFxuICAgIFwicGNtY2lhX3Jlc291cmNlLmNcIixcbiAgICBcInBkNjcyOS5jXCIsXG4gICAgXCJwZDY3MjkuaFwiLFxuICAgIFwicHhhMnh4X2Jhc2UuY1wiLFxuICAgIFwicHhhMnh4X2Jhc2UuaFwiLFxuICAgIFwicHhhMnh4X3NoYXJwc2wuY1wiLFxuICAgIFwicmljb2guaFwiLFxuICAgIFwicnNyY19tZ3IuY1wiLFxuICAgIFwicnNyY19ub25zdGF0aWMuY1wiLFxuICAgIFwic2ExMTAwX2dlbmVyaWMuY1wiLFxuICAgIFwic2ExMTAwX2dlbmVyaWMuaFwiLFxuICAgIFwic2ExMTAwX2gzNjAwLmNcIixcbiAgICBcInNhMTExMV9nZW5lcmljLmNcIixcbiAgICBcInNhMTExMV9nZW5lcmljLmhcIixcbiAgICBcInNhMTExMV9qb3JuYWRhNzIwLmNcIixcbiAgICBcInNhMTExMV9uZXBvbnNldC5jXCIsXG4gICAgXCJzYTExeHhfYmFzZS5jXCIsXG4gICAgXCJzYTExeHhfYmFzZS5oXCIsXG4gICAgXCJzb2NfY29tbW9uLmNcIixcbiAgICBcInNvY19jb21tb24uaFwiLFxuICAgIFwic29ja2V0X3N5c2ZzLmNcIixcbiAgICBcInRpMTEzeC5oXCIsXG4gICAgXCJ0b3BpYy5oXCIsXG4gICAgXCJ2ZzQ2OC5oXCIsXG4gICAgXCJ4eHMxNTAwX3NzLmNcIixcbiAgICBcInllbnRhX3NvY2tldC5jXCIsXG4gICAgXCJ5ZW50YV9zb2NrZXQuaFwiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTowNTowOS4xMDAwNTgzNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDA5OTQ4ODc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQQ01DSUEgRXRoZXJuZXQgRHJpdmVyIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgaW50dWl0aW9uIGlzIHBpbmdpbmcgbWUgYWJvdXQgbGVnYWN5IGhhcmR3YXJlLiBMZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgd2l0aCBgcGNuZXRfY3MuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaGFuZGxlcyBQQ01DSUEgTkUyMDAwIEV0aGVybmV0IGNhcmRzIOKAkyBhbmNpZW50IHRlY2hub2xvZ3ksIGJ1dCBzdGlsbCBpbXBvcnRhbnQgaW4gdGhlIGhpc3RvcmljYWwgY29udGV4dCBvZiBzeXN0ZW0gZGVzaWduLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50cy4gVGhlIHJlbGV2YW50IFBDTUNJQSBzb2NrZXQgZHJpdmVycyBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgaGVyZSBhcmUgdGhlIGxpa2VzIG9mIGB5ZW50YV9zb2NrZXQuY2Agd2hpY2ggbWFuYWdlcyBQQ0ktdG8tQ2FyZEJ1cyBicmlkZ2VzLCBhbG9uZyB3aXRoIGBpODIzNjVgLCBgcGQ2NzI5YCwgYW5kIHZhcmlvdXMgQVJNIFNvQyBwY21jaWEgYnJpZGdlcyAoYHNhMTEwMGAsIGBzYTExMTFgLCBgcHhhMnh4YCwgYGJjbTYzeHhgLCBgb21hcF9jZmApLiBOb25lIG9mIHRoZXNlIGNvbnRyb2xsZXJzIGFyZSBlbXVsYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgeDg2XzY0IFZNIG9yIEdDRSBpbnN0YW5jZSwgd2hpY2ggaXMgdGhlIGNvcm5lcnN0b25lIG9mIG91ciBmdXp6aW5nIGVudmlyb25tZW50LiBGb3JnZXQgUENNQ0lBIGV0aGVybmV0LCB0aGV5IGFyZSAqbmV2ZXIqIHBhcnQgb2YgdGhpcyB2aXJ0dWFsIGxhbmRzY2FwZS5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byBTZWN0aW9uIDIgb2Ygb3VyIGd1aWRlbGluZXMuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlOyBpdCdzIHRoZSBsaXRtdXMgdGVzdC4gV2UgbmVlZCB0byBzZWUgaWYgdGhlIGhhcmR3YXJlIGluIHF1ZXN0aW9uIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gQW5kIHRoYXQncyB3aGVuIGl0IGhpdHMgbWU6IFBDTUNJQSBjYXJkcyBhcmUgcGh5c2ljYWwgbGVnYWN5IGhhcmR3YXJlIChQQyBDYXJkIC8gMTYtYml0IFBDTUNJQSAvIENhcmRCdXMpLiBObywgd2UgaGF2ZSBub3RoaW5nLiBXZSdyZSB0YWxraW5nIGFib3V0IHBsdWdnaW5nIGEgY2FyZCBpbnRvIGEgcGh5c2ljYWwgc29ja2V0LlxuXG5TbywgaXMgYHBjbmV0X2NzYCBhbiBldGhlcm5ldCBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDTUNJQSBORTIwMDAgY2FyZHM/IFllcyEgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb25maXJtIHRoaXM6IFwiTkUyMDAwIGNvbXBhdGlibGUgUENNQ0lBIHN1cHBvcnRcIi4gUGVyZmVjdC5cblxuTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBzZXR1cF9zaG1lbV93aW5kb3dgLCB0aGUgY29kZSB0aGF0J3MgYmVpbmcgcGF0Y2hlZCwgKnJlcXVpcmVzKiB0aGF0IFBDTUNJQSBkZXZpY2UuIENhbiBpdCBiZSByZWFjaGVkIHdpdGhvdXQgdGhlIHBoeXNpY2FsIHRoaW5nPyBJIG5lZWQgdG8gYW5hbHl6ZSBgcGNuZXRfY3MuY2AgZGlyZWN0bHkuIGBwY25ldF9wcm9iZWAgaXMgb25seSBjYWxsZWQgaWYgYSBjYXJkIGlzIGF0dGFjaGVkLCBhbmQgYHNldHVwX3NobWVtX3dpbmRvd2AgaXMgY2FsbGVkIGR1cmluZyBwcm9iZS4gVGhlcmVmb3JlLCBpdCdzIHVucmVhY2hhYmxlIHdpdGhvdXQgdGhhdCBwaHlzaWNhbCBzb2NrZXQgYW5kIGNhcmQuIEJpbmdvLlxuXG5MZXQncyBkaXNzZWN0IHRoZSBwYXRjaCBpdHNlbGY6IEl0IGZpeGVzIGEgd2luZG93IGxlYWsgaW4gYHNldHVwX3NobWVtX3dpbmRvd2Agd2hlbiBgcGNtY2lhX3JlcXVlc3Rfd2luZG93KClgIHN1Y2NlZWRlZCBlYXJsaWVyLiBJbiBwYXJ0aWN1bGFyLCBpdCBpcyBjYWxsaW5nIGBwY21jaWFfbWFwX21lbV9wYWdlKClgIGFuZCBgcGNtY2lhX3JlbGVhc2Vfd2luZG93KClgLlxuXG5XaXRoIHRoZSBmYWlsdXJlIGluIGBpb3JlbWFwYCBvciBgcGNtY2lhX21hcF9tZW1fcGFnZSgpYCwgd2UgYGdvdG8gcmVsZWFzZWAsIGFuZCB0aGUga2V5IGhlcmUgaXMgaXQgcmVsZWFzZXMgdGhlIHJlc291cmNlczogYHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLCBsaW5rLVx1MDAzZXJlc291cmNlWzNdKTtgLiBUaGlzIGlzIGEgY2xhc3NpYyBlcnJvciBoYW5kbGluZyBjb3JyZWN0aW9uIGluIHJlc291cmNlIG1hbmFnZW1lbnQuXG5cbk5vdywgSSdtIGNvbmZpZGVudC4gU2luY2UgUENNQ0lBIGV0aGVybmV0IGNhcmRzIChgcGNuZXRfY3NgKSAqcmVxdWlyZSogcGh5c2ljYWwgUENNQ0lBIC8gUEMtY2FyZCBoYXJkd2FyZSB0aGF0J3MgYWJzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCB0aGlzIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBJdCdzIGEgdGV4dGJvb2sgZXhhbXBsZS5cblxuVGltZSB0byBhcHBseSB0aGUgZ3VpZGVsaW5lczpcblxuKiAgICoqU2VjdGlvbiAyKio6XG4gICAgKiAgIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTogX0NoZWNrX1xuICAgICogICBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6IF9Eb2Vzbid0IGFwcGx5IGhlcmVfXG5cblRodXMsIHRoZSB2ZXJkaWN0OiBgV29ydGhGdXp6aW5nOiBmYWxzZWAsIGBGb2N1c1N5bWJvbHM6IFtdYCwgYEVuYWJsZUNvbmZpZ3M6IFtdYC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoIGlzIGluIGEgZHJpdmVyIGZvciBoYXJkd2FyZSB0aGF0IGlzbid0IGVtdWxhdGVkLiBJJ20gY2FsbGluZyBpdCBhIGRheS4gVGltZSB0byBzdWJtaXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTM4LCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3MSwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDU6MTkuMTk5NTUxMDIyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gc2V0dXBfc2htZW1fd2luZG93KCkgd2l0aGluIHRoZSBwY25ldF9jcyBkcml2ZXIsIHdoaWNoIHN1cHBvcnRzIGxlZ2FjeSBQQ01DSUEgTkUyMDAwIG5ldHdvcmsgYWRhcHRlcnMgKENPTkZJR19QQ01DSUFfUENORVQpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ01DSUEgaGFyZHdhcmUgc29ja2V0IGNvbnRyb2xsZXJzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBvciBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBzZXR1cF9zaG1lbV93aW5kb3coKSB3aXRoaW4gdGhlIHBjbmV0X2NzIGRyaXZlciwgd2hpY2ggc3VwcG9ydHMgbGVnYWN5IFBDTUNJQSBORTIwMDAgbmV0d29yayBhZGFwdGVycyAoQ09ORklHX1BDTUNJQV9QQ05FVCkuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDTUNJQSBoYXJkd2FyZSBzb2NrZXQgY29udHJvbGxlcnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIG9yIHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjA1OjE5LjE5OTU4MzA5MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowq2qrd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 23:26:22 +0000 UTC FinishedAt: 2026-09-11 01:05:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gc2V0dXBfc2htZW1fd2luZG93KCkgd2l0aGluIHRoZSBwY25ldF9jcyBkcml2ZXIsIHdoaWNoIHN1cHBvcnRzIGxlZ2FjeSBQQ01DSUEgTkUyMDAwIG5ldHdvcmsgYWRhcHRlcnMgKENPTkZJR19QQ01DSUFfUENORVQpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ01DSUEgaGFyZHdhcmUgc29ja2V0IGNvbnRyb2xsZXJzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBvciBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTQxM2FiYjYxNzkwYTJlNDQ3YjRkNjc0ODFkNDk2NjIzMDllMTg5OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDAxOjA0OjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuY1xuaW5kZXggMTlmOWM1ZGIzZjNiYS4uMGNmM2MwZjNjZWQ3YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXG5AQCAtMTQzNCwxNCAmIzQzOzE0MzQsMTQgQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcbiAgICAgb2Zmc2V0IC09IG9mZnNldCAlIHdpbmRvd19zaXplO1xuICAgICByZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstXHUwMDNlcmVzb3VyY2VbM10sIG9mZnNldCk7XG4gICAgIGlmIChyZXQpXG4tXHQgICAgZ290byBmYWlsZWQ7XG4mIzQzO1x0ICAgIGdvdG8gcmVsZWFzZTtcbiBcbiAgICAgLyogVHJ5IHNjcmliYmxpbmcgb24gdGhlIGJ1ZmZlciAqL1xuICAgICBpbmZvLVx1MDAzZWJhc2UgPSBpb3JlbWFwKGxpbmstXHUwMDNlcmVzb3VyY2VbM10tXHUwMDNlc3RhcnQsXG4gXHRcdFx0cmVzb3VyY2Vfc2l6ZShsaW5rLVx1MDAzZXJlc291cmNlWzNdKSk7XG4gICAgIGlmICh1bmxpa2VseSghaW5mby1cdTAwM2ViYXNlKSkge1xuIFx0ICAgIHJldCA9IC1FTk9NRU07XG4tXHQgICAgZ290byBmYWlsZWQ7XG4mIzQzO1x0ICAgIGdvdG8gcmVsZWFzZTtcbiAgICAgfVxuIFxuICAgICBmb3IgKGkgPSAwOyBpIFx1MDAzYyAoVFhfUEFHRVNcdTAwM2NcdTAwM2M4KTsgaSAmIzQzOz0gMilcbkBAIC0xNDUyLDkgJiM0MzsxNDUyLDggQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcbiAgICAgcGNuZXRfcmVzZXRfODM5MChkZXYpO1xuICAgICBpZiAoaSAhPSAoVFhfUEFHRVNcdTAwM2NcdTAwM2M4KSkge1xuIFx0aW91bm1hcChpbmZvLVx1MDAzZWJhc2UpO1xuLVx0cGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstXHUwMDNlcmVzb3VyY2VbM10pO1xuIFx0aW5mby1cdTAwM2ViYXNlID0gTlVMTDtcbi1cdGdvdG8gZmFpbGVkO1xuJiM0MztcdGdvdG8gcmVsZWFzZTtcbiAgICAgfVxuIFxuICAgICBlaV9zdGF0dXMubWVtID0gaW5mby1cdTAwM2ViYXNlICYjNDM7IG9mZnNldDtcbkBAIC0xNDc1LDYgJiM0MzsxNDc0LDggQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcbiAgICAgaW5mby1cdTAwM2VmbGFncyB8PSBVU0VfU0hNRU07XG4gICAgIHJldHVybiAwO1xuIFxuJiM0MztyZWxlYXNlOlxuJiM0MztcdHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLCBsaW5rLVx1MDAzZXJlc291cmNlWzNdKTtcbiBmYWlsZWQ6XG4gICAgIHJldHVybiAxO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBzZXR1cF9zaG1lbV93aW5kb3coKSB3aXRoaW4gdGhlIHBjbmV0X2NzIGRyaXZlciwgd2hpY2ggc3VwcG9ydHMgbGVnYWN5IFBDTUNJQSBORTIwMDAgbmV0d29yayBhZGFwdGVycyAoQ09ORklHX1BDTUNJQV9QQ05FVCkuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDTUNJQSBoYXJkd2FyZSBzb2NrZXQgY29udHJvbGxlcnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIG9yIHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNDEzYWJiNjE3OTBhMmU0NDdiNGQ2NzQ4MWQ0OTY2MjMwOWUxODk5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDE6MDQ6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMKaW5kZXggMTlmOWM1ZGIzZjNiYS4uMGNmM2MwZjNjZWQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYwpAQCAtMTQzNCwxNCAmIzQzOzE0MzQsMTQgQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZywKICAgICBvZmZzZXQgLT0gb2Zmc2V0ICUgd2luZG93X3NpemU7CiAgICAgcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLSZndDtyZXNvdXJjZVszXSwgb2Zmc2V0KTsKICAgICBpZiAocmV0KQotCSAgICBnb3RvIGZhaWxlZDsKJiM0MzsJICAgIGdvdG8gcmVsZWFzZTsKIAogICAgIC8qIFRyeSBzY3JpYmJsaW5nIG9uIHRoZSBidWZmZXIgKi8KICAgICBpbmZvLSZndDtiYXNlID0gaW9yZW1hcChsaW5rLSZndDtyZXNvdXJjZVszXS0mZ3Q7c3RhcnQsCiAJCQlyZXNvdXJjZV9zaXplKGxpbmstJmd0O3Jlc291cmNlWzNdKSk7CiAgICAgaWYgKHVubGlrZWx5KCFpbmZvLSZndDtiYXNlKSkgewogCSAgICByZXQgPSAtRU5PTUVNOwotCSAgICBnb3RvIGZhaWxlZDsKJiM0MzsJICAgIGdvdG8gcmVsZWFzZTsKICAgICB9CiAKICAgICBmb3IgKGkgPSAwOyBpICZsdDsgKFRYX1BBR0VTJmx0OyZsdDs4KTsgaSAmIzQzOz0gMikKQEAgLTE0NTIsOSAmIzQzOzE0NTIsOCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLAogICAgIHBjbmV0X3Jlc2V0XzgzOTAoZGV2KTsKICAgICBpZiAoaSAhPSAoVFhfUEFHRVMmbHQ7Jmx0OzgpKSB7CiAJaW91bm1hcChpbmZvLSZndDtiYXNlKTsKLQlwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbGluay0mZ3Q7cmVzb3VyY2VbM10pOwogCWluZm8tJmd0O2Jhc2UgPSBOVUxMOwotCWdvdG8gZmFpbGVkOwomIzQzOwlnb3RvIHJlbGVhc2U7CiAgICAgfQogCiAgICAgZWlfc3RhdHVzLm1lbSA9IGluZm8tJmd0O2Jhc2UgJiM0Mzsgb2Zmc2V0OwpAQCAtMTQ3NSw2ICYjNDM7MTQ3NCw4IEBAIHN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsCiAgICAgaW5mby0mZ3Q7ZmxhZ3MgfD0gVVNFX1NITUVNOwogICAgIHJldHVybiAwOwogCiYjNDM7cmVsZWFzZToKJiM0MzsJcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstJmd0O3Jlc291cmNlWzNdKTsKIGZhaWxlZDoKICAgICByZXR1cm4gMTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCYjMzk7cyB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQuIFRoZSBsb2NhdGlvbiBpcyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IGRyaXZlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmUuIEEgcXVpY2sgY2hlY2sgdGVsbHMgbWUgaXQmIzM5O3MgdGhlIFBDTUNJQS9DYXJkIFNlcnZpY2VzIGRyaXZlciBmb3IgTlM4MzkwLWJhc2VkIEV0aGVybmV0IGNhcmRzLCBzcGVjaWZpY2FsbHkgYHBjbmV0X2NzYC4gTm93IHRoZSBrZXkgcXVlc3Rpb246IGlzIFBDTUNJQSBzb21ldGhpbmcgdGhhdCYjMzk7cyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VPyBJIGhhdmUgdG8gcmVtZW1iZXIgLSBpcyBQQ01DSUEgaGFyZHdhcmUgb3IgaXMgaXQgZW11bGF0ZWQ/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlcyDigJMgcHJvYmFibHkgYGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZ2Agb3IgbWF5YmUgc29tZXRoaW5nIGluIGBkcml2ZXJzL3BjbWNpYS9gIOKAkyBvciBqdXN0IGRvIGEgcXVpY2sgYGdyZXBwZXJgIHNlYXJjaCB0byBiZSBzdXJlLiBUaGlzIHdpbGwgZGljdGF0ZSBob3cgZmVhc2libGUgdGVzdGluZyB0aGlzIHBhdGNoIGFjdHVhbGx5IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BDTUNJQV9QQ05FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZz0xMjM9Y29uZmlnIEFQTkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWctMTMzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnOjEzNDpjb25maWcgUENNQ0lBX1BDTkVUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWctMTM1LVx0dHJpc3RhdGUgXCYjMzQ7TkUyMDAwIGNvbXBhdGlibGUgUENNQ0lBIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL01ha2VmaWxlPTEzPW9iai0kKENPTkZJR19ORTJLX1BDSSkgJiM0Mzs9IG5lMmstcGNpLm8gODM5MC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19QQ01DSUFfUENORVQpICYjNDM7PSBwY25ldF9jcy5vIDgzOTAub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9NYWtlZmlsZS0xNS1vYmotJChDT05GSUdfU1ROSUMpICYjNDM7PSBzdG5pYy5vIDgzOTAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4ODcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIDgzOTAgS2NvbmZpZyBGaWxlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgODM5MCBkcml2ZXIgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZ2AsIGFyb3VuZCBsaW5lIDEzNC4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIHdlJiMzOTtsbCBmaW5kIHRoZSBjb3JlIG9wdGlvbnMgcmVsYXRlZCB0byB3aGF0ZXZlciBzcGVjaWZpYyBmZWF0dXJlIG9yIHZhcmlhbnQgSSYjMzk7bSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gQ291bGQgYmUgYSBuZXcgTklDLCBhIHNwZWNpZmljIGludGVycnVwdCBjb25maWd1cmF0aW9uLCBvciBtYXliZSBldmVuIGEgZGVidWdnaW5nIGZsYWcuIEVpdGhlciB3YXksIHRoYXQgS2NvbmZpZyBmaWxlIGlzIHRoZSBwbGFjZSB0byBzdGFydCBwZWVsaW5nIGJhY2sgdGhlIGxheWVycyBvbiBob3cgdGhpcyBhbmNpZW50LCB5ZXQgc3RpbGwgcmVsZXZhbnQsIGFyY2hpdGVjdHVyZSBpcyBoYW5kbGVkIGJ5IHRoZSBrZXJuZWwuIExpbmUgMTM0IGlzIGEgZGVjZW50IHBsYWNlIHRvIGJlZ2luIGFzIEkgdXN1YWxseSBmaW5kIHRoZSBvcHRpb25zIEkmIzM5O20gbG9va2luZyBmb3IgYXJlIGFyb3VuZCB0aGlzIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFxuIDEzMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTMyOlx0XHQgIHdpbGwgYmUgY2FsbGVkIGFwbmUuXG4gMTMzOlx0XG4gMTM0Olx0Y29uZmlnIFBDTUNJQV9QQ05FVFxuIDEzNTpcdFx0dHJpc3RhdGUgXCYjMzQ7TkUyMDAwIGNvbXBhdGlibGUgUENNQ0lBIHN1cHBvcnRcJiMzNDtcbiAxMzY6XHRcdGRlcGVuZHMgb24gUENNQ0lBIFx1MDAyNlx1MDAyNiBIQVNfSU9QT1JUXG4gMTM3Olx0XHRzZWxlY3QgQ1JDMzJcbiAxMzg6XHRcdGhlbHBcbiAxMzk6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIGF0dGFjaCBhbiBORTIwMDAgY29tcGF0aWJsZSBQQ01DSUFcbiAxNDA6XHRcdCAgKFBDLWNhcmQpIEV0aGVybmV0IG9yIEZhc3QgRXRoZXJuZXQgY2FyZCB0byB5b3VyIGNvbXB1dGVyLlxuIDE0MTpcdFxuIDE0MjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAxNDM6XHRcdCAgY2FsbGVkIHBjbmV0X2NzLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNDQ6XHRcbiAxNDU6XHRjb25maWcgU1ROSUNcbiAxNDY6XHRcdHRyaXN0YXRlIFwmIzM0O05hdGlvbmFsIERQODM5MDJBViAgc3VwcG9ydFwmIzM0O1xuIDE0NzpcdFx0ZGVwZW5kcyBvbiBTVVBFUkhcbiAxNDg6XHRcdHNlbGVjdCBDUkMzMlxuIDE0OTpcdFx0aGVscFxuIDE1MDpcdFx0ICBTdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBEUDgzOTAyQVZcbiAxNTE6XHRcdCAgU1QtTklDIFNlcmlhbCBOZXR3b3JrIEludGVyZmFjZSBDb250cm9sbGVyIGZvciBUd2lzdGVkIFBhaXIuICBUaGlzXG4gMTUyOlx0XHQgIGlzIGEgMTBNYml0L3NlYyBFdGhlcm5ldCBjb250cm9sbGVyLiAgUHJvZHVjdCBvdmVydmlldyBhbmQgc3BlY3MgYXRcbiAxNTM6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvRFAvRFA4MzkwMkEuaHRtbFx1MDAzZS5cbiAxNTQ6XHRcbiAxNTU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNTY6XHRcbiAxNTc6XHRjb25maWcgWk9SUk84MzkwXG4gMTU4Olx0XHR0cmlzdGF0ZSBcJiMzNDtab3JybyBOUzgzOTAtYmFzZWQgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuIDE1OTpcdFx0ZGVwZW5kcyBvbiBaT1JST1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFBDTUNJQSBGdXp6aW5nIEZlYXNpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBQQ01DSUEgc2l0dWF0aW9uLiBNeSBmaXJzdCBxdWVzdGlvbiBpcywgY2FuIHdlIGV2ZW4gKmNvbnNpZGVyKiBmdXp6aW5nIFBDTUNJQSBkZXZpY2VzPyBBcmUgdGhleSBzb21ldGhpbmcgdGhhdCBRRU1VIG9yIHN5emthbGxlciBjYW4gaGFuZGxlLCBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGEgY29tcGxldGVseSBwaHlzaWNhbCwgbGVnYWN5IGJ1cyB0aGF0JiMzOTtzIGEgZGVhZCBlbmQgZm9yIHVzPwoKVGhlIHJlYWwgc3RpY2tpbmcgcG9pbnQgaGVyZSBpcyBlbXVsYXRpb24uIENhbiB3ZSBwcm9iZSBvciBlbXVsYXRlIHRoZXNlIFBDTUNJQS9QQyBjYXJkIGRldmljZXM/IEJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBsZXQmIzM5O3MgY29uc3VsdCBTZWN0aW9uIDIgb2YgdGhlIHRyaWFnZSBwaGlsb3NvcGh5LiBTcGVjaWZpY2FsbHkgdGhlICYjMzQ7bmVnYXRpdmUgY3JpdGVyaWEuJiMzNDsgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSBmYWxsIGludG8gYSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IHNjZW5hcmlvLgoKUmVtZW1iZXIsIHRoZSBwaGlsb3NvcGh5IHNheXMgd2UmIzM5O3JlICpvdXQqIGlmIHRoZSBjb2RlIHJlbGllcyBvbiAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4mIzM0OyBUaGlzIHNwZWNpZmljYWxseSBjYWxscyBvdXQgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMgYW5kIGRyaXZlcnMgdGhhdCBkZW1hbmQgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIElzIFBDTUNJQSBpbiAqdGhhdCogY2F0ZWdvcnk/IEl0JiMzOTtzIHJlYWxseSBkb3duIHRvIHdoZXRoZXIgaXQgY2FuIGJlIGFjY2Vzc2VkIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC4KClNvLCB0aGUga2V5IHF1ZXN0aW9uIGlzOiBJcyBQQ01DSUEgZW11bGF0ZWQgaW4gUUVNVT8gRG9lcyBhIHZpcnR1YWwgUENNQ0lBIGJ1cyBvciBkcml2ZXIgZXhpc3QgaW4gTGludXg/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIFBDTUNJQSByZXF1aXJlcyBhICpwaHlzaWNhbCogUENNQ0lBIHNvY2tldCBjb250cm9sbGVyLiBTdHVmZiBsaWtlIGk4MjM2NSwgcGQ2NzI5LCBvciB5ZW50YV9zb2NrZXQgaXMgYSBiYWQgc2lnbi4KClRpbWUgdG8gYnJlYWsgb3V0IHRoZSBrZXJuZWwgY29kZS4gTGV0JiMzOTtzIGBncmVwYCBmb3IgJiMzNDtwY21jaWEmIzM0OyBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXQmIzM5O3MgaGFuZGxlZCAob3IgKm5vdCogaGFuZGxlZCkgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19QQ01DSUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjbWNpYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY21jaWEvTWFrZWZpbGU9MTA9cGNtY2lhLXlcdFx0XHRcdFx0JiM0Mzs9IGRzLm8gcGNtY2lhX3Jlc291cmNlLm8gY2lzdHBsLm8gcGNtY2lhX2Npcy5vXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfUENNQ0lBKVx0XHRcdFx0JiM0Mzs9IHBjbWNpYS5vXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZS0xMi1cbi0tXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfUEQ2NzI5KVx0XHRcdFx0JiM0Mzs9IHBkNjcyOS5vXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZToyMzpvYmotJChDT05GSUdfUENNQ0lBX1NPQ19DT01NT04pXHRcdFx0JiM0Mzs9IHNvY19jb21tb24ub1xuZHJpdmVycy9wY21jaWEvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX1BDTUNJQV9TQTExWFhfQkFTRSlcdFx0JiM0Mzs9IHNhMTF4eF9iYXNlLm9cbmRyaXZlcnMvcGNtY2lhL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19QQ01DSUFfU0ExMTAwKVx0XHRcdCYjNDM7PSBzYTExMDBfY3Mub1xuZHJpdmVycy9wY21jaWEvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX1BDTUNJQV9TQTExMTEpXHRcdFx0JiM0Mzs9IHNhMTExMV9jcy5vXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfUENNQ0lBX0JDTTYzWFgpXHRcdFx0JiM0Mzs9IGJjbTYzeHhfcGNtY2lhLm9cbmRyaXZlcnMvcGNtY2lhL01ha2VmaWxlLTI4LW9iai0kKENPTkZJR19PTUFQX0NGKVx0XHRcdFx0JiM0Mzs9IG9tYXBfY2Yub1xuZHJpdmVycy9wY21jaWEvTWFrZWZpbGU9Mjk9b2JqLSQoQ09ORklHX0VMRUNUUkFfQ0YpXHRcdFx0JiM0Mzs9IGVsZWN0cmFfY2Yub1xuZHJpdmVycy9wY21jaWEvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEKVx0XHQmIzQzOz0gZGIxeHh4X3NzLm9cbmRyaXZlcnMvcGNtY2lhL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19QQ01DSUFfTUFYMTYwMClcdFx0XHQmIzQzOz0gbWF4MTYwMC5vXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZS0zMi1cbi0tXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZT00MT1weGEyeHgtb2JqLSQoQ09ORklHX1BYQV9TSEFSUFNMKVx0XHQmIzQzOz0gcHhhMnh4X3NoYXJwc2wub1xuZHJpdmVycy9wY21jaWEvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX1BDTUNJQV9QWEEyWFgpXHRcdFx0JiM0Mzs9IHB4YTJ4eF9iYXNlLm8gJChweGEyeHgtb2JqLXkpXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZTo0MzpvYmotJChDT05GSUdfUENNQ0lBX1hYUzE1MDApXHRcdFx0JiM0Mzs9IHh4czE1MDBfc3Mub1xuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmM9Njc1PXN0YXRpYyB2b2lkIHBjbWNpYV9yZXF1ZXJ5KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKVxuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmMtNzI5LVxuZHJpdmVycy9wY21jaWEvZHMuYzo3MzA6I2lmZGVmIENPTkZJR19QQ01DSUFfTE9BRF9DSVNcbmRyaXZlcnMvcGNtY2lhL2RzLmMtNzMxLVxuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmM9NzQxPXN0YXRpYyBpbnQgcGNtY2lhX2xvYWRfZmlybXdhcmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldiwgY2hhciAqZmlsZW5hbWUpXG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYy03ODgtXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjc4OTojZWxzZSAvKiAhQ09ORklHX1BDTUNJQV9MT0FEX0NJUyAqL1xuZHJpdmVycy9wY21jaWEvZHMuYy03OTAtXG4tLVxuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmM9NzA1PUVYUE9SVF9TWU1CT0wocGNtY2lhX3JlcXVlc3RfaXJxKTtcbi0tXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYy03MDctXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYzo3MDg6I2lmZGVmIENPTkZJR19QQ01DSUFfUFJPQkVcbmRyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jLTcwOS1cbi0tXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYz03NjI9dm9pZCBwY21jaWFfY2xlYW51cF9pcnEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpXG4tLVxuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMtNzY3LVxuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmM6NzY4OiNlbHNlIC8qIENPTkZJR19QQ01DSUFfUFJPQkUgKi9cbmRyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jLTc2OS1cbi0tXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYz03NzU9dm9pZCBwY21jaWFfY2xlYW51cF9pcnEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpXG4tLVxuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMtNzgwLVxuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmM6NzgxOiNlbmRpZiAgLyogQ09ORklHX1BDTUNJQV9QUk9CRSAqL1xuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMtNzgyLVxuLS1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9NDE9SU5UX01PRFVMRV9QQVJNKHByb2JlX21lbSxcdDEpO1x0XHQvKiBtZW1vcnkgcHJvYmU/ICovXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjQyOiNpZmRlZiBDT05GSUdfUENNQ0lBX1BST0JFXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTQzLUlOVF9NT0RVTEVfUEFSTShwcm9iZV9pbyxcdDEpO1x0XHQvKiBJTyBwb3J0IHByb2JlPyAqL1xuLS1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9MTMyPXN0YXRpYyBpbnQgc3ViX2ludGVydmFsKHN0cnVjdCByZXNvdXJjZV9tYXAgKm1hcCwgdV9sb25nIGJhc2UsIHVfbG9uZyBudW0pXG4tLVxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy0xNzktXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjE4MDojaWZkZWYgQ09ORklHX1BDTUNJQV9QUk9CRVxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy0xODEtc3RhdGljIHZvaWQgZG9faW9fcHJvYmUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBiYXNlLFxuLS1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9NDAxPXN0YXRpYyBpbnQgZG9fbWVtX3Byb2JlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1X2xvbmcgYmFzZSwgdV9sb25nIG51bSxcbi0tXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTQ0Ny1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM6NDQ4OiNpZmRlZiBDT05GSUdfUENNQ0lBX1BST0JFXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTQ0OS1cbi0tXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jPTQ4MT1zdGF0aWMgaW50IHZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IHByb2JlX21hc2spXG4tLVxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy01MjctXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjUyODojZWxzZSAvKiBDT05GSUdfUENNQ0lBX1BST0JFICovXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTUyOS1cbi0tXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jPTUzNz1zdGF0aWMgaW50IHZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IHByb2JlX21hc2spXG4tLVxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy01NTEtXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjU1MjojZW5kaWYgLyogQ09ORklHX1BDTUNJQV9QUk9CRSAqL1xuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy01NTMtXG4tLVxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYz04OTE9c3RhdGljIGludCBhZGp1c3RfaW8oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBhY3Rpb24sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtOTE3LVx0XHR9XG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjkxODojaWZkZWYgQ09ORklHX1BDTUNJQV9QUk9CRVxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy05MTktXHRcdGlmIChwcm9iZV9pbylcbi0tXG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmM9NTM9c3RhdGljIGlycXJldHVybl90IHNvY19jb21tb25fcGNtY2lhX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXYpO1xuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jLTU0LVxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jOjU1OiNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHXG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMtNTYtXG4tLVxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oPTQ2PWludCBzb2NfcGNtY2lhX3JlZ3VsYXRvcl9zZXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QsXG4tLVxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oLTQ4LVxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oOjQ5OiNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHXG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmgtNTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI4MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBQQ25ldF9DUyBEcml2ZXIqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2hhcmVkIG1lbW9yeSB3aW5kb3cgaXMgYmVpbmcgc2V0IHVwIGluIHRoaXMgUENuZXQgZHJpdmVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoZXJlIHRoYXQgYHNldHVwX3NobWVtX3dpbmRvd2AgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jYC4gVGhhdCBmaWxlIGlzIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIFBDbmV0IENhcmQgU2VydmljZXMgKFBDTUNJQSkgaW50ZXJmYWNlLiBIb3BlZnVsbHksIHRyYWNpbmcgdGhlIGNhbGxzIHRvIGBzZXR1cF9zaG1lbV93aW5kb3dgIHdpbGwgcmV2ZWFsIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBhbmQgaG93IHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbiBpcyBiZWluZyBjb25maWd1cmVkIGZvciBkYXRhIHRyYW5zZmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXR1cF9zaG1lbV93aW5kb3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9MTAyPXN0YXRpYyBpbnQgc2V0X2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6MTAzOnN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMtMTA0LVx0XHRcdCAgICAgIGludCBzdG9wX3BnLCBpbnQgY21fb2Zmc2V0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9NTY1PXN0YXRpYyBpbnQgcGNuZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy02MDktICAgIGlmICgodXNlX3NobWVtID09IDApIHx8ICghaGFzX3NobWVtIFx1MDAyNlx1MDAyNiAodXNlX3NobWVtID09IC0xKSkgfHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYzo2MTA6XHQoc2V0dXBfc2htZW1fd2luZG93KGxpbmssIHN0YXJ0X3BnLCBzdG9wX3BnLCBjbV9vZmZzZXQpICE9IDApKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTYxMS1cdHNldHVwX2RtYV9jb25maWcobGluaywgc3RhcnRfcGcsIHN0b3BfcGcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYz0xNDAxPXN0YXRpYyB2b2lkIHNobWVtX2Jsb2NrX291dHB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTE0MTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6MTQxMTpzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTE0MTItXHRcdFx0ICAgICAgaW50IHN0b3BfcGcsIGludCBjbV9vZmZzZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMDQKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIFBDbmV0IERyaXZlciYjMzk7cyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHBjbmV0X3Byb2JlYCBhbmQgYHBjbmV0X2NvbmZpZ2AgZnVuY3Rpb25zIGFyZSB1c2VkIHdpdGhpbiB0aGUgYHBjbmV0X2NzLmNgIGRyaXZlciBmaWxlLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyB0aGUgZHJpdmVyIGlzIGZpbmRpbmcgYW5kIHNldHRpbmcgdXAgdGhlIFBDbmV0IG5ldHdvcmsgaW50ZXJmYWNlLiBNeSBmb2N1cyBpcyBvbiB0aGUgKmNhbGwqIHN0cnVjdHVyZSDigJMgaG93IGFyZSB0aGVzZSBmdW5jdGlvbnMgaW52b2tlZCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucz8gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzLCBhbnkgc3BlY2lmaWMgZGF0YSBiZWluZyBwYXNzZWQsIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGZ1bmN0aW9uIGNhbGxzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb24gdGhlIGluaXRpYWxpemF0aW9uIGFuZCBjb25maWd1cmF0aW9uIGZsb3cgb2YgdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmsgY2FyZCBkcml2ZXIuIFVuZGVyc3RhbmRpbmcgdGhpcyBjYWxsIHN0cnVjdHVyZSB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBpbnNpZ2h0IGludG8gaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0ICAgICAgSEFTX01JU0NfUkVHIHwgSEFTX0lCTV9NSVNDIH0sXG4gMTgxOlx0ICAgIHsgLyogUGFuYXNvbmljIFZFTDIxMSAqLyAweDBmZjAsIDB4MDAsIDB4ODAsIDB4NDUsXG4gMTgyOlx0ICAgICAgSEFTX01JU0NfUkVHIHwgSEFTX0lCTV9NSVNDIH0sXG4gMTgzOlx0ICAgIHsgLyogUHJlTWF4IFBFLTIwMCAqLyAweDA3ZjAsIDB4MDAsIDB4MjAsIDB4ZTAsIDAgfSxcbiAxODQ6XHQgICAgeyAvKiBSUFRJIEVQNDAwICovIDB4MDExMCwgMHgwMCwgMHg0MCwgMHg5NSwgMCB9LFxuIDE4NTpcdCAgICB7IC8qIFNDTSBFdGhlcm5ldCAqLyAweDBmZjAsIDB4MDAsIDB4MjAsIDB4Y2IsIDAgfSxcbiAxODY6XHQgICAgeyAvKiBTb2NrZXQgRUEgKi8gMHg0MDAwLCAweDAwLCAweGMwLCAweDFiLFxuIDE4NzpcdCAgICAgIERFTEFZX09VVFBVVCB8IEhBU19NSVNDX1JFRyB8IFVTRV9CSUdfQlVGIH0sXG4gMTg4Olx0ICAgIHsgLyogU29ja2V0IExQLUUgQ0YmIzQzOyAqLyAweDAxYzAsIDB4MDAsIDB4YzAsIDB4MWIsIDAgfSxcbiAxODk6XHQgICAgeyAvKiBTdXBlclNvY2tldCBSRTQ1MFQgKi8gMHgwMTEwLCAweDAwLCAweGUwLCAweDk4LCAwIH0sXG4gMTkwOlx0ICAgIHsgLyogVm9sa3RlayBOUEwtNDAyQ1QgKi8gMHgwMDYwLCAweDAwLCAweDQwLCAweDA1LCAwIH0sXG4gMTkxOlx0ICAgIHsgLyogTkVDIFBDLTk4MDFOLUoxMiAqLyAweDBmZjAsIDB4MDAsIDB4MDAsIDB4NGMsIDAgfSxcbiAxOTI6XHQgICAgeyAvKiBQQ01DSUEgVGVjaG5vbG9neSBPRU0gKi8gMHgwMWM4LCAweDAwLCAweGEwLCAweDBjLCAwIH1cbiAxOTM6XHR9O1xuIDE5NDpcdFxuIDE5NTpcdCNkZWZpbmUgTlJfSU5GT1x0XHRBUlJBWV9TSVpFKGh3X2luZm8pXG4gMTk2Olx0XG4gMTk3Olx0c3RhdGljIHN0cnVjdCBod19pbmZvIGRlZmF1bHRfaW5mbyA9IHsgMCwgMCwgMCwgMCwgMCB9O1xuIDE5ODpcdHN0YXRpYyBzdHJ1Y3QgaHdfaW5mbyBkbDEwMDE5X2luZm8gPSB7IDAsIDAsIDAsIDAsIElTX0RMMTAwMTl8SEFTX01JSSB9O1xuIDE5OTpcdHN0YXRpYyBzdHJ1Y3QgaHdfaW5mbyBkbDEwMDIyX2luZm8gPSB7IDAsIDAsIDAsIDAsIElTX0RMMTAwMjJ8SEFTX01JSSB9O1xuIDIwMDpcdFxuIDIwMTpcdHN0cnVjdCBwY25ldF9kZXYge1xuIDIwMjpcdFx0c3RydWN0IHBjbWNpYV9kZXZpY2VcdCpwX2RldjtcbiAyMDM6XHQgICAgdV9pbnRcdFx0ZmxhZ3M7XG4gMjA0Olx0ICAgIHZvaWRcdFx0X19pb21lbSAqYmFzZTtcbiAyMDU6XHQgICAgc3RydWN0IHRpbWVyX2xpc3RcdHdhdGNoZG9nO1xuIDIwNjpcdCAgICBpbnRcdFx0XHRzdGFsZSwgZmFzdF9wb2xsO1xuIDIwNzpcdCAgICB1X2NoYXJcdFx0cGh5X2lkO1xuIDIwODpcdCAgICB1X2NoYXJcdFx0ZXRoX3BoeSwgcG5hX3BoeTtcbiAyMDk6XHQgICAgdV9zaG9ydFx0XHRsaW5rX3N0YXR1cztcbiAyMTA6XHQgICAgdV9sb25nXHRcdG1paV9yZXNldDtcbiAyMTE6XHR9O1xuIDIxMjpcdFxuIDIxMzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHBjbmV0X2RldiAqUFJJVihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDIxNDpcdHtcbiAyMTU6XHRcdGNoYXIgKnAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDIxNjpcdFx0cmV0dXJuIChzdHJ1Y3QgcGNuZXRfZGV2ICopKHAgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBlaV9kZXZpY2UpKTtcbiAyMTc6XHR9XG4gMjE4Olx0XG4gMjE5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwY25ldF9uZXRkZXZfb3BzID0ge1xuIDIyMDpcdFx0Lm5kb19vcGVuXHRcdD0gcGNuZXRfb3BlbixcbiAyMjE6XHRcdC5uZG9fc3RvcFx0XHQ9IHBjbmV0X2Nsb3NlLFxuIDIyMjpcdFx0Lm5kb19zZXRfY29uZmlnXHRcdD0gc2V0X2NvbmZpZyxcbiAyMjM6XHRcdC5uZG9fc3RhcnRfeG1pdCBcdD0gZWlfc3RhcnRfeG1pdCxcbiAyMjQ6XHRcdC5uZG9fZ2V0X3N0YXRzXHRcdD0gZWlfZ2V0X3N0YXRzLFxuIDIyNTpcdFx0Lm5kb19ldGhfaW9jdGxcdFx0PSBlaV9pb2N0bCxcbiAyMjY6XHRcdC5uZG9fc2V0X3J4X21vZGVcdD0gZWlfc2V0X211bHRpY2FzdF9saXN0LFxuIDIyNzpcdFx0Lm5kb190eF90aW1lb3V0IFx0PSBlaV90eF90aW1lb3V0LFxuIDIyODpcdFx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgXHQ9IGV0aF9tYWNfYWRkcixcbiAyMjk6XHRcdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbiAyMzA6XHQjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbiAyMzE6XHRcdC5uZG9fcG9sbF9jb250cm9sbGVyIFx0PSBlaV9wb2xsLFxuIDIzMjpcdCNlbmRpZlxuIDIzMzpcdH07XG4gMjM0Olx0XG4gMjM1Olx0c3RhdGljIGludCBwY25ldF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaylcbiAyMzY6XHR7XG4gMjM3Olx0ICAgIHN0cnVjdCBwY25ldF9kZXYgKmluZm87XG4gMjM4Olx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gMjM5Olx0XG4gMjQwOlx0ICAgIGRldl9kYmcoXHUwMDI2bGluay1cdTAwM2VkZXYsIFwmIzM0O3BjbmV0X2F0dGFjaCgpXFxuXCYjMzQ7KTtcbiAyNDE6XHRcbiAyNDI6XHQgICAgLyogQ3JlYXRlIG5ldyBldGhlcm5ldCBkZXZpY2UgKi9cbiAyNDM6XHQgICAgZGV2ID0gX19hbGxvY19laV9uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwY25ldF9kZXYpKTtcbiAyNDQ6XHQgICAgaWYgKCFkZXYpIHJldHVybiAtRU5PTUVNO1xuIDI0NTpcdCAgICBpbmZvID0gUFJJVihkZXYpO1xuIDI0NjpcdCAgICBpbmZvLVx1MDAzZXBfZGV2ID0gbGluaztcbiAyNDc6XHQgICAgbGluay1cdTAwM2Vwcml2ID0gZGV2O1xuIDI0ODpcdFxuIDI0OTpcdCAgICBsaW5rLVx1MDAzZWNvbmZpZ19mbGFncyB8PSBDT05GX0VOQUJMRV9JUlEgfCBDT05GX0FVVE9fU0VUX0lPO1xuIDI1MDpcdFxuIDI1MTpcdCAgICBkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNnBjbmV0X25ldGRldl9vcHM7XG4gMjUyOlx0XG4gMjUzOlx0ICAgIHJldHVybiBwY25ldF9jb25maWcobGluayk7XG4gMjU0Olx0fSAvKiBwY25ldF9hdHRhY2ggKi9cbiAyNTU6XHRcbiAyNTY6XHRzdGF0aWMgdm9pZCBwY25ldF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspXG4gMjU3Olx0e1xuIDI1ODpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstXHUwMDNlcHJpdjtcbiAyNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgYXMgaWYgSSYjMzk7bSB0aGlua2luZyBpdDoKCioqUENNQ0lBIERyaXZlciBSZWdpc3RyYXRpb24gYW5kIFByb2JpbmcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGlzIFBDTUNJQSBzaXR1YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVycyBmb3IgdGhlc2UgZGV2aWNlcyBhcmUgYWN0dWFsbHkgaG9va2VkIGludG8gdGhlIHN5c3RlbSBhbmQsIGNydWNpYWxseSwgaG93IHRoZSBkZXZpY2VzIHRoZW1zZWx2ZXMgYXJlIGRpc2NvdmVyZWQgYW5kIGluaXRpYWxpemVkLiBUaGUga2V5IGhlcmUgaXMgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgc2VhcmNoIGZvciB0aGF0IGNvcmUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIOKAkyBJJiMzOTttIHRoaW5raW5nIGVpdGhlciBgcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcmAgb3IgbWF5YmUganVzdCBzb21ldGhpbmcgbGlrZSBgcGNtY2lhX2RyaXZlcmAgYXMgYSBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9uLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludCBJIG5lZWQgdG8gZm9sbG93IHRoZSB0cmFpbCBvZiBob3cgZXZlcnl0aGluZyBnZXRzIHRpZWQgdG9nZXRoZXIuIE9uY2UgSSBmaW5kIHRoYXQgcmVnaXN0cmF0aW9uIHBvaW50LCB0aGUgcHJvYmluZyBsb2dpYyBzaG91bGQgYmVjb21lIG11Y2ggY2xlYXJlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BjbWNpYV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9MTcwOT1zdGF0aWMgc3RydWN0IHBjbWNpYV9kcml2ZXIgcGNuZXRfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0xNzE3LX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6MTcxODptb2R1bGVfcGNtY2lhX2RyaXZlcihwY25ldF9kcml2ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI1MQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQQ01DSUEgRHJpdmVyIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBwY25ldF9jc2AsIHdoaWNoIEkgdW5kZXJzdGFuZCBpcyBhIFBDTUNJQSBkcml2ZXIsIHJlcHJlc2VudGVkIGFzIGEgYHN0cnVjdCBwY21jaWFfZHJpdmVyYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB3aGV0aGVyIFBDTUNJQSBoYXJkd2FyZSDigJMgdGhhdCYjMzk7cyBQQyBDYXJkIG9yIENhcmRCdXMg4oCTIGNhbiBhY3R1YWxseSBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXAuIFlvdSBrbm93LCBRRU1VIG9yIGV2ZW4gR0NFIGZvciB0aGF0IG1hdHRlci4KClRoZSBiaWcgcXVlc3Rpb246IERvZXMgUUVNVSBvciBzeXprYWxsZXIgaGF2ZSBhbnkgc29saWQgUENNQ0lBIGRldmljZSBlbXVsYXRpb24gb3IgZnV6emluZyBjYXBhYmlsaXRpZXM/IEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgcHNldWRvLXN5c2NhbGxzIG9yIHZpcnR1YWwgZGV2aWNlcyByZWxhdGVkIHRvIFBDTUNJQSB3aXRoaW4gc3l6a2FsbGVyLiBPciwgbW9yZSBnZW5lcmFsbHksIGlmIFFFTVUgaXRzZWxmIGVtdWxhdGVzIFBDTUNJQSBhbmQgYHBjbWNpYV9zb2NrZXRgIGF0IGFsbC4KCkkgc3VwcG9zZSBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBzeXprYWxsZXIgc3BlY2lmaWNhdGlvbnMgb3IgZGlnIHRocm91Z2ggdGhlIGtlcm5lbCBkcml2ZXJzIGZvciBhbnkgUENNQ0lBIHJlbGF0ZWQgYml0cy4gSXMgdGhpcyBldmVuIHNvbWV0aGluZyB1c2Vyc3BhY2UgY2FuIG1hbmlwdWxhdGUsIG9yIGlzIFBDTUNJQSBmdW5kYW1lbnRhbGx5IGEgbGVnYWN5IGhhcmR3YXJlIGJ1cz8KClJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9wY21jaWEvYCBkaXJlY3RvcnkgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIFRoYXQmIzM5O3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNtY2lhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YmNtNjN4eF9wY21jaWEuYyYjMzQ7LAogICAgJiMzNDtiY202M3h4X3BjbWNpYS5oJiMzNDssCiAgICAmIzM0O2NhcmRidXMuYyYjMzQ7LAogICAgJiMzNDtjaXJydXMuaCYjMzQ7LAogICAgJiMzNDtjaXN0cGwuYyYjMzQ7LAogICAgJiMzNDtjcy5jJiMzNDssCiAgICAmIzM0O2NzX2ludGVybmFsLmgmIzM0OywKICAgICYjMzQ7ZGIxeHh4X3NzLmMmIzM0OywKICAgICYjMzQ7ZHMuYyYjMzQ7LAogICAgJiMzNDtlbGVjdHJhX2NmLmMmIzM0OywKICAgICYjMzQ7aTgyMzY1LmgmIzM0OywKICAgICYjMzQ7bWF4MTYwMC5jJiMzNDssCiAgICAmIzM0O21heDE2MDAuaCYjMzQ7LAogICAgJiMzNDtvMm1pY3JvLmgmIzM0OywKICAgICYjMzQ7b21hcF9jZi5jJiMzNDssCiAgICAmIzM0O3BjbWNpYV9jaXMuYyYjMzQ7LAogICAgJiMzNDtwY21jaWFfcmVzb3VyY2UuYyYjMzQ7LAogICAgJiMzNDtwZDY3MjkuYyYjMzQ7LAogICAgJiMzNDtwZDY3MjkuaCYjMzQ7LAogICAgJiMzNDtweGEyeHhfYmFzZS5jJiMzNDssCiAgICAmIzM0O3B4YTJ4eF9iYXNlLmgmIzM0OywKICAgICYjMzQ7cHhhMnh4X3NoYXJwc2wuYyYjMzQ7LAogICAgJiMzNDtyaWNvaC5oJiMzNDssCiAgICAmIzM0O3JzcmNfbWdyLmMmIzM0OywKICAgICYjMzQ7cnNyY19ub25zdGF0aWMuYyYjMzQ7LAogICAgJiMzNDtzYTExMDBfZ2VuZXJpYy5jJiMzNDssCiAgICAmIzM0O3NhMTEwMF9nZW5lcmljLmgmIzM0OywKICAgICYjMzQ7c2ExMTAwX2gzNjAwLmMmIzM0OywKICAgICYjMzQ7c2ExMTExX2dlbmVyaWMuYyYjMzQ7LAogICAgJiMzNDtzYTExMTFfZ2VuZXJpYy5oJiMzNDssCiAgICAmIzM0O3NhMTExMV9qb3JuYWRhNzIwLmMmIzM0OywKICAgICYjMzQ7c2ExMTExX25lcG9uc2V0LmMmIzM0OywKICAgICYjMzQ7c2ExMXh4X2Jhc2UuYyYjMzQ7LAogICAgJiMzNDtzYTExeHhfYmFzZS5oJiMzNDssCiAgICAmIzM0O3NvY19jb21tb24uYyYjMzQ7LAogICAgJiMzNDtzb2NfY29tbW9uLmgmIzM0OywKICAgICYjMzQ7c29ja2V0X3N5c2ZzLmMmIzM0OywKICAgICYjMzQ7dGkxMTN4LmgmIzM0OywKICAgICYjMzQ7dG9waWMuaCYjMzQ7LAogICAgJiMzNDt2ZzQ2OC5oJiMzNDssCiAgICAmIzM0O3h4czE1MDBfc3MuYyYjMzQ7LAogICAgJiMzNDt5ZW50YV9zb2NrZXQuYyYjMzQ7LAogICAgJiMzNDt5ZW50YV9zb2NrZXQuaCYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogbnVsbAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTM4CgkJCQkJCQlvdXRwdXQ6IDExNAoJCQkJCQkJdGhvdWdodHM6IDk3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQQ01DSUEgRXRoZXJuZXQgRHJpdmVyIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGV4cGVydCBpbnR1aXRpb24gaXMgcGluZ2luZyBtZSBhYm91dCBsZWdhY3kgaGFyZHdhcmUuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgd2l0aCBgcGNuZXRfY3MuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaGFuZGxlcyBQQ01DSUEgTkUyMDAwIEV0aGVybmV0IGNhcmRzIOKAkyBhbmNpZW50IHRlY2hub2xvZ3ksIGJ1dCBzdGlsbCBpbXBvcnRhbnQgaW4gdGhlIGhpc3RvcmljYWwgY29udGV4dCBvZiBzeXN0ZW0gZGVzaWduLgoKRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudHMuIFRoZSByZWxldmFudCBQQ01DSUEgc29ja2V0IGRyaXZlcnMgSSBoYXZlIHRvIHRoaW5rIGFib3V0IGhlcmUgYXJlIHRoZSBsaWtlcyBvZiBgeWVudGFfc29ja2V0LmNgIHdoaWNoIG1hbmFnZXMgUENJLXRvLUNhcmRCdXMgYnJpZGdlcywgYWxvbmcgd2l0aCBgaTgyMzY1YCwgYHBkNjcyOWAsIGFuZCB2YXJpb3VzIEFSTSBTb0MgcGNtY2lhIGJyaWRnZXMgKGBzYTExMDBgLCBgc2ExMTExYCwgYHB4YTJ4eGAsIGBiY202M3h4YCwgYG9tYXBfY2ZgKS4gTm9uZSBvZiB0aGVzZSBjb250cm9sbGVycyBhcmUgZW11bGF0ZWQgaW4gYSBzdGFuZGFyZCBRRU1VIHg4Nl82NCBWTSBvciBHQ0UgaW5zdGFuY2UsIHdoaWNoIGlzIHRoZSBjb3JuZXJzdG9uZSBvZiBvdXIgZnV6emluZyBlbnZpcm9ubWVudC4gRm9yZ2V0IFBDTUNJQSBldGhlcm5ldCwgdGhleSBhcmUgKm5ldmVyKiBwYXJ0IG9mIHRoaXMgdmlydHVhbCBsYW5kc2NhcGUuCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBTZWN0aW9uIDIgb2Ygb3VyIGd1aWRlbGluZXMuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlOyBpdCYjMzk7cyB0aGUgbGl0bXVzIHRlc3QuIFdlIG5lZWQgdG8gc2VlIGlmIHRoZSBoYXJkd2FyZSBpbiBxdWVzdGlvbiBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIEFuZCB0aGF0JiMzOTtzIHdoZW4gaXQgaGl0cyBtZTogUENNQ0lBIGNhcmRzIGFyZSBwaHlzaWNhbCBsZWdhY3kgaGFyZHdhcmUgKFBDIENhcmQgLyAxNi1iaXQgUENNQ0lBIC8gQ2FyZEJ1cykuIE5vLCB3ZSBoYXZlIG5vdGhpbmcuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHBsdWdnaW5nIGEgY2FyZCBpbnRvIGEgcGh5c2ljYWwgc29ja2V0LgoKU28sIGlzIGBwY25ldF9jc2AgYW4gZXRoZXJuZXQgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ01DSUEgTkUyMDAwIGNhcmRzPyBZZXMhIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgY29uZmlybSB0aGlzOiAmIzM0O05FMjAwMCBjb21wYXRpYmxlIFBDTUNJQSBzdXBwb3J0JiMzNDsuIFBlcmZlY3QuCgpOb3csIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYHNldHVwX3NobWVtX3dpbmRvd2AsIHRoZSBjb2RlIHRoYXQmIzM5O3MgYmVpbmcgcGF0Y2hlZCwgKnJlcXVpcmVzKiB0aGF0IFBDTUNJQSBkZXZpY2UuIENhbiBpdCBiZSByZWFjaGVkIHdpdGhvdXQgdGhlIHBoeXNpY2FsIHRoaW5nPyBJIG5lZWQgdG8gYW5hbHl6ZSBgcGNuZXRfY3MuY2AgZGlyZWN0bHkuIGBwY25ldF9wcm9iZWAgaXMgb25seSBjYWxsZWQgaWYgYSBjYXJkIGlzIGF0dGFjaGVkLCBhbmQgYHNldHVwX3NobWVtX3dpbmRvd2AgaXMgY2FsbGVkIGR1cmluZyBwcm9iZS4gVGhlcmVmb3JlLCBpdCYjMzk7cyB1bnJlYWNoYWJsZSB3aXRob3V0IHRoYXQgcGh5c2ljYWwgc29ja2V0IGFuZCBjYXJkLiBCaW5nby4KCkxldCYjMzk7cyBkaXNzZWN0IHRoZSBwYXRjaCBpdHNlbGY6IEl0IGZpeGVzIGEgd2luZG93IGxlYWsgaW4gYHNldHVwX3NobWVtX3dpbmRvd2Agd2hlbiBgcGNtY2lhX3JlcXVlc3Rfd2luZG93KClgIHN1Y2NlZWRlZCBlYXJsaWVyLiBJbiBwYXJ0aWN1bGFyLCBpdCBpcyBjYWxsaW5nIGBwY21jaWFfbWFwX21lbV9wYWdlKClgIGFuZCBgcGNtY2lhX3JlbGVhc2Vfd2luZG93KClgLgoKV2l0aCB0aGUgZmFpbHVyZSBpbiBgaW9yZW1hcGAgb3IgYHBjbWNpYV9tYXBfbWVtX3BhZ2UoKWAsIHdlIGBnb3RvIHJlbGVhc2VgLCBhbmQgdGhlIGtleSBoZXJlIGlzIGl0IHJlbGVhc2VzIHRoZSByZXNvdXJjZXM6IGBwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbGluay0mZ3Q7cmVzb3VyY2VbM10pO2AuIFRoaXMgaXMgYSBjbGFzc2ljIGVycm9yIGhhbmRsaW5nIGNvcnJlY3Rpb24gaW4gcmVzb3VyY2UgbWFuYWdlbWVudC4KCk5vdywgSSYjMzk7bSBjb25maWRlbnQuIFNpbmNlIFBDTUNJQSBldGhlcm5ldCBjYXJkcyAoYHBjbmV0X2NzYCkgKnJlcXVpcmUqIHBoeXNpY2FsIFBDTUNJQSAvIFBDLWNhcmQgaGFyZHdhcmUgdGhhdCYjMzk7cyBhYnNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIHRoaXMgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIEl0JiMzOTtzIGEgdGV4dGJvb2sgZXhhbXBsZS4KClRpbWUgdG8gYXBwbHkgdGhlIGd1aWRlbGluZXM6CgoqICAgKipTZWN0aW9uIDIqKjoKICAgICogICBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6IF9DaGVja18KICAgICogICBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6IF9Eb2VzbiYjMzk7dCBhcHBseSBoZXJlXwoKVGh1cywgdGhlIHZlcmRpY3Q6IGBXb3J0aEZ1enppbmc6IGZhbHNlYCwgYEZvY3VzU3ltYm9sczogW11gLCBgRW5hYmxlQ29uZmlnczogW11gLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgcGF0Y2ggaXMgaW4gYSBkcml2ZXIgZm9yIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IGVtdWxhdGVkLiBJJiMzOTttIGNhbGxpbmcgaXQgYSBkYXkuIFRpbWUgdG8gc3VibWl0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHNldHVwX3NobWVtX3dpbmRvdygpIHdpdGhpbiB0aGUgcGNuZXRfY3MgZHJpdmVyLCB3aGljaCBzdXBwb3J0cyBsZWdhY3kgUENNQ0lBIE5FMjAwMCBuZXR3b3JrIGFkYXB0ZXJzIChDT05GSUdfUENNQ0lBX1BDTkVUKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENNQ0lBIGhhcmR3YXJlIHNvY2tldCBjb250cm9sbGVycyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgb3IgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gc2V0dXBfc2htZW1fd2luZG93KCkgd2l0aGluIHRoZSBwY25ldF9jcyBkcml2ZXIsIHdoaWNoIHN1cHBvcnRzIGxlZ2FjeSBQQ01DSUEgTkUyMDAwIG5ldHdvcmsgYWRhcHRlcnMgKENPTkZJR19QQ01DSUFfUENORVQpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ01DSUEgaGFyZHdhcmUgc29ja2V0IGNvbnRyb2xsZXJzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBvciBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6MTUuMDY0MDE5NjQzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQxMzU1NzYxNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBzZXR1cF9zaG1lbV93aW5kb3coKSB3aXRoaW4gdGhlIHBjbmV0X2NzIGRyaXZlciwgd2hpY2ggc3VwcG9ydHMgbGVnYWN5IFBDTUNJQSBORTIwMDAgbmV0d29yayBhZGFwdGVycyAoQ09ORklHX1BDTUNJQV9QQ05FVCkuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDTUNJQSBoYXJkd2FyZSBzb2NrZXQgY29udHJvbGxlcnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIG9yIHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjA0OjE1LjA2NDAyNDkwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwOTA1NjU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU0MTNhYmI2MTc5MGEyZTQ0N2I0ZDY3NDgxZDQ5NjYyMzA5ZTE4OTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDE6MDQ6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXFxuaW5kZXggMTlmOWM1ZGIzZjNiYS4uMGNmM2MwZjNjZWQ3YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNcXG5AQCAtMTQzNCwxNCArMTQzNCwxNCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxcbiAgICAgb2Zmc2V0IC09IG9mZnNldCAlIHdpbmRvd19zaXplO1xcbiAgICAgcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLVxcdTAwM2VyZXNvdXJjZVszXSwgb2Zmc2V0KTtcXG4gICAgIGlmIChyZXQpXFxuLVxcdCAgICBnb3RvIGZhaWxlZDtcXG4rXFx0ICAgIGdvdG8gcmVsZWFzZTtcXG4gXFxuICAgICAvKiBUcnkgc2NyaWJibGluZyBvbiB0aGUgYnVmZmVyICovXFxuICAgICBpbmZvLVxcdTAwM2ViYXNlID0gaW9yZW1hcChsaW5rLVxcdTAwM2VyZXNvdXJjZVszXS1cXHUwMDNlc3RhcnQsXFxuIFxcdFxcdFxcdHJlc291cmNlX3NpemUobGluay1cXHUwMDNlcmVzb3VyY2VbM10pKTtcXG4gICAgIGlmICh1bmxpa2VseSghaW5mby1cXHUwMDNlYmFzZSkpIHtcXG4gXFx0ICAgIHJldCA9IC1FTk9NRU07XFxuLVxcdCAgICBnb3RvIGZhaWxlZDtcXG4rXFx0ICAgIGdvdG8gcmVsZWFzZTtcXG4gICAgIH1cXG4gXFxuICAgICBmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKFRYX1BBR0VTXFx1MDAzY1xcdTAwM2M4KTsgaSArPSAyKVxcbkBAIC0xNDUyLDkgKzE0NTIsOCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxcbiAgICAgcGNuZXRfcmVzZXRfODM5MChkZXYpO1xcbiAgICAgaWYgKGkgIT0gKFRYX1BBR0VTXFx1MDAzY1xcdTAwM2M4KSkge1xcbiBcXHRpb3VubWFwKGluZm8tXFx1MDAzZWJhc2UpO1xcbi1cXHRwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbGluay1cXHUwMDNlcmVzb3VyY2VbM10pO1xcbiBcXHRpbmZvLVxcdTAwM2ViYXNlID0gTlVMTDtcXG4tXFx0Z290byBmYWlsZWQ7XFxuK1xcdGdvdG8gcmVsZWFzZTtcXG4gICAgIH1cXG4gXFxuICAgICBlaV9zdGF0dXMubWVtID0gaW5mby1cXHUwMDNlYmFzZSArIG9mZnNldDtcXG5AQCAtMTQ3NSw2ICsxNDc0LDggQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcXG4gICAgIGluZm8tXFx1MDAzZWZsYWdzIHw9IFVTRV9TSE1FTTtcXG4gICAgIHJldHVybiAwO1xcbiBcXG4rcmVsZWFzZTpcXG4rXFx0cGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstXFx1MDAzZXJlc291cmNlWzNdKTtcXG4gZmFpbGVkOlxcbiAgICAgcmV0dXJuIDE7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6MTYuODczNzUzNTg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MjMyNTgyNzUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gc2V0dXBfc2htZW1fd2luZG93KCkgd2l0aGluIHRoZSBwY25ldF9jcyBkcml2ZXIsIHdoaWNoIHN1cHBvcnRzIGxlZ2FjeSBQQ01DSUEgTkUyMDAwIG5ldHdvcmsgYWRhcHRlcnMgKENPTkZJR19QQ01DSUFfUENORVQpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ01DSUEgaGFyZHdhcmUgc29ja2V0IGNvbnRyb2xsZXJzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBvciBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU0MTNhYmI2MTc5MGEyZTQ0N2I0ZDY3NDgxZDQ5NjYyMzA5ZTE4OTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMTowNDoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuY1xuaW5kZXggMTlmOWM1ZGIzZjNiYS4uMGNmM2MwZjNjZWQ3YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXG5AQCAtMTQzNCwxNCArMTQzNCwxNCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxuICAgICBvZmZzZXQgLT0gb2Zmc2V0ICUgd2luZG93X3NpemU7XG4gICAgIHJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay1cdTAwM2VyZXNvdXJjZVszXSwgb2Zmc2V0KTtcbiAgICAgaWYgKHJldClcbi1cdCAgICBnb3RvIGZhaWxlZDtcbitcdCAgICBnb3RvIHJlbGVhc2U7XG4gXG4gICAgIC8qIFRyeSBzY3JpYmJsaW5nIG9uIHRoZSBidWZmZXIgKi9cbiAgICAgaW5mby1cdTAwM2ViYXNlID0gaW9yZW1hcChsaW5rLVx1MDAzZXJlc291cmNlWzNdLVx1MDAzZXN0YXJ0LFxuIFx0XHRcdHJlc291cmNlX3NpemUobGluay1cdTAwM2VyZXNvdXJjZVszXSkpO1xuICAgICBpZiAodW5saWtlbHkoIWluZm8tXHUwMDNlYmFzZSkpIHtcbiBcdCAgICByZXQgPSAtRU5PTUVNO1xuLVx0ICAgIGdvdG8gZmFpbGVkO1xuK1x0ICAgIGdvdG8gcmVsZWFzZTtcbiAgICAgfVxuIFxuICAgICBmb3IgKGkgPSAwOyBpIFx1MDAzYyAoVFhfUEFHRVNcdTAwM2NcdTAwM2M4KTsgaSArPSAyKVxuQEAgLTE0NTIsOSArMTQ1Miw4IEBAIHN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsXG4gICAgIHBjbmV0X3Jlc2V0XzgzOTAoZGV2KTtcbiAgICAgaWYgKGkgIT0gKFRYX1BBR0VTXHUwMDNjXHUwMDNjOCkpIHtcbiBcdGlvdW5tYXAoaW5mby1cdTAwM2ViYXNlKTtcbi1cdHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLCBsaW5rLVx1MDAzZXJlc291cmNlWzNdKTtcbiBcdGluZm8tXHUwMDNlYmFzZSA9IE5VTEw7XG4tXHRnb3RvIGZhaWxlZDtcbitcdGdvdG8gcmVsZWFzZTtcbiAgICAgfVxuIFxuICAgICBlaV9zdGF0dXMubWVtID0gaW5mby1cdTAwM2ViYXNlICsgb2Zmc2V0O1xuQEAgLTE0NzUsNiArMTQ3NCw4IEBAIHN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsXG4gICAgIGluZm8tXHUwMDNlZmxhZ3MgfD0gVVNFX1NITUVNO1xuICAgICByZXR1cm4gMDtcbiBcbityZWxlYXNlOlxuK1x0cGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstXHUwMDNlcmVzb3VyY2VbM10pO1xuIGZhaWxlZDpcbiAgICAgcmV0dXJuIDE7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6MTYuODczNzU1MDk1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI5NjU1MTg3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQgZGVjaWRlIGlmIGl0J3Mgd29ydGggdGhlIGZ1enppbmcgZWZmb3J0LiBUaGUgbG9jYXRpb24gaXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBkcml2ZXIgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUuIEEgcXVpY2sgY2hlY2sgdGVsbHMgbWUgaXQncyB0aGUgUENNQ0lBL0NhcmQgU2VydmljZXMgZHJpdmVyIGZvciBOUzgzOTAtYmFzZWQgRXRoZXJuZXQgY2FyZHMsIHNwZWNpZmljYWxseSBgcGNuZXRfY3NgLiBOb3cgdGhlIGtleSBxdWVzdGlvbjogaXMgUENNQ0lBIHNvbWV0aGluZyB0aGF0J3MgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVT8gSSBoYXZlIHRvIHJlbWVtYmVyIC0gaXMgUENNQ0lBIGhhcmR3YXJlIG9yIGlzIGl0IGVtdWxhdGVkPyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlcyDigJMgcHJvYmFibHkgYGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZ2Agb3IgbWF5YmUgc29tZXRoaW5nIGluIGBkcml2ZXJzL3BjbWNpYS9gIOKAkyBvciBqdXN0IGRvIGEgcXVpY2sgYGdyZXBwZXJgIHNlYXJjaCB0byBiZSBzdXJlLiBUaGlzIHdpbGwgZGljdGF0ZSBob3cgZmVhc2libGUgdGVzdGluZyB0aGlzIHBhdGNoIGFjdHVhbGx5IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6MjkuODM5Mjc1ODExWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjc2NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBDTUNJQV9QQ05FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWc9MTIzPWNvbmZpZyBBUE5FXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWctMTMzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZzoxMzQ6Y29uZmlnIFBDTUNJQV9QQ05FVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMzUtXFx0dHJpc3RhdGUgXFxcIk5FMjAwMCBjb21wYXRpYmxlIFBDTUNJQSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfTkUyS19QQ0kpICs9IG5lMmstcGNpLm8gODM5MC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfUENNQ0lBX1BDTkVUKSArPSBwY25ldF9jcy5vIDgzOTAub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvTWFrZWZpbGUtMTUtb2JqLSQoQ09ORklHX1NUTklDKSArPSBzdG5pYy5vIDgzOTAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTowNDoyOS45MDE1NTU4ODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTM4ODkwNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIDgzOTAgS2NvbmZpZyBGaWxlKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSA4MzkwIGRyaXZlciBjb25maWd1cmF0aW9uLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWdgLCBhcm91bmQgbGluZSAxMzQuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgd2UnbGwgZmluZCB0aGUgY29yZSBvcHRpb25zIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgc3BlY2lmaWMgZmVhdHVyZSBvciB2YXJpYW50IEknbSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gQ291bGQgYmUgYSBuZXcgTklDLCBhIHNwZWNpZmljIGludGVycnVwdCBjb25maWd1cmF0aW9uLCBvciBtYXliZSBldmVuIGEgZGVidWdnaW5nIGZsYWcuIEVpdGhlciB3YXksIHRoYXQgS2NvbmZpZyBmaWxlIGlzIHRoZSBwbGFjZSB0byBzdGFydCBwZWVsaW5nIGJhY2sgdGhlIGxheWVycyBvbiBob3cgdGhpcyBhbmNpZW50LCB5ZXQgc3RpbGwgcmVsZXZhbnQsIGFyY2hpdGVjdHVyZSBpcyBoYW5kbGVkIGJ5IHRoZSBrZXJuZWwuIExpbmUgMTM0IGlzIGEgZGVjZW50IHBsYWNlIHRvIGJlZ2luIGFzIEkgdXN1YWxseSBmaW5kIHRoZSBvcHRpb25zIEknbSBsb29raW5nIGZvciBhcmUgYXJvdW5kIHRoaXMgYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg4NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjA0OjM1LjQ0MDQ0ODM3OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFxuIDEzMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTMyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgYXBuZS5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0Y29uZmlnIFBDTUNJQV9QQ05FVFxcbiAxMzU6XFx0XFx0dHJpc3RhdGUgXFxcIk5FMjAwMCBjb21wYXRpYmxlIFBDTUNJQSBzdXBwb3J0XFxcIlxcbiAxMzY6XFx0XFx0ZGVwZW5kcyBvbiBQQ01DSUEgXFx1MDAyNlxcdTAwMjYgSEFTX0lPUE9SVFxcbiAxMzc6XFx0XFx0c2VsZWN0IENSQzMyXFxuIDEzODpcXHRcXHRoZWxwXFxuIDEzOTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBhdHRhY2ggYW4gTkUyMDAwIGNvbXBhdGlibGUgUENNQ0lBXFxuIDE0MDpcXHRcXHQgIChQQy1jYXJkKSBFdGhlcm5ldCBvciBGYXN0IEV0aGVybmV0IGNhcmQgdG8geW91ciBjb21wdXRlci5cXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcXG4gMTQzOlxcdFxcdCAgY2FsbGVkIHBjbmV0X2NzLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTQ0OlxcdFxcbiAxNDU6XFx0Y29uZmlnIFNUTklDXFxuIDE0NjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmF0aW9uYWwgRFA4MzkwMkFWICBzdXBwb3J0XFxcIlxcbiAxNDc6XFx0XFx0ZGVwZW5kcyBvbiBTVVBFUkhcXG4gMTQ4OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAxNDk6XFx0XFx0aGVscFxcbiAxNTA6XFx0XFx0ICBTdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBEUDgzOTAyQVZcXG4gMTUxOlxcdFxcdCAgU1QtTklDIFNlcmlhbCBOZXR3b3JrIEludGVyZmFjZSBDb250cm9sbGVyIGZvciBUd2lzdGVkIFBhaXIuICBUaGlzXFxuIDE1MjpcXHRcXHQgIGlzIGEgMTBNYml0L3NlYyBFdGhlcm5ldCBjb250cm9sbGVyLiAgUHJvZHVjdCBvdmVydmlldyBhbmQgc3BlY3MgYXRcXG4gMTUzOlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL0RQL0RQODM5MDJBLmh0bWxcXHUwMDNlLlxcbiAxNTQ6XFx0XFxuIDE1NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE1NjpcXHRcXG4gMTU3OlxcdGNvbmZpZyBaT1JSTzgzOTBcXG4gMTU4OlxcdFxcdHRyaXN0YXRlIFxcXCJab3JybyBOUzgzOTAtYmFzZWQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gMTU5OlxcdFxcdGRlcGVuZHMgb24gWk9SUk9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6MzUuNDQwNTE0OTM4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMzMzk0MTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgUENNQ0lBIEZ1enppbmcgRmVhc2liaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBQQ01DSUEgc2l0dWF0aW9uLiBNeSBmaXJzdCBxdWVzdGlvbiBpcywgY2FuIHdlIGV2ZW4gKmNvbnNpZGVyKiBmdXp6aW5nIFBDTUNJQSBkZXZpY2VzPyBBcmUgdGhleSBzb21ldGhpbmcgdGhhdCBRRU1VIG9yIHN5emthbGxlciBjYW4gaGFuZGxlLCBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGEgY29tcGxldGVseSBwaHlzaWNhbCwgbGVnYWN5IGJ1cyB0aGF0J3MgYSBkZWFkIGVuZCBmb3IgdXM/XG5cblRoZSByZWFsIHN0aWNraW5nIHBvaW50IGhlcmUgaXMgZW11bGF0aW9uLiBDYW4gd2UgcHJvYmUgb3IgZW11bGF0ZSB0aGVzZSBQQ01DSUEvUEMgY2FyZCBkZXZpY2VzPyBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgbGV0J3MgY29uc3VsdCBTZWN0aW9uIDIgb2YgdGhlIHRyaWFnZSBwaGlsb3NvcGh5LiBTcGVjaWZpY2FsbHkgdGhlIFwibmVnYXRpdmUgY3JpdGVyaWEuXCIgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGltbWVkaWF0ZWx5IGZhbGwgaW50byBhIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgc2NlbmFyaW8uXG5cblJlbWVtYmVyLCB0aGUgcGhpbG9zb3BoeSBzYXlzIHdlJ3JlICpvdXQqIGlmIHRoZSBjb2RlIHJlbGllcyBvbiBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS5cIiBUaGlzIHNwZWNpZmljYWxseSBjYWxscyBvdXQgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMgYW5kIGRyaXZlcnMgdGhhdCBkZW1hbmQgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIElzIFBDTUNJQSBpbiAqdGhhdCogY2F0ZWdvcnk/IEl0J3MgcmVhbGx5IGRvd24gdG8gd2hldGhlciBpdCBjYW4gYmUgYWNjZXNzZWQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LlxuXG5TbywgdGhlIGtleSBxdWVzdGlvbiBpczogSXMgUENNQ0lBIGVtdWxhdGVkIGluIFFFTVU/IERvZXMgYSB2aXJ0dWFsIFBDTUNJQSBidXMgb3IgZHJpdmVyIGV4aXN0IGluIExpbnV4PyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBQQ01DSUEgcmVxdWlyZXMgYSAqcGh5c2ljYWwqIFBDTUNJQSBzb2NrZXQgY29udHJvbGxlci4gU3R1ZmYgbGlrZSBpODIzNjUsIHBkNjcyOSwgb3IgeWVudGFfc29ja2V0IGlzIGEgYmFkIHNpZ24uXG5cblRpbWUgdG8gYnJlYWsgb3V0IHRoZSBrZXJuZWwgY29kZS4gTGV0J3MgYGdyZXBgIGZvciBcInBjbWNpYVwiIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdCdzIGhhbmRsZWQgKG9yICpub3QqIGhhbmRsZWQpIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYzNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjA0OjM5Ljc3NDQ1OTQxOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjM4MzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfUENNQ0lBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvcGNtY2lhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjbWNpYS9NYWtlZmlsZT0xMD1wY21jaWEteVxcdFxcdFxcdFxcdFxcdCs9IGRzLm8gcGNtY2lhX3Jlc291cmNlLm8gY2lzdHBsLm8gcGNtY2lhX2Npcy5vXFxuZHJpdmVycy9wY21jaWEvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1BDTUNJQSlcXHRcXHRcXHRcXHQrPSBwY21jaWEub1xcbmRyaXZlcnMvcGNtY2lhL01ha2VmaWxlLTEyLVxcbi0tXFxuZHJpdmVycy9wY21jaWEvTWFrZWZpbGU9MjI9b2JqLSQoQ09ORklHX1BENjcyOSlcXHRcXHRcXHRcXHQrPSBwZDY3Mjkub1xcbmRyaXZlcnMvcGNtY2lhL01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19QQ01DSUFfU09DX0NPTU1PTilcXHRcXHRcXHQrPSBzb2NfY29tbW9uLm9cXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfUENNQ0lBX1NBMTFYWF9CQVNFKVxcdFxcdCs9IHNhMTF4eF9iYXNlLm9cXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfUENNQ0lBX1NBMTEwMClcXHRcXHRcXHQrPSBzYTExMDBfY3Mub1xcbmRyaXZlcnMvcGNtY2lhL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19QQ01DSUFfU0ExMTExKVxcdFxcdFxcdCs9IHNhMTExMV9jcy5vXFxuZHJpdmVycy9wY21jaWEvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX1BDTUNJQV9CQ002M1hYKVxcdFxcdFxcdCs9IGJjbTYzeHhfcGNtY2lhLm9cXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZS0yOC1vYmotJChDT05GSUdfT01BUF9DRilcXHRcXHRcXHRcXHQrPSBvbWFwX2NmLm9cXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZT0yOT1vYmotJChDT05GSUdfRUxFQ1RSQV9DRilcXHRcXHRcXHQrPSBlbGVjdHJhX2NmLm9cXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQpXFx0XFx0Kz0gZGIxeHh4X3NzLm9cXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfUENNQ0lBX01BWDE2MDApXFx0XFx0XFx0Kz0gbWF4MTYwMC5vXFxuZHJpdmVycy9wY21jaWEvTWFrZWZpbGUtMzItXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZT00MT1weGEyeHgtb2JqLSQoQ09ORklHX1BYQV9TSEFSUFNMKVxcdFxcdCs9IHB4YTJ4eF9zaGFycHNsLm9cXG5kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZTo0MjpvYmotJChDT05GSUdfUENNQ0lBX1BYQTJYWClcXHRcXHRcXHQrPSBweGEyeHhfYmFzZS5vICQocHhhMnh4LW9iai15KVxcbmRyaXZlcnMvcGNtY2lhL01ha2VmaWxlOjQzOm9iai0kKENPTkZJR19QQ01DSUFfWFhTMTUwMClcXHRcXHRcXHQrPSB4eHMxNTAwX3NzLm9cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmM9Njc1PXN0YXRpYyB2b2lkIHBjbWNpYV9yZXF1ZXJ5KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKVxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy03MjktXFxuZHJpdmVycy9wY21jaWEvZHMuYzo3MzA6I2lmZGVmIENPTkZJR19QQ01DSUFfTE9BRF9DSVNcXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTczMS1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmM9NzQxPXN0YXRpYyBpbnQgcGNtY2lhX2xvYWRfZmlybXdhcmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldiwgY2hhciAqZmlsZW5hbWUpXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTc4OC1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjc4OTojZWxzZSAvKiAhQ09ORklHX1BDTUNJQV9MT0FEX0NJUyAqL1xcbmRyaXZlcnMvcGNtY2lhL2RzLmMtNzkwLVxcbi0tXFxuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmM9NzA1PUVYUE9SVF9TWU1CT0wocGNtY2lhX3JlcXVlc3RfaXJxKTtcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jLTcwNy1cXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYzo3MDg6I2lmZGVmIENPTkZJR19QQ01DSUFfUFJPQkVcXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYy03MDktXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYz03NjI9dm9pZCBwY21jaWFfY2xlYW51cF9pcnEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYy03NjctXFxuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmM6NzY4OiNlbHNlIC8qIENPTkZJR19QQ01DSUFfUFJPQkUgKi9cXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYy03NjktXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYz03NzU9dm9pZCBwY21jaWFfY2xlYW51cF9pcnEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYy03ODAtXFxuZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmM6NzgxOiNlbmRpZiAgLyogQ09ORklHX1BDTUNJQV9QUk9CRSAqL1xcbmRyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jLTc4Mi1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9NDE9SU5UX01PRFVMRV9QQVJNKHByb2JlX21lbSxcXHQxKTtcXHRcXHQvKiBtZW1vcnkgcHJvYmU/ICovXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYzo0MjojaWZkZWYgQ09ORklHX1BDTUNJQV9QUk9CRVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtNDMtSU5UX01PRFVMRV9QQVJNKHByb2JlX2lvLFxcdDEpO1xcdFxcdC8qIElPIHBvcnQgcHJvYmU/ICovXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jPTEzMj1zdGF0aWMgaW50IHN1Yl9pbnRlcnZhbChzdHJ1Y3QgcmVzb3VyY2VfbWFwICptYXAsIHVfbG9uZyBiYXNlLCB1X2xvbmcgbnVtKVxcbi0tXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy0xNzktXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYzoxODA6I2lmZGVmIENPTkZJR19QQ01DSUFfUFJPQkVcXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTE4MS1zdGF0aWMgdm9pZCBkb19pb19wcm9iZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGJhc2UsXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jPTQwMT1zdGF0aWMgaW50IGRvX21lbV9wcm9iZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdV9sb25nIGJhc2UsIHVfbG9uZyBudW0sXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTQ0Ny1cXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjQ0ODojaWZkZWYgQ09ORklHX1BDTUNJQV9QUk9CRVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtNDQ5LVxcbi0tXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYz00ODE9c3RhdGljIGludCB2YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBwcm9iZV9tYXNrKVxcbi0tXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy01MjctXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYzo1Mjg6I2Vsc2UgLyogQ09ORklHX1BDTUNJQV9QUk9CRSAqL1xcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtNTI5LVxcbi0tXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYz01Mzc9c3RhdGljIGludCB2YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBwcm9iZV9tYXNrKVxcbi0tXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy01NTEtXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYzo1NTI6I2VuZGlmIC8qIENPTkZJR19QQ01DSUFfUFJPQkUgKi9cXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTU1My1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9ODkxPXN0YXRpYyBpbnQgYWRqdXN0X2lvKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgYWN0aW9uLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtOTE3LVxcdFxcdH1cXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjkxODojaWZkZWYgQ09ORklHX1BDTUNJQV9QUk9CRVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtOTE5LVxcdFxcdGlmIChwcm9iZV9pbylcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYz01Mz1zdGF0aWMgaXJxcmV0dXJuX3Qgc29jX2NvbW1vbl9wY21jaWFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldik7XFxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jLTU0LVxcbmRyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYzo1NTojaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVR1xcbmRyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYy01Ni1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaD00Nj1pbnQgc29jX3BjbWNpYV9yZWd1bGF0b3Jfc2V0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0LFxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oLTQ4LVxcbmRyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaDo0OTojaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVR1xcbmRyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaC01MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6MzkuODM2ODUwNzU4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExODM1ODIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFBDbmV0X0NTIERyaXZlcioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNoYXJlZCBtZW1vcnkgd2luZG93IGlzIGJlaW5nIHNldCB1cCBpbiB0aGlzIFBDbmV0IGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBkaXJlY3RseSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGVyZSB0aGF0IGBzZXR1cF9zaG1lbV93aW5kb3dgIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZC4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jYC4gVGhhdCBmaWxlIGlzIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIFBDbmV0IENhcmQgU2VydmljZXMgKFBDTUNJQSkgaW50ZXJmYWNlLiBIb3BlZnVsbHksIHRyYWNpbmcgdGhlIGNhbGxzIHRvIGBzZXR1cF9zaG1lbV93aW5kb3dgIHdpbGwgcmV2ZWFsIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBhbmQgaG93IHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbiBpcyBiZWluZyBjb25maWd1cmVkIGZvciBkYXRhIHRyYW5zZmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjgxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6NDEuOTU1MjExNDkxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjgxMjgwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0dXBfc2htZW1fd2luZG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYz0xMDI9c3RhdGljIGludCBzZXRfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZm1hcCAqbWFwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6MTAzOnN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTEwNC1cXHRcXHRcXHQgICAgICBpbnQgc3RvcF9wZywgaW50IGNtX29mZnNldCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9NTY1PXN0YXRpYyBpbnQgcGNuZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTYwOS0gICAgaWYgKCh1c2Vfc2htZW0gPT0gMCkgfHwgKCFoYXNfc2htZW0gXFx1MDAyNlxcdTAwMjYgKHVzZV9zaG1lbSA9PSAtMSkpIHx8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjYxMDpcXHQoc2V0dXBfc2htZW1fd2luZG93KGxpbmssIHN0YXJ0X3BnLCBzdG9wX3BnLCBjbV9vZmZzZXQpICE9IDApKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy02MTEtXFx0c2V0dXBfZG1hX2NvbmZpZyhsaW5rLCBzdGFydF9wZywgc3RvcF9wZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9MTQwMT1zdGF0aWMgdm9pZCBzaG1lbV9ibG9ja19vdXRwdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTE0MTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjE0MTE6c3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMtMTQxMi1cXHRcXHRcXHQgICAgICBpbnQgc3RvcF9wZywgaW50IGNtX29mZnNldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6NDIuNzIzMzQ0NTI5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NzM5NDU3NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgUENuZXQgRHJpdmVyJ3MgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHBjbmV0X3Byb2JlYCBhbmQgYHBjbmV0X2NvbmZpZ2AgZnVuY3Rpb25zIGFyZSB1c2VkIHdpdGhpbiB0aGUgYHBjbmV0X2NzLmNgIGRyaXZlciBmaWxlLiBUaGF0J3MgdGhlIGNvcmUgb2YgaG93IHRoZSBkcml2ZXIgaXMgZmluZGluZyBhbmQgc2V0dGluZyB1cCB0aGUgUENuZXQgbmV0d29yayBpbnRlcmZhY2UuIE15IGZvY3VzIGlzIG9uIHRoZSAqY2FsbCogc3RydWN0dXJlIOKAkyBob3cgYXJlIHRoZXNlIGZ1bmN0aW9ucyBpbnZva2VkLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zPyBJJ20gbG9va2luZyBmb3IgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cywgYW55IHNwZWNpZmljIGRhdGEgYmVpbmcgcGFzc2VkLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBmdW5jdGlvbiBjYWxscy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiBmbG93IG9mIHRoaXMgcGFydGljdWxhciBuZXR3b3JrIGNhcmQgZHJpdmVyLiBVbmRlcnN0YW5kaW5nIHRoaXMgY2FsbCBzdHJ1Y3R1cmUgd2lsbCBwcm92aWRlIGNydWNpYWwgaW5zaWdodCBpbnRvIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAwNCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjA0OjQ1LjU5NzI5MjQ5MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHQgICAgICBIQVNfTUlTQ19SRUcgfCBIQVNfSUJNX01JU0MgfSxcXG4gMTgxOlxcdCAgICB7IC8qIFBhbmFzb25pYyBWRUwyMTEgKi8gMHgwZmYwLCAweDAwLCAweDgwLCAweDQ1LFxcbiAxODI6XFx0ICAgICAgSEFTX01JU0NfUkVHIHwgSEFTX0lCTV9NSVNDIH0sXFxuIDE4MzpcXHQgICAgeyAvKiBQcmVNYXggUEUtMjAwICovIDB4MDdmMCwgMHgwMCwgMHgyMCwgMHhlMCwgMCB9LFxcbiAxODQ6XFx0ICAgIHsgLyogUlBUSSBFUDQwMCAqLyAweDAxMTAsIDB4MDAsIDB4NDAsIDB4OTUsIDAgfSxcXG4gMTg1OlxcdCAgICB7IC8qIFNDTSBFdGhlcm5ldCAqLyAweDBmZjAsIDB4MDAsIDB4MjAsIDB4Y2IsIDAgfSxcXG4gMTg2OlxcdCAgICB7IC8qIFNvY2tldCBFQSAqLyAweDQwMDAsIDB4MDAsIDB4YzAsIDB4MWIsXFxuIDE4NzpcXHQgICAgICBERUxBWV9PVVRQVVQgfCBIQVNfTUlTQ19SRUcgfCBVU0VfQklHX0JVRiB9LFxcbiAxODg6XFx0ICAgIHsgLyogU29ja2V0IExQLUUgQ0YrICovIDB4MDFjMCwgMHgwMCwgMHhjMCwgMHgxYiwgMCB9LFxcbiAxODk6XFx0ICAgIHsgLyogU3VwZXJTb2NrZXQgUkU0NTBUICovIDB4MDExMCwgMHgwMCwgMHhlMCwgMHg5OCwgMCB9LFxcbiAxOTA6XFx0ICAgIHsgLyogVm9sa3RlayBOUEwtNDAyQ1QgKi8gMHgwMDYwLCAweDAwLCAweDQwLCAweDA1LCAwIH0sXFxuIDE5MTpcXHQgICAgeyAvKiBORUMgUEMtOTgwMU4tSjEyICovIDB4MGZmMCwgMHgwMCwgMHgwMCwgMHg0YywgMCB9LFxcbiAxOTI6XFx0ICAgIHsgLyogUENNQ0lBIFRlY2hub2xvZ3kgT0VNICovIDB4MDFjOCwgMHgwMCwgMHhhMCwgMHgwYywgMCB9XFxuIDE5MzpcXHR9O1xcbiAxOTQ6XFx0XFxuIDE5NTpcXHQjZGVmaW5lIE5SX0lORk9cXHRcXHRBUlJBWV9TSVpFKGh3X2luZm8pXFxuIDE5NjpcXHRcXG4gMTk3OlxcdHN0YXRpYyBzdHJ1Y3QgaHdfaW5mbyBkZWZhdWx0X2luZm8gPSB7IDAsIDAsIDAsIDAsIDAgfTtcXG4gMTk4OlxcdHN0YXRpYyBzdHJ1Y3QgaHdfaW5mbyBkbDEwMDE5X2luZm8gPSB7IDAsIDAsIDAsIDAsIElTX0RMMTAwMTl8SEFTX01JSSB9O1xcbiAxOTk6XFx0c3RhdGljIHN0cnVjdCBod19pbmZvIGRsMTAwMjJfaW5mbyA9IHsgMCwgMCwgMCwgMCwgSVNfREwxMDAyMnxIQVNfTUlJIH07XFxuIDIwMDpcXHRcXG4gMjAxOlxcdHN0cnVjdCBwY25ldF9kZXYge1xcbiAyMDI6XFx0XFx0c3RydWN0IHBjbWNpYV9kZXZpY2VcXHQqcF9kZXY7XFxuIDIwMzpcXHQgICAgdV9pbnRcXHRcXHRmbGFncztcXG4gMjA0OlxcdCAgICB2b2lkXFx0XFx0X19pb21lbSAqYmFzZTtcXG4gMjA1OlxcdCAgICBzdHJ1Y3QgdGltZXJfbGlzdFxcdHdhdGNoZG9nO1xcbiAyMDY6XFx0ICAgIGludFxcdFxcdFxcdHN0YWxlLCBmYXN0X3BvbGw7XFxuIDIwNzpcXHQgICAgdV9jaGFyXFx0XFx0cGh5X2lkO1xcbiAyMDg6XFx0ICAgIHVfY2hhclxcdFxcdGV0aF9waHksIHBuYV9waHk7XFxuIDIwOTpcXHQgICAgdV9zaG9ydFxcdFxcdGxpbmtfc3RhdHVzO1xcbiAyMTA6XFx0ICAgIHVfbG9uZ1xcdFxcdG1paV9yZXNldDtcXG4gMjExOlxcdH07XFxuIDIxMjpcXHRcXG4gMjEzOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHBjbmV0X2RldiAqUFJJVihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAyMTQ6XFx0e1xcbiAyMTU6XFx0XFx0Y2hhciAqcCA9IG5ldGRldl9wcml2KGRldik7XFxuIDIxNjpcXHRcXHRyZXR1cm4gKHN0cnVjdCBwY25ldF9kZXYgKikocCArIHNpemVvZihzdHJ1Y3QgZWlfZGV2aWNlKSk7XFxuIDIxNzpcXHR9XFxuIDIxODpcXHRcXG4gMjE5OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcGNuZXRfbmV0ZGV2X29wcyA9IHtcXG4gMjIwOlxcdFxcdC5uZG9fb3BlblxcdFxcdD0gcGNuZXRfb3BlbixcXG4gMjIxOlxcdFxcdC5uZG9fc3RvcFxcdFxcdD0gcGNuZXRfY2xvc2UsXFxuIDIyMjpcXHRcXHQubmRvX3NldF9jb25maWdcXHRcXHQ9IHNldF9jb25maWcsXFxuIDIyMzpcXHRcXHQubmRvX3N0YXJ0X3htaXQgXFx0PSBlaV9zdGFydF94bWl0LFxcbiAyMjQ6XFx0XFx0Lm5kb19nZXRfc3RhdHNcXHRcXHQ9IGVpX2dldF9zdGF0cyxcXG4gMjI1OlxcdFxcdC5uZG9fZXRoX2lvY3RsXFx0XFx0PSBlaV9pb2N0bCxcXG4gMjI2OlxcdFxcdC5uZG9fc2V0X3J4X21vZGVcXHQ9IGVpX3NldF9tdWx0aWNhc3RfbGlzdCxcXG4gMjI3OlxcdFxcdC5uZG9fdHhfdGltZW91dCBcXHQ9IGVpX3R4X3RpbWVvdXQsXFxuIDIyODpcXHRcXHQubmRvX3NldF9tYWNfYWRkcmVzcyBcXHQ9IGV0aF9tYWNfYWRkcixcXG4gMjI5OlxcdFxcdC5uZG9fdmFsaWRhdGVfYWRkclxcdD0gZXRoX3ZhbGlkYXRlX2FkZHIsXFxuIDIzMDpcXHQjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG4gMjMxOlxcdFxcdC5uZG9fcG9sbF9jb250cm9sbGVyIFxcdD0gZWlfcG9sbCxcXG4gMjMyOlxcdCNlbmRpZlxcbiAyMzM6XFx0fTtcXG4gMjM0OlxcdFxcbiAyMzU6XFx0c3RhdGljIGludCBwY25ldF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaylcXG4gMjM2OlxcdHtcXG4gMjM3OlxcdCAgICBzdHJ1Y3QgcGNuZXRfZGV2ICppbmZvO1xcbiAyMzg6XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIDIzOTpcXHRcXG4gMjQwOlxcdCAgICBkZXZfZGJnKFxcdTAwMjZsaW5rLVxcdTAwM2VkZXYsIFxcXCJwY25ldF9hdHRhY2goKVxcXFxuXFxcIik7XFxuIDI0MTpcXHRcXG4gMjQyOlxcdCAgICAvKiBDcmVhdGUgbmV3IGV0aGVybmV0IGRldmljZSAqL1xcbiAyNDM6XFx0ICAgIGRldiA9IF9fYWxsb2NfZWlfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgcGNuZXRfZGV2KSk7XFxuIDI0NDpcXHQgICAgaWYgKCFkZXYpIHJldHVybiAtRU5PTUVNO1xcbiAyNDU6XFx0ICAgIGluZm8gPSBQUklWKGRldik7XFxuIDI0NjpcXHQgICAgaW5mby1cXHUwMDNlcF9kZXYgPSBsaW5rO1xcbiAyNDc6XFx0ICAgIGxpbmstXFx1MDAzZXByaXYgPSBkZXY7XFxuIDI0ODpcXHRcXG4gMjQ5OlxcdCAgICBsaW5rLVxcdTAwM2Vjb25maWdfZmxhZ3MgfD0gQ09ORl9FTkFCTEVfSVJRIHwgQ09ORl9BVVRPX1NFVF9JTztcXG4gMjUwOlxcdFxcbiAyNTE6XFx0ICAgIGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZwY25ldF9uZXRkZXZfb3BzO1xcbiAyNTI6XFx0XFxuIDI1MzpcXHQgICAgcmV0dXJuIHBjbmV0X2NvbmZpZyhsaW5rKTtcXG4gMjU0OlxcdH0gLyogcGNuZXRfYXR0YWNoICovXFxuIDI1NTpcXHRcXG4gMjU2OlxcdHN0YXRpYyB2b2lkIHBjbmV0X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaylcXG4gMjU3OlxcdHtcXG4gMjU4OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLVxcdTAwM2Vwcml2O1xcbiAyNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjA0OjQ1LjU5NzQxNzAwMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDUwNzExMzIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgYXMgaWYgSSdtIHRoaW5raW5nIGl0OlxuXG4qKlBDTUNJQSBEcml2ZXIgUmVnaXN0cmF0aW9uIGFuZCBQcm9iaW5nKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGlzIFBDTUNJQSBzaXR1YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVycyBmb3IgdGhlc2UgZGV2aWNlcyBhcmUgYWN0dWFsbHkgaG9va2VkIGludG8gdGhlIHN5c3RlbSBhbmQsIGNydWNpYWxseSwgaG93IHRoZSBkZXZpY2VzIHRoZW1zZWx2ZXMgYXJlIGRpc2NvdmVyZWQgYW5kIGluaXRpYWxpemVkLiBUaGUga2V5IGhlcmUgaXMgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWFyY2ggZm9yIHRoYXQgY29yZSByZWdpc3RyYXRpb24gZnVuY3Rpb24g4oCTIEknbSB0aGlua2luZyBlaXRoZXIgYHBjbWNpYV9yZWdpc3Rlcl9kcml2ZXJgIG9yIG1heWJlIGp1c3Qgc29tZXRoaW5nIGxpa2UgYHBjbWNpYV9kcml2ZXJgIGFzIGEgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnQgSSBuZWVkIHRvIGZvbGxvdyB0aGUgdHJhaWwgb2YgaG93IGV2ZXJ5dGhpbmcgZ2V0cyB0aWVkIHRvZ2V0aGVyLiBPbmNlIEkgZmluZCB0aGF0IHJlZ2lzdHJhdGlvbiBwb2ludCwgdGhlIHByb2JpbmcgbG9naWMgc2hvdWxkIGJlY29tZSBtdWNoIGNsZWFyZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4ODUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjA0OjU2LjEwNDUzMjQ5OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkzMjAxNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BjbWNpYV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jPTE3MDk9c3RhdGljIHN0cnVjdCBwY21jaWFfZHJpdmVyIHBjbmV0X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0xNzE3LX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjE3MTg6bW9kdWxlX3BjbWNpYV9kcml2ZXIocGNuZXRfZHJpdmVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDQ6NTYuMjAzODU4MjQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyODk2MTE1MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBDTUNJQSBEcml2ZXIgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBwY25ldF9jc2AsIHdoaWNoIEkgdW5kZXJzdGFuZCBpcyBhIFBDTUNJQSBkcml2ZXIsIHJlcHJlc2VudGVkIGFzIGEgYHN0cnVjdCBwY21jaWFfZHJpdmVyYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB3aGV0aGVyIFBDTUNJQSBoYXJkd2FyZSDigJMgdGhhdCdzIFBDIENhcmQgb3IgQ2FyZEJ1cyDigJMgY2FuIGFjdHVhbGx5IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBzZXR1cC4gWW91IGtub3csIFFFTVUgb3IgZXZlbiBHQ0UgZm9yIHRoYXQgbWF0dGVyLlxuXG5UaGUgYmlnIHF1ZXN0aW9uOiBEb2VzIFFFTVUgb3Igc3l6a2FsbGVyIGhhdmUgYW55IHNvbGlkIFBDTUNJQSBkZXZpY2UgZW11bGF0aW9uIG9yIGZ1enppbmcgY2FwYWJpbGl0aWVzPyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIHBzZXVkby1zeXNjYWxscyBvciB2aXJ0dWFsIGRldmljZXMgcmVsYXRlZCB0byBQQ01DSUEgd2l0aGluIHN5emthbGxlci4gT3IsIG1vcmUgZ2VuZXJhbGx5LCBpZiBRRU1VIGl0c2VsZiBlbXVsYXRlcyBQQ01DSUEgYW5kIGBwY21jaWFfc29ja2V0YCBhdCBhbGwuXG5cbkkgc3VwcG9zZSBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBzeXprYWxsZXIgc3BlY2lmaWNhdGlvbnMgb3IgZGlnIHRocm91Z2ggdGhlIGtlcm5lbCBkcml2ZXJzIGZvciBhbnkgUENNQ0lBIHJlbGF0ZWQgYml0cy4gSXMgdGhpcyBldmVuIHNvbWV0aGluZyB1c2Vyc3BhY2UgY2FuIG1hbmlwdWxhdGUsIG9yIGlzIFBDTUNJQSBmdW5kYW1lbnRhbGx5IGEgbGVnYWN5IGhhcmR3YXJlIGJ1cz9cblxuUmlnaHQsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL3BjbWNpYS9gIGRpcmVjdG9yeSBhbmQgc2VlIHdoYXQncyB3aGF0LiBUaGF0J3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjUxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjA1OjA5LjA5OTk3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9wY21jaWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYmNtNjN4eF9wY21jaWEuY1wiLFxuICAgIFwiYmNtNjN4eF9wY21jaWEuaFwiLFxuICAgIFwiY2FyZGJ1cy5jXCIsXG4gICAgXCJjaXJydXMuaFwiLFxuICAgIFwiY2lzdHBsLmNcIixcbiAgICBcImNzLmNcIixcbiAgICBcImNzX2ludGVybmFsLmhcIixcbiAgICBcImRiMXh4eF9zcy5jXCIsXG4gICAgXCJkcy5jXCIsXG4gICAgXCJlbGVjdHJhX2NmLmNcIixcbiAgICBcImk4MjM2NS5oXCIsXG4gICAgXCJtYXgxNjAwLmNcIixcbiAgICBcIm1heDE2MDAuaFwiLFxuICAgIFwibzJtaWNyby5oXCIsXG4gICAgXCJvbWFwX2NmLmNcIixcbiAgICBcInBjbWNpYV9jaXMuY1wiLFxuICAgIFwicGNtY2lhX3Jlc291cmNlLmNcIixcbiAgICBcInBkNjcyOS5jXCIsXG4gICAgXCJwZDY3MjkuaFwiLFxuICAgIFwicHhhMnh4X2Jhc2UuY1wiLFxuICAgIFwicHhhMnh4X2Jhc2UuaFwiLFxuICAgIFwicHhhMnh4X3NoYXJwc2wuY1wiLFxuICAgIFwicmljb2guaFwiLFxuICAgIFwicnNyY19tZ3IuY1wiLFxuICAgIFwicnNyY19ub25zdGF0aWMuY1wiLFxuICAgIFwic2ExMTAwX2dlbmVyaWMuY1wiLFxuICAgIFwic2ExMTAwX2dlbmVyaWMuaFwiLFxuICAgIFwic2ExMTAwX2gzNjAwLmNcIixcbiAgICBcInNhMTExMV9nZW5lcmljLmNcIixcbiAgICBcInNhMTExMV9nZW5lcmljLmhcIixcbiAgICBcInNhMTExMV9qb3JuYWRhNzIwLmNcIixcbiAgICBcInNhMTExMV9uZXBvbnNldC5jXCIsXG4gICAgXCJzYTExeHhfYmFzZS5jXCIsXG4gICAgXCJzYTExeHhfYmFzZS5oXCIsXG4gICAgXCJzb2NfY29tbW9uLmNcIixcbiAgICBcInNvY19jb21tb24uaFwiLFxuICAgIFwic29ja2V0X3N5c2ZzLmNcIixcbiAgICBcInRpMTEzeC5oXCIsXG4gICAgXCJ0b3BpYy5oXCIsXG4gICAgXCJ2ZzQ2OC5oXCIsXG4gICAgXCJ4eHMxNTAwX3NzLmNcIixcbiAgICBcInllbnRhX3NvY2tldC5jXCIsXG4gICAgXCJ5ZW50YV9zb2NrZXQuaFwiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTowNTowOS4xMDAwNTgzNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDA5OTQ4ODc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQQ01DSUEgRXRoZXJuZXQgRHJpdmVyIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgaW50dWl0aW9uIGlzIHBpbmdpbmcgbWUgYWJvdXQgbGVnYWN5IGhhcmR3YXJlLiBMZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgd2l0aCBgcGNuZXRfY3MuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaGFuZGxlcyBQQ01DSUEgTkUyMDAwIEV0aGVybmV0IGNhcmRzIOKAkyBhbmNpZW50IHRlY2hub2xvZ3ksIGJ1dCBzdGlsbCBpbXBvcnRhbnQgaW4gdGhlIGhpc3RvcmljYWwgY29udGV4dCBvZiBzeXN0ZW0gZGVzaWduLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50cy4gVGhlIHJlbGV2YW50IFBDTUNJQSBzb2NrZXQgZHJpdmVycyBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgaGVyZSBhcmUgdGhlIGxpa2VzIG9mIGB5ZW50YV9zb2NrZXQuY2Agd2hpY2ggbWFuYWdlcyBQQ0ktdG8tQ2FyZEJ1cyBicmlkZ2VzLCBhbG9uZyB3aXRoIGBpODIzNjVgLCBgcGQ2NzI5YCwgYW5kIHZhcmlvdXMgQVJNIFNvQyBwY21jaWEgYnJpZGdlcyAoYHNhMTEwMGAsIGBzYTExMTFgLCBgcHhhMnh4YCwgYGJjbTYzeHhgLCBgb21hcF9jZmApLiBOb25lIG9mIHRoZXNlIGNvbnRyb2xsZXJzIGFyZSBlbXVsYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgeDg2XzY0IFZNIG9yIEdDRSBpbnN0YW5jZSwgd2hpY2ggaXMgdGhlIGNvcm5lcnN0b25lIG9mIG91ciBmdXp6aW5nIGVudmlyb25tZW50LiBGb3JnZXQgUENNQ0lBIGV0aGVybmV0LCB0aGV5IGFyZSAqbmV2ZXIqIHBhcnQgb2YgdGhpcyB2aXJ0dWFsIGxhbmRzY2FwZS5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byBTZWN0aW9uIDIgb2Ygb3VyIGd1aWRlbGluZXMuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlOyBpdCdzIHRoZSBsaXRtdXMgdGVzdC4gV2UgbmVlZCB0byBzZWUgaWYgdGhlIGhhcmR3YXJlIGluIHF1ZXN0aW9uIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gQW5kIHRoYXQncyB3aGVuIGl0IGhpdHMgbWU6IFBDTUNJQSBjYXJkcyBhcmUgcGh5c2ljYWwgbGVnYWN5IGhhcmR3YXJlIChQQyBDYXJkIC8gMTYtYml0IFBDTUNJQSAvIENhcmRCdXMpLiBObywgd2UgaGF2ZSBub3RoaW5nLiBXZSdyZSB0YWxraW5nIGFib3V0IHBsdWdnaW5nIGEgY2FyZCBpbnRvIGEgcGh5c2ljYWwgc29ja2V0LlxuXG5TbywgaXMgYHBjbmV0X2NzYCBhbiBldGhlcm5ldCBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDTUNJQSBORTIwMDAgY2FyZHM/IFllcyEgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb25maXJtIHRoaXM6IFwiTkUyMDAwIGNvbXBhdGlibGUgUENNQ0lBIHN1cHBvcnRcIi4gUGVyZmVjdC5cblxuTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBzZXR1cF9zaG1lbV93aW5kb3dgLCB0aGUgY29kZSB0aGF0J3MgYmVpbmcgcGF0Y2hlZCwgKnJlcXVpcmVzKiB0aGF0IFBDTUNJQSBkZXZpY2UuIENhbiBpdCBiZSByZWFjaGVkIHdpdGhvdXQgdGhlIHBoeXNpY2FsIHRoaW5nPyBJIG5lZWQgdG8gYW5hbHl6ZSBgcGNuZXRfY3MuY2AgZGlyZWN0bHkuIGBwY25ldF9wcm9iZWAgaXMgb25seSBjYWxsZWQgaWYgYSBjYXJkIGlzIGF0dGFjaGVkLCBhbmQgYHNldHVwX3NobWVtX3dpbmRvd2AgaXMgY2FsbGVkIGR1cmluZyBwcm9iZS4gVGhlcmVmb3JlLCBpdCdzIHVucmVhY2hhYmxlIHdpdGhvdXQgdGhhdCBwaHlzaWNhbCBzb2NrZXQgYW5kIGNhcmQuIEJpbmdvLlxuXG5MZXQncyBkaXNzZWN0IHRoZSBwYXRjaCBpdHNlbGY6IEl0IGZpeGVzIGEgd2luZG93IGxlYWsgaW4gYHNldHVwX3NobWVtX3dpbmRvd2Agd2hlbiBgcGNtY2lhX3JlcXVlc3Rfd2luZG93KClgIHN1Y2NlZWRlZCBlYXJsaWVyLiBJbiBwYXJ0aWN1bGFyLCBpdCBpcyBjYWxsaW5nIGBwY21jaWFfbWFwX21lbV9wYWdlKClgIGFuZCBgcGNtY2lhX3JlbGVhc2Vfd2luZG93KClgLlxuXG5XaXRoIHRoZSBmYWlsdXJlIGluIGBpb3JlbWFwYCBvciBgcGNtY2lhX21hcF9tZW1fcGFnZSgpYCwgd2UgYGdvdG8gcmVsZWFzZWAsIGFuZCB0aGUga2V5IGhlcmUgaXMgaXQgcmVsZWFzZXMgdGhlIHJlc291cmNlczogYHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLCBsaW5rLVx1MDAzZXJlc291cmNlWzNdKTtgLiBUaGlzIGlzIGEgY2xhc3NpYyBlcnJvciBoYW5kbGluZyBjb3JyZWN0aW9uIGluIHJlc291cmNlIG1hbmFnZW1lbnQuXG5cbk5vdywgSSdtIGNvbmZpZGVudC4gU2luY2UgUENNQ0lBIGV0aGVybmV0IGNhcmRzIChgcGNuZXRfY3NgKSAqcmVxdWlyZSogcGh5c2ljYWwgUENNQ0lBIC8gUEMtY2FyZCBoYXJkd2FyZSB0aGF0J3MgYWJzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCB0aGlzIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBJdCdzIGEgdGV4dGJvb2sgZXhhbXBsZS5cblxuVGltZSB0byBhcHBseSB0aGUgZ3VpZGVsaW5lczpcblxuKiAgICoqU2VjdGlvbiAyKio6XG4gICAgKiAgIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTogX0NoZWNrX1xuICAgICogICBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6IF9Eb2Vzbid0IGFwcGx5IGhlcmVfXG5cblRodXMsIHRoZSB2ZXJkaWN0OiBgV29ydGhGdXp6aW5nOiBmYWxzZWAsIGBGb2N1c1N5bWJvbHM6IFtdYCwgYEVuYWJsZUNvbmZpZ3M6IFtdYC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoIGlzIGluIGEgZHJpdmVyIGZvciBoYXJkd2FyZSB0aGF0IGlzbid0IGVtdWxhdGVkLiBJJ20gY2FsbGluZyBpdCBhIGRheS4gVGltZSB0byBzdWJtaXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTM4LCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3MSwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDU6MTkuMTk5NTUxMDIyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gc2V0dXBfc2htZW1fd2luZG93KCkgd2l0aGluIHRoZSBwY25ldF9jcyBkcml2ZXIsIHdoaWNoIHN1cHBvcnRzIGxlZ2FjeSBQQ01DSUEgTkUyMDAwIG5ldHdvcmsgYWRhcHRlcnMgKENPTkZJR19QQ01DSUFfUENORVQpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ01DSUEgaGFyZHdhcmUgc29ja2V0IGNvbnRyb2xsZXJzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBvciBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBzZXR1cF9zaG1lbV93aW5kb3coKSB3aXRoaW4gdGhlIHBjbmV0X2NzIGRyaXZlciwgd2hpY2ggc3VwcG9ydHMgbGVnYWN5IFBDTUNJQSBORTIwMDAgbmV0d29yayBhZGFwdGVycyAoQ09ORklHX1BDTUNJQV9QQ05FVCkuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDTUNJQSBoYXJkd2FyZSBzb2NrZXQgY29udHJvbGxlcnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIG9yIHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjA1OjE5LjE5OTU4MzA5MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowq2qrd[1] Phase: Running StartedAt: 2026-09-11 01:05:30 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq2qrd[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-11 01:05:30 +0000 UTC FinishedAt: 2026-09-11 01:05:34 +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,}