Name: series-workflow9sgb5 Phase: Failed StartedAt: 2026-07-29 04:04:55 +0000 UTC FinishedAt: 2026-07-29 04:32:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sgb5[0] Phase: Succeeded StartedAt: 2026-07-29 04:04:55 +0000 UTC FinishedAt: 2026-07-29 04:32:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sgb5[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 04:04:55 +0000 UTC FinishedAt: 2026-07-29 04:32:23 +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+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHNlcV9maWxlIHNob3cgZnVuY3Rpb24gZm9yIC9wcm9jL25ldC9wcHBvZSB0byBpbmNsdWRlIHRoZSBQUFAgZGV2aWNlIG5hbWUgaW4gdGhlIG91dHB1dC4gVGhpcyBpcyBhIHB1cmVseSBvYnNlcnZhYmlsaXR5L2RlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgYWx0ZXIgdGhlIGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIG5ldHdvcmsgc3RhY2suJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2QyYTQ5OTdlNzQxYzI3YjUzN2MxMWU2NGFiZTQ1NmMxNWY2NzJiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDA0OjMxOjI2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbmluZGV4IDY4NzRhMWE4ZWRhZjEuLmNiMzFmNWRiNDNlODEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbkBAIC05NjMsMTcgJiM0Mzs5NjMsMTkgQEAgc3RhdGljIGludCBwcHBvZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG87XG4gXHRjaGFyICpkZXZfbmFtZTtcbiYjNDM7XHRjaGFyICpwcHBfbmFtZTtcbiBcbiBcdGlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikge1xuLVx0XHRzZXFfcHV0cyhzZXEsIFwmIzM0O0lkICAgICAgIEFkZHJlc3MgICAgICAgICAgICAgIERldmljZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRzZXFfcHV0cyhzZXEsIFwmIzM0O0lkICAgICAgIEFkZHJlc3MgICAgICAgICAgICAgIERldmljZSAgIFBQUC1EZXZpY2VcXG5cJiMzNDspO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiBcdHBvID0gdjtcbiBcdGRldl9uYW1lID0gcG8tXHUwMDNlcHBwb2VfcGEuZGV2O1xuJiM0MztcdHBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pO1xuIFxuLVx0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyUwOFggJXBNICU4c1xcblwmIzM0Oyxcbi1cdFx0cG8tXHUwMDNlcHBwb2VfcGEuc2lkLCBwby1cdTAwM2VwcHBvZV9wYS5yZW1vdGUsIGRldl9uYW1lKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7JTA4WCAlcE0gJThzICUxMHNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBwby1cdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVx1MDAzZXBwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUsIHBwcF9uYW1lID8gcHBwX25hbWUgOiBcJiMzNDtcJiMzNDspO1xuIG91dDpcbiBcdHJldHVybiAwO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgc2VxX2ZpbGUgc2hvdyBmdW5jdGlvbiBmb3IgL3Byb2MvbmV0L3BwcG9lIHRvIGluY2x1ZGUgdGhlIFBQUCBkZXZpY2UgbmFtZSBpbiB0aGUgb3V0cHV0LiBUaGlzIGlzIGEgcHVyZWx5IG9ic2VydmFiaWxpdHkvZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZDJhNDk5N2U3NDFjMjdiNTM3YzExZTY0YWJlNDU2YzE1ZjY3MmI5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMDQ6MzE6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCmluZGV4IDY4NzRhMWE4ZWRhZjEuLmNiMzFmNWRiNDNlODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCkBAIC05NjMsMTcgJiM0Mzs5NjMsMTkgQEAgc3RhdGljIGludCBwcHBvZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG87CiAJY2hhciAqZGV2X25hbWU7CiYjNDM7CWNoYXIgKnBwcF9uYW1lOwogCiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7Ci0JCXNlcV9wdXRzKHNlcSwgJiMzNDtJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2VcbiYjMzQ7KTsKJiM0MzsJCXNlcV9wdXRzKHNlcSwgJiMzNDtJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2UgICBQUFAtRGV2aWNlXG4mIzM0Oyk7CiAJCWdvdG8gb3V0OwogCX0KIAogCXBvID0gdjsKIAlkZXZfbmFtZSA9IHBvLSZndDtwcHBvZV9wYS5kZXY7CiYjNDM7CXBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKCZhbXA7cG8tJmd0O2NoYW4pOwogCi0Jc2VxX3ByaW50ZihzZXEsICYjMzQ7JTA4WCAlcE0gJThzXG4mIzM0OywKLQkJcG8tJmd0O3BwcG9lX3BhLnNpZCwgcG8tJmd0O3BwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUpOwomIzQzOwlzZXFfcHJpbnRmKHNlcSwgJiMzNDslMDhYICVwTSAlOHMgJTEwc1xuJiMzNDssCiYjNDM7CQkgICBwby0mZ3Q7cHBwb2VfcGEuc2lkLCBwby0mZ3Q7cHBwb2VfcGEucmVtb3RlLCBkZXZfbmFtZSwgcHBwX25hbWUgPyBwcHBfbmFtZSA6ICYjMzQ7JiMzNDspOwogb3V0OgogCXJldHVybiAwOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHk6IFBQUG9FIFByb2NmcyBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHR3ZWFraW5nIGBkcml2ZXJzL25ldC9wcHAvcHBwb2UuY2AuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGBwcHBvZV9zZXFfc2hvd2AgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBzaG93IGZ1bmN0aW9uIGZvciBgL3Byb2MvbmV0L3BwcG9lYC4gSXQmIzM5O3MgYWRkaW5nIGEgbGluZSB0byBwcmludCBgcHBwX25hbWUgPSBwcHBfZGV2X25hbWUoJmFtcDtwby0mZ3Q7Y2hhbik7YCBhbmQgdGhlIG5hbWUuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7U2hvdWxkIHdlIGV2ZW4gYm90aGVyIGZ1enppbmcgdGhpcz8mIzM0OyBJdCYjMzk7cyBhIHByb2NmcyBzaG93IGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyAqcmVhY2hhYmxlKi4gQnV0IHRoZW4gYWdhaW4sICphbGwqIHByb2NmcyBzaG93IGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlLi4uIHNvIHRoYXQmIzM5O3Mgbm90IGEgc3Ryb25nIGp1c3RpZmljYXRpb24gaW4gaXRzZWxmLgoKTGV0JiMzOTtzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlLCBpdCYjMzk7cyBhZGRpbmcgYSBuZXcgcGllY2Ugb2YgaW5mb3JtYXRpb24g4oCTIGEgbmV3IGNvbHVtbiB0byBgL3Byb2MvbmV0L3BwcG9lYC4gSXMgdGhpcyBwdXJlbHkgY29zbWV0aWM/IFRoZSBndWlkZWxpbmVzIEkmIzM5O20gb3BlcmF0aW5nIHVuZGVyIHN1Z2dlc3QgcmVqZWN0aW5nIHBhdGNoZXMgdGhhdCBhcmUgbWVyZWx5IGRlY29yYXRpdmUsIHN1Y2ggYXMgbG9nIGNoYW5nZXMgb3IgY29tbWVudHMuIEhvd2V2ZXIsIHRoaXMgaXNuJiMzOTt0IGp1c3QgYSBsb2cgbWVzc2FnZTsgaXQmIzM5O3MgY2hhbmdpbmcgdGhlICpvdXRwdXQqIG9mIGBzZXFfZmlsZWAuCgpUaGUgcXVlc3Rpb24gYmVjb21lcywgaXMgdGhpcyBuZXcgb3V0cHV0ICppbmZvcm1hdGl2ZSogaW4gYSB3YXkgdGhhdCBtaWdodCBpbnRyb2R1Y2UgbmV3IGJ1Z3M/IElmIGl0JiMzOTtzIGEgbmV3IGluZm9ybWF0aW9uYWwgb3V0cHV0LCB0aGVuIG1heWJlIG5vdC4KCldhaXQgYSBzZWNvbmQuLi4gaG9sZCBvbi4gKmBwcHBfZGV2X25hbWVgKi4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IGZ1bmN0aW9uIG1pZ2h0IGhhdmUgaXRzIG93biBpc3N1ZXMuIFdoYXQgaWYgYHBvLSZndDtjaGFuYCBpc24mIzM5O3QgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IHNvbWV3aGVyZT8gT3IsIGV2ZW4gd29yc2UsIHdoYXQgaWYgdGhlcmUmIzM5O3MgYSByYWNlIGNvbmRpdGlvbiBpbiBob3cgdGhhdCBpcyBiZWluZyBhY2Nlc3NlZD8gSSBzaG91bGQgcmVhbGx5IGNoZWNrIGBwcHBfZGV2X25hbWVgIGl0c2VsZiB0byBzZWUgaWYgaXQmIzM5O3MgZ290IGFueSB2dWxuZXJhYmlsaXRpZXMuICpUaGF0KiBtaWdodCBtYWtlIHRoaXMgZnV6emFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHBwX2Rldl9uYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0yOTUzPWludCBwcHBfdW5pdF9udW1iZXIoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTI5NzItICovXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoyOTczOmNoYXIgKnBwcF9kZXZfbmFtZShzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTc0LXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0zNjYyPUVYUE9SVF9TWU1CT0wocHBwX3VuaXRfbnVtYmVyKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjM2NjM6RVhQT1JUX1NZTUJPTChwcHBfZGV2X25hbWUpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzY2NC1FWFBPUlRfU1lNQk9MKHBwcF9pbnB1dCk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTYyPXN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTc0LVx0ZGV2X25hbWUgPSBwby1cdTAwM2VwcHBvZV9wYS5kZXY7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5NzU6XHRwcHBfbmFtZSA9IHBwcF9kZXZfbmFtZShcdTAwMjZwby1cdTAwM2VjaGFuKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk3Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYHBwcF9kZXZfbmFtZWAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgcHBwX2Rldl9uYW1lYCBpbXBsZW1lbnRhdGlvbi4gSSBrbm93IGl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2UgZm9yIGFzc2lnbmluZyBsb2dpY2FsIG5hbWVzIHRvIFBQUCBpbnRlcmZhY2VzLCBhbmQgYW55IGJ1ZyBoZXJlIGNhbiBjYXVzZSBzZXJpb3VzIGhlYWRhY2hlcyB3aXRoIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgZXNwZWNpYWxseSBpbiBtb3JlIGNvbXBsZXggc2V0dXBzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZGV2aWNlIG5hbWUgZ2VuZXJhdGlvbiBpcyByb2J1c3QgYW5kIHByZWRpY3RhYmxlLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm5zIGFyZToKCiogICAqKkNvbmN1cnJlbmN5OioqIEhvdyBkb2VzIGl0IGhhbmRsZSBtdWx0aXBsZSBQUFAgaW5zdGFuY2VzIGNyZWF0aW5nIGRldmljZXMgc2ltdWx0YW5lb3VzbHk/IEFyZSB0aGVyZSByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIG5hbWluZyBjb2xsaXNpb25zIG9yIGluY29ycmVjdCBhc3NpZ25tZW50cz8KKiAgICoqRWRnZSBDYXNlczoqKiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgd2hhdCBoYXBwZW5zIHdpdGggcmVhbGx5IGxvbmcgY29ubmVjdGlvbiB0aW1lcywgdHJhbnNpZW50IGxpbmtzLCBkZXZpY2VzIHdpdGggdW51c3VhbCBhdHRyaWJ1dGVzLCBhbmQgd2hhdCBoYXBwZW5zIGluIHRoZSBldmVudCBvZiBpbnRlcmZhY2UgZXhoYXVzdGlvbi4gQXJlIHRoZXJlIGFueSBsaW1pdHMgdGhhdCBtaWdodCBiZSBoaXQgYW5kIGNyZWF0ZSBlcnJvcnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvdXI/CiogICAqKk5hbWluZyBTY2hlbWUgQ29uc2lzdGVuY3k6KiogSXMgdGhlIG5hbWluZyBzY2hlbWUgd2VsbC1kZWZpbmVkIGFuZCBkb2N1bWVudGVkPyBJcyBpdCBjb25maWd1cmFibGUsIGFuZCBpZiBzbywgaG93PyBBbmQgbW9zdCBpbXBvcnRhbnRseSwgaXMgaXQgYmFja3dhcmRzLWNvbXBhdGlibGUgd2l0aCBvbGRlciBrZXJuZWxzIG9yIGRpc3Ryb3M/IEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHNvbWV0aGluZyBlYXNpbHkgdW5kZXJzdG9vZCBhbmQgZGVidWdnYWJsZSwgcmF0aGVyIHRoYW4gYSBibGFjayBib3guCiogICAqKlNlY3VyaXR5OioqIEFyZSB0aGVyZSBhbnkgc2VjdXJpdHkgaW1wbGljYXRpb25zIHdpdGggdGhlIG5hbWluZyBzY2hlbWU/IENvdWxkIGl0IGJlIGV4cGxvaXRlZCBzb21laG93PwoqICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0JiMzOTtzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBEb2VzIGl0IGhhbmRsZSBpbnZhbGlkIG9yIG1hbGZvcm1lZCBkYXRhIGdyYWNlZnVsbHk/IERvZXMgaXQgbG9nIHVzZWZ1bCBpbmZvcm1hdGlvbiBvciBzaW1wbHkgZmFpbCBzaWxlbnRseT8gQSBnb29kIGltcGxlbWVudGF0aW9uIHdpbGwgYWx3YXlzIHByb3ZpZGUgZGV0YWlsZWQgY29udGV4dCBpbiBjYXNlIG9mIGEgcHJvYmxlbS4KCkkmIzM5O20gZ29pbmcgdG8gd2FudCB0bzoKCiogICBEaWcgaW50byB0aGUgY29kZSBhbmQgcXVpY2tseSBhbmFseXplIHRoZSBrZXkgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBuYW1lIGdlbmVyYXRpb24gYW5kIGFzc2lnbm1lbnQuCiogICBDaGVjayBmb3IgYW55IGV4aXN0aW5nIGJ1ZyByZXBvcnRzIG9yIGRpc2N1c3Npb25zIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbi4KKiAgIFJ1biBzb21lIHRlc3RzIG9uIGRpZmZlcmVudCBzY2VuYXJpb3MgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncywgcGVyaGFwcyBpbmNsdWRpbmcgc29tZSBlZGdlIGNhc2UgdGVzdGluZywgYW5kIGNoZWNrIG15IHJlc3VsdHMgYWdhaW5zdCB3aGF0IHRoZSBzeXN0ZW0gc2hvdWxkIGRvLgoKVGhpcyBpcyBnb2luZyB0byBiZSBteSBpbW1lZGlhdGUgZm9jdXMsIGFzIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBsb2dpY2FsIG5hbWUgaXMgYXNzaWduZWQgaXMgZnVuZGFtZW50YWwgdG8gZGlhZ25vc2luZyBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFyIFxcKnBwcF9kZXZfbmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTI5NTM9aW50IHBwcF91bml0X251bWJlcihzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjk3Mi0gKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjI5NzM6Y2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTI5NzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4ODAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvbXB0IGlzIHN0cmFpZ2h0Zm9yd2FyZDogJiMzNDtMZXQmIzM5O3MgcmVhZCBgcHBwX2Rldl9uYW1lYC4mIzM0OyBNeSBpbW1lZGlhdGUgcmVzcG9uc2U/IEkgbmVlZCBtb3JlIGNvbnRleHQsIGJ1dCBJIGNhbiBhbHJlYWR5IHN0YXJ0IHRvIG1ha2Ugc29tZSBlZHVjYXRlZCBndWVzc2VzLiBUaGUgc3ludGF4IGFsb25lIHN1Z2dlc3RzIGEgZGV2aWNlIG5hbWUsIGxpa2VseSB3aXRoaW4gYSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3Igc3lzdGVtIGFkbWluaXN0cmF0aW9uIGNvbnRleHQuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiB3aXRoIHRoZSB1bmRlcnNjb3JlcywgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBzb21ldGhpbmcgcmVsYXRlZCB0byBQb2ludC10by1Qb2ludCBQcm90b2NvbCAoUFBQKSBjb25maWd1cmF0aW9uLiBUaGlzIGNvdWxkIGJlIGEgZGV2aWNlLCBhbiBpbnRlcmZhY2UsIGEgY29uZmlndXJhdGlvbiBmaWxlLCBvciBhIHZhcmlhYmxlIHJlcHJlc2VudGluZyB0aGUgbmFtZS4gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgc2NlbmFyaW9zOiB0aGUgZXhhY3Qgb3BlcmF0aW5nIHN5c3RlbSwgbmV0d29yayB0b3BvbG9neSwgdGhlIHNwZWNpZmljIHB1cnBvc2Ugb2YgdGhpcyBkZXZpY2UsIGV0Yy4gTXkgbWluZCBhdXRvbWF0aWNhbGx5IHN0YXJ0cyB0byBtYXAgdGhpcyB0byB2YXJpb3VzIHN5c3RlbXMgSSYjMzk7dmUgd29ya2VkIHdpdGgg4oCTIExpbnV4LCBVbml4LCBtYXliZSBldmVuIHNvbWUgZW1iZWRkZWQgc3lzdGVtcyBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc2VyaWFsLWJhc2VkIFBQUCBjb25uZWN0aW9uLiBUaGlzIGNvdWxkIGJlIGEgY3JpdGljYWwgc3RlcCBpbiB0cm91Ymxlc2hvb3RpbmcgYSBuZXR3b3JrIG91dGFnZSwgY29uZmlndXJpbmcgYSBkaWFsLXVwIGNvbm5lY3Rpb24sIG9yIGFuYWx5emluZyBuZXR3b3JrIHRyYWZmaWMuIEkmIzM5O20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIGl0cyBtZWFuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5NzA6XHQgKiBSZXR1cm4gdGhlIFBQUCBkZXZpY2UgaW50ZXJmYWNlIG5hbWUgb2YgYSBjaGFubmVsLlxuMjk3MTpcdCAqIENhbGxlciBtdXN0IGhvbGQgUkNVIHJlYWQgbG9jay5cbjI5NzI6XHQgKi9cbjI5NzM6XHRjaGFyICpwcHBfZGV2X25hbWUoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxuMjk3NDpcdHtcbjI5NzU6XHRcdHN0cnVjdCBjaGFubmVsICpwY2ggPSBjaGFuLVx1MDAzZXBwcDtcbjI5NzY6XHRcdGNoYXIgKm5hbWUgPSBOVUxMO1xuMjk3NzpcdFx0c3RydWN0IHBwcCAqcHBwO1xuMjk3ODpcdFxuMjk3OTpcdFx0aWYgKHBjaCkge1xuMjk4MDpcdFx0XHRwcHAgPSByY3VfZGVyZWZlcmVuY2UocGNoLVx1MDAzZXBwcCk7XG4yOTgxOlx0XHRcdGlmIChwcHAgXHUwMDI2XHUwMDI2IHBwcC1cdTAwM2VkZXYpXG4yOTgyOlx0XHRcdFx0bmFtZSA9IHBwcC1cdTAwM2VkZXYtXHUwMDNlbmFtZTtcbjI5ODM6XHRcdH1cbjI5ODQ6XHRcdHJldHVybiBuYW1lO1xuMjk4NTpcdH1cbjI5ODY6XHRcbjI5ODc6XHRcbjI5ODg6XHQvKlxuMjk4OTpcdCAqIERpc2Nvbm5lY3QgYSBjaGFubmVsIGZyb20gdGhlIGdlbmVyaWMgbGF5ZXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQzOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIFJDVSBMb2NrIFJlcXVpcmVtZW50cyBmb3IgUFBQb0UgRGV2aWNlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBwcHBfZGV2X25hbWVgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBuZWVkaW5nIHRoZSBjYWxsZXIgdG8gaG9sZCBhbiBSQ1UgcmVhZCBsb2NrLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZGV0YWlsIOKAkyB3ZSBjYW4mIzM5O3QganVzdCBjYWxsIGl0IHdpbGx5LW5pbGx5LiBUaGUgaW50ZWdyaXR5IG9mIHRoZSBkYXRhIHJlbGllcyBvbiB0aGF0IGxvY2suIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYmlnZ2VyIHBpY3R1cmUgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCBob3cgYHBwcG9lX3NlcV9zaG93YCBpbnRlcmFjdHMgd2l0aCBgcHBwX2Rldl9uYW1lYC4gRG9lcyBpdCBjb21wbHkgd2l0aCB0aGlzIGxvY2sgcmVxdWlyZW1lbnQ/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgcHBwb2Vfc2VxX3Nob3dgICpkb2VzKiBob2xkIGFuIFJDVSByZWFkIGxvY2sgYmVmb3JlIGNhbGxpbmcgYHBwcF9kZXZfbmFtZWAsIG9yIGlmIGl0IGRvZXNuJiMzOTt0LCB0aGF0IHdlIGhhdmUgYSBzZXJpb3VzIGJ1ZyBvbiBvdXIgaGFuZHMuIFNvLCB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4gSSBuZWVkIHRvIGV4YW1pbmUgYHBwcG9lX3NlcV9zaG93YCBhbmQgbWV0aWN1bG91c2x5IHRyYWNlIGl0cyBjYWxsaW5nIGNvbnRleHQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIFJDVSByZWFkIGxvY2sgaXMgY29ycmVjdGx5IGhhbmRsZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludDsgb3RoZXJ3aXNlLCB3ZSYjMzk7cmUgbGlrZWx5IHRvIGludHJvZHVjZSBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHBwb2Vfc2VxX3Nob3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwb2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwb2UuYz05MzY9c3RhdGljIGludCBwcHBvZV9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTYxLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTYyOnN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NjMte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTEwNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvZV9zZXFfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTEwNDktXHQuc3RvcFx0XHQ9IHBwcG9lX3NlcV9zdG9wLFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTA1MDpcdC5zaG93XHRcdD0gcHBwb2Vfc2VxX3Nob3csXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMDUxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdGhlIGtleSB0ZWNobmljYWwgZWxlbWVudHM6CgoqKkNoZWNraW5nIFBQUG9FIFNlcXVlbmNlIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IFBQUG9FIHNlcXVlbmNpbmcgaXMgaGFuZGxlZCBpbiB0aGlzIGNvZGViYXNlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBgcHBwb2Vfc2VxX3N0YXJ0YCBhbmQgYHBwcG9lX3NlcV9zdG9wYC4gVGhlc2UgYXJlIHByb2JhYmx5IGNyaXRpY2FsIGZvciBjb250cm9sbGluZyB0aGUgY29ubmVjdGlvbiBhbmQgZGlzY29ubmVjdGlvbiBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgdGhlIHNlcXVlbmNlIG51bWJlciBhc3NpZ25tZW50cyBmb3IgdGhlIFBQUG9FIHNlc3Npb24uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBwcm9wZXIgc2VxdWVuY2luZyBpcyBhYnNvbHV0ZWx5IHZpdGFsIGZvciByZWxpYWJsZSBkYXRhIHRyYW5zbWlzc2lvbiwgYW5kIHRoZXJlZm9yZSwgYnVncyBvciBtaXNjb25maWd1cmF0aW9ucyBoZXJlIGNhbiBoYXZlIHNlcmlvdXMgaW1wbGljYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBQUFAgbGF5ZXIsIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlcywgYW5kIGFueSBhc3NvY2lhdGVkIHN0YXRlIG1hY2hpbmVzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGVzZSBhcmUgdXNlZCB0byBtYWtlIHN1cmUgdGhleSYjMzk7cmUgZG9pbmcgd2hhdCBJIHRoaW5rIHRoZXkgYXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODA6XHRcdHJldHVybiAwO1xuIDk4MTpcdH1cbiA5ODI6XHRcbiA5ODM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpwcHBvZV9nZXRfaWR4KHN0cnVjdCBwcHBvZV9uZXQgKnBuLCBsb2ZmX3QgcG9zKVxuIDk4NDpcdHtcbiA5ODU6XHRcdHN0cnVjdCBwcHBveF9zb2NrICpwbztcbiA5ODY6XHRcdGludCBpO1xuIDk4NzpcdFxuIDk4ODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUFBQT0VfSEFTSF9TSVpFOyBpJiM0MzsmIzQzOykge1xuIDk4OTpcdFx0XHRwbyA9IHJjdV9kZXJlZmVyZW5jZShwbi1cdTAwM2VoYXNoX3RhYmxlW2ldKTtcbiA5OTA6XHRcdFx0d2hpbGUgKHBvKSB7XG4gOTkxOlx0XHRcdFx0aWYgKCFwb3MtLSlcbiA5OTI6XHRcdFx0XHRcdGdvdG8gb3V0O1xuIDk5MzpcdFx0XHRcdHBvID0gcmN1X2RlcmVmZXJlbmNlKHBvLVx1MDAzZW5leHQpO1xuIDk5NDpcdFx0XHR9XG4gOTk1Olx0XHR9XG4gOTk2Olx0XG4gOTk3Olx0b3V0OlxuIDk5ODpcdFx0cmV0dXJuIHBvO1xuIDk5OTpcdH1cbjEwMDA6XHRcbjEwMDE6XHRzdGF0aWMgdm9pZCAqcHBwb2Vfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbjEwMDI6XHRcdF9fYWNxdWlyZXMoUkNVKVxuMTAwMzpcdHtcbjEwMDQ6XHRcdHN0cnVjdCBwcHBvZV9uZXQgKnBuID0gcHBwb2VfcGVybmV0KHNlcV9maWxlX25ldChzZXEpKTtcbjEwMDU6XHRcdGxvZmZfdCBsID0gKnBvcztcbjEwMDY6XHRcbjEwMDc6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjEwMDg6XHRcdHJldHVybiBsID8gcHBwb2VfZ2V0X2lkeChwbiwgLS1sKSA6IFNFUV9TVEFSVF9UT0tFTjtcbjEwMDk6XHR9XG4xMDEwOlx0XG4xMDExOlx0c3RhdGljIHZvaWQgKnBwcG9lX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbjEwMTI6XHR7XG4xMDEzOlx0XHRzdHJ1Y3QgcHBwb2VfbmV0ICpwbiA9IHBwcG9lX3Blcm5ldChzZXFfZmlsZV9uZXQoc2VxKSk7XG4xMDE0Olx0XHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8sICpuZXh0O1xuMTAxNTpcdFxuMTAxNjpcdFx0JiM0MzsmIzQzOypwb3M7XG4xMDE3Olx0XHRpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHtcbjEwMTg6XHRcdFx0cG8gPSBwcHBvZV9nZXRfaWR4KHBuLCAwKTtcbjEwMTk6XHRcdFx0Z290byBvdXQ7XG4xMDIwOlx0XHR9XG4xMDIxOlx0XHRwbyA9IHY7XG4xMDIyOlx0XHRuZXh0ID0gcmN1X2RlcmVmZXJlbmNlKHBvLVx1MDAzZW5leHQpO1xuMTAyMzpcdFx0aWYgKG5leHQpXG4xMDI0Olx0XHRcdHBvID0gbmV4dDtcbjEwMjU6XHRcdGVsc2Uge1xuMTAyNjpcdFx0XHRpbnQgaGFzaCA9IGhhc2hfaXRlbShwby1cdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVx1MDAzZXBwcG9lX3BhLnJlbW90ZSk7XG4xMDI3Olx0XG4xMDI4Olx0XHRcdHBvID0gTlVMTDtcbjEwMjk6XHRcdFx0d2hpbGUgKCYjNDM7JiM0MztoYXNoIFx1MDAzYyBQUFBPRV9IQVNIX1NJWkUpIHtcbjEwMzA6XHRcdFx0XHRwbyA9IHJjdV9kZXJlZmVyZW5jZShwbi1cdTAwM2VoYXNoX3RhYmxlW2hhc2hdKTtcbjEwMzE6XHRcdFx0XHRpZiAocG8pXG4xMDMyOlx0XHRcdFx0XHRicmVhaztcbjEwMzM6XHRcdFx0fVxuMTAzNDpcdFx0fVxuMTAzNTpcdFxuMTAzNjpcdG91dDpcbjEwMzc6XHRcdHJldHVybiBwbztcbjEwMzg6XHR9XG4xMDM5Olx0XG4xMDQwOlx0c3RhdGljIHZvaWQgcHBwb2Vfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4xMDQxOlx0XHRfX3JlbGVhc2VzKFJDVSlcbjEwNDI6XHR7XG4xMDQzOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjEwNDQ6XHR9XG4xMDQ1Olx0XG4xMDQ2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvZV9zZXFfb3BzID0ge1xuMTA0NzpcdFx0LnN0YXJ0XHRcdD0gcHBwb2Vfc2VxX3N0YXJ0LFxuMTA0ODpcdFx0Lm5leHRcdFx0PSBwcHBvZV9zZXFfbmV4dCxcbjEwNDk6XHRcdC5zdG9wXHRcdD0gcHBwb2Vfc2VxX3N0b3AsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFBvRSBQcm9jZnMgQ2hhbmdlKioKCk9rYXksIHNvIGBwcHBvZV9zZXFfc3RhcnRgIGdyYWJzIGFuIFJDVSByZWFkIGxvY2ssIGFuZCBgcHBwb2Vfc2VxX3N0b3BgIHJlbGVhc2VzIGl0LiBUaGF0IG1lYW5zIHRoZSBgcHBwb2Vfc2VxX3Nob3dgIGZ1bmN0aW9uLCB3aGVyZSB0aGUgY2hhbmdlIGlzIGJlaW5nIG1hZGUsIGlzIG9wZXJhdGluZyB3aXRoaW4gdGhlIHByb3RlY3Rpb24gb2YgdGhhdCBSQ1UgbG9jay4gVGhpcyBjaGFuZ2UgaXMganVzdCBhYm91dCBhZGRpbmcgYSBuZXcgY29sdW1uIHRvIHRoZSBgL3Byb2MvbmV0L3BwcG9lYCBvdXRwdXQsIHNwZWNpZmljYWxseSBpbmNsdWRpbmcgdGhlIHJlc3VsdCBvZiBgcHBwX2Rldl9uYW1lKCZhbXA7cG8tJmd0O2NoYW4pYC4gSXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IEl0IHNlZW1zIHJlbGF0aXZlbHkgYmVuaWduLiBJdCYjMzk7cyBwcm9jZnMsIGFuZCBpdCYjMzk7cyBqdXN0IGZvcm1hdHRpbmcgb3V0cHV0LgoKSG93ZXZlciwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGUgZGV0YWlscy4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgbGllcyBpbiBgcHBwX2Rldl9uYW1lYC4gVGhpcyBmdW5jdGlvbiBkZXJlZmVyZW5jZXMgYGNoYW4tJmd0O3BwcGAsIHRoZW4gYHJjdV9kZXJlZmVyZW5jZShwY2gtJmd0O3BwcClgLCBhbmQgZmluYWxseSBhY2Nlc3NlcyBgcHBwLSZndDtkZXYtJmd0O25hbWVgLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGx1cmtpbmcgd2l0aGluIHRoaXMgY2hhaW4/IFNwZWNpZmljYWxseSwgaWYgYHBvLSZndDtjaGFuYCBpc24mIzM5O3QgY29tcGxldGVseSBpbml0aWFsaXplZCBhdCB0aGUgdGltZSBgcHBwb2Vfc2VxX3Nob3dgIGlzIGNhbGxlZCwgY291bGQgdGhpcyBsZWFkIHRvIGEgY3Jhc2g/IEkgc2hvdWxkIGNoZWNrIHdoZXJlIGBwby0mZ3Q7Y2hhbmAgaXMgaW5pdGlhbGl6ZWQuIFRoaXMgY291bGQgYmUgYSB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTktICpcdFx0c2ltdWx0YW5lb3VzIGludm9jYXRpb24gb2YgcHBwX2lucHV0XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyMDogKlx0XHRhbmQgcHBwX3VucmVnaXN0ZXJfY2hhbm5lbC5cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjIxOiAqIDA0MDgwMCA6XHRSZXNwZWN0IHJlZmVyZW5jZSBjb3VudCBtZWNoYW5pc21zIG9uIG5ldC1kZXZpY2VzLlxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjItICogMjAwODAwIDpcdGZpeCBrZnJlZShza2IpIGluIHBwcG9lX3JjdiAoYWNtZSlcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00MC0gKlx0XHRyZWZlcmVuY2Ugb2YgZGV2aWNlIG9uIGNsb3NlKS5cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQxOiAqIDEyMTMwMSA6XHROZXcgcHBwIGNoYW5uZWxzIGludGVyZmFjZTsgY2Fubm90IHVucmVnaXN0ZXIgYSBjaGFubmVsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00Mi0gKlx0XHRmcm9tIGludGVycnVwdHMuICBUaHVzLCB3ZSBtYXJrIHRoZSBzb2NrZXQgYXMgYSBaT01CSUVcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02Ny0jaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9wcHBveC5oXHUwMDNlXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2ODojaW5jbHVkZSBcdTAwM2NsaW51eC9wcHBfY2hhbm5lbC5oXHUwMDNlXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02OS0jaW5jbHVkZSBcdTAwM2NsaW51eC9wcHBfZGVmcy5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcHBwb2Vfb3BzO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTE6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2VfY2hhbl9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05Mi1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz0yNTY9c3RhdGljIHZvaWQgcHBwb2VfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjkzLVx0XHRcdFx0cHBwb3hfdW5iaW5kX3NvY2soc2spO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Mjk0Olx0XHRcdFx0c2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI5NS1cdFx0XHRcdHBvLVx1MDAzZXBwcG9lX2RldiA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzAzLVx0XHRcdCAqIGhhc2ggY2hhaW4uIFdlIGRyb3BwZWQgbG9ja3Mgc28gdGhlIHdvcmxkIG1heSBoYXZlXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzozMDQ6XHRcdFx0ICogY2hhbmdlIGZyb20gdW5kZXJuZWF0aCB1cy5cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTMwNS1cdFx0XHQgKi9cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz0zMTY9c3RhdGljIGludCBwcHBvZV9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTMyNC1cdGNhc2UgTkVUREVWX0NIQU5HRU1UVTpcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjMyNTpcdFx0LyogQSBjaGFuZ2UgaW4gbXR1IG9yIGFkZHJlc3MgaXMgYSBiYWQgdGhpbmcsIHJlcXVpcmluZ1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzI2LVx0XHQgKiBMQ1AgcmUtbmVnb3RpYXRpb24uXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9MzUxPXN0YXRpYyBpbnQgcHBwb2VfcmN2X2NvcmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM1Ni1cdCAqIGV4ZWN1dGluZyBpbiBsb2NrX3NvY2soKS9yZWxlYXNlX3NvY2soKSBib3VuZHM7IG1lYW5pbmcgc2stXHUwMDNlc2tfc3RhdGVcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjM1NzpcdCAqIGNhbiYjMzk7dCBjaGFuZ2UuXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zNTgtXHQgKi9cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zNjAtXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgXHUwMDI2IFBQUE9YX0JPVU5EKSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzozNjE6XHRcdHBwcF9pbnB1dChcdTAwMjZwby1cdTAwM2VjaGFuLCBza2IpO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzYyLVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz01ODc9c3RhdGljIGludCBwcHBvZV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1c2VydmFkZHIsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjM0LVx0XHRtZW1zZXQoXHUwMDI2cG8tXHUwMDNlcHBwb2VfcGEsIDAsIHNpemVvZihwby1cdTAwM2VwcHBvZV9wYSkpO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjM1Olx0XHRtZW1zZXQoXHUwMDI2cG8tXHUwMDNlY2hhbiwgMCwgc2l6ZW9mKHBvLVx1MDAzZWNoYW4pKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYzNi1cdFx0cG8tXHUwMDNlbmV4dCA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjY2LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjY3Olx0XHRwby1cdTAwM2VjaGFuLmhkcmxlbiA9IChzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikgJiM0MztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY2OC1cdFx0XHRcdCAgIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjY5LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjcwOlx0XHRwby1cdTAwM2VjaGFuLm10dSA9IGRldi1cdTAwM2VtdHUgLSBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikgLSAyO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjcxOlx0XHRwby1cdTAwM2VjaGFuLnByaXZhdGUgPSBzaztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY3MjpcdFx0cG8tXHUwMDNlY2hhbi5vcHMgPSBcdTAwMjZwcHBvZV9jaGFuX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY3MzpcdFx0cG8tXHUwMDNlY2hhbi5kaXJlY3RfeG1pdCA9IHRydWU7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NzQtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NzU6XHRcdGVycm9yID0gcHBwX3JlZ2lzdGVyX25ldF9jaGFubmVsKGRldl9uZXQoZGV2KSwgXHUwMDI2cG8tXHUwMDNlY2hhbik7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NzYtXHRcdGlmIChlcnJvcikge1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTg0NT1zdGF0aWMgaW50IF9fcHBwb2VfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtODUxLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6ODUyOlx0LyogVGhlIGhpZ2hlci1sZXZlbCBQUFAgY29kZSAocHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpKSBlbnN1cmVzIHRoZSBQUFBcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTg1My1cdCAqIHhtaXQgb3BlcmF0aW9ucyBjb25jbHVkZSBwcmlvciB0byBhbiB1bnJlZ2lzdHJhdGlvbiBjYWxsLiAgVGh1c1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6ODU0Olx0ICogc2stXHUwMDNlc2tfc3RhdGUgY2Fubm90IGNoYW5nZSwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gZG8gbG9ja19zb2NrKCkuXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy04NTUtXHQgKiBCdXQsIHdlIGFsc28gY2FuJiMzOTt0IGRvIGEgbG9ja19zb2NrIHNpbmNlIHRoYXQgaW50cm9kdWNlcyBhIHBvdGVudGlhbFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtODU2LVx0ICogZGVhZGxvY2sgYXMgd2UmIzM5O2QgcmV2ZXJzZSB0aGUgbG9jayBvcmRlcmluZyB1c2VkIHdoZW4gY2FsbGluZ1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6ODU3Olx0ICogcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpLlxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtODU4LVx0ICovXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTAxLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkwMjpzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTAzLXtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkwNDpcdHN0cnVjdCBzb2NrICpzayA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkwNS1cdHJldHVybiBfX3BwcG9lX3htaXQoc2ssIHNrYik7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTA4PXN0YXRpYyBpbnQgcHBwb2VfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkwOS1cdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5MTA6XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MTEte1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTEyOlx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTEzLVx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkzMC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkzMTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkzMi1cdC5zdGFydF94bWl0ID0gcHBwb2VfeG1pdCxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz05NjI9c3RhdGljIGludCBwcHBvZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NzQtXHRkZXZfbmFtZSA9IHBvLVx1MDAzZXBwcG9lX3BhLmRldjtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjk3NTpcdHBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTc2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTQ1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFBQUG9FIENvbm5lY3Rpb24gQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIFBQUG9FIGNvbm5lY3Rpb24gZmxvdywgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHBvLSZndDtjaGFuYCB3aXRoaW4gYHBwcG9lX2Nvbm5lY3RgLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbWVudGFsIG1hcCB0aGVuIGhhcyB0byB0cmFjZSBob3cgdGhpcyBjaGFubmVsIHZhcmlhYmxlIGlzIG1hbmFnZWQuIEFoLCBoZXJlIHdlIGdvLCBgcHBwb2Vfc2VxX3Nob3dgIGlzIHdoZXJlIEkgc2VlIHRoZSBjaGFubmVsIGJlaW5nIHV0aWxpemVkLiBJdCYjMzk7cyBpdGVyYXRpbmcgdGhyb3VnaCBhIGhhc2ggdGFibGUsIGBwbi0mZ3Q7aGFzaF90YWJsZWAuIE1ha2VzIHNlbnNlLCB3ZSB1c2UgYSBoYXNoIGZvciBxdWljayBsb29rdXBzIGluIG5ldHdvcmtpbmcuCgpOb3csIHdoZXJlIGRvZXMgdGhhdCBzb2NrZXQgZ2V0IGFkZGVkIHRvIHRoZSBoYXNoPyBCYWNrIHRvIGBwcHBvZV9jb25uZWN0YCwgeWVzLCBJIGNhbiBzZWUgaXQmIzM5O3MgYWRkZWQgdXNpbmcgYHBwcG9lX2hhc2hfYWRkKHBvKWAuIEJ1dCB3YWl0IGEgc2Vjb25kLCBhIGZsaWNrZXIgb2YgZG91YnQuLi4gZG9lcyBgcHBwb2VfaGFzaF9hZGRgIGhhcHBlbiAqYmVmb3JlKiBvciAqYWZ0ZXIqIGBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWxgIGlzIGNhbGxlZD8gVGhhdCYjMzk7cyBhIGNydWNpYWwgc2VxdWVuY2UgZGVwZW5kZW5jeSB0byBiZSBzdXJlIG9mLiBUaGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24gdGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYyEgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IG9yZGVyIG9mIG9wZXJhdGlvbnMgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgY29ycmVjdCBhbmQgcmVnaXN0ZXJlZCBwcm9wZXJseS4gUmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBiYWNrIHRvIGBwcHBvZV9jb25uZWN0YCBhbmQgY29uZmlybSB0aGUgZXhhY3Qgc2VxdWVuY2UgdGhlcmUuIEdvdHRhIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY0MDpcdFx0fVxuIDY0MTpcdFxuIDY0MjpcdFx0LyogUmUtYmluZCBpbiBzZXNzaW9uIHN0YWdlIG9ubHkgKi9cbiA2NDM6XHRcdGlmIChzdGFnZV9zZXNzaW9uKHNwLVx1MDAzZXNhX2FkZHIucHBwb2Uuc2lkKSkge1xuIDY0NDpcdFx0XHRlcnJvciA9IC1FTk9ERVY7XG4gNjQ1Olx0XHRcdG5ldCA9IHNvY2tfbmV0KHNrKTtcbiA2NDY6XHRcdFx0ZGV2ID0gZGV2X2dldF9ieV9uYW1lKG5ldCwgc3AtXHUwMDNlc2FfYWRkci5wcHBvZS5kZXYpO1xuIDY0NzpcdFx0XHRpZiAoIWRldilcbiA2NDg6XHRcdFx0XHRnb3RvIGVycl9wdXQ7XG4gNjQ5Olx0XG4gNjUwOlx0XHRcdHBvLVx1MDAzZXBwcG9lX2RldiA9IGRldjtcbiA2NTE6XHRcdFx0cG8tXHUwMDNlcHBwb2VfaWZpbmRleCA9IGRldi1cdTAwM2VpZmluZGV4O1xuIDY1MjpcdFx0XHRwbiA9IHBwcG9lX3Blcm5ldChuZXQpO1xuIDY1MzpcdFx0XHRpZiAoIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkpIHtcbiA2NTQ6XHRcdFx0XHRnb3RvIGVycl9wdXQ7XG4gNjU1Olx0XHRcdH1cbiA2NTY6XHRcbiA2NTc6XHRcdFx0bWVtY3B5KFx1MDAyNnBvLVx1MDAzZXBwcG9lX3BhLFxuIDY1ODpcdFx0XHQgICAgICAgXHUwMDI2c3AtXHUwMDNlc2FfYWRkci5wcHBvZSxcbiA2NTk6XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgcHBwb2VfYWRkcikpO1xuIDY2MDpcdFxuIDY2MTpcdFx0XHRzcGluX2xvY2soXHUwMDI2cG4tXHUwMDNlaGFzaF9sb2NrKTtcbiA2NjI6XHRcdFx0ZXJyb3IgPSBfX3NldF9pdGVtKHBuLCBwbyk7XG4gNjYzOlx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnBuLVx1MDAzZWhhc2hfbG9jayk7XG4gNjY0Olx0XHRcdGlmIChlcnJvciBcdTAwM2MgMClcbiA2NjU6XHRcdFx0XHRnb3RvIGVycl9wdXQ7XG4gNjY2Olx0XG4gNjY3Olx0XHRcdHBvLVx1MDAzZWNoYW4uaGRybGVuID0gKHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSAmIzQzO1xuIDY2ODpcdFx0XHRcdFx0ICAgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4gNjY5Olx0XG4gNjcwOlx0XHRcdHBvLVx1MDAzZWNoYW4ubXR1ID0gZGV2LVx1MDAzZW10dSAtIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSAtIDI7XG4gNjcxOlx0XHRcdHBvLVx1MDAzZWNoYW4ucHJpdmF0ZSA9IHNrO1xuIDY3MjpcdFx0XHRwby1cdTAwM2VjaGFuLm9wcyA9IFx1MDAyNnBwcG9lX2NoYW5fb3BzO1xuIDY3MzpcdFx0XHRwby1cdTAwM2VjaGFuLmRpcmVjdF94bWl0ID0gdHJ1ZTtcbiA2NzQ6XHRcbiA2NzU6XHRcdFx0ZXJyb3IgPSBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoZGV2X25ldChkZXYpLCBcdTAwMjZwby1cdTAwM2VjaGFuKTtcbiA2NzY6XHRcdFx0aWYgKGVycm9yKSB7XG4gNjc3Olx0XHRcdFx0ZGVsZXRlX2l0ZW0ocG4sIHBvLVx1MDAzZXBwcG9lX3BhLnNpZCxcbiA2Nzg6XHRcdFx0XHRcdCAgICBwby1cdTAwM2VwcHBvZV9wYS5yZW1vdGUsIHBvLVx1MDAzZXBwcG9lX2lmaW5kZXgpO1xuIDY3OTpcdFx0XHRcdGdvdG8gZXJyX3B1dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMjMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gYF9fc2V0X2l0ZW0ocG4sIHBvKWAgYWRkcyBzb21ldGhpbmcgdG8gdGhlIGhhc2ggdGFibGUsIGFuZCB0aGVuIGBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWxgIGlzIGNhbGxlZC4gVGhlIGtleSBpc3N1ZSBpcyBpZiBgcHBwb2Vfc2VxX3Nob3dgIGlzIGNhbGxlZCBpbiB0aGUgbWlkZGxlLCBzcGVjaWZpY2FsbHkgaWYgaXTigJlzIGNhbGxlZCAqYmV0d2VlbiogdGhlIHRhYmxlIGVudHJ5IGFuZCB0aGUgcmVnaXN0cmF0aW9uLCB0aGUgYHBvLSZndDtjaGFuYCBtZW1iZXIgZ2V0cyB6ZXJvZWQgb3V0IHdpdGggYG1lbXNldGAuIFRoaXMgaXMgdGhlIHBvdGVudGlhbCBwb2ludCBvZiBjb250ZW50aW9uLgoKTm93LCBpbnNpZGUgYHBwcF9kZXZfbmFtZWAsIHRoZSBjb2RlIGdyYWJzIGEgYHN0cnVjdCBjaGFubmVsICpwY2ggPSBjaGFuLSZndDtwcHA7YC4gQmVjYXVzZSBgY2hhbmAgaXMgemVyb2VkLCBgY2hhbi0mZ3Q7cHBwYCBpcyAqZ3VhcmFudGVlZCogdG8gYmUgTlVMTC4gVGhlbiB0aGVyZSYjMzk7cyBhbiBgaWYgKHBjaClgIGNoZWNrLCB3aGljaCBlZmZlY3RpdmVseSB0ZXN0cyBmb3IgTlVMTC4gVGhlIGNvZGUgaGFuZGxlcyBOVUxMIHdpdGggYHBwcF9uYW1lID8gcHBwX25hbWUgOiAmIzM0OyYjMzQ7YCwgc28gdGhhdCYjMzk7cyBzYWZlLCB3aGljaCBtZWFucyB0aGVyZSBzaG91bGQgYmUgbm8gaXNzdWVzIGhlcmUuIE5vIGNyYXNoZXMsIG5vIHVuZGVmaW5lZCBiZWhhdmlvci4KCk15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgY29uc3RpdHV0ZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZXF1aXJpbmcgZnV6emluZy4gVGhlIGNoYW5nZSBpcyBzaW1wbHkgYSBgc2VxX2ZpbGVgIG91dHB1dCBtb2RpZmljYXRpb24sIHJpZ2h0PyBPbmx5IHRoZSBkaXNwbGF5IG9mIGRhdGEsIHNwZWNpZmljYWxseSB0aGUgUFBQIGRldmljZSBuYW1lIGluIGAvcHJvYy9uZXQvcHBwb2VgIGNoYW5nZWQuIFRoZSBwYXRjaCBub3RlcyBzYXkgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzJiMzNDsgb3IgY2hhbmdlcyB0aGF0ICYjMzQ7ZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdyYjMzQ7LgoKSXMgdGhpcyBkaXNwbGF5IG9mIHRoZSBQUFAgZGV2aWNlIG5hbWUgcHVyZWx5IGRlY29yYXRpdmU/IEl0JiMzOTtzIGFuICpvYnNlcnZhYmlsaXR5KiBjaGFuZ2UsIG5vdCBhICpmdW5jdGlvbmFsKiBvbmUuIFRoZSBuZXR3b3JrIHN0YWNrJiMzOTtzIGFjdHVhbCBleGVjdXRpb24gZmxvdyAqaXNuJiMzOTt0KiBhbHRlcmVkOyBpdCBqdXN0IHByaW50cyB0aGUgUFBQIGRldmljZSBuYW1lLiBJJiMzOTttIGluY2xpbmVkIHRvIGNhdGVnb3JpemUgdGhpcyBhcyBlaXRoZXIgJiMzNDtkZWNvcmF0aXZlIGNoYW5nZXMmIzM0OyBsaWtlIGxvZ2dpbmcgb3IgdHJhY2luZyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGFzIG5vdCBmdW5jdGlvbmFsbHkgY2hhbmdpbmcgdGhlIGV4ZWN1dGlvbi4KCi4uLldhaXQgYSBzZWNvbmQuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCBtZSB0aG9yb3VnaGx5IGNoZWNrIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBjb2RlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaC4gSSBjYW5ub3QgYWZmb3JkIHRvIG1pc3MgYSBzdWJ0bGUgZnVuY3Rpb25hbCBhbHRlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfZGV2X25hbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9Mjk1Mz1pbnQgcHBwX3VuaXRfbnVtYmVyKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTcyLSAqL1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6Mjk3MzpjaGFyICpwcHBfZGV2X25hbWUoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjk3NC17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MzY2Mj1FWFBPUlRfU1lNQk9MKHBwcF91bml0X251bWJlcik7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzozNjYzOkVYUE9SVF9TWU1CT0wocHBwX2Rldl9uYW1lKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTM2NjQtRVhQT1JUX1NZTUJPTChwcHBfaW5wdXQpO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTk2Mj1zdGF0aWMgaW50IHBwcG9lX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk3NC1cdGRldl9uYW1lID0gcG8tXHUwMDNlcHBwb2VfcGEuZGV2O1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTc1Olx0cHBwX25hbWUgPSBwcHBfZGV2X25hbWUoXHUwMDI2cG8tXHUwMDNlY2hhbik7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NzYtXG4tLVxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oPTczPWV4dGVybiBpbnQgcHBwX3VuaXRfbnVtYmVyKHN0cnVjdCBwcHBfY2hhbm5lbCAqKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNzctICovXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg6Nzg6ZXh0ZXJuIGNoYXIgKnBwcF9kZXZfbmFtZShzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7XG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNzktXG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz00OTg9c3RhdGljIHZvaWQgcHBwb2wydHBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZylcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTUwNy1cbm5ldC9sMnRwL2wydHBfcHBwLmM6NTA4Olx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyAgIGludGVyZmFjZSAlc1xcblwmIzM0OywgcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtNTA5LVx0fVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MTUxMz1zdGF0aWMgdm9pZCBwcHBvbDJ0cF9zZXFfc2Vzc2lvbl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE1NjQtXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjE1NjU6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ICAgaW50ZXJmYWNlICVzXFxuXCYjMzQ7LCBwcHBfZGV2X25hbWUoXHUwMDI2cG8tXHUwMDNlY2hhbikpO1xubmV0L2wydHAvbDJ0cF9wcHAuYy0xNTY2LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUyNAoJCQkJCQkJb3V0cHV0OiA4MQoJCQkJCQkJdGhvdWdodHM6IDQyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQUFBvRSBJbmZvcm1hdGlvbiBEaXNwbGF5IFVwZGF0ZSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjaGFuZ2UgaXMgaXNvbGF0ZWQgdG8gYGRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jYCwgYW5kIGl0JiMzOTtzIGEgbWlub3IgZW5oYW5jZW1lbnQgcmVsYXRlZCB0byB0aGUgaW5mb3JtYXRpb24gZGlzcGxheWVkIGluIGAvcHJvYy9uZXQvcHBwb2VgLiBJdCBhcHBlYXJzIHRoZSBhdXRob3IgaXMgYWRkaW5nIGEgbmV3IGNvbHVtbiB0byB0aGUgb3V0cHV0IG9mIGAvcHJvYy9uZXQvcHBwb2VgIHRvIHNob3cgdGhlIGFzc29jaWF0ZWQgUFBQIGRldmljZSBuYW1lLiBJIHNlZSB0aGUgY29kZSBpcyB1c2luZyBgcHBwX2Rldl9uYW1lKClgIHRvIHJldHJpZXZlIHRoZSBQUFAgZGV2aWNlIG5hbWUuIFRoaXMgaXMgcHVyZWx5IGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzLCBhIGNvc21ldGljIGNoYW5nZSBpZiB5b3Ugd2lsbC4KCkZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGlzbiYjMzk7dCBhbnl0aGluZyB0byBiZSBjb25jZXJuZWQgYWJvdXQuIFRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBQUFBvRSBjb25uZWN0aW9uIGFuZCBkYXRhIGhhbmRsaW5nIGlzbiYjMzk7dCBiZWluZyB0b3VjaGVkLCBzbyB0aGVyZSBhcmUgbm8gbmV3IGF0dGFjayBzdXJmYWNlcyBiZWluZyBpbnRyb2R1Y2VkLiBJdCYjMzk7cyBzaW1wbHkgYWJvdXQgYmV0dGVyIG9ic2VydmFiaWxpdHkgb2YgdGhlIGV4aXN0aW5nIFBQUG9FIGNvbm5lY3Rpb25zLCBhbmQgc2luY2UgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFyZW4mIzM5O3QgbW9kaWZpZWQsIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgZnV6emluZyByZWxhdGVkIHRvIGRhdGEgY29ycnVwdGlvbiwgYnVmZmVyIG92ZXJmbG93cywgZXRjLiwgYXJlIG5vdCBwcmVzZW50LgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIGxhY2sgb2YgZnVuY3Rpb25hbCBpbXBhY3Qgb24gY3JpdGljYWwgZXhlY3V0aW9uIHBhdGhzLCB0aGlzIG1vZGlmaWNhdGlvbiBpcyBub3Qgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBzZXFfZmlsZSBzaG93IGZ1bmN0aW9uIGZvciAvcHJvYy9uZXQvcHBwb2UgdG8gaW5jbHVkZSB0aGUgUFBQIGRldmljZSBuYW1lIGluIHRoZSBvdXRwdXQuIFRoaXMgaXMgYSBwdXJlbHkgb2JzZXJ2YWJpbGl0eS9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgc2VxX2ZpbGUgc2hvdyBmdW5jdGlvbiBmb3IgL3Byb2MvbmV0L3BwcG9lIHRvIGluY2x1ZGUgdGhlIFBQUCBkZXZpY2UgbmFtZSBpbiB0aGUgb3V0cHV0LiBUaGlzIGlzIGEgcHVyZWx5IG9ic2VydmFiaWxpdHkvZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozMToyNy41NDAyOTkzNTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc4NjQ1MzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgc2VxX2ZpbGUgc2hvdyBmdW5jdGlvbiBmb3IgL3Byb2MvbmV0L3BwcG9lIHRvIGluY2x1ZGUgdGhlIFBQUCBkZXZpY2UgbmFtZSBpbiB0aGUgb3V0cHV0LiBUaGlzIGlzIGEgcHVyZWx5IG9ic2VydmFiaWxpdHkvZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjMxOjI3LjU0MDMxMDM0M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2MTc2MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2QyYTQ5OTdlNzQxYzI3YjUzN2MxMWU2NGFiZTQ1NmMxNWY2NzJiOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyOSAwNDozMToyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXFxuaW5kZXggNjg3NGExYThlZGFmMS4uY2IzMWY1ZGI0M2U4MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXFxuQEAgLTk2MywxNyArOTYzLDE5IEBAIHN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuIHtcXG4gXFx0c3RydWN0IHBwcG94X3NvY2sgKnBvO1xcbiBcXHRjaGFyICpkZXZfbmFtZTtcXG4rXFx0Y2hhciAqcHBwX25hbWU7XFxuIFxcbiBcXHRpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHtcXG4tXFx0XFx0c2VxX3B1dHMoc2VxLCBcXFwiSWQgICAgICAgQWRkcmVzcyAgICAgICAgICAgICAgRGV2aWNlXFxcXG5cXFwiKTtcXG4rXFx0XFx0c2VxX3B1dHMoc2VxLCBcXFwiSWQgICAgICAgQWRkcmVzcyAgICAgICAgICAgICAgRGV2aWNlICAgUFBQLURldmljZVxcXFxuXFxcIik7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbiBcXHRwbyA9IHY7XFxuIFxcdGRldl9uYW1lID0gcG8tXFx1MDAzZXBwcG9lX3BhLmRldjtcXG4rXFx0cHBwX25hbWUgPSBwcHBfZGV2X25hbWUoXFx1MDAyNnBvLVxcdTAwM2VjaGFuKTtcXG4gXFxuLVxcdHNlcV9wcmludGYoc2VxLCBcXFwiJTA4WCAlcE0gJThzXFxcXG5cXFwiLFxcbi1cXHRcXHRwby1cXHUwMDNlcHBwb2VfcGEuc2lkLCBwby1cXHUwMDNlcHBwb2VfcGEucmVtb3RlLCBkZXZfbmFtZSk7XFxuK1xcdHNlcV9wcmludGYoc2VxLCBcXFwiJTA4WCAlcE0gJThzICUxMHNcXFxcblxcXCIsXFxuK1xcdFxcdCAgIHBvLVxcdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVxcdTAwM2VwcHBvZV9wYS5yZW1vdGUsIGRldl9uYW1lLCBwcHBfbmFtZSA/IHBwcF9uYW1lIDogXFxcIlxcXCIpO1xcbiBvdXQ6XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjMxOjI4LjE3NzM4MjgwM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQzMTQ5MzYwOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBzZXFfZmlsZSBzaG93IGZ1bmN0aW9uIGZvciAvcHJvYy9uZXQvcHBwb2UgdG8gaW5jbHVkZSB0aGUgUFBQIGRldmljZSBuYW1lIGluIHRoZSBvdXRwdXQuIFRoaXMgaXMgYSBwdXJlbHkgb2JzZXJ2YWJpbGl0eS9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBuZXR3b3JrIHN0YWNrLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2QyYTQ5OTdlNzQxYzI3YjUzN2MxMWU2NGFiZTQ1NmMxNWY2NzJiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDA0OjMxOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xuaW5kZXggNjg3NGExYThlZGFmMS4uY2IzMWY1ZGI0M2U4MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xuQEAgLTk2MywxNyArOTYzLDE5IEBAIHN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4ge1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvO1xuIFx0Y2hhciAqZGV2X25hbWU7XG4rXHRjaGFyICpwcHBfbmFtZTtcbiBcbiBcdGlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikge1xuLVx0XHRzZXFfcHV0cyhzZXEsIFwiSWQgICAgICAgQWRkcmVzcyAgICAgICAgICAgICAgRGV2aWNlXFxuXCIpO1xuK1x0XHRzZXFfcHV0cyhzZXEsIFwiSWQgICAgICAgQWRkcmVzcyAgICAgICAgICAgICAgRGV2aWNlICAgUFBQLURldmljZVxcblwiKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHRwbyA9IHY7XG4gXHRkZXZfbmFtZSA9IHBvLVx1MDAzZXBwcG9lX3BhLmRldjtcbitcdHBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pO1xuIFxuLVx0c2VxX3ByaW50ZihzZXEsIFwiJTA4WCAlcE0gJThzXFxuXCIsXG4tXHRcdHBvLVx1MDAzZXBwcG9lX3BhLnNpZCwgcG8tXHUwMDNlcHBwb2VfcGEucmVtb3RlLCBkZXZfbmFtZSk7XG4rXHRzZXFfcHJpbnRmKHNlcSwgXCIlMDhYICVwTSAlOHMgJTEwc1xcblwiLFxuK1x0XHQgICBwby1cdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVx1MDAzZXBwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUsIHBwcF9uYW1lID8gcHBwX25hbWUgOiBcIlwiKTtcbiBvdXQ6XG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozMToyOC4xNzczODUyOTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjY4NTEyNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHk6IFBQUG9FIFByb2NmcyBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHR3ZWFraW5nIGBkcml2ZXJzL25ldC9wcHAvcHBwb2UuY2AuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBpdCdzIG1vZGlmeWluZyB0aGUgYHBwcG9lX3NlcV9zaG93YCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIHNob3cgZnVuY3Rpb24gZm9yIGAvcHJvYy9uZXQvcHBwb2VgLiBJdCdzIGFkZGluZyBhIGxpbmUgdG8gcHJpbnQgYHBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pO2AgYW5kIHRoZSBuYW1lLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiU2hvdWxkIHdlIGV2ZW4gYm90aGVyIGZ1enppbmcgdGhpcz9cIiBJdCdzIGEgcHJvY2ZzIHNob3cgZnVuY3Rpb24sIHNvIGl0J3MgKnJlYWNoYWJsZSouIEJ1dCB0aGVuIGFnYWluLCAqYWxsKiBwcm9jZnMgc2hvdyBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZS4uLiBzbyB0aGF0J3Mgbm90IGEgc3Ryb25nIGp1c3RpZmljYXRpb24gaW4gaXRzZWxmLlxuXG5MZXQncyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSwgaXQncyBhZGRpbmcgYSBuZXcgcGllY2Ugb2YgaW5mb3JtYXRpb24g4oCTIGEgbmV3IGNvbHVtbiB0byBgL3Byb2MvbmV0L3BwcG9lYC4gSXMgdGhpcyBwdXJlbHkgY29zbWV0aWM/IFRoZSBndWlkZWxpbmVzIEknbSBvcGVyYXRpbmcgdW5kZXIgc3VnZ2VzdCByZWplY3RpbmcgcGF0Y2hlcyB0aGF0IGFyZSBtZXJlbHkgZGVjb3JhdGl2ZSwgc3VjaCBhcyBsb2cgY2hhbmdlcyBvciBjb21tZW50cy4gSG93ZXZlciwgdGhpcyBpc24ndCBqdXN0IGEgbG9nIG1lc3NhZ2U7IGl0J3MgY2hhbmdpbmcgdGhlICpvdXRwdXQqIG9mIGBzZXFfZmlsZWAuXG5cblRoZSBxdWVzdGlvbiBiZWNvbWVzLCBpcyB0aGlzIG5ldyBvdXRwdXQgKmluZm9ybWF0aXZlKiBpbiBhIHdheSB0aGF0IG1pZ2h0IGludHJvZHVjZSBuZXcgYnVncz8gSWYgaXQncyBhIG5ldyBpbmZvcm1hdGlvbmFsIG91dHB1dCwgdGhlbiBtYXliZSBub3QuXG5cbldhaXQgYSBzZWNvbmQuLi4gaG9sZCBvbi4gKmBwcHBfZGV2X25hbWVgKi4gVGhhdCdzIHRoZSBrZXkuIFRoYXQgZnVuY3Rpb24gbWlnaHQgaGF2ZSBpdHMgb3duIGlzc3Vlcy4gV2hhdCBpZiBgcG8tXHUwMDNlY2hhbmAgaXNuJ3QgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IHNvbWV3aGVyZT8gT3IsIGV2ZW4gd29yc2UsIHdoYXQgaWYgdGhlcmUncyBhIHJhY2UgY29uZGl0aW9uIGluIGhvdyB0aGF0IGlzIGJlaW5nIGFjY2Vzc2VkPyBJIHNob3VsZCByZWFsbHkgY2hlY2sgYHBwcF9kZXZfbmFtZWAgaXRzZWxmIHRvIHNlZSBpZiBpdCdzIGdvdCBhbnkgdnVsbmVyYWJpbGl0aWVzLiAqVGhhdCogbWlnaHQgbWFrZSB0aGlzIGZ1enphYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6MzMuNDQ1OTA0NjQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjA2NTU0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfZGV2X25hbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0yOTUzPWludCBwcHBfdW5pdF9udW1iZXIoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjk3Mi0gKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoyOTczOmNoYXIgKnBwcF9kZXZfbmFtZShzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjk3NC17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0zNjYyPUVYUE9SVF9TWU1CT0wocHBwX3VuaXRfbnVtYmVyKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzozNjYzOkVYUE9SVF9TWU1CT0wocHBwX2Rldl9uYW1lKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zNjY0LUVYUE9SVF9TWU1CT0wocHBwX2lucHV0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTk2Mj1zdGF0aWMgaW50IHBwcG9lX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTc0LVxcdGRldl9uYW1lID0gcG8tXFx1MDAzZXBwcG9lX3BhLmRldjtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5NzU6XFx0cHBwX25hbWUgPSBwcHBfZGV2X25hbWUoXFx1MDAyNnBvLVxcdTAwM2VjaGFuKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjMxOjMzLjU2Nzk3ODQwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzYwMjYwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBwcHBfZGV2X25hbWVgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgcHBwX2Rldl9uYW1lYCBpbXBsZW1lbnRhdGlvbi4gSSBrbm93IGl0J3MgYSBjcml0aWNhbCBwaWVjZSBmb3IgYXNzaWduaW5nIGxvZ2ljYWwgbmFtZXMgdG8gUFBQIGludGVyZmFjZXMsIGFuZCBhbnkgYnVnIGhlcmUgY2FuIGNhdXNlIHNlcmlvdXMgaGVhZGFjaGVzIHdpdGggbmV0d29yayBjb25maWd1cmF0aW9uLCBlc3BlY2lhbGx5IGluIG1vcmUgY29tcGxleCBzZXR1cHMuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBkZXZpY2UgbmFtZSBnZW5lcmF0aW9uIGlzIHJvYnVzdCBhbmQgcHJlZGljdGFibGUuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJucyBhcmU6XG5cbiogICAqKkNvbmN1cnJlbmN5OioqIEhvdyBkb2VzIGl0IGhhbmRsZSBtdWx0aXBsZSBQUFAgaW5zdGFuY2VzIGNyZWF0aW5nIGRldmljZXMgc2ltdWx0YW5lb3VzbHk/IEFyZSB0aGVyZSByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIG5hbWluZyBjb2xsaXNpb25zIG9yIGluY29ycmVjdCBhc3NpZ25tZW50cz9cbiogICAqKkVkZ2UgQ2FzZXM6KiogSSBuZWVkIHRvIHRoaW5rIGFib3V0IHdoYXQgaGFwcGVucyB3aXRoIHJlYWxseSBsb25nIGNvbm5lY3Rpb24gdGltZXMsIHRyYW5zaWVudCBsaW5rcywgZGV2aWNlcyB3aXRoIHVudXN1YWwgYXR0cmlidXRlcywgYW5kIHdoYXQgaGFwcGVucyBpbiB0aGUgZXZlbnQgb2YgaW50ZXJmYWNlIGV4aGF1c3Rpb24uIEFyZSB0aGVyZSBhbnkgbGltaXRzIHRoYXQgbWlnaHQgYmUgaGl0IGFuZCBjcmVhdGUgZXJyb3JzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3VyP1xuKiAgICoqTmFtaW5nIFNjaGVtZSBDb25zaXN0ZW5jeToqKiBJcyB0aGUgbmFtaW5nIHNjaGVtZSB3ZWxsLWRlZmluZWQgYW5kIGRvY3VtZW50ZWQ/IElzIGl0IGNvbmZpZ3VyYWJsZSwgYW5kIGlmIHNvLCBob3c/IEFuZCBtb3N0IGltcG9ydGFudGx5LCBpcyBpdCBiYWNrd2FyZHMtY29tcGF0aWJsZSB3aXRoIG9sZGVyIGtlcm5lbHMgb3IgZGlzdHJvcz8gSSdtIGhvcGluZyBpdCdzIHNvbWV0aGluZyBlYXNpbHkgdW5kZXJzdG9vZCBhbmQgZGVidWdnYWJsZSwgcmF0aGVyIHRoYW4gYSBibGFjayBib3guXG4qICAgKipTZWN1cml0eToqKiBBcmUgdGhlcmUgYW55IHNlY3VyaXR5IGltcGxpY2F0aW9ucyB3aXRoIHRoZSBuYW1pbmcgc2NoZW1lPyBDb3VsZCBpdCBiZSBleHBsb2l0ZWQgc29tZWhvdz9cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQncyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gRG9lcyBpdCBoYW5kbGUgaW52YWxpZCBvciBtYWxmb3JtZWQgZGF0YSBncmFjZWZ1bGx5PyBEb2VzIGl0IGxvZyB1c2VmdWwgaW5mb3JtYXRpb24gb3Igc2ltcGx5IGZhaWwgc2lsZW50bHk/IEEgZ29vZCBpbXBsZW1lbnRhdGlvbiB3aWxsIGFsd2F5cyBwcm92aWRlIGRldGFpbGVkIGNvbnRleHQgaW4gY2FzZSBvZiBhIHByb2JsZW0uXG5cbkknbSBnb2luZyB0byB3YW50IHRvOlxuXG4qICAgRGlnIGludG8gdGhlIGNvZGUgYW5kIHF1aWNrbHkgYW5hbHl6ZSB0aGUga2V5IGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgbmFtZSBnZW5lcmF0aW9uIGFuZCBhc3NpZ25tZW50LlxuKiAgIENoZWNrIGZvciBhbnkgZXhpc3RpbmcgYnVnIHJlcG9ydHMgb3IgZGlzY3Vzc2lvbnMgcmVsYXRlZCB0byB0aGlzIGZ1bmN0aW9uLlxuKiAgIFJ1biBzb21lIHRlc3RzIG9uIGRpZmZlcmVudCBzY2VuYXJpb3MgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncywgcGVyaGFwcyBpbmNsdWRpbmcgc29tZSBlZGdlIGNhc2UgdGVzdGluZywgYW5kIGNoZWNrIG15IHJlc3VsdHMgYWdhaW5zdCB3aGF0IHRoZSBzeXN0ZW0gc2hvdWxkIGRvLlxuXG5UaGlzIGlzIGdvaW5nIHRvIGJlIG15IGltbWVkaWF0ZSBmb2N1cywgYXMgdW5kZXJzdGFuZGluZyBob3cgdGhlIGxvZ2ljYWwgbmFtZSBpcyBhc3NpZ25lZCBpcyBmdW5kYW1lbnRhbCB0byBkaWFnbm9zaW5nIHByb2JsZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjc3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6MzcuODA0MDA4NjkyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjY2NzU0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGFyIFxcXFwqcHBwX2Rldl9uYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTI5NTM9aW50IHBwcF91bml0X251bWJlcihzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTcyLSAqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjI5NzM6Y2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTc0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6MzcuOTE2Njg5NjMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5NjM2NDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvbXB0IGlzIHN0cmFpZ2h0Zm9yd2FyZDogXCJMZXQncyByZWFkIGBwcHBfZGV2X25hbWVgLlwiIE15IGltbWVkaWF0ZSByZXNwb25zZT8gSSBuZWVkIG1vcmUgY29udGV4dCwgYnV0IEkgY2FuIGFscmVhZHkgc3RhcnQgdG8gbWFrZSBzb21lIGVkdWNhdGVkIGd1ZXNzZXMuIFRoZSBzeW50YXggYWxvbmUgc3VnZ2VzdHMgYSBkZXZpY2UgbmFtZSwgbGlrZWx5IHdpdGhpbiBhIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvciBzeXN0ZW0gYWRtaW5pc3RyYXRpb24gY29udGV4dC4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIHdpdGggdGhlIHVuZGVyc2NvcmVzLCBJJ20gbGVhbmluZyB0b3dhcmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgKFBQUCkgY29uZmlndXJhdGlvbi4gVGhpcyBjb3VsZCBiZSBhIGRldmljZSwgYW4gaW50ZXJmYWNlLCBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgYSB2YXJpYWJsZSByZXByZXNlbnRpbmcgdGhlIG5hbWUuIEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgc2NlbmFyaW9zOiB0aGUgZXhhY3Qgb3BlcmF0aW5nIHN5c3RlbSwgbmV0d29yayB0b3BvbG9neSwgdGhlIHNwZWNpZmljIHB1cnBvc2Ugb2YgdGhpcyBkZXZpY2UsIGV0Yy4gTXkgbWluZCBhdXRvbWF0aWNhbGx5IHN0YXJ0cyB0byBtYXAgdGhpcyB0byB2YXJpb3VzIHN5c3RlbXMgSSd2ZSB3b3JrZWQgd2l0aCDigJMgTGludXgsIFVuaXgsIG1heWJlIGV2ZW4gc29tZSBlbWJlZGRlZCBzeXN0ZW1zIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNlcmlhbC1iYXNlZCBQUFAgY29ubmVjdGlvbi4gVGhpcyBjb3VsZCBiZSBhIGNyaXRpY2FsIHN0ZXAgaW4gdHJvdWJsZXNob290aW5nIGEgbmV0d29yayBvdXRhZ2UsIGNvbmZpZ3VyaW5nIGEgZGlhbC11cCBjb25uZWN0aW9uLCBvciBhbmFseXppbmcgbmV0d29yayB0cmFmZmljLiBJJ20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIGl0cyBtZWFuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODgwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6NDEuMzEzMDYwMjQ4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk2MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5NzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5NzA6XFx0ICogUmV0dXJuIHRoZSBQUFAgZGV2aWNlIGludGVyZmFjZSBuYW1lIG9mIGEgY2hhbm5lbC5cXG4yOTcxOlxcdCAqIENhbGxlciBtdXN0IGhvbGQgUkNVIHJlYWQgbG9jay5cXG4yOTcyOlxcdCAqL1xcbjI5NzM6XFx0Y2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcXG4yOTc0OlxcdHtcXG4yOTc1OlxcdFxcdHN0cnVjdCBjaGFubmVsICpwY2ggPSBjaGFuLVxcdTAwM2VwcHA7XFxuMjk3NjpcXHRcXHRjaGFyICpuYW1lID0gTlVMTDtcXG4yOTc3OlxcdFxcdHN0cnVjdCBwcHAgKnBwcDtcXG4yOTc4OlxcdFxcbjI5Nzk6XFx0XFx0aWYgKHBjaCkge1xcbjI5ODA6XFx0XFx0XFx0cHBwID0gcmN1X2RlcmVmZXJlbmNlKHBjaC1cXHUwMDNlcHBwKTtcXG4yOTgxOlxcdFxcdFxcdGlmIChwcHAgXFx1MDAyNlxcdTAwMjYgcHBwLVxcdTAwM2VkZXYpXFxuMjk4MjpcXHRcXHRcXHRcXHRuYW1lID0gcHBwLVxcdTAwM2VkZXYtXFx1MDAzZW5hbWU7XFxuMjk4MzpcXHRcXHR9XFxuMjk4NDpcXHRcXHRyZXR1cm4gbmFtZTtcXG4yOTg1OlxcdH1cXG4yOTg2OlxcdFxcbjI5ODc6XFx0XFxuMjk4ODpcXHQvKlxcbjI5ODk6XFx0ICogRGlzY29ubmVjdCBhIGNoYW5uZWwgZnJvbSB0aGUgZ2VuZXJpYyBsYXllci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6NDEuMzEzMzYxMDQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyMTQ3OTg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBSQ1UgTG9jayBSZXF1aXJlbWVudHMgZm9yIFBQUG9FIERldmljZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHBwcF9kZXZfbmFtZWAgZnVuY3Rpb24sIGFuZCBpdCdzIGZsYWdnZWQgYXMgbmVlZGluZyB0aGUgY2FsbGVyIHRvIGhvbGQgYW4gUkNVIHJlYWQgbG9jay4gVGhhdCdzIGEgY3JpdGljYWwgZGV0YWlsIOKAkyB3ZSBjYW4ndCBqdXN0IGNhbGwgaXQgd2lsbHktbmlsbHkuIFRoZSBpbnRlZ3JpdHkgb2YgdGhlIGRhdGEgcmVsaWVzIG9uIHRoYXQgbG9jay4gTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIGhlcmUuIFNwZWNpZmljYWxseSwgSSdtIGNvbmNlcm5lZCBhYm91dCBob3cgYHBwcG9lX3NlcV9zaG93YCBpbnRlcmFjdHMgd2l0aCBgcHBwX2Rldl9uYW1lYC4gRG9lcyBpdCBjb21wbHkgd2l0aCB0aGlzIGxvY2sgcmVxdWlyZW1lbnQ/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgcHBwb2Vfc2VxX3Nob3dgICpkb2VzKiBob2xkIGFuIFJDVSByZWFkIGxvY2sgYmVmb3JlIGNhbGxpbmcgYHBwcF9kZXZfbmFtZWAsIG9yIGlmIGl0IGRvZXNuJ3QsIHRoYXQgd2UgaGF2ZSBhIHNlcmlvdXMgYnVnIG9uIG91ciBoYW5kcy4gU28sIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBJIG5lZWQgdG8gZXhhbWluZSBgcHBwb2Vfc2VxX3Nob3dgIGFuZCBtZXRpY3Vsb3VzbHkgdHJhY2UgaXRzIGNhbGxpbmcgY29udGV4dCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGUgUkNVIHJlYWQgbG9jayBpcyBjb3JyZWN0bHkgaGFuZGxlZC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50OyBvdGhlcndpc2UsIHdlJ3JlIGxpa2VseSB0byBpbnRyb2R1Y2UgZGF0YSBjb3JydXB0aW9uIGlzc3Vlcy4gTGV0J3Mgc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQzOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6NDQuNzM0ODQ3MjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjMwNDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcG9lX3NlcV9zaG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTkzNj1zdGF0aWMgaW50IHBwcG9lX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk2MS0jaWZkZWYgQ09ORklHX1BST0NfRlNcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5NjI6c3RhdGljIGludCBwcHBvZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NjMte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9MTA0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBwcG9lX3NlcV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMDQ5LVxcdC5zdG9wXFx0XFx0PSBwcHBvZV9zZXFfc3RvcCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxMDUwOlxcdC5zaG93XFx0XFx0PSBwcHBvZV9zZXFfc2hvdyxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMDUxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjMxOjQ0LjgwODA4ODg5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIzOTk3NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGZvY3VzaW5nIG9uIHRoZSBrZXkgdGVjaG5pY2FsIGVsZW1lbnRzOlxuXG4qKkNoZWNraW5nIFBQUG9FIFNlcXVlbmNlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgUFBQb0Ugc2VxdWVuY2luZyBpcyBoYW5kbGVkIGluIHRoaXMgY29kZWJhc2UuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBwcHBvZV9zZXFfc3RhcnRgIGFuZCBgcHBwb2Vfc2VxX3N0b3BgLiBUaGVzZSBhcmUgcHJvYmFibHkgY3JpdGljYWwgZm9yIGNvbnRyb2xsaW5nIHRoZSBjb25uZWN0aW9uIGFuZCBkaXNjb25uZWN0aW9uIHByb2Nlc3MsIHBhcnRpY3VsYXJseSB0aGUgc2VxdWVuY2UgbnVtYmVyIGFzc2lnbm1lbnRzIGZvciB0aGUgUFBQb0Ugc2Vzc2lvbi4gSSdtIGFzc3VtaW5nIHRoYXQgcHJvcGVyIHNlcXVlbmNpbmcgaXMgYWJzb2x1dGVseSB2aXRhbCBmb3IgcmVsaWFibGUgZGF0YSB0cmFuc21pc3Npb24sIGFuZCB0aGVyZWZvcmUsIGJ1Z3Mgb3IgbWlzY29uZmlndXJhdGlvbnMgaGVyZSBjYW4gaGF2ZSBzZXJpb3VzIGltcGxpY2F0aW9ucy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBQUFAgbGF5ZXIsIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlcywgYW5kIGFueSBhc3NvY2lhdGVkIHN0YXRlIG1hY2hpbmVzLiBMZXQncyBzZWUgaG93IHRoZXNlIGFyZSB1c2VkIHRvIG1ha2Ugc3VyZSB0aGV5J3JlIGRvaW5nIHdoYXQgSSB0aGluayB0aGV5IGFyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6NTAxNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjMxOjQ3LjgzMjA5MzI3OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTgwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTgwOlxcdFxcdHJldHVybiAwO1xcbiA5ODE6XFx0fVxcbiA5ODI6XFx0XFxuIDk4MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpwcHBvZV9nZXRfaWR4KHN0cnVjdCBwcHBvZV9uZXQgKnBuLCBsb2ZmX3QgcG9zKVxcbiA5ODQ6XFx0e1xcbiA5ODU6XFx0XFx0c3RydWN0IHBwcG94X3NvY2sgKnBvO1xcbiA5ODY6XFx0XFx0aW50IGk7XFxuIDk4NzpcXHRcXG4gOTg4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBQUFBPRV9IQVNIX1NJWkU7IGkrKykge1xcbiA5ODk6XFx0XFx0XFx0cG8gPSByY3VfZGVyZWZlcmVuY2UocG4tXFx1MDAzZWhhc2hfdGFibGVbaV0pO1xcbiA5OTA6XFx0XFx0XFx0d2hpbGUgKHBvKSB7XFxuIDk5MTpcXHRcXHRcXHRcXHRpZiAoIXBvcy0tKVxcbiA5OTI6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDk5MzpcXHRcXHRcXHRcXHRwbyA9IHJjdV9kZXJlZmVyZW5jZShwby1cXHUwMDNlbmV4dCk7XFxuIDk5NDpcXHRcXHRcXHR9XFxuIDk5NTpcXHRcXHR9XFxuIDk5NjpcXHRcXG4gOTk3OlxcdG91dDpcXG4gOTk4OlxcdFxcdHJldHVybiBwbztcXG4gOTk5OlxcdH1cXG4xMDAwOlxcdFxcbjEwMDE6XFx0c3RhdGljIHZvaWQgKnBwcG9lX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuMTAwMjpcXHRcXHRfX2FjcXVpcmVzKFJDVSlcXG4xMDAzOlxcdHtcXG4xMDA0OlxcdFxcdHN0cnVjdCBwcHBvZV9uZXQgKnBuID0gcHBwb2VfcGVybmV0KHNlcV9maWxlX25ldChzZXEpKTtcXG4xMDA1OlxcdFxcdGxvZmZfdCBsID0gKnBvcztcXG4xMDA2OlxcdFxcbjEwMDc6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjEwMDg6XFx0XFx0cmV0dXJuIGwgPyBwcHBvZV9nZXRfaWR4KHBuLCAtLWwpIDogU0VRX1NUQVJUX1RPS0VOO1xcbjEwMDk6XFx0fVxcbjEwMTA6XFx0XFxuMTAxMTpcXHRzdGF0aWMgdm9pZCAqcHBwb2Vfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbjEwMTI6XFx0e1xcbjEwMTM6XFx0XFx0c3RydWN0IHBwcG9lX25ldCAqcG4gPSBwcHBvZV9wZXJuZXQoc2VxX2ZpbGVfbmV0KHNlcSkpO1xcbjEwMTQ6XFx0XFx0c3RydWN0IHBwcG94X3NvY2sgKnBvLCAqbmV4dDtcXG4xMDE1OlxcdFxcbjEwMTY6XFx0XFx0KysqcG9zO1xcbjEwMTc6XFx0XFx0aWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7XFxuMTAxODpcXHRcXHRcXHRwbyA9IHBwcG9lX2dldF9pZHgocG4sIDApO1xcbjEwMTk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTAyMDpcXHRcXHR9XFxuMTAyMTpcXHRcXHRwbyA9IHY7XFxuMTAyMjpcXHRcXHRuZXh0ID0gcmN1X2RlcmVmZXJlbmNlKHBvLVxcdTAwM2VuZXh0KTtcXG4xMDIzOlxcdFxcdGlmIChuZXh0KVxcbjEwMjQ6XFx0XFx0XFx0cG8gPSBuZXh0O1xcbjEwMjU6XFx0XFx0ZWxzZSB7XFxuMTAyNjpcXHRcXHRcXHRpbnQgaGFzaCA9IGhhc2hfaXRlbShwby1cXHUwMDNlcHBwb2VfcGEuc2lkLCBwby1cXHUwMDNlcHBwb2VfcGEucmVtb3RlKTtcXG4xMDI3OlxcdFxcbjEwMjg6XFx0XFx0XFx0cG8gPSBOVUxMO1xcbjEwMjk6XFx0XFx0XFx0d2hpbGUgKCsraGFzaCBcXHUwMDNjIFBQUE9FX0hBU0hfU0laRSkge1xcbjEwMzA6XFx0XFx0XFx0XFx0cG8gPSByY3VfZGVyZWZlcmVuY2UocG4tXFx1MDAzZWhhc2hfdGFibGVbaGFzaF0pO1xcbjEwMzE6XFx0XFx0XFx0XFx0aWYgKHBvKVxcbjEwMzI6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTAzMzpcXHRcXHRcXHR9XFxuMTAzNDpcXHRcXHR9XFxuMTAzNTpcXHRcXG4xMDM2OlxcdG91dDpcXG4xMDM3OlxcdFxcdHJldHVybiBwbztcXG4xMDM4OlxcdH1cXG4xMDM5OlxcdFxcbjEwNDA6XFx0c3RhdGljIHZvaWQgcHBwb2Vfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuMTA0MTpcXHRcXHRfX3JlbGVhc2VzKFJDVSlcXG4xMDQyOlxcdHtcXG4xMDQzOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjEwNDQ6XFx0fVxcbjEwNDU6XFx0XFxuMTA0NjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBwcG9lX3NlcV9vcHMgPSB7XFxuMTA0NzpcXHRcXHQuc3RhcnRcXHRcXHQ9IHBwcG9lX3NlcV9zdGFydCxcXG4xMDQ4OlxcdFxcdC5uZXh0XFx0XFx0PSBwcHBvZV9zZXFfbmV4dCxcXG4xMDQ5OlxcdFxcdC5zdG9wXFx0XFx0PSBwcHBvZV9zZXFfc3RvcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6NDcuODMyMzQwNjE3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzI0MDExNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFBvRSBQcm9jZnMgQ2hhbmdlKipcblxuT2theSwgc28gYHBwcG9lX3NlcV9zdGFydGAgZ3JhYnMgYW4gUkNVIHJlYWQgbG9jaywgYW5kIGBwcHBvZV9zZXFfc3RvcGAgcmVsZWFzZXMgaXQuIFRoYXQgbWVhbnMgdGhlIGBwcHBvZV9zZXFfc2hvd2AgZnVuY3Rpb24sIHdoZXJlIHRoZSBjaGFuZ2UgaXMgYmVpbmcgbWFkZSwgaXMgb3BlcmF0aW5nIHdpdGhpbiB0aGUgcHJvdGVjdGlvbiBvZiB0aGF0IFJDVSBsb2NrLiBUaGlzIGNoYW5nZSBpcyBqdXN0IGFib3V0IGFkZGluZyBhIG5ldyBjb2x1bW4gdG8gdGhlIGAvcHJvYy9uZXQvcHBwb2VgIG91dHB1dCwgc3BlY2lmaWNhbGx5IGluY2x1ZGluZyB0aGUgcmVzdWx0IG9mIGBwcHBfZGV2X25hbWUoXHUwMDI2cG8tXHUwMDNlY2hhbilgLiBJcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gSXQgc2VlbXMgcmVsYXRpdmVseSBiZW5pZ24uIEl0J3MgcHJvY2ZzLCBhbmQgaXQncyBqdXN0IGZvcm1hdHRpbmcgb3V0cHV0LlxuXG5Ib3dldmVyLCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIExldCdzIGRlbHZlIGludG8gdGhlIGRldGFpbHMuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGxpZXMgaW4gYHBwcF9kZXZfbmFtZWAuIFRoaXMgZnVuY3Rpb24gZGVyZWZlcmVuY2VzIGBjaGFuLVx1MDAzZXBwcGAsIHRoZW4gYHJjdV9kZXJlZmVyZW5jZShwY2gtXHUwMDNlcHBwKWAsIGFuZCBmaW5hbGx5IGFjY2Vzc2VzIGBwcHAtXHUwMDNlZGV2LVx1MDAzZW5hbWVgLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGx1cmtpbmcgd2l0aGluIHRoaXMgY2hhaW4/IFNwZWNpZmljYWxseSwgaWYgYHBvLVx1MDAzZWNoYW5gIGlzbid0IGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIHRpbWUgYHBwcG9lX3NlcV9zaG93YCBpcyBjYWxsZWQsIGNvdWxkIHRoaXMgbGVhZCB0byBhIGNyYXNoPyBJIHNob3VsZCBjaGVjayB3aGVyZSBgcG8tXHUwMDNlY2hhbmAgaXMgaW5pdGlhbGl6ZWQuIFRoaXMgY291bGQgYmUgYSB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjU3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6NTIuNTA0NzUwMjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjAyMDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTktICpcXHRcXHRzaW11bHRhbmVvdXMgaW52b2NhdGlvbiBvZiBwcHBfaW5wdXRcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyMDogKlxcdFxcdGFuZCBwcHBfdW5yZWdpc3Rlcl9jaGFubmVsLlxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjIxOiAqIDA0MDgwMCA6XFx0UmVzcGVjdCByZWZlcmVuY2UgY291bnQgbWVjaGFuaXNtcyBvbiBuZXQtZGV2aWNlcy5cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMi0gKiAyMDA4MDAgOlxcdGZpeCBrZnJlZShza2IpIGluIHBwcG9lX3JjdiAoYWNtZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQwLSAqXFx0XFx0cmVmZXJlbmNlIG9mIGRldmljZSBvbiBjbG9zZSkuXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDE6ICogMTIxMzAxIDpcXHROZXcgcHBwIGNoYW5uZWxzIGludGVyZmFjZTsgY2Fubm90IHVucmVnaXN0ZXIgYSBjaGFubmVsXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDItICpcXHRcXHRmcm9tIGludGVycnVwdHMuICBUaHVzLCB3ZSBtYXJrIHRoZSBzb2NrZXQgYXMgYSBaT01CSUVcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9wcHBveC5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcHBfY2hhbm5lbC5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcHBfZGVmcy5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcHBwb2Vfb3BzO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkyLVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9MjU2PXN0YXRpYyB2b2lkIHBwcG9lX2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjkzLVxcdFxcdFxcdFxcdHBwcG94X3VuYmluZF9zb2NrKHNrKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyOTQ6XFx0XFx0XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjk1LVxcdFxcdFxcdFxcdHBvLVxcdTAwM2VwcHBvZV9kZXYgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzAzLVxcdFxcdFxcdCAqIGhhc2ggY2hhaW4uIFdlIGRyb3BwZWQgbG9ja3Mgc28gdGhlIHdvcmxkIG1heSBoYXZlXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzA0OlxcdFxcdFxcdCAqIGNoYW5nZSBmcm9tIHVuZGVybmVhdGggdXMuXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzA1LVxcdFxcdFxcdCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9MzE2PXN0YXRpYyBpbnQgcHBwb2VfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTMyNC1cXHRjYXNlIE5FVERFVl9DSEFOR0VNVFU6XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzI1OlxcdFxcdC8qIEEgY2hhbmdlIGluIG10dSBvciBhZGRyZXNzIGlzIGEgYmFkIHRoaW5nLCByZXF1aXJpbmdcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMjYtXFx0XFx0ICogTENQIHJlLW5lZ290aWF0aW9uLlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9MzUxPXN0YXRpYyBpbnQgcHBwb2VfcmN2X2NvcmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzU2LVxcdCAqIGV4ZWN1dGluZyBpbiBsb2NrX3NvY2soKS9yZWxlYXNlX3NvY2soKSBib3VuZHM7IG1lYW5pbmcgc2stXFx1MDAzZXNrX3N0YXRlXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzU3OlxcdCAqIGNhbid0IGNoYW5nZS5cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zNTgtXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zNjAtXFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSBcXHUwMDI2IFBQUE9YX0JPVU5EKSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzYxOlxcdFxcdHBwcF9pbnB1dChcXHUwMDI2cG8tXFx1MDAzZWNoYW4sIHNrYik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzYyLVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz01ODc9c3RhdGljIGludCBwcHBvZV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1c2VydmFkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02MzQtXFx0XFx0bWVtc2V0KFxcdTAwMjZwby1cXHUwMDNlcHBwb2VfcGEsIDAsIHNpemVvZihwby1cXHUwMDNlcHBwb2VfcGEpKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MzU6XFx0XFx0bWVtc2V0KFxcdTAwMjZwby1cXHUwMDNlY2hhbiwgMCwgc2l6ZW9mKHBvLVxcdTAwM2VjaGFuKSk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjM2LVxcdFxcdHBvLVxcdTAwM2VuZXh0ID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY2Ni1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2Njc6XFx0XFx0cG8tXFx1MDAzZWNoYW4uaGRybGVuID0gKHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSArXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjY4LVxcdFxcdFxcdFxcdCAgIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NjktXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjcwOlxcdFxcdHBvLVxcdTAwM2VjaGFuLm10dSA9IGRldi1cXHUwMDNlbXR1IC0gc2l6ZW9mKHN0cnVjdCBwcHBvZV9oZHIpIC0gMjtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NzE6XFx0XFx0cG8tXFx1MDAzZWNoYW4ucHJpdmF0ZSA9IHNrO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY3MjpcXHRcXHRwby1cXHUwMDNlY2hhbi5vcHMgPSBcXHUwMDI2cHBwb2VfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjczOlxcdFxcdHBvLVxcdTAwM2VjaGFuLmRpcmVjdF94bWl0ID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NzQtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Njc1OlxcdFxcdGVycm9yID0gcHBwX3JlZ2lzdGVyX25ldF9jaGFubmVsKGRldl9uZXQoZGV2KSwgXFx1MDAyNnBvLVxcdTAwM2VjaGFuKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NzYtXFx0XFx0aWYgKGVycm9yKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04NDU9c3RhdGljIGludCBfX3BwcG9lX3htaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtODUxLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjg1MjpcXHQvKiBUaGUgaGlnaGVyLWxldmVsIFBQUCBjb2RlIChwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCkpIGVuc3VyZXMgdGhlIFBQUFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTg1My1cXHQgKiB4bWl0IG9wZXJhdGlvbnMgY29uY2x1ZGUgcHJpb3IgdG8gYW4gdW5yZWdpc3RyYXRpb24gY2FsbC4gIFRodXNcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo4NTQ6XFx0ICogc2stXFx1MDAzZXNrX3N0YXRlIGNhbm5vdCBjaGFuZ2UsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gbG9ja19zb2NrKCkuXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtODU1LVxcdCAqIEJ1dCwgd2UgYWxzbyBjYW4ndCBkbyBhIGxvY2tfc29jayBzaW5jZSB0aGF0IGludHJvZHVjZXMgYSBwb3RlbnRpYWxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy04NTYtXFx0ICogZGVhZGxvY2sgYXMgd2UnZCByZXZlcnNlIHRoZSBsb2NrIG9yZGVyaW5nIHVzZWQgd2hlbiBjYWxsaW5nXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6ODU3OlxcdCAqIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKS5cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy04NTgtXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MDEtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkwMjpzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkwMy17XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTA0OlxcdHN0cnVjdCBzb2NrICpzayA9IGNoYW4tXFx1MDAzZXByaXZhdGU7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTA1LVxcdHJldHVybiBfX3BwcG9lX3htaXQoc2ssIHNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz05MDg9c3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkwOS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkxMDpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTExLXtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5MTI6XFx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cXHUwMDNlcHJpdmF0ZTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MTMtXFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTMwLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkzMTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MzItXFx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTYyPXN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NzQtXFx0ZGV2X25hbWUgPSBwby1cXHUwMDNlcHBwb2VfcGEuZGV2O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjk3NTpcXHRwcHBfbmFtZSA9IHBwcF9kZXZfbmFtZShcXHUwMDI2cG8tXFx1MDAzZWNoYW4pO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk3Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6NTIuNTg1OTYwNDI4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDExMjYzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUFBQb0UgQ29ubmVjdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIFBQUG9FIGNvbm5lY3Rpb24gZmxvdywgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHBvLVx1MDAzZWNoYW5gIHdpdGhpbiBgcHBwb2VfY29ubmVjdGAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IG1lbnRhbCBtYXAgdGhlbiBoYXMgdG8gdHJhY2UgaG93IHRoaXMgY2hhbm5lbCB2YXJpYWJsZSBpcyBtYW5hZ2VkLiBBaCwgaGVyZSB3ZSBnbywgYHBwcG9lX3NlcV9zaG93YCBpcyB3aGVyZSBJIHNlZSB0aGUgY2hhbm5lbCBiZWluZyB1dGlsaXplZC4gSXQncyBpdGVyYXRpbmcgdGhyb3VnaCBhIGhhc2ggdGFibGUsIGBwbi1cdTAwM2VoYXNoX3RhYmxlYC4gTWFrZXMgc2Vuc2UsIHdlIHVzZSBhIGhhc2ggZm9yIHF1aWNrIGxvb2t1cHMgaW4gbmV0d29ya2luZy5cblxuTm93LCB3aGVyZSBkb2VzIHRoYXQgc29ja2V0IGdldCBhZGRlZCB0byB0aGUgaGFzaD8gQmFjayB0byBgcHBwb2VfY29ubmVjdGAsIHllcywgSSBjYW4gc2VlIGl0J3MgYWRkZWQgdXNpbmcgYHBwcG9lX2hhc2hfYWRkKHBvKWAuIEJ1dCB3YWl0IGEgc2Vjb25kLCBhIGZsaWNrZXIgb2YgZG91YnQuLi4gZG9lcyBgcHBwb2VfaGFzaF9hZGRgIGhhcHBlbiAqYmVmb3JlKiBvciAqYWZ0ZXIqIGBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWxgIGlzIGNhbGxlZD8gVGhhdCdzIGEgY3J1Y2lhbCBzZXF1ZW5jZSBkZXBlbmRlbmN5IHRvIGJlIHN1cmUgb2YuIFRoaXMgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGNvdWxkIGJlIHByb2JsZW1hdGljISBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgb3JkZXIgb2Ygb3BlcmF0aW9ucyB0byBtYWtlIHN1cmUgZXZlcnl0aGluZydzIGNvcnJlY3QgYW5kIHJlZ2lzdGVyZWQgcHJvcGVybHkuIFJpZ2h0LCBJJ20gZ29pbmcgdG8gaGVhZCBiYWNrIHRvIGBwcHBvZV9jb25uZWN0YCBhbmQgY29uZmlybSB0aGUgZXhhY3Qgc2VxdWVuY2UgdGhlcmUuIEdvdHRhIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6NTYuNTI3MDkwOTMzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwb2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NDA6XFx0XFx0fVxcbiA2NDE6XFx0XFxuIDY0MjpcXHRcXHQvKiBSZS1iaW5kIGluIHNlc3Npb24gc3RhZ2Ugb25seSAqL1xcbiA2NDM6XFx0XFx0aWYgKHN0YWdlX3Nlc3Npb24oc3AtXFx1MDAzZXNhX2FkZHIucHBwb2Uuc2lkKSkge1xcbiA2NDQ6XFx0XFx0XFx0ZXJyb3IgPSAtRU5PREVWO1xcbiA2NDU6XFx0XFx0XFx0bmV0ID0gc29ja19uZXQoc2spO1xcbiA2NDY6XFx0XFx0XFx0ZGV2ID0gZGV2X2dldF9ieV9uYW1lKG5ldCwgc3AtXFx1MDAzZXNhX2FkZHIucHBwb2UuZGV2KTtcXG4gNjQ3OlxcdFxcdFxcdGlmICghZGV2KVxcbiA2NDg6XFx0XFx0XFx0XFx0Z290byBlcnJfcHV0O1xcbiA2NDk6XFx0XFxuIDY1MDpcXHRcXHRcXHRwby1cXHUwMDNlcHBwb2VfZGV2ID0gZGV2O1xcbiA2NTE6XFx0XFx0XFx0cG8tXFx1MDAzZXBwcG9lX2lmaW5kZXggPSBkZXYtXFx1MDAzZWlmaW5kZXg7XFxuIDY1MjpcXHRcXHRcXHRwbiA9IHBwcG9lX3Blcm5ldChuZXQpO1xcbiA2NTM6XFx0XFx0XFx0aWYgKCEoZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCkpIHtcXG4gNjU0OlxcdFxcdFxcdFxcdGdvdG8gZXJyX3B1dDtcXG4gNjU1OlxcdFxcdFxcdH1cXG4gNjU2OlxcdFxcbiA2NTc6XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZwby1cXHUwMDNlcHBwb2VfcGEsXFxuIDY1ODpcXHRcXHRcXHQgICAgICAgXFx1MDAyNnNwLVxcdTAwM2VzYV9hZGRyLnBwcG9lLFxcbiA2NTk6XFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgcHBwb2VfYWRkcikpO1xcbiA2NjA6XFx0XFxuIDY2MTpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnBuLVxcdTAwM2VoYXNoX2xvY2spO1xcbiA2NjI6XFx0XFx0XFx0ZXJyb3IgPSBfX3NldF9pdGVtKHBuLCBwbyk7XFxuIDY2MzpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2cG4tXFx1MDAzZWhhc2hfbG9jayk7XFxuIDY2NDpcXHRcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbiA2NjU6XFx0XFx0XFx0XFx0Z290byBlcnJfcHV0O1xcbiA2NjY6XFx0XFxuIDY2NzpcXHRcXHRcXHRwby1cXHUwMDNlY2hhbi5oZHJsZW4gPSAoc2l6ZW9mKHN0cnVjdCBwcHBvZV9oZHIpICtcXG4gNjY4OlxcdFxcdFxcdFxcdFxcdCAgIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcXG4gNjY5OlxcdFxcbiA2NzA6XFx0XFx0XFx0cG8tXFx1MDAzZWNoYW4ubXR1ID0gZGV2LVxcdTAwM2VtdHUgLSBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikgLSAyO1xcbiA2NzE6XFx0XFx0XFx0cG8tXFx1MDAzZWNoYW4ucHJpdmF0ZSA9IHNrO1xcbiA2NzI6XFx0XFx0XFx0cG8tXFx1MDAzZWNoYW4ub3BzID0gXFx1MDAyNnBwcG9lX2NoYW5fb3BzO1xcbiA2NzM6XFx0XFx0XFx0cG8tXFx1MDAzZWNoYW4uZGlyZWN0X3htaXQgPSB0cnVlO1xcbiA2NzQ6XFx0XFxuIDY3NTpcXHRcXHRcXHRlcnJvciA9IHBwcF9yZWdpc3Rlcl9uZXRfY2hhbm5lbChkZXZfbmV0KGRldiksIFxcdTAwMjZwby1cXHUwMDNlY2hhbik7XFxuIDY3NjpcXHRcXHRcXHRpZiAoZXJyb3IpIHtcXG4gNjc3OlxcdFxcdFxcdFxcdGRlbGV0ZV9pdGVtKHBuLCBwby1cXHUwMDNlcHBwb2VfcGEuc2lkLFxcbiA2Nzg6XFx0XFx0XFx0XFx0XFx0ICAgIHBvLVxcdTAwM2VwcHBvZV9wYS5yZW1vdGUsIHBvLVxcdTAwM2VwcHBvZV9pZmluZGV4KTtcXG4gNjc5OlxcdFxcdFxcdFxcdGdvdG8gZXJyX3B1dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6NTYuNTI3MzgxODczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4Njk0OTM5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHNvIGBfX3NldF9pdGVtKHBuLCBwbylgIGFkZHMgc29tZXRoaW5nIHRvIHRoZSBoYXNoIHRhYmxlLCBhbmQgdGhlbiBgcHBwX3JlZ2lzdGVyX25ldF9jaGFubmVsYCBpcyBjYWxsZWQuIFRoZSBrZXkgaXNzdWUgaXMgaWYgYHBwcG9lX3NlcV9zaG93YCBpcyBjYWxsZWQgaW4gdGhlIG1pZGRsZSwgc3BlY2lmaWNhbGx5IGlmIGl04oCZcyBjYWxsZWQgKmJldHdlZW4qIHRoZSB0YWJsZSBlbnRyeSBhbmQgdGhlIHJlZ2lzdHJhdGlvbiwgdGhlIGBwby1cdTAwM2VjaGFuYCBtZW1iZXIgZ2V0cyB6ZXJvZWQgb3V0IHdpdGggYG1lbXNldGAuIFRoaXMgaXMgdGhlIHBvdGVudGlhbCBwb2ludCBvZiBjb250ZW50aW9uLlxuXG5Ob3csIGluc2lkZSBgcHBwX2Rldl9uYW1lYCwgdGhlIGNvZGUgZ3JhYnMgYSBgc3RydWN0IGNoYW5uZWwgKnBjaCA9IGNoYW4tXHUwMDNlcHBwO2AuIEJlY2F1c2UgYGNoYW5gIGlzIHplcm9lZCwgYGNoYW4tXHUwMDNlcHBwYCBpcyAqZ3VhcmFudGVlZCogdG8gYmUgTlVMTC4gVGhlbiB0aGVyZSdzIGFuIGBpZiAocGNoKWAgY2hlY2ssIHdoaWNoIGVmZmVjdGl2ZWx5IHRlc3RzIGZvciBOVUxMLiBUaGUgY29kZSBoYW5kbGVzIE5VTEwgd2l0aCBgcHBwX25hbWUgPyBwcHBfbmFtZSA6IFwiXCJgLCBzbyB0aGF0J3Mgc2FmZSwgd2hpY2ggbWVhbnMgdGhlcmUgc2hvdWxkIGJlIG5vIGlzc3VlcyBoZXJlLiBObyBjcmFzaGVzLCBubyB1bmRlZmluZWQgYmVoYXZpb3IuXG5cbk15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgY29uc3RpdHV0ZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZXF1aXJpbmcgZnV6emluZy4gVGhlIGNoYW5nZSBpcyBzaW1wbHkgYSBgc2VxX2ZpbGVgIG91dHB1dCBtb2RpZmljYXRpb24sIHJpZ2h0PyBPbmx5IHRoZSBkaXNwbGF5IG9mIGRhdGEsIHNwZWNpZmljYWxseSB0aGUgUFBQIGRldmljZSBuYW1lIGluIGAvcHJvYy9uZXQvcHBwb2VgIGNoYW5nZWQuIFRoZSBwYXRjaCBub3RlcyBzYXkgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzXCIgb3IgY2hhbmdlcyB0aGF0IFwiZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvd1wiLlxuXG5JcyB0aGlzIGRpc3BsYXkgb2YgdGhlIFBQUCBkZXZpY2UgbmFtZSBwdXJlbHkgZGVjb3JhdGl2ZT8gSXQncyBhbiAqb2JzZXJ2YWJpbGl0eSogY2hhbmdlLCBub3QgYSAqZnVuY3Rpb25hbCogb25lLiBUaGUgbmV0d29yayBzdGFjaydzIGFjdHVhbCBleGVjdXRpb24gZmxvdyAqaXNuJ3QqIGFsdGVyZWQ7IGl0IGp1c3QgcHJpbnRzIHRoZSBQUFAgZGV2aWNlIG5hbWUuIEknbSBpbmNsaW5lZCB0byBjYXRlZ29yaXplIHRoaXMgYXMgZWl0aGVyIFwiZGVjb3JhdGl2ZSBjaGFuZ2VzXCIgbGlrZSBsb2dnaW5nIG9yIHRyYWNpbmcgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhcyBub3QgZnVuY3Rpb25hbGx5IGNoYW5naW5nIHRoZSBleGVjdXRpb24uXG5cbi4uLldhaXQgYSBzZWNvbmQuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCBtZSB0aG9yb3VnaGx5IGNoZWNrIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBjb2RlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaC4gSSBjYW5ub3QgYWZmb3JkIHRvIG1pc3MgYSBzdWJ0bGUgZnVuY3Rpb25hbCBhbHRlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAyMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjMyOjAyLjM5Njg4MDI2M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMzMDI5NDMzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfZGV2X25hbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTI5NTM9aW50IHBwcF91bml0X251bWJlcihzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTcyLSAqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjI5NzM6Y2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTc0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTM2NjI9RVhQT1JUX1NZTUJPTChwcHBfdW5pdF9udW1iZXIpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjM2NjM6RVhQT1JUX1NZTUJPTChwcHBfZGV2X25hbWUpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTM2NjQtRVhQT1JUX1NZTUJPTChwcHBfaW5wdXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTYyPXN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NzQtXFx0ZGV2X25hbWUgPSBwby1cXHUwMDNlcHBwb2VfcGEuZGV2O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjk3NTpcXHRwcHBfbmFtZSA9IHBwcF9kZXZfbmFtZShcXHUwMDI2cG8tXFx1MDAzZWNoYW4pO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk3Ni1cXG4tLVxcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaD03Mz1leHRlcm4gaW50IHBwcF91bml0X251bWJlcihzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNzctICovXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjc4OmV4dGVybiBjaGFyICpwcHBfZGV2X25hbWUoc3RydWN0IHBwcF9jaGFubmVsICopO1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC03OS1cXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmM9NDk4PXN0YXRpYyB2b2lkIHBwcG9sMnRwX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICphcmcpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTUwNy1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjUwODpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgICBpbnRlcmZhY2UgJXNcXFxcblxcXCIsIHBwcF9kZXZfbmFtZShcXHUwMDI2cG8tXFx1MDAzZWNoYW4pKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTUwOS1cXHR9XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTE1MTM9c3RhdGljIHZvaWQgcHBwb2wydHBfc2VxX3Nlc3Npb25fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE1NjQtXFxubmV0L2wydHAvbDJ0cF9wcHAuYzoxNTY1OlxcdFxcdHNlcV9wcmludGYobSwgXFxcIiAgIGludGVyZmFjZSAlc1xcXFxuXFxcIiwgcHBwX2Rldl9uYW1lKFxcdTAwMjZwby1cXHUwMDNlY2hhbikpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTU2Ni1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjMyOjA1LjcyNzE5MjkwNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTk5NDk2OTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBQUG9FIEluZm9ybWF0aW9uIERpc3BsYXkgVXBkYXRlKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjaGFuZ2UgaXMgaXNvbGF0ZWQgdG8gYGRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jYCwgYW5kIGl0J3MgYSBtaW5vciBlbmhhbmNlbWVudCByZWxhdGVkIHRvIHRoZSBpbmZvcm1hdGlvbiBkaXNwbGF5ZWQgaW4gYC9wcm9jL25ldC9wcHBvZWAuIEl0IGFwcGVhcnMgdGhlIGF1dGhvciBpcyBhZGRpbmcgYSBuZXcgY29sdW1uIHRvIHRoZSBvdXRwdXQgb2YgYC9wcm9jL25ldC9wcHBvZWAgdG8gc2hvdyB0aGUgYXNzb2NpYXRlZCBQUFAgZGV2aWNlIG5hbWUuIEkgc2VlIHRoZSBjb2RlIGlzIHVzaW5nIGBwcHBfZGV2X25hbWUoKWAgdG8gcmV0cmlldmUgdGhlIFBQUCBkZXZpY2UgbmFtZS4gVGhpcyBpcyBwdXJlbHkgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMsIGEgY29zbWV0aWMgY2hhbmdlIGlmIHlvdSB3aWxsLlxuXG5Gcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBpc24ndCBhbnl0aGluZyB0byBiZSBjb25jZXJuZWQgYWJvdXQuIFRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBQUFBvRSBjb25uZWN0aW9uIGFuZCBkYXRhIGhhbmRsaW5nIGlzbid0IGJlaW5nIHRvdWNoZWQsIHNvIHRoZXJlIGFyZSBubyBuZXcgYXR0YWNrIHN1cmZhY2VzIGJlaW5nIGludHJvZHVjZWQuIEl0J3Mgc2ltcGx5IGFib3V0IGJldHRlciBvYnNlcnZhYmlsaXR5IG9mIHRoZSBleGlzdGluZyBQUFBvRSBjb25uZWN0aW9ucywgYW5kIHNpbmNlIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBhcmVuJ3QgbW9kaWZpZWQsIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgZnV6emluZyByZWxhdGVkIHRvIGRhdGEgY29ycnVwdGlvbiwgYnVmZmVyIG92ZXJmbG93cywgZXRjLiwgYXJlIG5vdCBwcmVzZW50LlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSBhbmQgbGFjayBvZiBmdW5jdGlvbmFsIGltcGFjdCBvbiBjcml0aWNhbCBleGVjdXRpb24gcGF0aHMsIHRoaXMgbW9kaWZpY2F0aW9uIGlzIG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUyNCwiT3V0cHV0VG9rZW5zIjo4MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozMjoxMS4zMjY2OTQ2MjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBzZXFfZmlsZSBzaG93IGZ1bmN0aW9uIGZvciAvcHJvYy9uZXQvcHBwb2UgdG8gaW5jbHVkZSB0aGUgUFBQIGRldmljZSBuYW1lIGluIHRoZSBvdXRwdXQuIFRoaXMgaXMgYSBwdXJlbHkgb2JzZXJ2YWJpbGl0eS9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBuZXR3b3JrIHN0YWNrLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgc2VxX2ZpbGUgc2hvdyBmdW5jdGlvbiBmb3IgL3Byb2MvbmV0L3BwcG9lIHRvIGluY2x1ZGUgdGhlIFBQUCBkZXZpY2UgbmFtZSBpbiB0aGUgb3V0cHV0LiBUaGlzIGlzIGEgcHVyZWx5IG9ic2VydmFiaWxpdHkvZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9sgb5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 04:04:55 +0000 UTC FinishedAt: 2026-07-29 04:32:13 +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+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHNlcV9maWxlIHNob3cgZnVuY3Rpb24gZm9yIC9wcm9jL25ldC9wcHBvZSB0byBpbmNsdWRlIHRoZSBQUFAgZGV2aWNlIG5hbWUgaW4gdGhlIG91dHB1dC4gVGhpcyBpcyBhIHB1cmVseSBvYnNlcnZhYmlsaXR5L2RlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgYWx0ZXIgdGhlIGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIG5ldHdvcmsgc3RhY2suJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2QyYTQ5OTdlNzQxYzI3YjUzN2MxMWU2NGFiZTQ1NmMxNWY2NzJiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDA0OjMxOjI2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbmluZGV4IDY4NzRhMWE4ZWRhZjEuLmNiMzFmNWRiNDNlODEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbkBAIC05NjMsMTcgJiM0Mzs5NjMsMTkgQEAgc3RhdGljIGludCBwcHBvZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG87XG4gXHRjaGFyICpkZXZfbmFtZTtcbiYjNDM7XHRjaGFyICpwcHBfbmFtZTtcbiBcbiBcdGlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikge1xuLVx0XHRzZXFfcHV0cyhzZXEsIFwmIzM0O0lkICAgICAgIEFkZHJlc3MgICAgICAgICAgICAgIERldmljZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRzZXFfcHV0cyhzZXEsIFwmIzM0O0lkICAgICAgIEFkZHJlc3MgICAgICAgICAgICAgIERldmljZSAgIFBQUC1EZXZpY2VcXG5cJiMzNDspO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiBcdHBvID0gdjtcbiBcdGRldl9uYW1lID0gcG8tXHUwMDNlcHBwb2VfcGEuZGV2O1xuJiM0MztcdHBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pO1xuIFxuLVx0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyUwOFggJXBNICU4c1xcblwmIzM0Oyxcbi1cdFx0cG8tXHUwMDNlcHBwb2VfcGEuc2lkLCBwby1cdTAwM2VwcHBvZV9wYS5yZW1vdGUsIGRldl9uYW1lKTtcbiYjNDM7XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7JTA4WCAlcE0gJThzICUxMHNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBwby1cdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVx1MDAzZXBwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUsIHBwcF9uYW1lID8gcHBwX25hbWUgOiBcJiMzNDtcJiMzNDspO1xuIG91dDpcbiBcdHJldHVybiAwO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgc2VxX2ZpbGUgc2hvdyBmdW5jdGlvbiBmb3IgL3Byb2MvbmV0L3BwcG9lIHRvIGluY2x1ZGUgdGhlIFBQUCBkZXZpY2UgbmFtZSBpbiB0aGUgb3V0cHV0LiBUaGlzIGlzIGEgcHVyZWx5IG9ic2VydmFiaWxpdHkvZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZDJhNDk5N2U3NDFjMjdiNTM3YzExZTY0YWJlNDU2YzE1ZjY3MmI5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMDQ6MzE6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCmluZGV4IDY4NzRhMWE4ZWRhZjEuLmNiMzFmNWRiNDNlODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCkBAIC05NjMsMTcgJiM0Mzs5NjMsMTkgQEAgc3RhdGljIGludCBwcHBvZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG87CiAJY2hhciAqZGV2X25hbWU7CiYjNDM7CWNoYXIgKnBwcF9uYW1lOwogCiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7Ci0JCXNlcV9wdXRzKHNlcSwgJiMzNDtJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2VcbiYjMzQ7KTsKJiM0MzsJCXNlcV9wdXRzKHNlcSwgJiMzNDtJZCAgICAgICBBZGRyZXNzICAgICAgICAgICAgICBEZXZpY2UgICBQUFAtRGV2aWNlXG4mIzM0Oyk7CiAJCWdvdG8gb3V0OwogCX0KIAogCXBvID0gdjsKIAlkZXZfbmFtZSA9IHBvLSZndDtwcHBvZV9wYS5kZXY7CiYjNDM7CXBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKCZhbXA7cG8tJmd0O2NoYW4pOwogCi0Jc2VxX3ByaW50ZihzZXEsICYjMzQ7JTA4WCAlcE0gJThzXG4mIzM0OywKLQkJcG8tJmd0O3BwcG9lX3BhLnNpZCwgcG8tJmd0O3BwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUpOwomIzQzOwlzZXFfcHJpbnRmKHNlcSwgJiMzNDslMDhYICVwTSAlOHMgJTEwc1xuJiMzNDssCiYjNDM7CQkgICBwby0mZ3Q7cHBwb2VfcGEuc2lkLCBwby0mZ3Q7cHBwb2VfcGEucmVtb3RlLCBkZXZfbmFtZSwgcHBwX25hbWUgPyBwcHBfbmFtZSA6ICYjMzQ7JiMzNDspOwogb3V0OgogCXJldHVybiAwOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHk6IFBQUG9FIFByb2NmcyBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHR3ZWFraW5nIGBkcml2ZXJzL25ldC9wcHAvcHBwb2UuY2AuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGBwcHBvZV9zZXFfc2hvd2AgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBzaG93IGZ1bmN0aW9uIGZvciBgL3Byb2MvbmV0L3BwcG9lYC4gSXQmIzM5O3MgYWRkaW5nIGEgbGluZSB0byBwcmludCBgcHBwX25hbWUgPSBwcHBfZGV2X25hbWUoJmFtcDtwby0mZ3Q7Y2hhbik7YCBhbmQgdGhlIG5hbWUuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7U2hvdWxkIHdlIGV2ZW4gYm90aGVyIGZ1enppbmcgdGhpcz8mIzM0OyBJdCYjMzk7cyBhIHByb2NmcyBzaG93IGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyAqcmVhY2hhYmxlKi4gQnV0IHRoZW4gYWdhaW4sICphbGwqIHByb2NmcyBzaG93IGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlLi4uIHNvIHRoYXQmIzM5O3Mgbm90IGEgc3Ryb25nIGp1c3RpZmljYXRpb24gaW4gaXRzZWxmLgoKTGV0JiMzOTtzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlLCBpdCYjMzk7cyBhZGRpbmcgYSBuZXcgcGllY2Ugb2YgaW5mb3JtYXRpb24g4oCTIGEgbmV3IGNvbHVtbiB0byBgL3Byb2MvbmV0L3BwcG9lYC4gSXMgdGhpcyBwdXJlbHkgY29zbWV0aWM/IFRoZSBndWlkZWxpbmVzIEkmIzM5O20gb3BlcmF0aW5nIHVuZGVyIHN1Z2dlc3QgcmVqZWN0aW5nIHBhdGNoZXMgdGhhdCBhcmUgbWVyZWx5IGRlY29yYXRpdmUsIHN1Y2ggYXMgbG9nIGNoYW5nZXMgb3IgY29tbWVudHMuIEhvd2V2ZXIsIHRoaXMgaXNuJiMzOTt0IGp1c3QgYSBsb2cgbWVzc2FnZTsgaXQmIzM5O3MgY2hhbmdpbmcgdGhlICpvdXRwdXQqIG9mIGBzZXFfZmlsZWAuCgpUaGUgcXVlc3Rpb24gYmVjb21lcywgaXMgdGhpcyBuZXcgb3V0cHV0ICppbmZvcm1hdGl2ZSogaW4gYSB3YXkgdGhhdCBtaWdodCBpbnRyb2R1Y2UgbmV3IGJ1Z3M/IElmIGl0JiMzOTtzIGEgbmV3IGluZm9ybWF0aW9uYWwgb3V0cHV0LCB0aGVuIG1heWJlIG5vdC4KCldhaXQgYSBzZWNvbmQuLi4gaG9sZCBvbi4gKmBwcHBfZGV2X25hbWVgKi4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IGZ1bmN0aW9uIG1pZ2h0IGhhdmUgaXRzIG93biBpc3N1ZXMuIFdoYXQgaWYgYHBvLSZndDtjaGFuYCBpc24mIzM5O3QgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IHNvbWV3aGVyZT8gT3IsIGV2ZW4gd29yc2UsIHdoYXQgaWYgdGhlcmUmIzM5O3MgYSByYWNlIGNvbmRpdGlvbiBpbiBob3cgdGhhdCBpcyBiZWluZyBhY2Nlc3NlZD8gSSBzaG91bGQgcmVhbGx5IGNoZWNrIGBwcHBfZGV2X25hbWVgIGl0c2VsZiB0byBzZWUgaWYgaXQmIzM5O3MgZ290IGFueSB2dWxuZXJhYmlsaXRpZXMuICpUaGF0KiBtaWdodCBtYWtlIHRoaXMgZnV6emFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHBwX2Rldl9uYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0yOTUzPWludCBwcHBfdW5pdF9udW1iZXIoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTI5NzItICovXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoyOTczOmNoYXIgKnBwcF9kZXZfbmFtZShzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTc0LXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0zNjYyPUVYUE9SVF9TWU1CT0wocHBwX3VuaXRfbnVtYmVyKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjM2NjM6RVhQT1JUX1NZTUJPTChwcHBfZGV2X25hbWUpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzY2NC1FWFBPUlRfU1lNQk9MKHBwcF9pbnB1dCk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTYyPXN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTc0LVx0ZGV2X25hbWUgPSBwby1cdTAwM2VwcHBvZV9wYS5kZXY7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5NzU6XHRwcHBfbmFtZSA9IHBwcF9kZXZfbmFtZShcdTAwMjZwby1cdTAwM2VjaGFuKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk3Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYHBwcF9kZXZfbmFtZWAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgcHBwX2Rldl9uYW1lYCBpbXBsZW1lbnRhdGlvbi4gSSBrbm93IGl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2UgZm9yIGFzc2lnbmluZyBsb2dpY2FsIG5hbWVzIHRvIFBQUCBpbnRlcmZhY2VzLCBhbmQgYW55IGJ1ZyBoZXJlIGNhbiBjYXVzZSBzZXJpb3VzIGhlYWRhY2hlcyB3aXRoIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgZXNwZWNpYWxseSBpbiBtb3JlIGNvbXBsZXggc2V0dXBzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZGV2aWNlIG5hbWUgZ2VuZXJhdGlvbiBpcyByb2J1c3QgYW5kIHByZWRpY3RhYmxlLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm5zIGFyZToKCiogICAqKkNvbmN1cnJlbmN5OioqIEhvdyBkb2VzIGl0IGhhbmRsZSBtdWx0aXBsZSBQUFAgaW5zdGFuY2VzIGNyZWF0aW5nIGRldmljZXMgc2ltdWx0YW5lb3VzbHk/IEFyZSB0aGVyZSByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIG5hbWluZyBjb2xsaXNpb25zIG9yIGluY29ycmVjdCBhc3NpZ25tZW50cz8KKiAgICoqRWRnZSBDYXNlczoqKiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgd2hhdCBoYXBwZW5zIHdpdGggcmVhbGx5IGxvbmcgY29ubmVjdGlvbiB0aW1lcywgdHJhbnNpZW50IGxpbmtzLCBkZXZpY2VzIHdpdGggdW51c3VhbCBhdHRyaWJ1dGVzLCBhbmQgd2hhdCBoYXBwZW5zIGluIHRoZSBldmVudCBvZiBpbnRlcmZhY2UgZXhoYXVzdGlvbi4gQXJlIHRoZXJlIGFueSBsaW1pdHMgdGhhdCBtaWdodCBiZSBoaXQgYW5kIGNyZWF0ZSBlcnJvcnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvdXI/CiogICAqKk5hbWluZyBTY2hlbWUgQ29uc2lzdGVuY3k6KiogSXMgdGhlIG5hbWluZyBzY2hlbWUgd2VsbC1kZWZpbmVkIGFuZCBkb2N1bWVudGVkPyBJcyBpdCBjb25maWd1cmFibGUsIGFuZCBpZiBzbywgaG93PyBBbmQgbW9zdCBpbXBvcnRhbnRseSwgaXMgaXQgYmFja3dhcmRzLWNvbXBhdGlibGUgd2l0aCBvbGRlciBrZXJuZWxzIG9yIGRpc3Ryb3M/IEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHNvbWV0aGluZyBlYXNpbHkgdW5kZXJzdG9vZCBhbmQgZGVidWdnYWJsZSwgcmF0aGVyIHRoYW4gYSBibGFjayBib3guCiogICAqKlNlY3VyaXR5OioqIEFyZSB0aGVyZSBhbnkgc2VjdXJpdHkgaW1wbGljYXRpb25zIHdpdGggdGhlIG5hbWluZyBzY2hlbWU/IENvdWxkIGl0IGJlIGV4cGxvaXRlZCBzb21laG93PwoqICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0JiMzOTtzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBEb2VzIGl0IGhhbmRsZSBpbnZhbGlkIG9yIG1hbGZvcm1lZCBkYXRhIGdyYWNlZnVsbHk/IERvZXMgaXQgbG9nIHVzZWZ1bCBpbmZvcm1hdGlvbiBvciBzaW1wbHkgZmFpbCBzaWxlbnRseT8gQSBnb29kIGltcGxlbWVudGF0aW9uIHdpbGwgYWx3YXlzIHByb3ZpZGUgZGV0YWlsZWQgY29udGV4dCBpbiBjYXNlIG9mIGEgcHJvYmxlbS4KCkkmIzM5O20gZ29pbmcgdG8gd2FudCB0bzoKCiogICBEaWcgaW50byB0aGUgY29kZSBhbmQgcXVpY2tseSBhbmFseXplIHRoZSBrZXkgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBuYW1lIGdlbmVyYXRpb24gYW5kIGFzc2lnbm1lbnQuCiogICBDaGVjayBmb3IgYW55IGV4aXN0aW5nIGJ1ZyByZXBvcnRzIG9yIGRpc2N1c3Npb25zIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbi4KKiAgIFJ1biBzb21lIHRlc3RzIG9uIGRpZmZlcmVudCBzY2VuYXJpb3MgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncywgcGVyaGFwcyBpbmNsdWRpbmcgc29tZSBlZGdlIGNhc2UgdGVzdGluZywgYW5kIGNoZWNrIG15IHJlc3VsdHMgYWdhaW5zdCB3aGF0IHRoZSBzeXN0ZW0gc2hvdWxkIGRvLgoKVGhpcyBpcyBnb2luZyB0byBiZSBteSBpbW1lZGlhdGUgZm9jdXMsIGFzIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBsb2dpY2FsIG5hbWUgaXMgYXNzaWduZWQgaXMgZnVuZGFtZW50YWwgdG8gZGlhZ25vc2luZyBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFyIFxcKnBwcF9kZXZfbmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTI5NTM9aW50IHBwcF91bml0X251bWJlcihzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjk3Mi0gKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjI5NzM6Y2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTI5NzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4ODAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvbXB0IGlzIHN0cmFpZ2h0Zm9yd2FyZDogJiMzNDtMZXQmIzM5O3MgcmVhZCBgcHBwX2Rldl9uYW1lYC4mIzM0OyBNeSBpbW1lZGlhdGUgcmVzcG9uc2U/IEkgbmVlZCBtb3JlIGNvbnRleHQsIGJ1dCBJIGNhbiBhbHJlYWR5IHN0YXJ0IHRvIG1ha2Ugc29tZSBlZHVjYXRlZCBndWVzc2VzLiBUaGUgc3ludGF4IGFsb25lIHN1Z2dlc3RzIGEgZGV2aWNlIG5hbWUsIGxpa2VseSB3aXRoaW4gYSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3Igc3lzdGVtIGFkbWluaXN0cmF0aW9uIGNvbnRleHQuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiB3aXRoIHRoZSB1bmRlcnNjb3JlcywgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBzb21ldGhpbmcgcmVsYXRlZCB0byBQb2ludC10by1Qb2ludCBQcm90b2NvbCAoUFBQKSBjb25maWd1cmF0aW9uLiBUaGlzIGNvdWxkIGJlIGEgZGV2aWNlLCBhbiBpbnRlcmZhY2UsIGEgY29uZmlndXJhdGlvbiBmaWxlLCBvciBhIHZhcmlhYmxlIHJlcHJlc2VudGluZyB0aGUgbmFtZS4gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgc2NlbmFyaW9zOiB0aGUgZXhhY3Qgb3BlcmF0aW5nIHN5c3RlbSwgbmV0d29yayB0b3BvbG9neSwgdGhlIHNwZWNpZmljIHB1cnBvc2Ugb2YgdGhpcyBkZXZpY2UsIGV0Yy4gTXkgbWluZCBhdXRvbWF0aWNhbGx5IHN0YXJ0cyB0byBtYXAgdGhpcyB0byB2YXJpb3VzIHN5c3RlbXMgSSYjMzk7dmUgd29ya2VkIHdpdGgg4oCTIExpbnV4LCBVbml4LCBtYXliZSBldmVuIHNvbWUgZW1iZWRkZWQgc3lzdGVtcyBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc2VyaWFsLWJhc2VkIFBQUCBjb25uZWN0aW9uLiBUaGlzIGNvdWxkIGJlIGEgY3JpdGljYWwgc3RlcCBpbiB0cm91Ymxlc2hvb3RpbmcgYSBuZXR3b3JrIG91dGFnZSwgY29uZmlndXJpbmcgYSBkaWFsLXVwIGNvbm5lY3Rpb24sIG9yIGFuYWx5emluZyBuZXR3b3JrIHRyYWZmaWMuIEkmIzM5O20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIGl0cyBtZWFuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5NzA6XHQgKiBSZXR1cm4gdGhlIFBQUCBkZXZpY2UgaW50ZXJmYWNlIG5hbWUgb2YgYSBjaGFubmVsLlxuMjk3MTpcdCAqIENhbGxlciBtdXN0IGhvbGQgUkNVIHJlYWQgbG9jay5cbjI5NzI6XHQgKi9cbjI5NzM6XHRjaGFyICpwcHBfZGV2X25hbWUoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxuMjk3NDpcdHtcbjI5NzU6XHRcdHN0cnVjdCBjaGFubmVsICpwY2ggPSBjaGFuLVx1MDAzZXBwcDtcbjI5NzY6XHRcdGNoYXIgKm5hbWUgPSBOVUxMO1xuMjk3NzpcdFx0c3RydWN0IHBwcCAqcHBwO1xuMjk3ODpcdFxuMjk3OTpcdFx0aWYgKHBjaCkge1xuMjk4MDpcdFx0XHRwcHAgPSByY3VfZGVyZWZlcmVuY2UocGNoLVx1MDAzZXBwcCk7XG4yOTgxOlx0XHRcdGlmIChwcHAgXHUwMDI2XHUwMDI2IHBwcC1cdTAwM2VkZXYpXG4yOTgyOlx0XHRcdFx0bmFtZSA9IHBwcC1cdTAwM2VkZXYtXHUwMDNlbmFtZTtcbjI5ODM6XHRcdH1cbjI5ODQ6XHRcdHJldHVybiBuYW1lO1xuMjk4NTpcdH1cbjI5ODY6XHRcbjI5ODc6XHRcbjI5ODg6XHQvKlxuMjk4OTpcdCAqIERpc2Nvbm5lY3QgYSBjaGFubmVsIGZyb20gdGhlIGdlbmVyaWMgbGF5ZXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQzOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIFJDVSBMb2NrIFJlcXVpcmVtZW50cyBmb3IgUFBQb0UgRGV2aWNlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBwcHBfZGV2X25hbWVgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBuZWVkaW5nIHRoZSBjYWxsZXIgdG8gaG9sZCBhbiBSQ1UgcmVhZCBsb2NrLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZGV0YWlsIOKAkyB3ZSBjYW4mIzM5O3QganVzdCBjYWxsIGl0IHdpbGx5LW5pbGx5LiBUaGUgaW50ZWdyaXR5IG9mIHRoZSBkYXRhIHJlbGllcyBvbiB0aGF0IGxvY2suIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYmlnZ2VyIHBpY3R1cmUgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCBob3cgYHBwcG9lX3NlcV9zaG93YCBpbnRlcmFjdHMgd2l0aCBgcHBwX2Rldl9uYW1lYC4gRG9lcyBpdCBjb21wbHkgd2l0aCB0aGlzIGxvY2sgcmVxdWlyZW1lbnQ/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgcHBwb2Vfc2VxX3Nob3dgICpkb2VzKiBob2xkIGFuIFJDVSByZWFkIGxvY2sgYmVmb3JlIGNhbGxpbmcgYHBwcF9kZXZfbmFtZWAsIG9yIGlmIGl0IGRvZXNuJiMzOTt0LCB0aGF0IHdlIGhhdmUgYSBzZXJpb3VzIGJ1ZyBvbiBvdXIgaGFuZHMuIFNvLCB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4gSSBuZWVkIHRvIGV4YW1pbmUgYHBwcG9lX3NlcV9zaG93YCBhbmQgbWV0aWN1bG91c2x5IHRyYWNlIGl0cyBjYWxsaW5nIGNvbnRleHQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIFJDVSByZWFkIGxvY2sgaXMgY29ycmVjdGx5IGhhbmRsZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludDsgb3RoZXJ3aXNlLCB3ZSYjMzk7cmUgbGlrZWx5IHRvIGludHJvZHVjZSBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHBwb2Vfc2VxX3Nob3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwb2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwb2UuYz05MzY9c3RhdGljIGludCBwcHBvZV9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTYxLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTYyOnN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NjMte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTEwNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvZV9zZXFfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTEwNDktXHQuc3RvcFx0XHQ9IHBwcG9lX3NlcV9zdG9wLFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTA1MDpcdC5zaG93XHRcdD0gcHBwb2Vfc2VxX3Nob3csXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMDUxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdGhlIGtleSB0ZWNobmljYWwgZWxlbWVudHM6CgoqKkNoZWNraW5nIFBQUG9FIFNlcXVlbmNlIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IFBQUG9FIHNlcXVlbmNpbmcgaXMgaGFuZGxlZCBpbiB0aGlzIGNvZGViYXNlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBgcHBwb2Vfc2VxX3N0YXJ0YCBhbmQgYHBwcG9lX3NlcV9zdG9wYC4gVGhlc2UgYXJlIHByb2JhYmx5IGNyaXRpY2FsIGZvciBjb250cm9sbGluZyB0aGUgY29ubmVjdGlvbiBhbmQgZGlzY29ubmVjdGlvbiBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgdGhlIHNlcXVlbmNlIG51bWJlciBhc3NpZ25tZW50cyBmb3IgdGhlIFBQUG9FIHNlc3Npb24uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBwcm9wZXIgc2VxdWVuY2luZyBpcyBhYnNvbHV0ZWx5IHZpdGFsIGZvciByZWxpYWJsZSBkYXRhIHRyYW5zbWlzc2lvbiwgYW5kIHRoZXJlZm9yZSwgYnVncyBvciBtaXNjb25maWd1cmF0aW9ucyBoZXJlIGNhbiBoYXZlIHNlcmlvdXMgaW1wbGljYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBQUFAgbGF5ZXIsIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlcywgYW5kIGFueSBhc3NvY2lhdGVkIHN0YXRlIG1hY2hpbmVzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGVzZSBhcmUgdXNlZCB0byBtYWtlIHN1cmUgdGhleSYjMzk7cmUgZG9pbmcgd2hhdCBJIHRoaW5rIHRoZXkgYXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODA6XHRcdHJldHVybiAwO1xuIDk4MTpcdH1cbiA5ODI6XHRcbiA5ODM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpwcHBvZV9nZXRfaWR4KHN0cnVjdCBwcHBvZV9uZXQgKnBuLCBsb2ZmX3QgcG9zKVxuIDk4NDpcdHtcbiA5ODU6XHRcdHN0cnVjdCBwcHBveF9zb2NrICpwbztcbiA5ODY6XHRcdGludCBpO1xuIDk4NzpcdFxuIDk4ODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUFBQT0VfSEFTSF9TSVpFOyBpJiM0MzsmIzQzOykge1xuIDk4OTpcdFx0XHRwbyA9IHJjdV9kZXJlZmVyZW5jZShwbi1cdTAwM2VoYXNoX3RhYmxlW2ldKTtcbiA5OTA6XHRcdFx0d2hpbGUgKHBvKSB7XG4gOTkxOlx0XHRcdFx0aWYgKCFwb3MtLSlcbiA5OTI6XHRcdFx0XHRcdGdvdG8gb3V0O1xuIDk5MzpcdFx0XHRcdHBvID0gcmN1X2RlcmVmZXJlbmNlKHBvLVx1MDAzZW5leHQpO1xuIDk5NDpcdFx0XHR9XG4gOTk1Olx0XHR9XG4gOTk2Olx0XG4gOTk3Olx0b3V0OlxuIDk5ODpcdFx0cmV0dXJuIHBvO1xuIDk5OTpcdH1cbjEwMDA6XHRcbjEwMDE6XHRzdGF0aWMgdm9pZCAqcHBwb2Vfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbjEwMDI6XHRcdF9fYWNxdWlyZXMoUkNVKVxuMTAwMzpcdHtcbjEwMDQ6XHRcdHN0cnVjdCBwcHBvZV9uZXQgKnBuID0gcHBwb2VfcGVybmV0KHNlcV9maWxlX25ldChzZXEpKTtcbjEwMDU6XHRcdGxvZmZfdCBsID0gKnBvcztcbjEwMDY6XHRcbjEwMDc6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjEwMDg6XHRcdHJldHVybiBsID8gcHBwb2VfZ2V0X2lkeChwbiwgLS1sKSA6IFNFUV9TVEFSVF9UT0tFTjtcbjEwMDk6XHR9XG4xMDEwOlx0XG4xMDExOlx0c3RhdGljIHZvaWQgKnBwcG9lX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbjEwMTI6XHR7XG4xMDEzOlx0XHRzdHJ1Y3QgcHBwb2VfbmV0ICpwbiA9IHBwcG9lX3Blcm5ldChzZXFfZmlsZV9uZXQoc2VxKSk7XG4xMDE0Olx0XHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8sICpuZXh0O1xuMTAxNTpcdFxuMTAxNjpcdFx0JiM0MzsmIzQzOypwb3M7XG4xMDE3Olx0XHRpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHtcbjEwMTg6XHRcdFx0cG8gPSBwcHBvZV9nZXRfaWR4KHBuLCAwKTtcbjEwMTk6XHRcdFx0Z290byBvdXQ7XG4xMDIwOlx0XHR9XG4xMDIxOlx0XHRwbyA9IHY7XG4xMDIyOlx0XHRuZXh0ID0gcmN1X2RlcmVmZXJlbmNlKHBvLVx1MDAzZW5leHQpO1xuMTAyMzpcdFx0aWYgKG5leHQpXG4xMDI0Olx0XHRcdHBvID0gbmV4dDtcbjEwMjU6XHRcdGVsc2Uge1xuMTAyNjpcdFx0XHRpbnQgaGFzaCA9IGhhc2hfaXRlbShwby1cdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVx1MDAzZXBwcG9lX3BhLnJlbW90ZSk7XG4xMDI3Olx0XG4xMDI4Olx0XHRcdHBvID0gTlVMTDtcbjEwMjk6XHRcdFx0d2hpbGUgKCYjNDM7JiM0MztoYXNoIFx1MDAzYyBQUFBPRV9IQVNIX1NJWkUpIHtcbjEwMzA6XHRcdFx0XHRwbyA9IHJjdV9kZXJlZmVyZW5jZShwbi1cdTAwM2VoYXNoX3RhYmxlW2hhc2hdKTtcbjEwMzE6XHRcdFx0XHRpZiAocG8pXG4xMDMyOlx0XHRcdFx0XHRicmVhaztcbjEwMzM6XHRcdFx0fVxuMTAzNDpcdFx0fVxuMTAzNTpcdFxuMTAzNjpcdG91dDpcbjEwMzc6XHRcdHJldHVybiBwbztcbjEwMzg6XHR9XG4xMDM5Olx0XG4xMDQwOlx0c3RhdGljIHZvaWQgcHBwb2Vfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4xMDQxOlx0XHRfX3JlbGVhc2VzKFJDVSlcbjEwNDI6XHR7XG4xMDQzOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjEwNDQ6XHR9XG4xMDQ1Olx0XG4xMDQ2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvZV9zZXFfb3BzID0ge1xuMTA0NzpcdFx0LnN0YXJ0XHRcdD0gcHBwb2Vfc2VxX3N0YXJ0LFxuMTA0ODpcdFx0Lm5leHRcdFx0PSBwcHBvZV9zZXFfbmV4dCxcbjEwNDk6XHRcdC5zdG9wXHRcdD0gcHBwb2Vfc2VxX3N0b3AsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFBvRSBQcm9jZnMgQ2hhbmdlKioKCk9rYXksIHNvIGBwcHBvZV9zZXFfc3RhcnRgIGdyYWJzIGFuIFJDVSByZWFkIGxvY2ssIGFuZCBgcHBwb2Vfc2VxX3N0b3BgIHJlbGVhc2VzIGl0LiBUaGF0IG1lYW5zIHRoZSBgcHBwb2Vfc2VxX3Nob3dgIGZ1bmN0aW9uLCB3aGVyZSB0aGUgY2hhbmdlIGlzIGJlaW5nIG1hZGUsIGlzIG9wZXJhdGluZyB3aXRoaW4gdGhlIHByb3RlY3Rpb24gb2YgdGhhdCBSQ1UgbG9jay4gVGhpcyBjaGFuZ2UgaXMganVzdCBhYm91dCBhZGRpbmcgYSBuZXcgY29sdW1uIHRvIHRoZSBgL3Byb2MvbmV0L3BwcG9lYCBvdXRwdXQsIHNwZWNpZmljYWxseSBpbmNsdWRpbmcgdGhlIHJlc3VsdCBvZiBgcHBwX2Rldl9uYW1lKCZhbXA7cG8tJmd0O2NoYW4pYC4gSXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IEl0IHNlZW1zIHJlbGF0aXZlbHkgYmVuaWduLiBJdCYjMzk7cyBwcm9jZnMsIGFuZCBpdCYjMzk7cyBqdXN0IGZvcm1hdHRpbmcgb3V0cHV0LgoKSG93ZXZlciwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGUgZGV0YWlscy4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgbGllcyBpbiBgcHBwX2Rldl9uYW1lYC4gVGhpcyBmdW5jdGlvbiBkZXJlZmVyZW5jZXMgYGNoYW4tJmd0O3BwcGAsIHRoZW4gYHJjdV9kZXJlZmVyZW5jZShwY2gtJmd0O3BwcClgLCBhbmQgZmluYWxseSBhY2Nlc3NlcyBgcHBwLSZndDtkZXYtJmd0O25hbWVgLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGx1cmtpbmcgd2l0aGluIHRoaXMgY2hhaW4/IFNwZWNpZmljYWxseSwgaWYgYHBvLSZndDtjaGFuYCBpc24mIzM5O3QgY29tcGxldGVseSBpbml0aWFsaXplZCBhdCB0aGUgdGltZSBgcHBwb2Vfc2VxX3Nob3dgIGlzIGNhbGxlZCwgY291bGQgdGhpcyBsZWFkIHRvIGEgY3Jhc2g/IEkgc2hvdWxkIGNoZWNrIHdoZXJlIGBwby0mZ3Q7Y2hhbmAgaXMgaW5pdGlhbGl6ZWQuIFRoaXMgY291bGQgYmUgYSB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTktICpcdFx0c2ltdWx0YW5lb3VzIGludm9jYXRpb24gb2YgcHBwX2lucHV0XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyMDogKlx0XHRhbmQgcHBwX3VucmVnaXN0ZXJfY2hhbm5lbC5cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjIxOiAqIDA0MDgwMCA6XHRSZXNwZWN0IHJlZmVyZW5jZSBjb3VudCBtZWNoYW5pc21zIG9uIG5ldC1kZXZpY2VzLlxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjItICogMjAwODAwIDpcdGZpeCBrZnJlZShza2IpIGluIHBwcG9lX3JjdiAoYWNtZSlcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00MC0gKlx0XHRyZWZlcmVuY2Ugb2YgZGV2aWNlIG9uIGNsb3NlKS5cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQxOiAqIDEyMTMwMSA6XHROZXcgcHBwIGNoYW5uZWxzIGludGVyZmFjZTsgY2Fubm90IHVucmVnaXN0ZXIgYSBjaGFubmVsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00Mi0gKlx0XHRmcm9tIGludGVycnVwdHMuICBUaHVzLCB3ZSBtYXJrIHRoZSBzb2NrZXQgYXMgYSBaT01CSUVcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02Ny0jaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9wcHBveC5oXHUwMDNlXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2ODojaW5jbHVkZSBcdTAwM2NsaW51eC9wcHBfY2hhbm5lbC5oXHUwMDNlXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02OS0jaW5jbHVkZSBcdTAwM2NsaW51eC9wcHBfZGVmcy5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcHBwb2Vfb3BzO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTE6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2VfY2hhbl9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05Mi1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz0yNTY9c3RhdGljIHZvaWQgcHBwb2VfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjkzLVx0XHRcdFx0cHBwb3hfdW5iaW5kX3NvY2soc2spO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Mjk0Olx0XHRcdFx0c2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI5NS1cdFx0XHRcdHBvLVx1MDAzZXBwcG9lX2RldiA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzAzLVx0XHRcdCAqIGhhc2ggY2hhaW4uIFdlIGRyb3BwZWQgbG9ja3Mgc28gdGhlIHdvcmxkIG1heSBoYXZlXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzozMDQ6XHRcdFx0ICogY2hhbmdlIGZyb20gdW5kZXJuZWF0aCB1cy5cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTMwNS1cdFx0XHQgKi9cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz0zMTY9c3RhdGljIGludCBwcHBvZV9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTMyNC1cdGNhc2UgTkVUREVWX0NIQU5HRU1UVTpcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjMyNTpcdFx0LyogQSBjaGFuZ2UgaW4gbXR1IG9yIGFkZHJlc3MgaXMgYSBiYWQgdGhpbmcsIHJlcXVpcmluZ1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzI2LVx0XHQgKiBMQ1AgcmUtbmVnb3RpYXRpb24uXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9MzUxPXN0YXRpYyBpbnQgcHBwb2VfcmN2X2NvcmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM1Ni1cdCAqIGV4ZWN1dGluZyBpbiBsb2NrX3NvY2soKS9yZWxlYXNlX3NvY2soKSBib3VuZHM7IG1lYW5pbmcgc2stXHUwMDNlc2tfc3RhdGVcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjM1NzpcdCAqIGNhbiYjMzk7dCBjaGFuZ2UuXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zNTgtXHQgKi9cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zNjAtXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgXHUwMDI2IFBQUE9YX0JPVU5EKSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzozNjE6XHRcdHBwcF9pbnB1dChcdTAwMjZwby1cdTAwM2VjaGFuLCBza2IpO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzYyLVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz01ODc9c3RhdGljIGludCBwcHBvZV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1c2VydmFkZHIsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjM0LVx0XHRtZW1zZXQoXHUwMDI2cG8tXHUwMDNlcHBwb2VfcGEsIDAsIHNpemVvZihwby1cdTAwM2VwcHBvZV9wYSkpO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjM1Olx0XHRtZW1zZXQoXHUwMDI2cG8tXHUwMDNlY2hhbiwgMCwgc2l6ZW9mKHBvLVx1MDAzZWNoYW4pKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYzNi1cdFx0cG8tXHUwMDNlbmV4dCA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjY2LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjY3Olx0XHRwby1cdTAwM2VjaGFuLmhkcmxlbiA9IChzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikgJiM0MztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY2OC1cdFx0XHRcdCAgIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjY5LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjcwOlx0XHRwby1cdTAwM2VjaGFuLm10dSA9IGRldi1cdTAwM2VtdHUgLSBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikgLSAyO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjcxOlx0XHRwby1cdTAwM2VjaGFuLnByaXZhdGUgPSBzaztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY3MjpcdFx0cG8tXHUwMDNlY2hhbi5vcHMgPSBcdTAwMjZwcHBvZV9jaGFuX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY3MzpcdFx0cG8tXHUwMDNlY2hhbi5kaXJlY3RfeG1pdCA9IHRydWU7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NzQtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NzU6XHRcdGVycm9yID0gcHBwX3JlZ2lzdGVyX25ldF9jaGFubmVsKGRldl9uZXQoZGV2KSwgXHUwMDI2cG8tXHUwMDNlY2hhbik7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NzYtXHRcdGlmIChlcnJvcikge1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTg0NT1zdGF0aWMgaW50IF9fcHBwb2VfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtODUxLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6ODUyOlx0LyogVGhlIGhpZ2hlci1sZXZlbCBQUFAgY29kZSAocHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpKSBlbnN1cmVzIHRoZSBQUFBcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTg1My1cdCAqIHhtaXQgb3BlcmF0aW9ucyBjb25jbHVkZSBwcmlvciB0byBhbiB1bnJlZ2lzdHJhdGlvbiBjYWxsLiAgVGh1c1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6ODU0Olx0ICogc2stXHUwMDNlc2tfc3RhdGUgY2Fubm90IGNoYW5nZSwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gZG8gbG9ja19zb2NrKCkuXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy04NTUtXHQgKiBCdXQsIHdlIGFsc28gY2FuJiMzOTt0IGRvIGEgbG9ja19zb2NrIHNpbmNlIHRoYXQgaW50cm9kdWNlcyBhIHBvdGVudGlhbFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtODU2LVx0ICogZGVhZGxvY2sgYXMgd2UmIzM5O2QgcmV2ZXJzZSB0aGUgbG9jayBvcmRlcmluZyB1c2VkIHdoZW4gY2FsbGluZ1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6ODU3Olx0ICogcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpLlxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtODU4LVx0ICovXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTAxLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkwMjpzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTAzLXtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkwNDpcdHN0cnVjdCBzb2NrICpzayA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkwNS1cdHJldHVybiBfX3BwcG9lX3htaXQoc2ssIHNrYik7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTA4PXN0YXRpYyBpbnQgcHBwb2VfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkwOS1cdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5MTA6XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MTEte1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTEyOlx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTEzLVx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkzMC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkzMTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkzMi1cdC5zdGFydF94bWl0ID0gcHBwb2VfeG1pdCxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz05NjI9c3RhdGljIGludCBwcHBvZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NzQtXHRkZXZfbmFtZSA9IHBvLVx1MDAzZXBwcG9lX3BhLmRldjtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjk3NTpcdHBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTc2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTQ1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFBQUG9FIENvbm5lY3Rpb24gQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIFBQUG9FIGNvbm5lY3Rpb24gZmxvdywgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHBvLSZndDtjaGFuYCB3aXRoaW4gYHBwcG9lX2Nvbm5lY3RgLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbWVudGFsIG1hcCB0aGVuIGhhcyB0byB0cmFjZSBob3cgdGhpcyBjaGFubmVsIHZhcmlhYmxlIGlzIG1hbmFnZWQuIEFoLCBoZXJlIHdlIGdvLCBgcHBwb2Vfc2VxX3Nob3dgIGlzIHdoZXJlIEkgc2VlIHRoZSBjaGFubmVsIGJlaW5nIHV0aWxpemVkLiBJdCYjMzk7cyBpdGVyYXRpbmcgdGhyb3VnaCBhIGhhc2ggdGFibGUsIGBwbi0mZ3Q7aGFzaF90YWJsZWAuIE1ha2VzIHNlbnNlLCB3ZSB1c2UgYSBoYXNoIGZvciBxdWljayBsb29rdXBzIGluIG5ldHdvcmtpbmcuCgpOb3csIHdoZXJlIGRvZXMgdGhhdCBzb2NrZXQgZ2V0IGFkZGVkIHRvIHRoZSBoYXNoPyBCYWNrIHRvIGBwcHBvZV9jb25uZWN0YCwgeWVzLCBJIGNhbiBzZWUgaXQmIzM5O3MgYWRkZWQgdXNpbmcgYHBwcG9lX2hhc2hfYWRkKHBvKWAuIEJ1dCB3YWl0IGEgc2Vjb25kLCBhIGZsaWNrZXIgb2YgZG91YnQuLi4gZG9lcyBgcHBwb2VfaGFzaF9hZGRgIGhhcHBlbiAqYmVmb3JlKiBvciAqYWZ0ZXIqIGBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWxgIGlzIGNhbGxlZD8gVGhhdCYjMzk7cyBhIGNydWNpYWwgc2VxdWVuY2UgZGVwZW5kZW5jeSB0byBiZSBzdXJlIG9mLiBUaGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24gdGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYyEgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IG9yZGVyIG9mIG9wZXJhdGlvbnMgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgY29ycmVjdCBhbmQgcmVnaXN0ZXJlZCBwcm9wZXJseS4gUmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBiYWNrIHRvIGBwcHBvZV9jb25uZWN0YCBhbmQgY29uZmlybSB0aGUgZXhhY3Qgc2VxdWVuY2UgdGhlcmUuIEdvdHRhIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY0MDpcdFx0fVxuIDY0MTpcdFxuIDY0MjpcdFx0LyogUmUtYmluZCBpbiBzZXNzaW9uIHN0YWdlIG9ubHkgKi9cbiA2NDM6XHRcdGlmIChzdGFnZV9zZXNzaW9uKHNwLVx1MDAzZXNhX2FkZHIucHBwb2Uuc2lkKSkge1xuIDY0NDpcdFx0XHRlcnJvciA9IC1FTk9ERVY7XG4gNjQ1Olx0XHRcdG5ldCA9IHNvY2tfbmV0KHNrKTtcbiA2NDY6XHRcdFx0ZGV2ID0gZGV2X2dldF9ieV9uYW1lKG5ldCwgc3AtXHUwMDNlc2FfYWRkci5wcHBvZS5kZXYpO1xuIDY0NzpcdFx0XHRpZiAoIWRldilcbiA2NDg6XHRcdFx0XHRnb3RvIGVycl9wdXQ7XG4gNjQ5Olx0XG4gNjUwOlx0XHRcdHBvLVx1MDAzZXBwcG9lX2RldiA9IGRldjtcbiA2NTE6XHRcdFx0cG8tXHUwMDNlcHBwb2VfaWZpbmRleCA9IGRldi1cdTAwM2VpZmluZGV4O1xuIDY1MjpcdFx0XHRwbiA9IHBwcG9lX3Blcm5ldChuZXQpO1xuIDY1MzpcdFx0XHRpZiAoIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkpIHtcbiA2NTQ6XHRcdFx0XHRnb3RvIGVycl9wdXQ7XG4gNjU1Olx0XHRcdH1cbiA2NTY6XHRcbiA2NTc6XHRcdFx0bWVtY3B5KFx1MDAyNnBvLVx1MDAzZXBwcG9lX3BhLFxuIDY1ODpcdFx0XHQgICAgICAgXHUwMDI2c3AtXHUwMDNlc2FfYWRkci5wcHBvZSxcbiA2NTk6XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgcHBwb2VfYWRkcikpO1xuIDY2MDpcdFxuIDY2MTpcdFx0XHRzcGluX2xvY2soXHUwMDI2cG4tXHUwMDNlaGFzaF9sb2NrKTtcbiA2NjI6XHRcdFx0ZXJyb3IgPSBfX3NldF9pdGVtKHBuLCBwbyk7XG4gNjYzOlx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnBuLVx1MDAzZWhhc2hfbG9jayk7XG4gNjY0Olx0XHRcdGlmIChlcnJvciBcdTAwM2MgMClcbiA2NjU6XHRcdFx0XHRnb3RvIGVycl9wdXQ7XG4gNjY2Olx0XG4gNjY3Olx0XHRcdHBvLVx1MDAzZWNoYW4uaGRybGVuID0gKHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSAmIzQzO1xuIDY2ODpcdFx0XHRcdFx0ICAgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4gNjY5Olx0XG4gNjcwOlx0XHRcdHBvLVx1MDAzZWNoYW4ubXR1ID0gZGV2LVx1MDAzZW10dSAtIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSAtIDI7XG4gNjcxOlx0XHRcdHBvLVx1MDAzZWNoYW4ucHJpdmF0ZSA9IHNrO1xuIDY3MjpcdFx0XHRwby1cdTAwM2VjaGFuLm9wcyA9IFx1MDAyNnBwcG9lX2NoYW5fb3BzO1xuIDY3MzpcdFx0XHRwby1cdTAwM2VjaGFuLmRpcmVjdF94bWl0ID0gdHJ1ZTtcbiA2NzQ6XHRcbiA2NzU6XHRcdFx0ZXJyb3IgPSBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoZGV2X25ldChkZXYpLCBcdTAwMjZwby1cdTAwM2VjaGFuKTtcbiA2NzY6XHRcdFx0aWYgKGVycm9yKSB7XG4gNjc3Olx0XHRcdFx0ZGVsZXRlX2l0ZW0ocG4sIHBvLVx1MDAzZXBwcG9lX3BhLnNpZCxcbiA2Nzg6XHRcdFx0XHRcdCAgICBwby1cdTAwM2VwcHBvZV9wYS5yZW1vdGUsIHBvLVx1MDAzZXBwcG9lX2lmaW5kZXgpO1xuIDY3OTpcdFx0XHRcdGdvdG8gZXJyX3B1dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMjMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gYF9fc2V0X2l0ZW0ocG4sIHBvKWAgYWRkcyBzb21ldGhpbmcgdG8gdGhlIGhhc2ggdGFibGUsIGFuZCB0aGVuIGBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWxgIGlzIGNhbGxlZC4gVGhlIGtleSBpc3N1ZSBpcyBpZiBgcHBwb2Vfc2VxX3Nob3dgIGlzIGNhbGxlZCBpbiB0aGUgbWlkZGxlLCBzcGVjaWZpY2FsbHkgaWYgaXTigJlzIGNhbGxlZCAqYmV0d2VlbiogdGhlIHRhYmxlIGVudHJ5IGFuZCB0aGUgcmVnaXN0cmF0aW9uLCB0aGUgYHBvLSZndDtjaGFuYCBtZW1iZXIgZ2V0cyB6ZXJvZWQgb3V0IHdpdGggYG1lbXNldGAuIFRoaXMgaXMgdGhlIHBvdGVudGlhbCBwb2ludCBvZiBjb250ZW50aW9uLgoKTm93LCBpbnNpZGUgYHBwcF9kZXZfbmFtZWAsIHRoZSBjb2RlIGdyYWJzIGEgYHN0cnVjdCBjaGFubmVsICpwY2ggPSBjaGFuLSZndDtwcHA7YC4gQmVjYXVzZSBgY2hhbmAgaXMgemVyb2VkLCBgY2hhbi0mZ3Q7cHBwYCBpcyAqZ3VhcmFudGVlZCogdG8gYmUgTlVMTC4gVGhlbiB0aGVyZSYjMzk7cyBhbiBgaWYgKHBjaClgIGNoZWNrLCB3aGljaCBlZmZlY3RpdmVseSB0ZXN0cyBmb3IgTlVMTC4gVGhlIGNvZGUgaGFuZGxlcyBOVUxMIHdpdGggYHBwcF9uYW1lID8gcHBwX25hbWUgOiAmIzM0OyYjMzQ7YCwgc28gdGhhdCYjMzk7cyBzYWZlLCB3aGljaCBtZWFucyB0aGVyZSBzaG91bGQgYmUgbm8gaXNzdWVzIGhlcmUuIE5vIGNyYXNoZXMsIG5vIHVuZGVmaW5lZCBiZWhhdmlvci4KCk15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgY29uc3RpdHV0ZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZXF1aXJpbmcgZnV6emluZy4gVGhlIGNoYW5nZSBpcyBzaW1wbHkgYSBgc2VxX2ZpbGVgIG91dHB1dCBtb2RpZmljYXRpb24sIHJpZ2h0PyBPbmx5IHRoZSBkaXNwbGF5IG9mIGRhdGEsIHNwZWNpZmljYWxseSB0aGUgUFBQIGRldmljZSBuYW1lIGluIGAvcHJvYy9uZXQvcHBwb2VgIGNoYW5nZWQuIFRoZSBwYXRjaCBub3RlcyBzYXkgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzJiMzNDsgb3IgY2hhbmdlcyB0aGF0ICYjMzQ7ZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdyYjMzQ7LgoKSXMgdGhpcyBkaXNwbGF5IG9mIHRoZSBQUFAgZGV2aWNlIG5hbWUgcHVyZWx5IGRlY29yYXRpdmU/IEl0JiMzOTtzIGFuICpvYnNlcnZhYmlsaXR5KiBjaGFuZ2UsIG5vdCBhICpmdW5jdGlvbmFsKiBvbmUuIFRoZSBuZXR3b3JrIHN0YWNrJiMzOTtzIGFjdHVhbCBleGVjdXRpb24gZmxvdyAqaXNuJiMzOTt0KiBhbHRlcmVkOyBpdCBqdXN0IHByaW50cyB0aGUgUFBQIGRldmljZSBuYW1lLiBJJiMzOTttIGluY2xpbmVkIHRvIGNhdGVnb3JpemUgdGhpcyBhcyBlaXRoZXIgJiMzNDtkZWNvcmF0aXZlIGNoYW5nZXMmIzM0OyBsaWtlIGxvZ2dpbmcgb3IgdHJhY2luZyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGFzIG5vdCBmdW5jdGlvbmFsbHkgY2hhbmdpbmcgdGhlIGV4ZWN1dGlvbi4KCi4uLldhaXQgYSBzZWNvbmQuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCBtZSB0aG9yb3VnaGx5IGNoZWNrIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBjb2RlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaC4gSSBjYW5ub3QgYWZmb3JkIHRvIG1pc3MgYSBzdWJ0bGUgZnVuY3Rpb25hbCBhbHRlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfZGV2X25hbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9Mjk1Mz1pbnQgcHBwX3VuaXRfbnVtYmVyKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTcyLSAqL1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6Mjk3MzpjaGFyICpwcHBfZGV2X25hbWUoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjk3NC17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MzY2Mj1FWFBPUlRfU1lNQk9MKHBwcF91bml0X251bWJlcik7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzozNjYzOkVYUE9SVF9TWU1CT0wocHBwX2Rldl9uYW1lKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTM2NjQtRVhQT1JUX1NZTUJPTChwcHBfaW5wdXQpO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTk2Mj1zdGF0aWMgaW50IHBwcG9lX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk3NC1cdGRldl9uYW1lID0gcG8tXHUwMDNlcHBwb2VfcGEuZGV2O1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTc1Olx0cHBwX25hbWUgPSBwcHBfZGV2X25hbWUoXHUwMDI2cG8tXHUwMDNlY2hhbik7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NzYtXG4tLVxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oPTczPWV4dGVybiBpbnQgcHBwX3VuaXRfbnVtYmVyKHN0cnVjdCBwcHBfY2hhbm5lbCAqKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNzctICovXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg6Nzg6ZXh0ZXJuIGNoYXIgKnBwcF9kZXZfbmFtZShzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7XG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNzktXG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz00OTg9c3RhdGljIHZvaWQgcHBwb2wydHBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZylcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTUwNy1cbm5ldC9sMnRwL2wydHBfcHBwLmM6NTA4Olx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyAgIGludGVyZmFjZSAlc1xcblwmIzM0OywgcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtNTA5LVx0fVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MTUxMz1zdGF0aWMgdm9pZCBwcHBvbDJ0cF9zZXFfc2Vzc2lvbl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE1NjQtXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjE1NjU6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ICAgaW50ZXJmYWNlICVzXFxuXCYjMzQ7LCBwcHBfZGV2X25hbWUoXHUwMDI2cG8tXHUwMDNlY2hhbikpO1xubmV0L2wydHAvbDJ0cF9wcHAuYy0xNTY2LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUyNAoJCQkJCQkJb3V0cHV0OiA4MQoJCQkJCQkJdGhvdWdodHM6IDQyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQUFBvRSBJbmZvcm1hdGlvbiBEaXNwbGF5IFVwZGF0ZSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjaGFuZ2UgaXMgaXNvbGF0ZWQgdG8gYGRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jYCwgYW5kIGl0JiMzOTtzIGEgbWlub3IgZW5oYW5jZW1lbnQgcmVsYXRlZCB0byB0aGUgaW5mb3JtYXRpb24gZGlzcGxheWVkIGluIGAvcHJvYy9uZXQvcHBwb2VgLiBJdCBhcHBlYXJzIHRoZSBhdXRob3IgaXMgYWRkaW5nIGEgbmV3IGNvbHVtbiB0byB0aGUgb3V0cHV0IG9mIGAvcHJvYy9uZXQvcHBwb2VgIHRvIHNob3cgdGhlIGFzc29jaWF0ZWQgUFBQIGRldmljZSBuYW1lLiBJIHNlZSB0aGUgY29kZSBpcyB1c2luZyBgcHBwX2Rldl9uYW1lKClgIHRvIHJldHJpZXZlIHRoZSBQUFAgZGV2aWNlIG5hbWUuIFRoaXMgaXMgcHVyZWx5IGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzLCBhIGNvc21ldGljIGNoYW5nZSBpZiB5b3Ugd2lsbC4KCkZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGlzbiYjMzk7dCBhbnl0aGluZyB0byBiZSBjb25jZXJuZWQgYWJvdXQuIFRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBQUFBvRSBjb25uZWN0aW9uIGFuZCBkYXRhIGhhbmRsaW5nIGlzbiYjMzk7dCBiZWluZyB0b3VjaGVkLCBzbyB0aGVyZSBhcmUgbm8gbmV3IGF0dGFjayBzdXJmYWNlcyBiZWluZyBpbnRyb2R1Y2VkLiBJdCYjMzk7cyBzaW1wbHkgYWJvdXQgYmV0dGVyIG9ic2VydmFiaWxpdHkgb2YgdGhlIGV4aXN0aW5nIFBQUG9FIGNvbm5lY3Rpb25zLCBhbmQgc2luY2UgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFyZW4mIzM5O3QgbW9kaWZpZWQsIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgZnV6emluZyByZWxhdGVkIHRvIGRhdGEgY29ycnVwdGlvbiwgYnVmZmVyIG92ZXJmbG93cywgZXRjLiwgYXJlIG5vdCBwcmVzZW50LgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIGxhY2sgb2YgZnVuY3Rpb25hbCBpbXBhY3Qgb24gY3JpdGljYWwgZXhlY3V0aW9uIHBhdGhzLCB0aGlzIG1vZGlmaWNhdGlvbiBpcyBub3Qgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBzZXFfZmlsZSBzaG93IGZ1bmN0aW9uIGZvciAvcHJvYy9uZXQvcHBwb2UgdG8gaW5jbHVkZSB0aGUgUFBQIGRldmljZSBuYW1lIGluIHRoZSBvdXRwdXQuIFRoaXMgaXMgYSBwdXJlbHkgb2JzZXJ2YWJpbGl0eS9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgc2VxX2ZpbGUgc2hvdyBmdW5jdGlvbiBmb3IgL3Byb2MvbmV0L3BwcG9lIHRvIGluY2x1ZGUgdGhlIFBQUCBkZXZpY2UgbmFtZSBpbiB0aGUgb3V0cHV0LiBUaGlzIGlzIGEgcHVyZWx5IG9ic2VydmFiaWxpdHkvZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozMToyNy41NDAyOTkzNTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc4NjQ1MzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgc2VxX2ZpbGUgc2hvdyBmdW5jdGlvbiBmb3IgL3Byb2MvbmV0L3BwcG9lIHRvIGluY2x1ZGUgdGhlIFBQUCBkZXZpY2UgbmFtZSBpbiB0aGUgb3V0cHV0LiBUaGlzIGlzIGEgcHVyZWx5IG9ic2VydmFiaWxpdHkvZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjMxOjI3LjU0MDMxMDM0M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2MTc2MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2QyYTQ5OTdlNzQxYzI3YjUzN2MxMWU2NGFiZTQ1NmMxNWY2NzJiOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyOSAwNDozMToyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXFxuaW5kZXggNjg3NGExYThlZGFmMS4uY2IzMWY1ZGI0M2U4MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXFxuQEAgLTk2MywxNyArOTYzLDE5IEBAIHN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuIHtcXG4gXFx0c3RydWN0IHBwcG94X3NvY2sgKnBvO1xcbiBcXHRjaGFyICpkZXZfbmFtZTtcXG4rXFx0Y2hhciAqcHBwX25hbWU7XFxuIFxcbiBcXHRpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHtcXG4tXFx0XFx0c2VxX3B1dHMoc2VxLCBcXFwiSWQgICAgICAgQWRkcmVzcyAgICAgICAgICAgICAgRGV2aWNlXFxcXG5cXFwiKTtcXG4rXFx0XFx0c2VxX3B1dHMoc2VxLCBcXFwiSWQgICAgICAgQWRkcmVzcyAgICAgICAgICAgICAgRGV2aWNlICAgUFBQLURldmljZVxcXFxuXFxcIik7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbiBcXHRwbyA9IHY7XFxuIFxcdGRldl9uYW1lID0gcG8tXFx1MDAzZXBwcG9lX3BhLmRldjtcXG4rXFx0cHBwX25hbWUgPSBwcHBfZGV2X25hbWUoXFx1MDAyNnBvLVxcdTAwM2VjaGFuKTtcXG4gXFxuLVxcdHNlcV9wcmludGYoc2VxLCBcXFwiJTA4WCAlcE0gJThzXFxcXG5cXFwiLFxcbi1cXHRcXHRwby1cXHUwMDNlcHBwb2VfcGEuc2lkLCBwby1cXHUwMDNlcHBwb2VfcGEucmVtb3RlLCBkZXZfbmFtZSk7XFxuK1xcdHNlcV9wcmludGYoc2VxLCBcXFwiJTA4WCAlcE0gJThzICUxMHNcXFxcblxcXCIsXFxuK1xcdFxcdCAgIHBvLVxcdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVxcdTAwM2VwcHBvZV9wYS5yZW1vdGUsIGRldl9uYW1lLCBwcHBfbmFtZSA/IHBwcF9uYW1lIDogXFxcIlxcXCIpO1xcbiBvdXQ6XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjMxOjI4LjE3NzM4MjgwM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQzMTQ5MzYwOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBzZXFfZmlsZSBzaG93IGZ1bmN0aW9uIGZvciAvcHJvYy9uZXQvcHBwb2UgdG8gaW5jbHVkZSB0aGUgUFBQIGRldmljZSBuYW1lIGluIHRoZSBvdXRwdXQuIFRoaXMgaXMgYSBwdXJlbHkgb2JzZXJ2YWJpbGl0eS9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBuZXR3b3JrIHN0YWNrLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2QyYTQ5OTdlNzQxYzI3YjUzN2MxMWU2NGFiZTQ1NmMxNWY2NzJiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDA0OjMxOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xuaW5kZXggNjg3NGExYThlZGFmMS4uY2IzMWY1ZGI0M2U4MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xuQEAgLTk2MywxNyArOTYzLDE5IEBAIHN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4ge1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvO1xuIFx0Y2hhciAqZGV2X25hbWU7XG4rXHRjaGFyICpwcHBfbmFtZTtcbiBcbiBcdGlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikge1xuLVx0XHRzZXFfcHV0cyhzZXEsIFwiSWQgICAgICAgQWRkcmVzcyAgICAgICAgICAgICAgRGV2aWNlXFxuXCIpO1xuK1x0XHRzZXFfcHV0cyhzZXEsIFwiSWQgICAgICAgQWRkcmVzcyAgICAgICAgICAgICAgRGV2aWNlICAgUFBQLURldmljZVxcblwiKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHRwbyA9IHY7XG4gXHRkZXZfbmFtZSA9IHBvLVx1MDAzZXBwcG9lX3BhLmRldjtcbitcdHBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pO1xuIFxuLVx0c2VxX3ByaW50ZihzZXEsIFwiJTA4WCAlcE0gJThzXFxuXCIsXG4tXHRcdHBvLVx1MDAzZXBwcG9lX3BhLnNpZCwgcG8tXHUwMDNlcHBwb2VfcGEucmVtb3RlLCBkZXZfbmFtZSk7XG4rXHRzZXFfcHJpbnRmKHNlcSwgXCIlMDhYICVwTSAlOHMgJTEwc1xcblwiLFxuK1x0XHQgICBwby1cdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVx1MDAzZXBwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUsIHBwcF9uYW1lID8gcHBwX25hbWUgOiBcIlwiKTtcbiBvdXQ6XG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozMToyOC4xNzczODUyOTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjY4NTEyNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHk6IFBQUG9FIFByb2NmcyBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHR3ZWFraW5nIGBkcml2ZXJzL25ldC9wcHAvcHBwb2UuY2AuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBpdCdzIG1vZGlmeWluZyB0aGUgYHBwcG9lX3NlcV9zaG93YCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIHNob3cgZnVuY3Rpb24gZm9yIGAvcHJvYy9uZXQvcHBwb2VgLiBJdCdzIGFkZGluZyBhIGxpbmUgdG8gcHJpbnQgYHBwcF9uYW1lID0gcHBwX2Rldl9uYW1lKFx1MDAyNnBvLVx1MDAzZWNoYW4pO2AgYW5kIHRoZSBuYW1lLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiU2hvdWxkIHdlIGV2ZW4gYm90aGVyIGZ1enppbmcgdGhpcz9cIiBJdCdzIGEgcHJvY2ZzIHNob3cgZnVuY3Rpb24sIHNvIGl0J3MgKnJlYWNoYWJsZSouIEJ1dCB0aGVuIGFnYWluLCAqYWxsKiBwcm9jZnMgc2hvdyBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZS4uLiBzbyB0aGF0J3Mgbm90IGEgc3Ryb25nIGp1c3RpZmljYXRpb24gaW4gaXRzZWxmLlxuXG5MZXQncyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSwgaXQncyBhZGRpbmcgYSBuZXcgcGllY2Ugb2YgaW5mb3JtYXRpb24g4oCTIGEgbmV3IGNvbHVtbiB0byBgL3Byb2MvbmV0L3BwcG9lYC4gSXMgdGhpcyBwdXJlbHkgY29zbWV0aWM/IFRoZSBndWlkZWxpbmVzIEknbSBvcGVyYXRpbmcgdW5kZXIgc3VnZ2VzdCByZWplY3RpbmcgcGF0Y2hlcyB0aGF0IGFyZSBtZXJlbHkgZGVjb3JhdGl2ZSwgc3VjaCBhcyBsb2cgY2hhbmdlcyBvciBjb21tZW50cy4gSG93ZXZlciwgdGhpcyBpc24ndCBqdXN0IGEgbG9nIG1lc3NhZ2U7IGl0J3MgY2hhbmdpbmcgdGhlICpvdXRwdXQqIG9mIGBzZXFfZmlsZWAuXG5cblRoZSBxdWVzdGlvbiBiZWNvbWVzLCBpcyB0aGlzIG5ldyBvdXRwdXQgKmluZm9ybWF0aXZlKiBpbiBhIHdheSB0aGF0IG1pZ2h0IGludHJvZHVjZSBuZXcgYnVncz8gSWYgaXQncyBhIG5ldyBpbmZvcm1hdGlvbmFsIG91dHB1dCwgdGhlbiBtYXliZSBub3QuXG5cbldhaXQgYSBzZWNvbmQuLi4gaG9sZCBvbi4gKmBwcHBfZGV2X25hbWVgKi4gVGhhdCdzIHRoZSBrZXkuIFRoYXQgZnVuY3Rpb24gbWlnaHQgaGF2ZSBpdHMgb3duIGlzc3Vlcy4gV2hhdCBpZiBgcG8tXHUwMDNlY2hhbmAgaXNuJ3QgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IHNvbWV3aGVyZT8gT3IsIGV2ZW4gd29yc2UsIHdoYXQgaWYgdGhlcmUncyBhIHJhY2UgY29uZGl0aW9uIGluIGhvdyB0aGF0IGlzIGJlaW5nIGFjY2Vzc2VkPyBJIHNob3VsZCByZWFsbHkgY2hlY2sgYHBwcF9kZXZfbmFtZWAgaXRzZWxmIHRvIHNlZSBpZiBpdCdzIGdvdCBhbnkgdnVsbmVyYWJpbGl0aWVzLiAqVGhhdCogbWlnaHQgbWFrZSB0aGlzIGZ1enphYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6MzMuNDQ1OTA0NjQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjA2NTU0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfZGV2X25hbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0yOTUzPWludCBwcHBfdW5pdF9udW1iZXIoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjk3Mi0gKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoyOTczOmNoYXIgKnBwcF9kZXZfbmFtZShzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjk3NC17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0zNjYyPUVYUE9SVF9TWU1CT0wocHBwX3VuaXRfbnVtYmVyKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzozNjYzOkVYUE9SVF9TWU1CT0wocHBwX2Rldl9uYW1lKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zNjY0LUVYUE9SVF9TWU1CT0wocHBwX2lucHV0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTk2Mj1zdGF0aWMgaW50IHBwcG9lX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTc0LVxcdGRldl9uYW1lID0gcG8tXFx1MDAzZXBwcG9lX3BhLmRldjtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5NzU6XFx0cHBwX25hbWUgPSBwcHBfZGV2X25hbWUoXFx1MDAyNnBvLVxcdTAwM2VjaGFuKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjMxOjMzLjU2Nzk3ODQwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzYwMjYwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBwcHBfZGV2X25hbWVgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgcHBwX2Rldl9uYW1lYCBpbXBsZW1lbnRhdGlvbi4gSSBrbm93IGl0J3MgYSBjcml0aWNhbCBwaWVjZSBmb3IgYXNzaWduaW5nIGxvZ2ljYWwgbmFtZXMgdG8gUFBQIGludGVyZmFjZXMsIGFuZCBhbnkgYnVnIGhlcmUgY2FuIGNhdXNlIHNlcmlvdXMgaGVhZGFjaGVzIHdpdGggbmV0d29yayBjb25maWd1cmF0aW9uLCBlc3BlY2lhbGx5IGluIG1vcmUgY29tcGxleCBzZXR1cHMuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBkZXZpY2UgbmFtZSBnZW5lcmF0aW9uIGlzIHJvYnVzdCBhbmQgcHJlZGljdGFibGUuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJucyBhcmU6XG5cbiogICAqKkNvbmN1cnJlbmN5OioqIEhvdyBkb2VzIGl0IGhhbmRsZSBtdWx0aXBsZSBQUFAgaW5zdGFuY2VzIGNyZWF0aW5nIGRldmljZXMgc2ltdWx0YW5lb3VzbHk/IEFyZSB0aGVyZSByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIG5hbWluZyBjb2xsaXNpb25zIG9yIGluY29ycmVjdCBhc3NpZ25tZW50cz9cbiogICAqKkVkZ2UgQ2FzZXM6KiogSSBuZWVkIHRvIHRoaW5rIGFib3V0IHdoYXQgaGFwcGVucyB3aXRoIHJlYWxseSBsb25nIGNvbm5lY3Rpb24gdGltZXMsIHRyYW5zaWVudCBsaW5rcywgZGV2aWNlcyB3aXRoIHVudXN1YWwgYXR0cmlidXRlcywgYW5kIHdoYXQgaGFwcGVucyBpbiB0aGUgZXZlbnQgb2YgaW50ZXJmYWNlIGV4aGF1c3Rpb24uIEFyZSB0aGVyZSBhbnkgbGltaXRzIHRoYXQgbWlnaHQgYmUgaGl0IGFuZCBjcmVhdGUgZXJyb3JzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3VyP1xuKiAgICoqTmFtaW5nIFNjaGVtZSBDb25zaXN0ZW5jeToqKiBJcyB0aGUgbmFtaW5nIHNjaGVtZSB3ZWxsLWRlZmluZWQgYW5kIGRvY3VtZW50ZWQ/IElzIGl0IGNvbmZpZ3VyYWJsZSwgYW5kIGlmIHNvLCBob3c/IEFuZCBtb3N0IGltcG9ydGFudGx5LCBpcyBpdCBiYWNrd2FyZHMtY29tcGF0aWJsZSB3aXRoIG9sZGVyIGtlcm5lbHMgb3IgZGlzdHJvcz8gSSdtIGhvcGluZyBpdCdzIHNvbWV0aGluZyBlYXNpbHkgdW5kZXJzdG9vZCBhbmQgZGVidWdnYWJsZSwgcmF0aGVyIHRoYW4gYSBibGFjayBib3guXG4qICAgKipTZWN1cml0eToqKiBBcmUgdGhlcmUgYW55IHNlY3VyaXR5IGltcGxpY2F0aW9ucyB3aXRoIHRoZSBuYW1pbmcgc2NoZW1lPyBDb3VsZCBpdCBiZSBleHBsb2l0ZWQgc29tZWhvdz9cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQncyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gRG9lcyBpdCBoYW5kbGUgaW52YWxpZCBvciBtYWxmb3JtZWQgZGF0YSBncmFjZWZ1bGx5PyBEb2VzIGl0IGxvZyB1c2VmdWwgaW5mb3JtYXRpb24gb3Igc2ltcGx5IGZhaWwgc2lsZW50bHk/IEEgZ29vZCBpbXBsZW1lbnRhdGlvbiB3aWxsIGFsd2F5cyBwcm92aWRlIGRldGFpbGVkIGNvbnRleHQgaW4gY2FzZSBvZiBhIHByb2JsZW0uXG5cbkknbSBnb2luZyB0byB3YW50IHRvOlxuXG4qICAgRGlnIGludG8gdGhlIGNvZGUgYW5kIHF1aWNrbHkgYW5hbHl6ZSB0aGUga2V5IGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgbmFtZSBnZW5lcmF0aW9uIGFuZCBhc3NpZ25tZW50LlxuKiAgIENoZWNrIGZvciBhbnkgZXhpc3RpbmcgYnVnIHJlcG9ydHMgb3IgZGlzY3Vzc2lvbnMgcmVsYXRlZCB0byB0aGlzIGZ1bmN0aW9uLlxuKiAgIFJ1biBzb21lIHRlc3RzIG9uIGRpZmZlcmVudCBzY2VuYXJpb3MgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncywgcGVyaGFwcyBpbmNsdWRpbmcgc29tZSBlZGdlIGNhc2UgdGVzdGluZywgYW5kIGNoZWNrIG15IHJlc3VsdHMgYWdhaW5zdCB3aGF0IHRoZSBzeXN0ZW0gc2hvdWxkIGRvLlxuXG5UaGlzIGlzIGdvaW5nIHRvIGJlIG15IGltbWVkaWF0ZSBmb2N1cywgYXMgdW5kZXJzdGFuZGluZyBob3cgdGhlIGxvZ2ljYWwgbmFtZSBpcyBhc3NpZ25lZCBpcyBmdW5kYW1lbnRhbCB0byBkaWFnbm9zaW5nIHByb2JsZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjc3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6MzcuODA0MDA4NjkyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjY2NzU0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGFyIFxcXFwqcHBwX2Rldl9uYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTI5NTM9aW50IHBwcF91bml0X251bWJlcihzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTcyLSAqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjI5NzM6Y2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTc0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6MzcuOTE2Njg5NjMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5NjM2NDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvbXB0IGlzIHN0cmFpZ2h0Zm9yd2FyZDogXCJMZXQncyByZWFkIGBwcHBfZGV2X25hbWVgLlwiIE15IGltbWVkaWF0ZSByZXNwb25zZT8gSSBuZWVkIG1vcmUgY29udGV4dCwgYnV0IEkgY2FuIGFscmVhZHkgc3RhcnQgdG8gbWFrZSBzb21lIGVkdWNhdGVkIGd1ZXNzZXMuIFRoZSBzeW50YXggYWxvbmUgc3VnZ2VzdHMgYSBkZXZpY2UgbmFtZSwgbGlrZWx5IHdpdGhpbiBhIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvciBzeXN0ZW0gYWRtaW5pc3RyYXRpb24gY29udGV4dC4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIHdpdGggdGhlIHVuZGVyc2NvcmVzLCBJJ20gbGVhbmluZyB0b3dhcmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgKFBQUCkgY29uZmlndXJhdGlvbi4gVGhpcyBjb3VsZCBiZSBhIGRldmljZSwgYW4gaW50ZXJmYWNlLCBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgYSB2YXJpYWJsZSByZXByZXNlbnRpbmcgdGhlIG5hbWUuIEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgc2NlbmFyaW9zOiB0aGUgZXhhY3Qgb3BlcmF0aW5nIHN5c3RlbSwgbmV0d29yayB0b3BvbG9neSwgdGhlIHNwZWNpZmljIHB1cnBvc2Ugb2YgdGhpcyBkZXZpY2UsIGV0Yy4gTXkgbWluZCBhdXRvbWF0aWNhbGx5IHN0YXJ0cyB0byBtYXAgdGhpcyB0byB2YXJpb3VzIHN5c3RlbXMgSSd2ZSB3b3JrZWQgd2l0aCDigJMgTGludXgsIFVuaXgsIG1heWJlIGV2ZW4gc29tZSBlbWJlZGRlZCBzeXN0ZW1zIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNlcmlhbC1iYXNlZCBQUFAgY29ubmVjdGlvbi4gVGhpcyBjb3VsZCBiZSBhIGNyaXRpY2FsIHN0ZXAgaW4gdHJvdWJsZXNob290aW5nIGEgbmV0d29yayBvdXRhZ2UsIGNvbmZpZ3VyaW5nIGEgZGlhbC11cCBjb25uZWN0aW9uLCBvciBhbmFseXppbmcgbmV0d29yayB0cmFmZmljLiBJJ20gcmVhZHkgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIGl0cyBtZWFuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODgwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6NDEuMzEzMDYwMjQ4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk2MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5NzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5NzA6XFx0ICogUmV0dXJuIHRoZSBQUFAgZGV2aWNlIGludGVyZmFjZSBuYW1lIG9mIGEgY2hhbm5lbC5cXG4yOTcxOlxcdCAqIENhbGxlciBtdXN0IGhvbGQgUkNVIHJlYWQgbG9jay5cXG4yOTcyOlxcdCAqL1xcbjI5NzM6XFx0Y2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcXG4yOTc0OlxcdHtcXG4yOTc1OlxcdFxcdHN0cnVjdCBjaGFubmVsICpwY2ggPSBjaGFuLVxcdTAwM2VwcHA7XFxuMjk3NjpcXHRcXHRjaGFyICpuYW1lID0gTlVMTDtcXG4yOTc3OlxcdFxcdHN0cnVjdCBwcHAgKnBwcDtcXG4yOTc4OlxcdFxcbjI5Nzk6XFx0XFx0aWYgKHBjaCkge1xcbjI5ODA6XFx0XFx0XFx0cHBwID0gcmN1X2RlcmVmZXJlbmNlKHBjaC1cXHUwMDNlcHBwKTtcXG4yOTgxOlxcdFxcdFxcdGlmIChwcHAgXFx1MDAyNlxcdTAwMjYgcHBwLVxcdTAwM2VkZXYpXFxuMjk4MjpcXHRcXHRcXHRcXHRuYW1lID0gcHBwLVxcdTAwM2VkZXYtXFx1MDAzZW5hbWU7XFxuMjk4MzpcXHRcXHR9XFxuMjk4NDpcXHRcXHRyZXR1cm4gbmFtZTtcXG4yOTg1OlxcdH1cXG4yOTg2OlxcdFxcbjI5ODc6XFx0XFxuMjk4ODpcXHQvKlxcbjI5ODk6XFx0ICogRGlzY29ubmVjdCBhIGNoYW5uZWwgZnJvbSB0aGUgZ2VuZXJpYyBsYXllci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6NDEuMzEzMzYxMDQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyMTQ3OTg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBSQ1UgTG9jayBSZXF1aXJlbWVudHMgZm9yIFBQUG9FIERldmljZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHBwcF9kZXZfbmFtZWAgZnVuY3Rpb24sIGFuZCBpdCdzIGZsYWdnZWQgYXMgbmVlZGluZyB0aGUgY2FsbGVyIHRvIGhvbGQgYW4gUkNVIHJlYWQgbG9jay4gVGhhdCdzIGEgY3JpdGljYWwgZGV0YWlsIOKAkyB3ZSBjYW4ndCBqdXN0IGNhbGwgaXQgd2lsbHktbmlsbHkuIFRoZSBpbnRlZ3JpdHkgb2YgdGhlIGRhdGEgcmVsaWVzIG9uIHRoYXQgbG9jay4gTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIGhlcmUuIFNwZWNpZmljYWxseSwgSSdtIGNvbmNlcm5lZCBhYm91dCBob3cgYHBwcG9lX3NlcV9zaG93YCBpbnRlcmFjdHMgd2l0aCBgcHBwX2Rldl9uYW1lYC4gRG9lcyBpdCBjb21wbHkgd2l0aCB0aGlzIGxvY2sgcmVxdWlyZW1lbnQ/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgcHBwb2Vfc2VxX3Nob3dgICpkb2VzKiBob2xkIGFuIFJDVSByZWFkIGxvY2sgYmVmb3JlIGNhbGxpbmcgYHBwcF9kZXZfbmFtZWAsIG9yIGlmIGl0IGRvZXNuJ3QsIHRoYXQgd2UgaGF2ZSBhIHNlcmlvdXMgYnVnIG9uIG91ciBoYW5kcy4gU28sIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBJIG5lZWQgdG8gZXhhbWluZSBgcHBwb2Vfc2VxX3Nob3dgIGFuZCBtZXRpY3Vsb3VzbHkgdHJhY2UgaXRzIGNhbGxpbmcgY29udGV4dCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGUgUkNVIHJlYWQgbG9jayBpcyBjb3JyZWN0bHkgaGFuZGxlZC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50OyBvdGhlcndpc2UsIHdlJ3JlIGxpa2VseSB0byBpbnRyb2R1Y2UgZGF0YSBjb3JydXB0aW9uIGlzc3Vlcy4gTGV0J3Mgc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQzOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6NDQuNzM0ODQ3MjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjMwNDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcG9lX3NlcV9zaG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTkzNj1zdGF0aWMgaW50IHBwcG9lX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk2MS0jaWZkZWYgQ09ORklHX1BST0NfRlNcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5NjI6c3RhdGljIGludCBwcHBvZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NjMte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9MTA0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBwcG9lX3NlcV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMDQ5LVxcdC5zdG9wXFx0XFx0PSBwcHBvZV9zZXFfc3RvcCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxMDUwOlxcdC5zaG93XFx0XFx0PSBwcHBvZV9zZXFfc2hvdyxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMDUxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjMxOjQ0LjgwODA4ODg5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIzOTk3NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGZvY3VzaW5nIG9uIHRoZSBrZXkgdGVjaG5pY2FsIGVsZW1lbnRzOlxuXG4qKkNoZWNraW5nIFBQUG9FIFNlcXVlbmNlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgUFBQb0Ugc2VxdWVuY2luZyBpcyBoYW5kbGVkIGluIHRoaXMgY29kZWJhc2UuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBwcHBvZV9zZXFfc3RhcnRgIGFuZCBgcHBwb2Vfc2VxX3N0b3BgLiBUaGVzZSBhcmUgcHJvYmFibHkgY3JpdGljYWwgZm9yIGNvbnRyb2xsaW5nIHRoZSBjb25uZWN0aW9uIGFuZCBkaXNjb25uZWN0aW9uIHByb2Nlc3MsIHBhcnRpY3VsYXJseSB0aGUgc2VxdWVuY2UgbnVtYmVyIGFzc2lnbm1lbnRzIGZvciB0aGUgUFBQb0Ugc2Vzc2lvbi4gSSdtIGFzc3VtaW5nIHRoYXQgcHJvcGVyIHNlcXVlbmNpbmcgaXMgYWJzb2x1dGVseSB2aXRhbCBmb3IgcmVsaWFibGUgZGF0YSB0cmFuc21pc3Npb24sIGFuZCB0aGVyZWZvcmUsIGJ1Z3Mgb3IgbWlzY29uZmlndXJhdGlvbnMgaGVyZSBjYW4gaGF2ZSBzZXJpb3VzIGltcGxpY2F0aW9ucy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBQUFAgbGF5ZXIsIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlcywgYW5kIGFueSBhc3NvY2lhdGVkIHN0YXRlIG1hY2hpbmVzLiBMZXQncyBzZWUgaG93IHRoZXNlIGFyZSB1c2VkIHRvIG1ha2Ugc3VyZSB0aGV5J3JlIGRvaW5nIHdoYXQgSSB0aGluayB0aGV5IGFyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6NTAxNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjMxOjQ3LjgzMjA5MzI3OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTgwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTgwOlxcdFxcdHJldHVybiAwO1xcbiA5ODE6XFx0fVxcbiA5ODI6XFx0XFxuIDk4MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpwcHBvZV9nZXRfaWR4KHN0cnVjdCBwcHBvZV9uZXQgKnBuLCBsb2ZmX3QgcG9zKVxcbiA5ODQ6XFx0e1xcbiA5ODU6XFx0XFx0c3RydWN0IHBwcG94X3NvY2sgKnBvO1xcbiA5ODY6XFx0XFx0aW50IGk7XFxuIDk4NzpcXHRcXG4gOTg4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBQUFBPRV9IQVNIX1NJWkU7IGkrKykge1xcbiA5ODk6XFx0XFx0XFx0cG8gPSByY3VfZGVyZWZlcmVuY2UocG4tXFx1MDAzZWhhc2hfdGFibGVbaV0pO1xcbiA5OTA6XFx0XFx0XFx0d2hpbGUgKHBvKSB7XFxuIDk5MTpcXHRcXHRcXHRcXHRpZiAoIXBvcy0tKVxcbiA5OTI6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDk5MzpcXHRcXHRcXHRcXHRwbyA9IHJjdV9kZXJlZmVyZW5jZShwby1cXHUwMDNlbmV4dCk7XFxuIDk5NDpcXHRcXHRcXHR9XFxuIDk5NTpcXHRcXHR9XFxuIDk5NjpcXHRcXG4gOTk3OlxcdG91dDpcXG4gOTk4OlxcdFxcdHJldHVybiBwbztcXG4gOTk5OlxcdH1cXG4xMDAwOlxcdFxcbjEwMDE6XFx0c3RhdGljIHZvaWQgKnBwcG9lX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuMTAwMjpcXHRcXHRfX2FjcXVpcmVzKFJDVSlcXG4xMDAzOlxcdHtcXG4xMDA0OlxcdFxcdHN0cnVjdCBwcHBvZV9uZXQgKnBuID0gcHBwb2VfcGVybmV0KHNlcV9maWxlX25ldChzZXEpKTtcXG4xMDA1OlxcdFxcdGxvZmZfdCBsID0gKnBvcztcXG4xMDA2OlxcdFxcbjEwMDc6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjEwMDg6XFx0XFx0cmV0dXJuIGwgPyBwcHBvZV9nZXRfaWR4KHBuLCAtLWwpIDogU0VRX1NUQVJUX1RPS0VOO1xcbjEwMDk6XFx0fVxcbjEwMTA6XFx0XFxuMTAxMTpcXHRzdGF0aWMgdm9pZCAqcHBwb2Vfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbjEwMTI6XFx0e1xcbjEwMTM6XFx0XFx0c3RydWN0IHBwcG9lX25ldCAqcG4gPSBwcHBvZV9wZXJuZXQoc2VxX2ZpbGVfbmV0KHNlcSkpO1xcbjEwMTQ6XFx0XFx0c3RydWN0IHBwcG94X3NvY2sgKnBvLCAqbmV4dDtcXG4xMDE1OlxcdFxcbjEwMTY6XFx0XFx0KysqcG9zO1xcbjEwMTc6XFx0XFx0aWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7XFxuMTAxODpcXHRcXHRcXHRwbyA9IHBwcG9lX2dldF9pZHgocG4sIDApO1xcbjEwMTk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTAyMDpcXHRcXHR9XFxuMTAyMTpcXHRcXHRwbyA9IHY7XFxuMTAyMjpcXHRcXHRuZXh0ID0gcmN1X2RlcmVmZXJlbmNlKHBvLVxcdTAwM2VuZXh0KTtcXG4xMDIzOlxcdFxcdGlmIChuZXh0KVxcbjEwMjQ6XFx0XFx0XFx0cG8gPSBuZXh0O1xcbjEwMjU6XFx0XFx0ZWxzZSB7XFxuMTAyNjpcXHRcXHRcXHRpbnQgaGFzaCA9IGhhc2hfaXRlbShwby1cXHUwMDNlcHBwb2VfcGEuc2lkLCBwby1cXHUwMDNlcHBwb2VfcGEucmVtb3RlKTtcXG4xMDI3OlxcdFxcbjEwMjg6XFx0XFx0XFx0cG8gPSBOVUxMO1xcbjEwMjk6XFx0XFx0XFx0d2hpbGUgKCsraGFzaCBcXHUwMDNjIFBQUE9FX0hBU0hfU0laRSkge1xcbjEwMzA6XFx0XFx0XFx0XFx0cG8gPSByY3VfZGVyZWZlcmVuY2UocG4tXFx1MDAzZWhhc2hfdGFibGVbaGFzaF0pO1xcbjEwMzE6XFx0XFx0XFx0XFx0aWYgKHBvKVxcbjEwMzI6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTAzMzpcXHRcXHRcXHR9XFxuMTAzNDpcXHRcXHR9XFxuMTAzNTpcXHRcXG4xMDM2OlxcdG91dDpcXG4xMDM3OlxcdFxcdHJldHVybiBwbztcXG4xMDM4OlxcdH1cXG4xMDM5OlxcdFxcbjEwNDA6XFx0c3RhdGljIHZvaWQgcHBwb2Vfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuMTA0MTpcXHRcXHRfX3JlbGVhc2VzKFJDVSlcXG4xMDQyOlxcdHtcXG4xMDQzOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjEwNDQ6XFx0fVxcbjEwNDU6XFx0XFxuMTA0NjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBwcG9lX3NlcV9vcHMgPSB7XFxuMTA0NzpcXHRcXHQuc3RhcnRcXHRcXHQ9IHBwcG9lX3NlcV9zdGFydCxcXG4xMDQ4OlxcdFxcdC5uZXh0XFx0XFx0PSBwcHBvZV9zZXFfbmV4dCxcXG4xMDQ5OlxcdFxcdC5zdG9wXFx0XFx0PSBwcHBvZV9zZXFfc3RvcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6NDcuODMyMzQwNjE3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzI0MDExNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFBvRSBQcm9jZnMgQ2hhbmdlKipcblxuT2theSwgc28gYHBwcG9lX3NlcV9zdGFydGAgZ3JhYnMgYW4gUkNVIHJlYWQgbG9jaywgYW5kIGBwcHBvZV9zZXFfc3RvcGAgcmVsZWFzZXMgaXQuIFRoYXQgbWVhbnMgdGhlIGBwcHBvZV9zZXFfc2hvd2AgZnVuY3Rpb24sIHdoZXJlIHRoZSBjaGFuZ2UgaXMgYmVpbmcgbWFkZSwgaXMgb3BlcmF0aW5nIHdpdGhpbiB0aGUgcHJvdGVjdGlvbiBvZiB0aGF0IFJDVSBsb2NrLiBUaGlzIGNoYW5nZSBpcyBqdXN0IGFib3V0IGFkZGluZyBhIG5ldyBjb2x1bW4gdG8gdGhlIGAvcHJvYy9uZXQvcHBwb2VgIG91dHB1dCwgc3BlY2lmaWNhbGx5IGluY2x1ZGluZyB0aGUgcmVzdWx0IG9mIGBwcHBfZGV2X25hbWUoXHUwMDI2cG8tXHUwMDNlY2hhbilgLiBJcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gSXQgc2VlbXMgcmVsYXRpdmVseSBiZW5pZ24uIEl0J3MgcHJvY2ZzLCBhbmQgaXQncyBqdXN0IGZvcm1hdHRpbmcgb3V0cHV0LlxuXG5Ib3dldmVyLCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIExldCdzIGRlbHZlIGludG8gdGhlIGRldGFpbHMuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGxpZXMgaW4gYHBwcF9kZXZfbmFtZWAuIFRoaXMgZnVuY3Rpb24gZGVyZWZlcmVuY2VzIGBjaGFuLVx1MDAzZXBwcGAsIHRoZW4gYHJjdV9kZXJlZmVyZW5jZShwY2gtXHUwMDNlcHBwKWAsIGFuZCBmaW5hbGx5IGFjY2Vzc2VzIGBwcHAtXHUwMDNlZGV2LVx1MDAzZW5hbWVgLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGx1cmtpbmcgd2l0aGluIHRoaXMgY2hhaW4/IFNwZWNpZmljYWxseSwgaWYgYHBvLVx1MDAzZWNoYW5gIGlzbid0IGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIHRpbWUgYHBwcG9lX3NlcV9zaG93YCBpcyBjYWxsZWQsIGNvdWxkIHRoaXMgbGVhZCB0byBhIGNyYXNoPyBJIHNob3VsZCBjaGVjayB3aGVyZSBgcG8tXHUwMDNlY2hhbmAgaXMgaW5pdGlhbGl6ZWQuIFRoaXMgY291bGQgYmUgYSB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjU3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6NTIuNTA0NzUwMjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjAyMDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTktICpcXHRcXHRzaW11bHRhbmVvdXMgaW52b2NhdGlvbiBvZiBwcHBfaW5wdXRcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyMDogKlxcdFxcdGFuZCBwcHBfdW5yZWdpc3Rlcl9jaGFubmVsLlxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjIxOiAqIDA0MDgwMCA6XFx0UmVzcGVjdCByZWZlcmVuY2UgY291bnQgbWVjaGFuaXNtcyBvbiBuZXQtZGV2aWNlcy5cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMi0gKiAyMDA4MDAgOlxcdGZpeCBrZnJlZShza2IpIGluIHBwcG9lX3JjdiAoYWNtZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQwLSAqXFx0XFx0cmVmZXJlbmNlIG9mIGRldmljZSBvbiBjbG9zZSkuXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDE6ICogMTIxMzAxIDpcXHROZXcgcHBwIGNoYW5uZWxzIGludGVyZmFjZTsgY2Fubm90IHVucmVnaXN0ZXIgYSBjaGFubmVsXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDItICpcXHRcXHRmcm9tIGludGVycnVwdHMuICBUaHVzLCB3ZSBtYXJrIHRoZSBzb2NrZXQgYXMgYSBaT01CSUVcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9wcHBveC5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcHBfY2hhbm5lbC5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcHBfZGVmcy5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcHBwb2Vfb3BzO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkyLVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9MjU2PXN0YXRpYyB2b2lkIHBwcG9lX2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjkzLVxcdFxcdFxcdFxcdHBwcG94X3VuYmluZF9zb2NrKHNrKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyOTQ6XFx0XFx0XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjk1LVxcdFxcdFxcdFxcdHBvLVxcdTAwM2VwcHBvZV9kZXYgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzAzLVxcdFxcdFxcdCAqIGhhc2ggY2hhaW4uIFdlIGRyb3BwZWQgbG9ja3Mgc28gdGhlIHdvcmxkIG1heSBoYXZlXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzA0OlxcdFxcdFxcdCAqIGNoYW5nZSBmcm9tIHVuZGVybmVhdGggdXMuXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzA1LVxcdFxcdFxcdCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9MzE2PXN0YXRpYyBpbnQgcHBwb2VfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTMyNC1cXHRjYXNlIE5FVERFVl9DSEFOR0VNVFU6XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzI1OlxcdFxcdC8qIEEgY2hhbmdlIGluIG10dSBvciBhZGRyZXNzIGlzIGEgYmFkIHRoaW5nLCByZXF1aXJpbmdcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMjYtXFx0XFx0ICogTENQIHJlLW5lZ290aWF0aW9uLlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9MzUxPXN0YXRpYyBpbnQgcHBwb2VfcmN2X2NvcmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzU2LVxcdCAqIGV4ZWN1dGluZyBpbiBsb2NrX3NvY2soKS9yZWxlYXNlX3NvY2soKSBib3VuZHM7IG1lYW5pbmcgc2stXFx1MDAzZXNrX3N0YXRlXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzU3OlxcdCAqIGNhbid0IGNoYW5nZS5cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zNTgtXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zNjAtXFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSBcXHUwMDI2IFBQUE9YX0JPVU5EKSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzYxOlxcdFxcdHBwcF9pbnB1dChcXHUwMDI2cG8tXFx1MDAzZWNoYW4sIHNrYik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzYyLVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz01ODc9c3RhdGljIGludCBwcHBvZV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1c2VydmFkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02MzQtXFx0XFx0bWVtc2V0KFxcdTAwMjZwby1cXHUwMDNlcHBwb2VfcGEsIDAsIHNpemVvZihwby1cXHUwMDNlcHBwb2VfcGEpKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MzU6XFx0XFx0bWVtc2V0KFxcdTAwMjZwby1cXHUwMDNlY2hhbiwgMCwgc2l6ZW9mKHBvLVxcdTAwM2VjaGFuKSk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjM2LVxcdFxcdHBvLVxcdTAwM2VuZXh0ID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY2Ni1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2Njc6XFx0XFx0cG8tXFx1MDAzZWNoYW4uaGRybGVuID0gKHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSArXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjY4LVxcdFxcdFxcdFxcdCAgIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NjktXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjcwOlxcdFxcdHBvLVxcdTAwM2VjaGFuLm10dSA9IGRldi1cXHUwMDNlbXR1IC0gc2l6ZW9mKHN0cnVjdCBwcHBvZV9oZHIpIC0gMjtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NzE6XFx0XFx0cG8tXFx1MDAzZWNoYW4ucHJpdmF0ZSA9IHNrO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY3MjpcXHRcXHRwby1cXHUwMDNlY2hhbi5vcHMgPSBcXHUwMDI2cHBwb2VfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjczOlxcdFxcdHBvLVxcdTAwM2VjaGFuLmRpcmVjdF94bWl0ID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NzQtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Njc1OlxcdFxcdGVycm9yID0gcHBwX3JlZ2lzdGVyX25ldF9jaGFubmVsKGRldl9uZXQoZGV2KSwgXFx1MDAyNnBvLVxcdTAwM2VjaGFuKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NzYtXFx0XFx0aWYgKGVycm9yKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04NDU9c3RhdGljIGludCBfX3BwcG9lX3htaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtODUxLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjg1MjpcXHQvKiBUaGUgaGlnaGVyLWxldmVsIFBQUCBjb2RlIChwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCkpIGVuc3VyZXMgdGhlIFBQUFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTg1My1cXHQgKiB4bWl0IG9wZXJhdGlvbnMgY29uY2x1ZGUgcHJpb3IgdG8gYW4gdW5yZWdpc3RyYXRpb24gY2FsbC4gIFRodXNcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo4NTQ6XFx0ICogc2stXFx1MDAzZXNrX3N0YXRlIGNhbm5vdCBjaGFuZ2UsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gbG9ja19zb2NrKCkuXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtODU1LVxcdCAqIEJ1dCwgd2UgYWxzbyBjYW4ndCBkbyBhIGxvY2tfc29jayBzaW5jZSB0aGF0IGludHJvZHVjZXMgYSBwb3RlbnRpYWxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy04NTYtXFx0ICogZGVhZGxvY2sgYXMgd2UnZCByZXZlcnNlIHRoZSBsb2NrIG9yZGVyaW5nIHVzZWQgd2hlbiBjYWxsaW5nXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6ODU3OlxcdCAqIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKS5cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy04NTgtXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MDEtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkwMjpzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkwMy17XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTA0OlxcdHN0cnVjdCBzb2NrICpzayA9IGNoYW4tXFx1MDAzZXByaXZhdGU7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTA1LVxcdHJldHVybiBfX3BwcG9lX3htaXQoc2ssIHNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz05MDg9c3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkwOS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkxMDpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTExLXtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5MTI6XFx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cXHUwMDNlcHJpdmF0ZTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MTMtXFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTMwLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkzMTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MzItXFx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTYyPXN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NzQtXFx0ZGV2X25hbWUgPSBwby1cXHUwMDNlcHBwb2VfcGEuZGV2O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjk3NTpcXHRwcHBfbmFtZSA9IHBwcF9kZXZfbmFtZShcXHUwMDI2cG8tXFx1MDAzZWNoYW4pO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk3Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6NTIuNTg1OTYwNDI4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDExMjYzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUFBQb0UgQ29ubmVjdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIFBQUG9FIGNvbm5lY3Rpb24gZmxvdywgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHBvLVx1MDAzZWNoYW5gIHdpdGhpbiBgcHBwb2VfY29ubmVjdGAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IG1lbnRhbCBtYXAgdGhlbiBoYXMgdG8gdHJhY2UgaG93IHRoaXMgY2hhbm5lbCB2YXJpYWJsZSBpcyBtYW5hZ2VkLiBBaCwgaGVyZSB3ZSBnbywgYHBwcG9lX3NlcV9zaG93YCBpcyB3aGVyZSBJIHNlZSB0aGUgY2hhbm5lbCBiZWluZyB1dGlsaXplZC4gSXQncyBpdGVyYXRpbmcgdGhyb3VnaCBhIGhhc2ggdGFibGUsIGBwbi1cdTAwM2VoYXNoX3RhYmxlYC4gTWFrZXMgc2Vuc2UsIHdlIHVzZSBhIGhhc2ggZm9yIHF1aWNrIGxvb2t1cHMgaW4gbmV0d29ya2luZy5cblxuTm93LCB3aGVyZSBkb2VzIHRoYXQgc29ja2V0IGdldCBhZGRlZCB0byB0aGUgaGFzaD8gQmFjayB0byBgcHBwb2VfY29ubmVjdGAsIHllcywgSSBjYW4gc2VlIGl0J3MgYWRkZWQgdXNpbmcgYHBwcG9lX2hhc2hfYWRkKHBvKWAuIEJ1dCB3YWl0IGEgc2Vjb25kLCBhIGZsaWNrZXIgb2YgZG91YnQuLi4gZG9lcyBgcHBwb2VfaGFzaF9hZGRgIGhhcHBlbiAqYmVmb3JlKiBvciAqYWZ0ZXIqIGBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWxgIGlzIGNhbGxlZD8gVGhhdCdzIGEgY3J1Y2lhbCBzZXF1ZW5jZSBkZXBlbmRlbmN5IHRvIGJlIHN1cmUgb2YuIFRoaXMgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGNvdWxkIGJlIHByb2JsZW1hdGljISBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgb3JkZXIgb2Ygb3BlcmF0aW9ucyB0byBtYWtlIHN1cmUgZXZlcnl0aGluZydzIGNvcnJlY3QgYW5kIHJlZ2lzdGVyZWQgcHJvcGVybHkuIFJpZ2h0LCBJJ20gZ29pbmcgdG8gaGVhZCBiYWNrIHRvIGBwcHBvZV9jb25uZWN0YCBhbmQgY29uZmlybSB0aGUgZXhhY3Qgc2VxdWVuY2UgdGhlcmUuIEdvdHRhIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6NTYuNTI3MDkwOTMzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwb2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NDA6XFx0XFx0fVxcbiA2NDE6XFx0XFxuIDY0MjpcXHRcXHQvKiBSZS1iaW5kIGluIHNlc3Npb24gc3RhZ2Ugb25seSAqL1xcbiA2NDM6XFx0XFx0aWYgKHN0YWdlX3Nlc3Npb24oc3AtXFx1MDAzZXNhX2FkZHIucHBwb2Uuc2lkKSkge1xcbiA2NDQ6XFx0XFx0XFx0ZXJyb3IgPSAtRU5PREVWO1xcbiA2NDU6XFx0XFx0XFx0bmV0ID0gc29ja19uZXQoc2spO1xcbiA2NDY6XFx0XFx0XFx0ZGV2ID0gZGV2X2dldF9ieV9uYW1lKG5ldCwgc3AtXFx1MDAzZXNhX2FkZHIucHBwb2UuZGV2KTtcXG4gNjQ3OlxcdFxcdFxcdGlmICghZGV2KVxcbiA2NDg6XFx0XFx0XFx0XFx0Z290byBlcnJfcHV0O1xcbiA2NDk6XFx0XFxuIDY1MDpcXHRcXHRcXHRwby1cXHUwMDNlcHBwb2VfZGV2ID0gZGV2O1xcbiA2NTE6XFx0XFx0XFx0cG8tXFx1MDAzZXBwcG9lX2lmaW5kZXggPSBkZXYtXFx1MDAzZWlmaW5kZXg7XFxuIDY1MjpcXHRcXHRcXHRwbiA9IHBwcG9lX3Blcm5ldChuZXQpO1xcbiA2NTM6XFx0XFx0XFx0aWYgKCEoZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCkpIHtcXG4gNjU0OlxcdFxcdFxcdFxcdGdvdG8gZXJyX3B1dDtcXG4gNjU1OlxcdFxcdFxcdH1cXG4gNjU2OlxcdFxcbiA2NTc6XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZwby1cXHUwMDNlcHBwb2VfcGEsXFxuIDY1ODpcXHRcXHRcXHQgICAgICAgXFx1MDAyNnNwLVxcdTAwM2VzYV9hZGRyLnBwcG9lLFxcbiA2NTk6XFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgcHBwb2VfYWRkcikpO1xcbiA2NjA6XFx0XFxuIDY2MTpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnBuLVxcdTAwM2VoYXNoX2xvY2spO1xcbiA2NjI6XFx0XFx0XFx0ZXJyb3IgPSBfX3NldF9pdGVtKHBuLCBwbyk7XFxuIDY2MzpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2cG4tXFx1MDAzZWhhc2hfbG9jayk7XFxuIDY2NDpcXHRcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbiA2NjU6XFx0XFx0XFx0XFx0Z290byBlcnJfcHV0O1xcbiA2NjY6XFx0XFxuIDY2NzpcXHRcXHRcXHRwby1cXHUwMDNlY2hhbi5oZHJsZW4gPSAoc2l6ZW9mKHN0cnVjdCBwcHBvZV9oZHIpICtcXG4gNjY4OlxcdFxcdFxcdFxcdFxcdCAgIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcXG4gNjY5OlxcdFxcbiA2NzA6XFx0XFx0XFx0cG8tXFx1MDAzZWNoYW4ubXR1ID0gZGV2LVxcdTAwM2VtdHUgLSBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikgLSAyO1xcbiA2NzE6XFx0XFx0XFx0cG8tXFx1MDAzZWNoYW4ucHJpdmF0ZSA9IHNrO1xcbiA2NzI6XFx0XFx0XFx0cG8tXFx1MDAzZWNoYW4ub3BzID0gXFx1MDAyNnBwcG9lX2NoYW5fb3BzO1xcbiA2NzM6XFx0XFx0XFx0cG8tXFx1MDAzZWNoYW4uZGlyZWN0X3htaXQgPSB0cnVlO1xcbiA2NzQ6XFx0XFxuIDY3NTpcXHRcXHRcXHRlcnJvciA9IHBwcF9yZWdpc3Rlcl9uZXRfY2hhbm5lbChkZXZfbmV0KGRldiksIFxcdTAwMjZwby1cXHUwMDNlY2hhbik7XFxuIDY3NjpcXHRcXHRcXHRpZiAoZXJyb3IpIHtcXG4gNjc3OlxcdFxcdFxcdFxcdGRlbGV0ZV9pdGVtKHBuLCBwby1cXHUwMDNlcHBwb2VfcGEuc2lkLFxcbiA2Nzg6XFx0XFx0XFx0XFx0XFx0ICAgIHBvLVxcdTAwM2VwcHBvZV9wYS5yZW1vdGUsIHBvLVxcdTAwM2VwcHBvZV9pZmluZGV4KTtcXG4gNjc5OlxcdFxcdFxcdFxcdGdvdG8gZXJyX3B1dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6MzE6NTYuNTI3MzgxODczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4Njk0OTM5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHNvIGBfX3NldF9pdGVtKHBuLCBwbylgIGFkZHMgc29tZXRoaW5nIHRvIHRoZSBoYXNoIHRhYmxlLCBhbmQgdGhlbiBgcHBwX3JlZ2lzdGVyX25ldF9jaGFubmVsYCBpcyBjYWxsZWQuIFRoZSBrZXkgaXNzdWUgaXMgaWYgYHBwcG9lX3NlcV9zaG93YCBpcyBjYWxsZWQgaW4gdGhlIG1pZGRsZSwgc3BlY2lmaWNhbGx5IGlmIGl04oCZcyBjYWxsZWQgKmJldHdlZW4qIHRoZSB0YWJsZSBlbnRyeSBhbmQgdGhlIHJlZ2lzdHJhdGlvbiwgdGhlIGBwby1cdTAwM2VjaGFuYCBtZW1iZXIgZ2V0cyB6ZXJvZWQgb3V0IHdpdGggYG1lbXNldGAuIFRoaXMgaXMgdGhlIHBvdGVudGlhbCBwb2ludCBvZiBjb250ZW50aW9uLlxuXG5Ob3csIGluc2lkZSBgcHBwX2Rldl9uYW1lYCwgdGhlIGNvZGUgZ3JhYnMgYSBgc3RydWN0IGNoYW5uZWwgKnBjaCA9IGNoYW4tXHUwMDNlcHBwO2AuIEJlY2F1c2UgYGNoYW5gIGlzIHplcm9lZCwgYGNoYW4tXHUwMDNlcHBwYCBpcyAqZ3VhcmFudGVlZCogdG8gYmUgTlVMTC4gVGhlbiB0aGVyZSdzIGFuIGBpZiAocGNoKWAgY2hlY2ssIHdoaWNoIGVmZmVjdGl2ZWx5IHRlc3RzIGZvciBOVUxMLiBUaGUgY29kZSBoYW5kbGVzIE5VTEwgd2l0aCBgcHBwX25hbWUgPyBwcHBfbmFtZSA6IFwiXCJgLCBzbyB0aGF0J3Mgc2FmZSwgd2hpY2ggbWVhbnMgdGhlcmUgc2hvdWxkIGJlIG5vIGlzc3VlcyBoZXJlLiBObyBjcmFzaGVzLCBubyB1bmRlZmluZWQgYmVoYXZpb3IuXG5cbk15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgY29uc3RpdHV0ZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZXF1aXJpbmcgZnV6emluZy4gVGhlIGNoYW5nZSBpcyBzaW1wbHkgYSBgc2VxX2ZpbGVgIG91dHB1dCBtb2RpZmljYXRpb24sIHJpZ2h0PyBPbmx5IHRoZSBkaXNwbGF5IG9mIGRhdGEsIHNwZWNpZmljYWxseSB0aGUgUFBQIGRldmljZSBuYW1lIGluIGAvcHJvYy9uZXQvcHBwb2VgIGNoYW5nZWQuIFRoZSBwYXRjaCBub3RlcyBzYXkgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzXCIgb3IgY2hhbmdlcyB0aGF0IFwiZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvd1wiLlxuXG5JcyB0aGlzIGRpc3BsYXkgb2YgdGhlIFBQUCBkZXZpY2UgbmFtZSBwdXJlbHkgZGVjb3JhdGl2ZT8gSXQncyBhbiAqb2JzZXJ2YWJpbGl0eSogY2hhbmdlLCBub3QgYSAqZnVuY3Rpb25hbCogb25lLiBUaGUgbmV0d29yayBzdGFjaydzIGFjdHVhbCBleGVjdXRpb24gZmxvdyAqaXNuJ3QqIGFsdGVyZWQ7IGl0IGp1c3QgcHJpbnRzIHRoZSBQUFAgZGV2aWNlIG5hbWUuIEknbSBpbmNsaW5lZCB0byBjYXRlZ29yaXplIHRoaXMgYXMgZWl0aGVyIFwiZGVjb3JhdGl2ZSBjaGFuZ2VzXCIgbGlrZSBsb2dnaW5nIG9yIHRyYWNpbmcgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhcyBub3QgZnVuY3Rpb25hbGx5IGNoYW5naW5nIHRoZSBleGVjdXRpb24uXG5cbi4uLldhaXQgYSBzZWNvbmQuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCBtZSB0aG9yb3VnaGx5IGNoZWNrIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBjb2RlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaC4gSSBjYW5ub3QgYWZmb3JkIHRvIG1pc3MgYSBzdWJ0bGUgZnVuY3Rpb25hbCBhbHRlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAyMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjMyOjAyLjM5Njg4MDI2M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMzMDI5NDMzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfZGV2X25hbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTI5NTM9aW50IHBwcF91bml0X251bWJlcihzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTcyLSAqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjI5NzM6Y2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTc0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTM2NjI9RVhQT1JUX1NZTUJPTChwcHBfdW5pdF9udW1iZXIpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjM2NjM6RVhQT1JUX1NZTUJPTChwcHBfZGV2X25hbWUpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTM2NjQtRVhQT1JUX1NZTUJPTChwcHBfaW5wdXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTYyPXN0YXRpYyBpbnQgcHBwb2Vfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05NzQtXFx0ZGV2X25hbWUgPSBwby1cXHUwMDNlcHBwb2VfcGEuZGV2O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjk3NTpcXHRwcHBfbmFtZSA9IHBwcF9kZXZfbmFtZShcXHUwMDI2cG8tXFx1MDAzZWNoYW4pO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk3Ni1cXG4tLVxcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaD03Mz1leHRlcm4gaW50IHBwcF91bml0X251bWJlcihzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNzctICovXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjc4OmV4dGVybiBjaGFyICpwcHBfZGV2X25hbWUoc3RydWN0IHBwcF9jaGFubmVsICopO1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC03OS1cXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmM9NDk4PXN0YXRpYyB2b2lkIHBwcG9sMnRwX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICphcmcpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTUwNy1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjUwODpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgICBpbnRlcmZhY2UgJXNcXFxcblxcXCIsIHBwcF9kZXZfbmFtZShcXHUwMDI2cG8tXFx1MDAzZWNoYW4pKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTUwOS1cXHR9XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTE1MTM9c3RhdGljIHZvaWQgcHBwb2wydHBfc2VxX3Nlc3Npb25fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE1NjQtXFxubmV0L2wydHAvbDJ0cF9wcHAuYzoxNTY1OlxcdFxcdHNlcV9wcmludGYobSwgXFxcIiAgIGludGVyZmFjZSAlc1xcXFxuXFxcIiwgcHBwX2Rldl9uYW1lKFxcdTAwMjZwby1cXHUwMDNlY2hhbikpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTU2Ni1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjMyOjA1LjcyNzE5MjkwNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTk5NDk2OTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBQUG9FIEluZm9ybWF0aW9uIERpc3BsYXkgVXBkYXRlKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjaGFuZ2UgaXMgaXNvbGF0ZWQgdG8gYGRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jYCwgYW5kIGl0J3MgYSBtaW5vciBlbmhhbmNlbWVudCByZWxhdGVkIHRvIHRoZSBpbmZvcm1hdGlvbiBkaXNwbGF5ZWQgaW4gYC9wcm9jL25ldC9wcHBvZWAuIEl0IGFwcGVhcnMgdGhlIGF1dGhvciBpcyBhZGRpbmcgYSBuZXcgY29sdW1uIHRvIHRoZSBvdXRwdXQgb2YgYC9wcm9jL25ldC9wcHBvZWAgdG8gc2hvdyB0aGUgYXNzb2NpYXRlZCBQUFAgZGV2aWNlIG5hbWUuIEkgc2VlIHRoZSBjb2RlIGlzIHVzaW5nIGBwcHBfZGV2X25hbWUoKWAgdG8gcmV0cmlldmUgdGhlIFBQUCBkZXZpY2UgbmFtZS4gVGhpcyBpcyBwdXJlbHkgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMsIGEgY29zbWV0aWMgY2hhbmdlIGlmIHlvdSB3aWxsLlxuXG5Gcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBpc24ndCBhbnl0aGluZyB0byBiZSBjb25jZXJuZWQgYWJvdXQuIFRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBQUFBvRSBjb25uZWN0aW9uIGFuZCBkYXRhIGhhbmRsaW5nIGlzbid0IGJlaW5nIHRvdWNoZWQsIHNvIHRoZXJlIGFyZSBubyBuZXcgYXR0YWNrIHN1cmZhY2VzIGJlaW5nIGludHJvZHVjZWQuIEl0J3Mgc2ltcGx5IGFib3V0IGJldHRlciBvYnNlcnZhYmlsaXR5IG9mIHRoZSBleGlzdGluZyBQUFBvRSBjb25uZWN0aW9ucywgYW5kIHNpbmNlIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBhcmVuJ3QgbW9kaWZpZWQsIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgZnV6emluZyByZWxhdGVkIHRvIGRhdGEgY29ycnVwdGlvbiwgYnVmZmVyIG92ZXJmbG93cywgZXRjLiwgYXJlIG5vdCBwcmVzZW50LlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSBhbmQgbGFjayBvZiBmdW5jdGlvbmFsIGltcGFjdCBvbiBjcml0aWNhbCBleGVjdXRpb24gcGF0aHMsIHRoaXMgbW9kaWZpY2F0aW9uIGlzIG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUyNCwiT3V0cHV0VG9rZW5zIjo4MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDozMjoxMS4zMjY2OTQ2MjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBzZXFfZmlsZSBzaG93IGZ1bmN0aW9uIGZvciAvcHJvYy9uZXQvcHBwb2UgdG8gaW5jbHVkZSB0aGUgUFBQIGRldmljZSBuYW1lIGluIHRoZSBvdXRwdXQuIFRoaXMgaXMgYSBwdXJlbHkgb2JzZXJ2YWJpbGl0eS9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBuZXR3b3JrIHN0YWNrLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgc2VxX2ZpbGUgc2hvdyBmdW5jdGlvbiBmb3IgL3Byb2MvbmV0L3BwcG9lIHRvIGluY2x1ZGUgdGhlIFBQUCBkZXZpY2UgbmFtZSBpbiB0aGUgb3V0cHV0LiBUaGlzIGlzIGEgcHVyZWx5IG9ic2VydmFiaWxpdHkvZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUgbmV0d29yayBzdGFjay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9sgb5[1] Phase: Running StartedAt: 2026-07-29 04:32:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sgb5[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-29 04:32:23 +0000 UTC FinishedAt: 2026-07-29 04:32:30 +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,}