Name: series-workflowggxbh Phase: Failed StartedAt: 2026-08-01 05:00:48 +0000 UTC FinishedAt: 2026-08-01 05:47:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbh[0] Phase: Succeeded StartedAt: 2026-08-01 05:00:48 +0000 UTC FinishedAt: 2026-08-01 05:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbh[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 05:00:48 +0000 UTC FinishedAt: 2026-08-01 05:47:17 +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+CgkJCTx0ZD4yMDI2LzA4LzAxIDA1OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkweCwgd2hpY2ggaXMgdXNlZCB0byBwYXNzIHRocm91Z2ggcGh5c2ljYWwgSUJNIFogY3J5cHRvZ3JhcGhpYyBjb3Byb2Nlc3NvcnMgdG8gdmlydHVhbCBtYWNoaW5lcy4gVGhlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiAoYHZmaW9fYXBfaW5pdGApIGV4cGxpY2l0bHkgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgQVAgaW5zdHJ1Y3Rpb25zIHZpYSBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCwgd2hpY2ggcmV0dXJucyBmYWxzZSB1bmxlc3MgcGh5c2ljYWwgQVAgaGFyZHdhcmUgaXMgcHJlc2VudCBhbmQgcGFzc2VkIHRocm91Z2ggYnkgdGhlIGhvc3QuIFN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIGRvIG5vdCBlbXVsYXRlIEFQIGhhcmR3YXJlIGluIHNvZnR3YXJlLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB3aXRob3V0IHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNhNjZkM2I4ZWU0MzQ3M2Y2ZDc3ZDczNWEzMjRiMzhhMmQ5MTNkMTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDA1OjQ1OjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuaW5kZXggNDRiM2ExZGNjMWIzNi4uZjk0NjAzMTBkNDdiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5AQCAtMTgyMSwyNyAmIzQzOzE4MjEsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnZmaW9fYXBfbWRldl9hdHRyX2dyb3Vwc1tdID0ge1xuIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3NldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbiBcdFx0XHRcdHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm07XG4tXG4gXHRpZiAoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiZCkge1xuIFx0XHRkb3duX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuJiM0MztcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2spIHtcbiYjNDM7XHRcdFx0dXBfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XG4mIzQzO1x0XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0XHR9XG4gXHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2sgPSBcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2VwcWFwX2hvb2s7XG4tXHRcdHVwX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuIFxuIFx0XHRnZXRfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcbi1cbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtLCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuLVx0XHRcdGlmIChtICE9IG1hdHJpeF9tZGV2IFx1MDAyNlx1MDAyNiBtLVx1MDAzZWt2bSA9PSBrdm0pIHtcbi1cdFx0XHRcdHJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcbi1cdFx0XHRcdHJldHVybiAtRVBFUk07XG4tXHRcdFx0fVxuLVx0XHR9XG4tXG4gXHRcdGt2bV9nZXRfa3ZtKGt2bSk7XG4gXHRcdG1hdHJpeF9tZGV2LVx1MDAzZWt2bSA9IGt2bTtcbiBcdFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcbi1cbiBcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuJiM0MztcdFx0dXBfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0xODg1LDcgJiM0MzsxODc4LDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuIFx0aWYgKGt2bSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiZCkge1xuIFx0XHRkb3duX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuIFx0XHRrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rID0gTlVMTDtcbi1cdFx0dXBfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XG4gXG4gXHRcdGdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuIFxuQEAgLTE4OTUsNiAmIzQzOzE4ODcsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfdW5zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXG4gXHRcdG1hdHJpeF9tZGV2LVx1MDAzZWt2bSA9IE5VTEw7XG4gXG4gXHRcdHJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcbiYjNDM7XHRcdHVwX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuIFx0fVxuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgZm9yIHMzOTB4LCB3aGljaCBpcyB1c2VkIHRvIHBhc3MgdGhyb3VnaCBwaHlzaWNhbCBJQk0gWiBjcnlwdG9ncmFwaGljIGNvcHJvY2Vzc29ycyB0byB2aXJ0dWFsIG1hY2hpbmVzLiBUaGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIChgdmZpb19hcF9pbml0YCkgZXhwbGljaXRseSBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiBBUCBpbnN0cnVjdGlvbnMgdmlhIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgLCB3aGljaCByZXR1cm5zIGZhbHNlIHVubGVzcyBwaHlzaWNhbCBBUCBoYXJkd2FyZSBpcyBwcmVzZW50IGFuZCBwYXNzZWQgdGhyb3VnaCBieSB0aGUgaG9zdC4gU3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgZG8gbm90IGVtdWxhdGUgQVAgaGFyZHdhcmUgaW4gc29mdHdhcmUuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHdpdGhvdXQgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2E2NmQzYjhlZTQzNDczZjZkNzdkNzM1YTMyNGIzOGEyZDkxM2QxNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMDU6NDU6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKaW5kZXggNDRiM2ExZGNjMWIzNi4uZjk0NjAzMTBkNDdiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwpAQCAtMTgyMSwyNyAmIzQzOzE4MjEsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnZmaW9fYXBfbWRldl9hdHRyX2dyb3Vwc1tdID0gewogc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LAogCQkJCXN0cnVjdCBrdm0gKmt2bSkKIHsKLQlzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm07Ci0KIAlpZiAoa3ZtLSZndDthcmNoLmNyeXB0by5jcnljYmQpIHsKIAkJZG93bl93cml0ZSgmYW1wO2t2bS0mZ3Q7YXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTsKJiM0MzsJCWlmIChrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9vaykgewomIzQzOwkJCXVwX3dyaXRlKCZhbXA7a3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pOwomIzQzOwkJCXJldHVybiAtRVBFUk07CiYjNDM7CQl9CiAJCWt2bS0mZ3Q7YXJjaC5jcnlwdG8ucHFhcF9ob29rID0gJmFtcDttYXRyaXhfbWRldi0mZ3Q7cHFhcF9ob29rOwotCQl1cF93cml0ZSgmYW1wO2t2bS0mZ3Q7YXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTsKIAogCQlnZXRfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0LCBub2RlKSB7Ci0JCQlpZiAobSAhPSBtYXRyaXhfbWRldiAmYW1wOyZhbXA7IG0tJmd0O2t2bSA9PSBrdm0pIHsKLQkJCQlyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7Ci0JCQkJcmV0dXJuIC1FUEVSTTsKLQkJCX0KLQkJfQotCiAJCWt2bV9nZXRfa3ZtKGt2bSk7CiAJCW1hdHJpeF9tZGV2LSZndDtrdm0gPSBrdm07CiAJCXZmaW9fYXBfbWRldl91cGRhdGVfZ3Vlc3RfYXBjYihtYXRyaXhfbWRldik7Ci0KIAkJcmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pOwomIzQzOwkJdXBfd3JpdGUoJmFtcDtrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xODg1LDcgJiM0MzsxODc4LDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KQogCWlmIChrdm0gJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2guY3J5cHRvLmNyeWNiZCkgewogCQlkb3duX3dyaXRlKCZhbXA7a3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pOwogCQlrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9vayA9IE5VTEw7Ci0JCXVwX3dyaXRlKCZhbXA7a3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pOwogCiAJCWdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pOwogCkBAIC0xODk1LDYgJiM0MzsxODg3LDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KQogCQltYXRyaXhfbWRldi0mZ3Q7a3ZtID0gTlVMTDsKIAogCQlyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7CiYjNDM7CQl1cF93cml0ZSgmYW1wO2t2bS0mZ3Q7YXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTsKIAl9CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipWRklPIEFQIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYC4gSXQmIzM5O3MgdHdlYWtpbmcgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCBhbmQgYHZmaW9fYXBfbWRldl91bnNldF9rdm1gLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIHMzOTAtc3BlY2lmaWMsIGRlYWxpbmcgd2l0aCB0aGUgVkZJTyBBUCDigJMgdGhhdCBhZGp1bmN0IHByb2Nlc3NvciBtYXRyaXggaGFyZHdhcmUuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBDYW4gSSBldmVuICpiZWdpbiogdG8gZnV6eiB0aGlzIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cD8KClFFTVUgaGFuZGxlcyBzMzkweCBlbXVsYXRpb24sIGJ1dCBkb2VzIGl0IGZhaXRoZnVsbHkgbW9kZWwgdGhlIEFQIG1hdHJpeD8gVGhhdCYjMzk7cyB0aGUgY29yZSBodXJkbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBleGlzdGluZyBzeXprYWxsZXIgY292ZXJhZ2UgZm9yIHRoaXMgYXJlYSwgb3IgaWYgdGhlcmUmIzM5O3MgYSBmZWFzaWJsZSBhdHRhY2sgcGF0aC4KCldhaXQsIHN5emthbGxlciAqZG9lcyogZnV6eiBzMzkweCwgYnV0IHRoYXQgb2Z0ZW4gcmVsaWVzIG9uIHNwZWNpZmljIGhhcmR3YXJlIG9yIGNhcmVmdWxseSBjb25zdHJ1Y3RlZCBRRU1VIGNvbmZpZ3VyYXRpb25zLiBUaGUgUUVNVSBkb2N1bWVudGF0aW9uIGhpbnRzIGF0IHNvbWUgVkZJTy1BUCBzdXBwb3J0LCBidXQgdGhhdCBzb3VuZHMgbGlrZSBpdCB3b3VsZCBpbnZvbHZlIHBhc3NpbmcgdGhyb3VnaCBob3N0IGhhcmR3YXJlIHRvIHRoZSBndWVzdCB1c2luZyBWRklPLiBUaGlzIHN1Z2dlc3RzIHRoYXQgaXQgd291bGQgdHlwaWNhbGx5IHJlcXVpcmUgYWN0dWFsIGhhcmR3YXJlIG9yIHBvdGVudGlhbGx5IGEgbWVkaWF0ZWQgZGV2aWNlIChtZGV2KSBmcmFtZXdvcmsuCgpOb3cgSSYjMzk7bSBkaWdnaW5nIGRlZXBlciBpbnRvIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgIGFuZCBub3RpY2UgdGhlIHVzZSBvZiBgYXBfbWF0cml4X21kZXZgLiBUaGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uOiBpcyBpdCBldmVuIHBvc3NpYmxlIHRvIGNvbmp1cmUgYW4gbWRldiB3aXRob3V0IHBoeXNpY2FsbHkgcHJlc2VudCBBUCBoYXJkd2FyZT8gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgcmVsYXRlZCBmaWxlcyBsaWtlIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNsdWVzIHRvIGNyZWF0aW5nIGEgc2ltdWxhdGVkIGRldmljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcF9tYXRyaXhfbWRldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zNC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzozNTpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzYtc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcmVzZXRfcWxpc3Qoc3RydWN0IGxpc3RfaGVhZCAqcWxpc3QpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz03Nj1zdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTg3LSAqXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6ODg6ICogQG1hdHJpeF9tZGV2OiBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgYXBfbWF0cml4X21kZXYgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIEFQXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODktICpcdFx0IGNvbmZpZ3VyYXRpb24gZGF0YSB0byB1c2UgdG8gdXBkYXRlIGEgS1ZNIGd1ZXN0JiMzOTtzIEFQQ0IuXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTk5LSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjEwMDpzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X3VwZGF0ZV9sb2Nrc19mb3JfbWRldihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEwMS17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTExMS0gKlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjExMjogKiBAbWF0cml4X21kZXY6IGEgcG9pbnRlciB0byBhIHN0cnVjdCBhcF9tYXRyaXhfbWRldiBvYmplY3QgY29udGFpbmluZyB0aGUgQVBcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMTMtICpcdFx0IGNvbmZpZ3VyYXRpb24gZGF0YSB0byB1c2UgdG8gdXBkYXRlIGEgS1ZNIGd1ZXN0JiMzOTtzIEFQQ0IuXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEyMi0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMjM6c3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9tZGV2KHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTI0LXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTQ2LSAqXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTQ3OiAqIFJldHVybjogdGhlIGFwX21hdHJpeF9tZGV2IG9iamVjdCB0byB3aGljaCBAYXBxbiBpcyBhc3NpZ25lZCBvciBOVUxMIGlmIEBhcHFuXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTQ4OiAqXHQgICBpcyBub3QgYXNzaWduZWQgdG8gYW4gYXBfbWF0cml4X21kZXYuXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTQ5LSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE1MDpzdGF0aWMgc3RydWN0IGFwX21hdHJpeF9tZGV2ICpnZXRfdXBkYXRlX2xvY2tzX2J5X2FwcW4oaW50IGFwcW4pXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTUxLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNTI6XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE1My1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg1LSAqXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTg2OiAqIE5vdGU6IGlmIEBxdWV1ZSBpcyBub3QgbGlua2VkIHRvIGFuIGFwX21hdHJpeF9tZGV2IG9iamVjdCwgdGhlIEtWTSBsb2NrXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg3LSAqXHQgIHdpbGwgbm90IGJlIHRha2VuLlxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMDY9c3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICp2ZmlvX2FwX21kZXZfZ2V0X3F1ZXVlKFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNzpcdFx0XHRcdFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDgtXHRcdFx0XHRcdGludCBhcHFuKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz01ODE9c3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTU4OC1cdFx0XHQgICAgICAgLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9RX05PVF9BVkFJTCwgfTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo1ODk6XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTU5MC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjEwLVx0bWF0cml4X21kZXYgPSBjb250YWluZXJfb2YodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjYxMTpcdFx0XHRcdCAgIHN0cnVjdCBhcF9tYXRyaXhfbWRldiwgcHFhcF9ob29rKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02MTItXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTY0NT1zdGF0aWMgdm9pZCB2ZmlvX2FwX21hdHJpeF9pbml0KHN0cnVjdCBhcF9jb25maWdfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjUyLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjY1MzpzdGF0aWMgdm9pZCBzaWduYWxfZ3Vlc3RfYXBfY2ZnX2NoYW5nZWQoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02NTQte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02NTgtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NjU5OnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91cGRhdGVfZ3Vlc3RfYXBjYihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY2MC17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY3MC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo2NzE6c3RhdGljIGJvb2wgdmZpb19hcF9tZGV2X2ZpbHRlcl9jZG9tcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY3Mi17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTY4Mz1zdGF0aWMgYm9vbCBfcXVldWVfcGFzc2FibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTcxOS0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo3MjA6c3RhdGljIGJvb2wgdmZpb19hcF9tZGV2X2ZpbHRlcl9tYXRyaXgoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03MjEtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqYXBtX2ZpbHRlcmVkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz03NzY9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfaW5pdF9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc3Ny17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Nzc4Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Nzc5Olx0XHRjb250YWluZXJfb2YodmRldiwgc3RydWN0IGFwX21hdHJpeF9tZGV2LCB2ZGV2KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03ODAtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTc5MD1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9wcm9iZShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzkxLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo3OTI6XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc5My1cdGludCByZXQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzk0LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjc5NTpcdG1hdHJpeF9tZGV2ID0gdmZpb19hbGxvY19kZXZpY2UoYXBfbWF0cml4X21kZXYsIHZkZXYsIFx1MDAyNm1kZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc5Ni1cdFx0XHRcdFx0XHUwMDI2dmZpb19hcF9tYXRyaXhfZGV2X29wcyk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTgxNS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo4MTY6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2xpbmtfcXVldWUoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04MTctXHRcdFx0XHQgICAgc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTgyNS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo4MjY6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2xpbmtfYXBxbihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LCBpbnQgYXBxbilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04Mjcte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz04Mzk9c3RhdGljIHZvaWQgdmZpb19hcF91bmxpbmtfbWRldl9mcl9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODQzLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjg0NDpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfdW5saW5rX2ZyX3F1ZXVlcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTg0NS17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTg2MD1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04NjEte1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjg2MjpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2bWRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTg2My1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODc5LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjg4MDpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfbG9nX3NoYXJpbmdfZXJyKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqYXNzaWduZWUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6ODgxOlx0XHRcdFx0XHQgc3RydWN0IGFwX21hdHJpeF9tZGV2ICphc3NpZ25lZF90byxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04ODItXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nICphcG0sIHVuc2lnbmVkIGxvbmcgKmFxbSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODkzLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjg5NDpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfbG9nX2luX3VzZV9lcnIoc3RydWN0IGFwX21hdHJpeF9tZGV2ICphc3NpZ25lZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04OTUtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmFwbSwgdW5zaWduZWQgbG9uZyAqYXFtKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy05MjEtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6OTIyOnN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3ZlcmlmeV9ub19zaGFyaW5nKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqYXNzaWduZWUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtOTIzLVx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgKm1kZXZfYXBtLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy05MjUte1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjkyNjpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqYXNzaWduZWRfdG87XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtOTI3LVx0REVDTEFSRV9CSVRNQVAoYXBtLCBBUF9ERVZJQ0VTKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtOTc2LSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjk3NzpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl92YWxpZGF0ZV9tYXNrcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTk3OC17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTk4Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo5ODg6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2xpbmtfYWRhcHRlcihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTk4OS1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgYXBpZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtOTk3LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjk5ODpzdGF0aWMgdm9pZCBjb2xsZWN0X3F1ZXVlc190b19yZXNldChzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTk5OS1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFwaWQsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEwMTEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTAxMjpzdGF0aWMgdm9pZCByZXNldF9xdWV1ZXNfZm9yX2FwaWQoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMDEzLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFwaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEwMjEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTAyMjpzdGF0aWMgaW50IHJlc2V0X3F1ZXVlc19mb3JfYXBpZHMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMDIzLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nICphcG1fcmVzZXQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTEwNzM9c3RhdGljIHNzaXplX3QgYXNzaWduX2FkYXB0ZXJfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMDc5LVx0REVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMDgwOlx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEwODEtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTExMjM9c3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTEyNDoqdmZpb19hcF91bmxpbmtfYXBxbl9mcl9tZGV2KHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTEyNS1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYXBpZCwgdW5zaWduZWQgbG9uZyBhcHFpKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMTQ1LSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjExNDY6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3VubGlua19hZGFwdGVyKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTE0Ny1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhcGlkLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMTYzLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjExNjQ6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfYWRhcHRlcnMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMTY1LVx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKmFwaWRzKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMTk0LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjExOTU6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfYWRhcHRlcihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTExOTYtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFwaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTEyMjA9c3RhdGljIHNzaXplX3QgdW5hc3NpZ25fYWRhcHRlcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEyMjUtXHR1bnNpZ25lZCBsb25nIGFwaWQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTIyNjpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMjI3LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xMjUxPXN0YXRpYyBERVZJQ0VfQVRUUl9XTyh1bmFzc2lnbl9hZGFwdGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMjUyLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjEyNTM6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2xpbmtfZG9tYWluKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTI1NC1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhcHFpKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xMjk3PXN0YXRpYyBzc2l6ZV90IGFzc2lnbl9kb21haW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMzAzLVx0REVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMzA0Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEzMDUtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTEzNDU9c3RhdGljIERFVklDRV9BVFRSX1dPKGFzc2lnbl9kb21haW4pO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEzNDYtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTM0NzpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfdW5saW5rX2RvbWFpbihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEzNDgtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBhcHFpLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMzY0LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjEzNjU6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfZG9tYWlucyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEzNjYtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nICphcHFpcylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTM5NS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMzk2OnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2RvbWFpbihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEzOTctXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXBxaSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTQyMT1zdGF0aWMgc3NpemVfdCB1bmFzc2lnbl9kb21haW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNDI2LVx0dW5zaWduZWQgbG9uZyBhcHFpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE0Mjc6XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTQyOC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTQ2OT1zdGF0aWMgc3NpemVfdCBhc3NpZ25fY29udHJvbF9kb21haW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNDc0LVx0dW5zaWduZWQgbG9uZyBpZDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNDc1Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE0NzYtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE1MjM9c3RhdGljIHNzaXplX3QgdW5hc3NpZ25fY29udHJvbF9kb21haW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNTI4LVx0dW5zaWduZWQgbG9uZyBkb21pZDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNTI5Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE1MzAtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE1NjE9c3RhdGljIHNzaXplX3QgY29udHJvbF9kb21haW5zX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNTY1LVx0dW5zaWduZWQgbG9uZyBpZDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNTY2Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE1NjctXHR1bnNpZ25lZCBsb25nIG1heF9kb21pZCA9IG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG1fbWF4O1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xNjA4PXN0YXRpYyBzc2l6ZV90IG1hdHJpeF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE2MTEtXHRzc2l6ZV90IG5jaGFycztcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNjEyOlx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE2MTMtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE2MjI9c3RhdGljIHNzaXplX3QgZ3Vlc3RfbWF0cml4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNjI1LVx0c3NpemVfdCBuY2hhcnM7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTYyNjpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNjI3LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xNjQyPXN0YXRpYyBzc2l6ZV90IGFwX2NvbmZpZ19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE2NDQte1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE2NDU6XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTY0Ni1cdGludCBpZHggPSAwO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xNjYwPXN0YXRpYyBpbnQgcGFyc2VfYml0bWFwKGNoYXIgKipzdHJidWZwdHIsIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgaW50IG5iaXRzKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNjcxLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE2NzI6c3RhdGljIGludCBhcF9tYXRyaXhfb3ZlcmZsb3dfY2hlY2soc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNjczLXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTcwNT1zdGF0aWMgc3NpemVfdCBhcF9jb25maWdfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTcwNy17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTcwODpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNzA5LVx0c3RydWN0IGFwX21hdHJpeCBtX25ldywgbV9vbGQsIG1fYWRkZWQsIG1fcmVtb3ZlZDtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTgwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4MjAtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTgyMTpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTgyMi1cdFx0XHRcdHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg0Mi1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxODQzOnN0YXRpYyB2b2lkIHVubWFwX2lvdmEoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiwgdTY0IGlvdmEsIHU2NCBsZW5ndGgpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg0NC17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE4NTU9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2RtYV91bm1hcChzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYsIHU2NCBpb3ZhLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xODU3LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxODU4Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTg1OTpcdFx0Y29udGFpbmVyX29mKHZkZXYsIHN0cnVjdCBhcF9tYXRyaXhfbWRldiwgdmRldik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg2MC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg3My0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxODc0OnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91bnNldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xODc1LXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTk4MD1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwMDktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjAxMDpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDExLXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjA0Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA0Ny17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA0ODpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNDk6XHRcdGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYsIHZkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNTAtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIwNTc9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA1OC17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA1OTpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNjA6XHRcdGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYsIHZkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNjEtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIwNjU9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3JlcXVlc3Qoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2LCB1bnNpZ25lZCBpbnQgY291bnQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNjctXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB2ZGV2LVx1MDAzZWRldjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMDY4Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDY5LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNzA6XHRtYXRyaXhfbWRldiA9IGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYsIHZkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNzEtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIxNDM9c3RhdGljIGludCB2ZmlvX2FwX2lycV9zZXRfaW5pdChzdHJ1Y3QgdmZpb19pcnFfc2V0ICppcnFfc2V0LCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjE2NC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMTY1OnN0YXRpYyBpbnQgdmZpb19hcF9zZXRfcmVxdWVzdF9pcnEoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMTY2LVx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIxOTgtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjE5OTpzdGF0aWMgaW50IHZmaW9fYXBfc2V0X2NmZ19jaGFuZ2VfaXJxKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIyMDAte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjMxLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIyMzI6c3RhdGljIGludCB2ZmlvX2FwX3NldF9pcnFzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjIzMy1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIyNTc9c3RhdGljIHNzaXplX3QgdmZpb19hcF9tZGV2X2lvY3RsKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjI1OS17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjI2MDpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIyNjE6XHRcdGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYsIHZkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIyNjItXHRpbnQgcmV0O1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjg2LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIyODc6c3RhdGljIHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjg4LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMjg5Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjkwLVx0dW5zaWduZWQgbG9uZyBhcGlkID0gQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjMwMj1zdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzMDgtXHR1bnNpZ25lZCBsb25nIGFwaWQsIGFwcWk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjMwOTpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjMxMC1cdHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2ID0gdG9fYXBfZGV2KGRldik7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0MDk9aW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQxMy1cdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQxNDpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQxNS1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjQ2Mz12b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0NjYtXHRzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDY3Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDY4LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNTI2PWludCB2ZmlvX2FwX21kZXZfcmVzb3VyY2VfaW5fdXNlKHVuc2lnbmVkIGxvbmcgKmFwbSwgdW5zaWduZWQgbG9uZyAqYXFtKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTQzLSAqXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjU0NDogKiBAbWF0cml4X21kZXY6IGFuIGFwX21hdHJpeF9tZGV2IG9iamVjdCBhdHRhY2hlZCB0byBhIEtWTSBndWVzdC5cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTQ1LSAqIEBhcHJlbTogdGhlIGFkYXB0ZXJzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgaG9zdCYjMzk7cyBBUCBjb25maWd1cmF0aW9uXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1NDktICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjU1MDpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTUxLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICphcHJlbSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjU5MT1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1OTQte1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI1OTU6XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1OTYtXHRERUNMQVJFX0JJVE1BUChhcHJlbSwgQVBfREVWSUNFUyk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI3MzQ9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjczNi17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjczNzpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjczOC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9Mjc5Nz12b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY2ZnX2luZm8sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MTEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjgxMjpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgxMy17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI4NDI9dm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NDQte1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4NDU6XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NDYtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0zNy0gKlx0XHRkcml2ZXIsIGJlIGl0IHVzaW5nIEBtZGV2X2xpc3Qgb3Igd3JpdGluZyB0aGUgc3RhdGUgb2YgYVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDozODogKlx0XHRzaW5nbGUgYXBfbWF0cml4X21kZXYgZGV2aWNlLiBJdCYjMzk7cyBxdWl0ZSBjb2Fyc2UgYnV0IHdlIGRvbiYjMzk7dFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0zOS0gKlx0XHRleHBlY3QgbXVjaCBjb250ZW50aW9uLlxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtNDMtICpcdFx0IHdpbGwgYmUgdGFrZW4gd2hlbiB0aGUgQVAgZGV2aWNlcyBhcmUgcGx1Z2dlZCBpbnRvIG9yIHVucGx1Z2dlZFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDo0NDogKlx0XHQgZnJvbSBhIGd1ZXN0LCBhbmQgd2hlbiBhbiBhcF9tYXRyaXhfbWRldiBkZXZpY2UgaXMgYWRkZWQgdG8gb3JcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtNDUtICpcdFx0IHJlbW92ZWQgZnJvbSBAbWRldl9saXN0IG9yIHRoZSBsaXN0IGlzIGl0ZXJhdGVkLlxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg9NDc9c3RydWN0IGFwX21hdHJpeF9kZXYge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtNTAtXHRzdHJ1Y3QgbGlzdF9oZWFkIG1kZXZfbGlzdDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6NTE6XHRzdHJ1Y3QgbXV0ZXggbWRldnNfbG9jazsgLyogc2VyaWFsaXplcyBhY2Nlc3MgdG8gZWFjaCBhcF9tYXRyaXhfbWRldiAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC01Mi1cdHN0cnVjdCBhcF9kcml2ZXIgICp2ZmlvX2FwX2Rydjtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTkwPXN0cnVjdCBhcF9xdWV1ZV90YWJsZSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC05NC0vKipcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6OTU6ICogc3RydWN0IGFwX21hdHJpeF9tZGV2IC0gQ29udGFpbnMgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgbWF0cml4IG1lZGlhdGVkXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTk2LSAqXHRcdFx0ICAgZGV2aWNlLlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC05Ny0gKiBAdmRldjpcdHRoZSB2ZmlvIGRldmljZVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDo5ODogKiBAbm9kZTpcdGFsbG93cyB0aGUgYXBfbWF0cml4X21kZXYgc3RydWN0IHRvIGJlIGFkZGVkIHRvIGEgbGlzdFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC05OS0gKiBAbWF0cml4Olx0dGhlIGFkYXB0ZXJzLCB1c2FnZSBkb21haW5zIGFuZCBjb250cm9sIGRvbWFpbnMgYXNzaWduZWQgdG8gdGhlXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xMTMtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjExNDpzdHJ1Y3QgYXBfbWF0cml4X21kZXYge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xMTUtXHRzdHJ1Y3QgdmZpb19kZXZpY2UgdmRldjtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE0Mz1zdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE0NDpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE0NS1cdGRtYV9hZGRyX3Qgc2F2ZWRfaW92YTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAxNgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDc5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipWRklPIEFQIExvY2tpbmcgYW5kIExvZ2ljIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCBhbmQgYHZmaW9fYXBfbWRldl91bnNldF9rdm1gLiBJdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3JlIHNpbXBsaWZ5aW5nIHRoZSBsb2dpYyBhcm91bmQgYXR0YWNoaW5nIGFuZCBkZXRhY2hpbmcgYGFwX21hdHJpeF9tZGV2YCBkZXZpY2VzIHRvIEtWTSBpbnN0YW5jZXMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gaGF2ZSByZW1vdmVkIGEgbG9vcCB0aGF0IGNoZWNrZWQgZm9yIGNvbmZsaWN0aW5nIGF0dGFjaG1lbnRzLCB3aGljaCBzdHJpa2VzIG1lIGFzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGluIHRoZSBjb25jdXJyZW5jeSBtb2RlbC4KCkluc3RlYWQgb2YgdGhhdCBsb29wLCB0aGUgY29kZSBub3cgY2hlY2tzIGBpZiAoa3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2spIHsgcmV0dXJuIC1FUEVSTTsgfWAgdW5kZXIgdGhlIGBwcWFwX2hvb2tfcndzZW1gIGxvY2suIE1ha2VzIHNlbnNlLCB1c2luZyBhIHJlYWQtd3JpdGUgc2VtYXBob3JlIHRvIHByb3RlY3QgYSBwb3RlbnRpYWwgZGF0YSByYWNlLiBBbHNvIGluIGB2ZmlvX2FwX21kZXZfdW5zZXRfa3ZtYCwgdGhlIHBhdGNoIHJlbW92ZXMgdGhlIGxvY2sgcmVsZWFzZS9hY3F1aXJlIGFyb3VuZCB0aGUgYGt2bS0mZ3Q7YXJjaC5jcnlwdG8ucHFhcF9ob29rID0gTlVMTDtgIGFzc2lnbm1lbnQuIEFoLCBJIHNlZSBhIGJpZ2dlciBjaGFuZ2UgaW4gYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGxvY2stcHJvdGVjdGVkIGNoZWNrOgoKYGBgYwogCWlmIChrdm0tJmd0O2FyY2guY3J5cHRvLmNyeWNiZCkgewogCQlkb3duX3dyaXRlKCZhbXA7a3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pOwomIzQzOwkJaWYgKGt2bS0mZ3Q7YXJjaC5jcnlwdG8ucHFhcF9ob29rKSB7CiYjNDM7CQkJdXBfd3JpdGUoJmFtcDtrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7CiYjNDM7CQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJCX0KIAkJa3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2sgPSAmYW1wO21hdHJpeF9tZGV2LSZndDtwcWFwX2hvb2s7Ci0JCXVwX3dyaXRlKCZhbXA7a3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pOwogCiAJCWdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkobSwgJmFtcDttYXRyaXhfZGV2LSZndDttZGV2X2xpc3QsIG5vZGUpIHsKLQkJCWlmIChtICE9IG1hdHJpeF9tZGV2ICZhbXA7JmFtcDsgbS0mZ3Q7a3ZtID09IGt2bSkgewotCQkJCXJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTsKLQkJCQlyZXR1cm4gLUVQRVJNOwotCQkJfQotCQl9Ci0KIAkJa3ZtX2dldF9rdm0oa3ZtKTsKIAkJbWF0cml4X21kZXYtJmd0O2t2bSA9IGt2bTsKIAkJdmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTsKLQogCQlyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7CiYjNDM7CQl1cF93cml0ZSgmYW1wO2t2bS0mZ3Q7YXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTsKIAl9CiBgYGAKClRoaXMgaXMgYSBwcmV0dHkgbWFqb3Igc2hpZnQgaW4gbG9ja2luZyBhbmQgdGhlIG92ZXJhbGwgYXR0YWNobWVudCBsb2dpYyBmb3IgVkZJTyBBUCBkZXZpY2VzLiBUaGUgcmVtb3ZhbCBvZiB0aGUgcHJldmlvdXMgbG9vcCBzdWdnZXN0cyBhIHNpbXBsZXIsIG1vcmUgZGlyZWN0IGFwcHJvYWNoIHRvIHByZXZlbnRpbmcgY29uZmxpY3RpbmcgYXR0YWNobWVudHMsIGJ1dCBpdCBkb2VzIHJlbHkgb24gdGhhdCBgcHFhcF9ob29rX3J3c2VtYC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzIGludHJvZHVjZWQgYnkgdGhpcy4gQWxzbywgZG9lcyBpdCBjaGFuZ2UgdGhlIGVycm9yIHBhdGhzIGF0IGFsbD8KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogY2FuIFN5emthbGxlciB0cmlnZ2VyIHRoaXMgY29kZT8gSXQgcnVucyBvbiB4ODZfNjQsIGFybTY0LCByaXNjdjY0LCBhbmQgczM5MHguIE9uIHMzOTB4LCBTeXprYWxsZXIgdXNlcyBRRU1VLCBzbyB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgUUVNVSBzdXBwb3J0IFZGSU8gQVA/IFZGSU8gQVAgaXMgYWxsIGFib3V0IHRoZSBob3N0IGhhdmluZyBBUCBoYXJkd2FyZSBhbmQgcGFzc2luZyBpdCB0byB0aGUgZ3Vlc3QuIEJ1dCwgU3l6a2FsbGVyIHVzZXMgYHN5ei1leGVjdXRvcmAgaW5zaWRlIHRoZSBndWVzdC4gU28sIGlmIFN5emthbGxlciBpcyBydW5uaW5nICppbnNpZGUqIHRoZSBndWVzdCwgY2FuIGl0IGludGVyYWN0IHdpdGggYC9kZXYvdmZpby8uLi5gIGlmIHRoZSBndWVzdCBpdHNlbGYgaGFzIFZGSU8gQVAgZGV2aWNlcz8gTm8sIFZGSU8gQVAgaXMgYSBob3N0IGRyaXZlci4gU3l6a2FsbGVyIG5lZWRzIHRvIHJ1biBvbiB0aGUgaG9zdCAob3IgaW4gYSBuZXN0ZWQgc2V0dXApIHRvIGludGVyYWN0IHdpdGggYC9zeXMvYnVzL21kZXYvZGV2aWNlcy9gIHRvIGNyZWF0ZSBhbiBgYXBfbWF0cml4X21kZXZgIGFuZCB0aGVuIHVzZSBgL2Rldi92ZmlvL2AgdG8gYXR0YWNoIGl0IHRvIEtWTS4KCldhaXQsIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgaXMgY2FsbGVkIHdoZW4gYSBWRklPIGdyb3VwIGlzIGF0dGFjaGVkIHRvIEtWTSB2aWEgYEtWTV9ERVZfVkZJT19HUk9VUF9BRERgIG9yIHNpbWlsYXIuIEkgbmVlZCB0byBjaGVjayB3aGVyZSBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19hcF9tZGV2X3NldF9rdm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTgwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4MTEtLyoqXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTgxMjogKiB2ZmlvX2FwX21kZXZfc2V0X2t2bSAtIHNldHMgYWxsIGRhdGEgZm9yIEBtYXRyaXhfbWRldiB0aGF0IGFyZSBuZWVkZWRcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xODEzLSAqIHRvIG1hbmFnZSBBUCByZXNvdXJjZXMgZm9yIHRoZSBndWVzdCB3aG9zZSBzdGF0ZSBpcyByZXByZXNlbnRlZCBieSBAa3ZtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4MjAtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTgyMTpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTgyMi1cdFx0XHRcdHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjA0Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNTMtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA1NDpcdHJldHVybiB2ZmlvX2FwX21kZXZfc2V0X2t2bShtYXRyaXhfbWRldiwgdmRldi1cdTAwM2Vrdm0pO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjM5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWRklPIEFQIERldmljZSBPcGVuaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2VgIGZ1bmN0aW9uIGNhbGwg4oCTIHJpZ2h0LCB0aGlzIGlzIHRoZSBgLm9wZW5fZGV2aWNlYCBjYWxsYmFjayBmb3IgdGhlIFZGSU8gZGV2aWNlLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBjb2RlIHBhdGggKmFjdHVhbGx5KiBiZSByZWFjaGVkIHdpdGhvdXQgYW55IHBoeXNpY2FsIEFQIGhhcmR3YXJlIHByZXNlbnQgaW4gdGhlIHN5c3RlbT8gVGhhdCYjMzk7cyBhIGNydWNpYWwgcXVlc3Rpb24uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBpZiB0aGUgYHZmaW9fYXBgIGRyaXZlciBldmVuICpsb2FkcyogYW5kLCBjcnVjaWFsbHksIGlmIGl0IGNyZWF0ZXMgYW55IGRldmljZXMsIHdpdGhvdXQgdW5kZXJseWluZyBwaHlzaWNhbCBoYXJkd2FyZS4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGhhcHBlbnMgaW4gYSBwdXJlbHkgc29mdHdhcmUgb3Igc2ltdWxhdGVkIGVudmlyb25tZW50LiBJZiB0aGUgYW5zd2VyIGlzIHllcywgdGhlbiBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyB0aGF0IHRoaXMgZGV2aWNlIG1pZ2h0IGJlIGluaXRpYWxpemVkIGV2ZW4gd2l0aG91dCBBUCBoYXJkd2FyZS4gSWYgaXQgZG9lc24mIzM5O3QsIEkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBuZXh0IHBvc3NpYmxlIGNhdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0yMDA9c3RhdGljIHZvaWQgX19leGl0IHZmaW9fYXBfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0yMDctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MjA4Om1vZHVsZV9pbml0KHZmaW9fYXBfaW5pdCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMjA5LW1vZHVsZV9leGl0KHZmaW9fYXBfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NzgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB2ZmlvX2FwX2luaXRgIGZ1bmN0aW9uLgoKKipJbml0aWFsIENvbnNpZGVyYXRpb25zOiBEaXZpbmcgaW50byB2ZmlvX2FwX2luaXQqKgoKQWxyaWdodCwgc28gYHZmaW9fYXBfaW5pdGAuLi4gYmFzZWQgb24gdGhlIG5hbWUsIHRoaXMgaXMgcHJvYmFibHkgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHNvbWUgYXNwZWN0IG9mIHRoZSBWRklPIChWaXJ0dWFsIEZ1bmN0aW9uIEkvTykgc3Vic3lzdGVtIHJlbGF0ZWQgdG8gQWNjZXNzIFBlcm1pc3Npb25zIChBUCkgb3IgQWNjZXNzIFByb3RlY3Rpb24gKEFQKS4gVGhhdCB0ZWxscyBtZSBpbW1lZGlhdGVseSB0aGF0IHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgc2VjdXJpdHktc2Vuc2l0aXZlIGFyZWEuIFZGSU8gaXMgYWxsIGFib3V0IGRpcmVjdCBkZXZpY2UgYXNzaWdubWVudCwgYnlwYXNzaW5nIHRoZSBoeXBlcnZpc29yIHRvIHByb3ZpZGUgbmVhci1uYXRpdmUgcGVyZm9ybWFuY2UgdG8gdmlydHVhbCBtYWNoaW5lcy4gVGhlICYjMzQ7QVAmIzM0OyBjb21wb25lbnQgc3VnZ2VzdHMgdGhpcyBpbml0aWFsaXphdGlvbiBpcyBsaWtlbHkgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IHN0cnVjdHVyZXMgYW5kIG1lY2hhbmlzbXMgZm9yIGNvbnRyb2xsaW5nIGFjY2VzcyB0byBJL08gcmVzb3VyY2VzLCBwb3RlbnRpYWxseSBlbnN1cmluZyB0aGF0IGEgVk0gY2FuIG9ubHkgYWNjZXNzIHRoZSBoYXJkd2FyZSBpdCYjMzk7cyBsZWdpdGltYXRlbHkgZW50aXRsZWQgdG8uCgpJJiMzOTtkIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGhhbmRsZSB0YXNrcyBsaWtlOgoKKiAgICoqUmVzb3VyY2UgQWxsb2NhdGlvbjoqKiBQb3RlbnRpYWxseSBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgZGF0YSBzdHJ1Y3R1cmVzIHRvIHRyYWNrIHdoaWNoIHJlc291cmNlcyBhcmUgYXNzaWduZWQgdG8gd2hpY2ggVk1zIGFuZCB3aGF0IGFjY2VzcyBwZXJtaXNzaW9ucyB0aG9zZSBWTXMgaGF2ZS4gVGhpcyBjb3VsZCBpbnZvbHZlIG1lbW9yeSBzdHJ1Y3R1cmVzLCBsb2Nrcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuCiogICAqKlNlY3VyaXR5IENvbnRleHQgU2V0dXA6KiogVGhpcyBtaWdodCBpbmNsdWRlIHNldHRpbmcgdXAgdGhlIHNlY3VyaXR5IGNvbnRleHRzIGZvciB0aGUgaGFyZHdhcmUgZGV2aWNlcyByZWxhdGVkIHRvIGFjY2VzcyBwZXJtaXNzaW9ucy4KKiAgICoqSW50ZXJydXB0IEhhbmRsaW5nOioqIFZGSU8sIGF0IHRoaXMgcG9pbnQsIGNvdWxkIG1hbmFnZSBpbnRlcnJ1cHQgcm91dGluZyBmb3IgYXNzaWduZWQgZGV2aWNlcy4gSWYgQVAgaXMgcmVsYXRlZCB0byBpbnRlcnJ1cHRzLCBpdCBtaWdodCBpbnZvbHZlIGNvbmZpZ3VyaW5nIGludGVycnVwdCByZW1hcHBpbmcgb3IgaW50ZXJydXB0IGluamVjdGlvbiBtZWNoYW5pc21zLgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBBIGtleSBjb21wb25lbnQgd291bGQgYmUgcm9idXN0IGVycm9yIGhhbmRsaW5nLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGRpcmVjdCBkZXZpY2UgYWNjZXNzLCBhbnkgbWlzY29uZmlndXJhdGlvbiBvciBzZWN1cml0eSBicmVhY2ggY2FuIGNyYXNoIHRoZSBzeXN0ZW0uIFNvLCBJIHdvdWxkIGV4cGVjdCBjaGVja3MgZm9yIGlsbGVnYWwgcmVxdWVzdHMgb3IgYWNjZXNzIGF0dGVtcHRzLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGZ1bmN0aW9uIGFjdHVhbGx5IGRvZXMuLi4gSSYjMzk7bGwgbG9vayBmb3Igc3BlY2lmaWMgaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUsIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzLCBhbmQgYW55IGNhbGxzIHJlbGF0ZWQgdG8gc2VjdXJpdHkgY29udGV4dHMgb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX2FwX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE1Mz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2RiZl9pbmZvX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTY2LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE2NzpzdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNjgte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0yMDA9c3RhdGljIHZvaWQgX19leGl0IHZmaW9fYXBfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0yMDctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MjA4Om1vZHVsZV9pbml0KHZmaW9fYXBfaW5pdCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMjA5LW1vZHVsZV9leGl0KHZmaW9fYXBfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mzk2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgdmZpb19hcF9pbml0YCBmdW5jdGlvbi4KCioqQW5hbHl6aW5nIHZmaW9fYXBfaW5pdCoqCgpBbHJpZ2h0LCBoZXJlIHdlIGdvLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHRoZSBWRklPIEFkZHJlc3MgU3BhY2UgKEFQKSBpbXBsZW1lbnRhdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIGtleSBhcmVhcyB0aGlzIHdpbGwgdG91Y2ggdXBvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgbWVtb3J5IG1hcHBpbmcsIERNQSBzZXR1cCwgaW50ZXJydXB0IGhhbmRsaW5nIGluaXRpYWxpemF0aW9uLCBhbmQgYW55IGhhcmR3YXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gdGhhdCYjMzk7cyBjcnVjaWFsIGZvciBnZXR0aW5nIGFuIEFQIGZ1bmN0aW9uaW5nIHdpdGhpbiB0aGUgVkZJTyBmcmFtZXdvcmsuIEkmIzM5O2xsIGV4cGVjdCB0byBzZWUgaG93IGl0IG1hbmFnZXMgdGhlIHByb3RlY3Rpb24gZG9tYWluIGFuZCB0aGUgYXNzb2NpYXRlZCByZXNvdXJjZXMuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGFwcHJvYWNoZWQgdGhlIGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgYmUgcmVhbGx5IGZvY3VzaW5nIG9uIGFueSBvcHRpbWl6YXRpb25zIG9yIHVudXN1YWwgY29kZSBwYXRocy4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIGRlc2lnbmVkIGZvciBwZXJmb3JtYW5jZSBvciBpcyBtb3JlIGFpbWVkIGZvciBnZW5lcmFsaXR5LiBJIHdpbGwgbm90ZSBob3cgaXQmIzM5O3MgZGVzaWduZWQuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgZG8gdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmU/IEFyZSB0aGVyZSBhbnkgY2xldmVyIHRyaWNrcyB0byBtaW5pbWl6ZSBvdmVyaGVhZCBvciBtYXhpbWl6ZSBwYXJhbGxlbGlzbT8gQXJlIHRoZXkgdGFraW5nIGFkdmFudGFnZSBvZiBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZT8gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwmIzM5O3MgaW4gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjc6XHRzdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbiAxNjg6XHR7XG4gMTY5Olx0XHRpbnQgcmV0O1xuIDE3MDpcdFxuIDE3MTpcdFx0cmV0ID0gdmZpb19hcF9kYmZfaW5mb19pbml0KCk7XG4gMTcyOlx0XHRpZiAocmV0KVxuIDE3MzpcdFx0XHRyZXR1cm4gcmV0O1xuIDE3NDpcdFxuIDE3NTpcdFx0LyogSWYgdGhlcmUgYXJlIG5vIEFQIGluc3RydWN0aW9ucywgdGhlcmUgaXMgbm90aGluZyB0byBwYXNzIHRocm91Z2guICovXG4gMTc2Olx0XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSlcbiAxNzc6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMTc4Olx0XG4gMTc5Olx0XHRyZXQgPSB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKCk7XG4gMTgwOlx0XHRpZiAocmV0KVxuIDE4MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDE4MjpcdFxuIDE4MzpcdFx0cmV0ID0gYXBfZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNnZmaW9fYXBfZHJ2LCBUSElTX01PRFVMRSwgVkZJT19BUF9EUlZfTkFNRSk7XG4gMTg0Olx0XHRpZiAocmV0KSB7XG4gMTg1Olx0XHRcdHZmaW9fYXBfbWF0cml4X2Rldl9kZXN0cm95KCk7XG4gMTg2Olx0XHRcdHJldHVybiByZXQ7XG4gMTg3Olx0XHR9XG4gMTg4Olx0XG4gMTg5Olx0XHRyZXQgPSB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIoKTtcbiAxOTA6XHRcdGlmIChyZXQpIHtcbiAxOTE6XHRcdFx0YXBfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2dmZpb19hcF9kcnYpO1xuIDE5MjpcdFx0XHR2ZmlvX2FwX21hdHJpeF9kZXZfZGVzdHJveSgpO1xuIDE5MzpcdFxuIDE5NDpcdFx0XHRyZXR1cm4gcmV0O1xuIDE5NTpcdFx0fVxuIDE5NjpcdFxuIDE5NzpcdFx0cmV0dXJuIDA7XG4gMTk4Olx0fVxuIDE5OTpcdFxuIDIwMDpcdHN0YXRpYyB2b2lkIF9fZXhpdCB2ZmlvX2FwX2V4aXQodm9pZClcbiAyMDE6XHR7XG4gMjAyOlx0XHR2ZmlvX2FwX21kZXZfdW5yZWdpc3RlcigpO1xuIDIwMzpcdFx0YXBfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2dmZpb19hcF9kcnYpO1xuIDIwNDpcdFx0dmZpb19hcF9tYXRyaXhfZGV2X2Rlc3Ryb3koKTtcbiAyMDU6XHRcdGRlYnVnX3VucmVnaXN0ZXIodmZpb19hcF9kYmZfaW5mbyk7XG4gMjA2Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIzMAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDgyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nIC0gQSBEZWVwIERpdmUgaW50byBzMzkweCBBUCBJbnN0cnVjdGlvbnMgYW5kIFZGSU8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZHJpdmVyIGFuZCBpbW1lZGlhdGVseSBzZWUgYGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSByZXR1cm4gLUVOT0RFVjtgLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIElmIHRoZSBob3N0IGRvZXNuJiMzOTt0IGhhdmUgQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBpbnN0cnVjdGlvbnMsIHRoZSBkcml2ZXIgd29uJiMzOTt0IGV2ZW4gc3RhcnQuIFRoZSBiaWcgcXVlc3Rpb24gaXMsIGRvZXMgUUVNVSBlbXVsYXRlIHRoaXMgZm9yIHRoZSBndWVzdCwgZXNwZWNpYWxseSBzaW5jZSBzeXprYWxsZXIgaXMgcnVubmluZyB3aXRoaW4gYSBRRU1VIGd1ZXN0IGZvciBzMzkweD8KClFFTVUgKmNhbiogZW11bGF0ZSBvciBwYXNzIHRocm91Z2ggQVAgaW5zdHJ1Y3Rpb25zLCBidXQgaXQmIzM5O3Mgbm90IHRoZSBkZWZhdWx0LiBJZiBzeXprYWxsZXIgaXMgcnVubmluZyBpbiBhIFFFTVUgZ3Vlc3QsIEkgbmVlZCB0byBrbm93IGlmIEFQIGluc3RydWN0aW9ucyBhcmUgZW5hYmxlZCBpbiAqdGhhdCogc3BlY2lmaWMgUUVNVSBpbnN0YW5jZS4gU3l6a2FsbGVyIG1pZ2h0IGhhdmUgczM5MHgtc3BlY2lmaWMgc2V0dXBzLCBidXQgdGhpcyBpcyBhIFZGSU8gZHJpdmVyLCBzbyB3ZSBuZWVkIHRvIGtub3cgd2hhdCBzZXR1cCBpcyB0aGVyZS4gVkZJTyBpcyBmb3IgZGV2aWNlIHBhc3N0aHJvdWdoLiBTbyBkb2VzIHN5emthbGxlciBydW4gYXMgdGhlIGhvc3QgZm9yIGEgbmVzdGVkIGd1ZXN0LCBvciBkb2VzIGl0IGRpcmVjdGx5IG9wZW4gYC9kZXYvdmZpby8uLi5gPyBDYW4gc3l6a2FsbGVyIGV2ZW4gdHJpZ2dlciBgdmZpb19hcF9tZGV2X29wZW5fZGV2aWNlYD8KClllcywgaXQgY2FuLCBJRiB0aGUgYHZmaW9fYXBgIGRyaXZlciBpcyBsb2FkZWQgYW5kIGFuIG1kZXYgKG1lZGlhdGVkIGRldmljZSkgaXMgY3JlYXRlZC4gQnV0IGNyZWF0aW5nIGFuIG1kZXYgbmVlZHMgc3lzZnMgd3JpdGVzLCBhbmQgd2hpbGUgc3l6a2FsbGVyIGRvZXMgaGF2ZSBzeXNmcyBmdXp6aW5nLCBpdCYjMzk7cyBwcmV0dHkgbGltaXRlZC4gVGhlIG1vcmUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciBzeXprYWxsZXImIzM5O3MgczM5MHggZW52aXJvbm1lbnQgZXZlbiAqaGFzKiBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgdHJ1ZSBpbiBhIHR5cGljYWwgczM5MHggUUVNVSBzZXR1cC4KCkluIFFFTVUsIEFQIGluc3RydWN0aW9ucyBhcmUgb25seSB0aGVyZSBpZiB0aGUgYHZmaW8tYXBgIGRldmljZSBpcyBwYXNzZWQgdGhyb3VnaCwgb3IgaWYgUUVNVSBlbXVsYXRlcyBpdC4gQW5kIEkgdGhpbmsgUUVNVSBkb2VzbiYjMzk7dCBmdWxseSBlbXVsYXRlIEFQIGluc3RydWN0aW9ucyBmb3IgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHdpdGhvdXQgdGhlIGhhcmR3YXJlLiBSaWdodCwgYW5kIEkgc2hvdWxkIGNoZWNrIGlmIHRoaXMgaXMgZXZlbiB3b3J0aCBmdXp6aW5nIQoKTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBwcm9tcHQgc2F5cy4uLiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYuLi4mIzM0OyBPa2F5LCB0aGUgcHJvbXB0IGlzIGNsZWFyLiBJcyBgdmZpb19hcGAgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyPyBZZXMsIEFQIGlzIElCTSYjMzk7cyBtYWluZnJhbWUgY3J5cHRvZ3JhcGhpYyBjb3Byb2Nlc3NvciDigJMgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gSUJNIFogKHMzOTB4KSBoYXJkd2FyZS4gRG9lcyBRRU1VIGVtdWxhdGUgaXQ/IEkgc2hvdWxkIGNoZWNrIGZvciBhIHNvZnR3YXJlIGVtdWxhdG9yIGZvciBBUCBpbiB0aGUga2VybmVsIG9yIFFFTVUuCgpJbiB0aGUga2VybmVsLCBgZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuY2AgaGFuZGxlcyB0aGUgQVAgYnVzLCBidXQgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgbGlrZSBgbWFjODAyMTFfaHdzaW1gIG9yIGB2a21zYC4gU28sIGlmIHlvdSBydW4gUUVNVSB3aXRob3V0IGFjdHVhbCBBUCBoYXJkd2FyZSBvbiB0aGUgaG9zdCwgeW91IGNhbiYjMzk7dCBwYXNzIHRocm91Z2ggQVAgZGV2aWNlcy4gV2FpdCwgaXMgaXQgZXZlbiBwb3NzaWJsZSB0byBjcmVhdGUgYW4gQVAgbWRldiB3aXRob3V0IHBoeXNpY2FsIEFQIGhhcmR3YXJlPyBMZXQmIzM5O3MgY2hlY2sgYHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XHRpZiAoIW1hdHJpeF9kZXYpIHtcbiAxMDE6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiAxMDI6XHRcdFx0Z290byBtYXRyaXhfYWxsb2NfZXJyO1xuIDEwMzpcdFx0fVxuIDEwNDpcdFxuIDEwNTpcdFx0LyogRmlsbCBpbiBjb25maWcgaW5mbyB2aWEgUFFBUChRQ0kpLCBpZiBhdmFpbGFibGUgKi9cbiAxMDY6XHRcdGlmICh0ZXN0X2ZhY2lsaXR5KDEyKSkge1xuIDEwNzpcdFx0XHRyZXQgPSBhcF9xY2koXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VpbmZvKTtcbiAxMDg6XHRcdFx0aWYgKHJldClcbiAxMDk6XHRcdFx0XHRnb3RvIG1hdHJpeF9hbGxvY19lcnI7XG4gMTEwOlx0XHR9XG4gMTExOlx0XG4gMTEyOlx0XHRtdXRleF9pbml0KFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4gMTEzOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCk7XG4gMTE0Olx0XHRtdXRleF9pbml0KFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuIDExNTpcdFxuIDExNjpcdFx0ZGV2X3NldF9uYW1lKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDslc1wmIzM0OywgVkZJT19BUF9ERVZfTkFNRSk7XG4gMTE3Olx0XHRtYXRyaXhfZGV2LVx1MDAzZWRldmljZS5wYXJlbnQgPSByb290X2RldmljZTtcbiAxMTg6XHRcdG1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlLmJ1cyA9IFx1MDAyNm1hdHJpeF9idXM7XG4gMTE5Olx0XHRtYXRyaXhfZGV2LVx1MDAzZWRldmljZS5yZWxlYXNlID0gdmZpb19hcF9tYXRyaXhfZGV2X3JlbGVhc2U7XG4gMTIwOlx0XHRtYXRyaXhfZGV2LVx1MDAzZXZmaW9fYXBfZHJ2ID0gXHUwMDI2dmZpb19hcF9kcnY7XG4gMTIxOlx0XG4gMTIyOlx0XHRyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VkZXZpY2UpO1xuIDEyMzpcdFx0aWYgKHJldClcbiAxMjQ6XHRcdFx0Z290byBtYXRyaXhfcmVnX2VycjtcbiAxMjU6XHRcbiAxMjY6XHRcdHJldCA9IGRyaXZlcl9yZWdpc3RlcihcdTAwMjZtYXRyaXhfZHJpdmVyKTtcbiAxMjc6XHRcdGlmIChyZXQpXG4gMTI4Olx0XHRcdGdvdG8gbWF0cml4X2Rydl9lcnI7XG4gMTI5Olx0XG4gMTMwOlx0XHRyZXR1cm4gMDtcbiAxMzE6XHRcbiAxMzI6XHRtYXRyaXhfZHJ2X2VycjpcbiAxMzM6XHRcdGRldmljZV9kZWwoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VkZXZpY2UpO1xuIDEzNDpcdG1hdHJpeF9yZWdfZXJyOlxuIDEzNTpcdFx0cHV0X2RldmljZShcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSk7XG4gMTM2Olx0bWF0cml4X2FsbG9jX2VycjpcbiAxMzc6XHRcdGJ1c191bnJlZ2lzdGVyKFx1MDAyNm1hdHJpeF9idXMpO1xuIDEzODpcdGJ1c19yZWdpc3Rlcl9lcnI6XG4gMTM5Olx0XHRyb290X2RldmljZV91bnJlZ2lzdGVyKHJvb3RfZGV2aWNlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgSW5zdHJ1Y3Rpb24gQXZhaWxhYmlsaXR5KioKCk9rYXksIHRoZSBjb2RlJiMzOTtzIGNoZWNraW5nIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBvbiBteSBtaW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqLiBXaGF0IGNyaXRlcmlhIGlzIGl0IGNoZWNraW5nPyBJcyBpdCBsb29raW5nIGF0IGhhcmR3YXJlIGNhcGFiaWxpdGllcywgcHJvZ3JhbSBzdGF0ZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBuYW1lIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGF2YWlsYWJsZSBpbnN0cnVjdGlvbiBzZXQsIGJ1dCB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaXMga2V5LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIEtub3dpbmcgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgZGljdGF0ZXMgdGhlIG5leHQgcGF0aCB0aGUgcHJvZ3JhbSB0YWtlcywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgY29tcGxldGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg9NzI9dW5pb24gYXBfcXVldWVfc3RhdHVzX3JlZyB7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODAtLyoqXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaDo4MTogKiBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkgLSBUZXN0IGlmIEFQIGluc3RydWN0aW9ucyBhcmUgYXZhaWxhYmxlLlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODItICpcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04NC0gKi9cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oOjg1OnN0YXRpYyBpbmxpbmUgYm9vbCBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKHZvaWQpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTExMDU9c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfY3J5cHRvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1MS1cdGNhc2UgS1ZNX1MzOTBfVk1fQ1JZUFRPX0VOQUJMRV9BUElFOlxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNTI6XHRcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1My1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTU4LVx0Y2FzZSBLVk1fUzM5MF9WTV9DUllQVE9fRElTQUJMRV9BUElFOlxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNTk6XHRcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE2MC1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMTAwPXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1faGFzX2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMTU2LVx0XHRjYXNlIEtWTV9TMzkwX1ZNX0NSWVBUT19ESVNBQkxFX0FQSUU6XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjE1NzpcdFx0XHRyZXQgPSBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkgPyAwIDogLUVOWElPO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIxNTgtXHRcdFx0YnJlYWs7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMxMDE9c3RhdGljIGludCBrdm1fczM5MF9hcHhhX2luc3RhbGxlZCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTA0LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxMDU6XHRpZiAoYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEwNi1cdFx0aWYgKGFwX3FjaShcdTAwMjZpbmZvKSA9PSAwKVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTU5Mj1zdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy02MDAtXHQvKiBWZXJpZnkgdGhhdCB0aGUgQVAgaW5zdHJ1Y3Rpb24gYXJlIGF2YWlsYWJsZSAqL1xuYXJjaC9zMzkwL2t2bS9wcml2LmM6NjAxOlx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy02MDItXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDU6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0ODAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEFQIEluc3RydWN0aW9uIEF2YWlsYWJpbGl0eSoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBvciBkZWNsYXJhdGlvbiBvZiBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZWAgd291bGQgcmVzaWRlLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGZvciBpbmZvcm1hdGlvbiBvbiB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZXNlIHNwZWNpZmljIGluc3RydWN0aW9ucyBpbiB0aGUgUy8zOTAgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGhlYWRlciBmaWxlIHRvIHByb3ZpZGUgdGhlIG1lY2hhbmlzbSwgd2hldGhlciBpdCYjMzk7cyBhIG1hY3JvLCBhIHN0cnVjdHVyZSwgb3IgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiwgdGhhdCBhbGxvd3MgdGhlIGNvZGUgdG8gZGV0ZXJtaW5lIHdoaWNoIEFQIGluc3RydWN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGhhcmR3YXJlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgY2hlY2sgaXMgcGVyZm9ybWVkIOKAkyBpcyBpdCBiYXNlZCBvbiBDUFUgbW9kZWwsIGZlYXR1cmUgYml0cywgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIGlzIHRoZSBmaXJzdCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdC8qKlxuICA4MTpcdCAqIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSAtIFRlc3QgaWYgQVAgaW5zdHJ1Y3Rpb25zIGFyZSBhdmFpbGFibGUuXG4gIDgyOlx0ICpcbiAgODM6XHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIEFQIGluc3RydWN0aW9ucyBhcmUgaW5zdGFsbGVkLCBvdGhlcndpc2UgZmFsc2UuXG4gIDg0Olx0ICovXG4gIDg1Olx0c3RhdGljIGlubGluZSBib29sIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUodm9pZClcbiAgODY6XHR7XG4gIDg3Olx0XHR1bnNpZ25lZCBsb25nIHJlZzAgPSBBUF9NS1FJRCgwLCAwKTtcbiAgODg6XHRcdHVuc2lnbmVkIGxvbmcgcmVnMSA9IDA7XG4gIDg5Olx0XG4gIDkwOlx0XHRhc20gdm9sYXRpbGUoXG4gIDkxOlx0XHRcdFwmIzM0O1x0bGdyXHQwLCVbcmVnMF1cXG5cJiMzNDtcdFx0LyogcWlkIGludG8gZ3IwICovXG4gIDkyOlx0XHRcdFwmIzM0O1x0bGdoaVx0MSwwXFxuXCYjMzQ7XHRcdFx0LyogMCBpbnRvIGdyMSAqL1xuICA5MzpcdFx0XHRcJiMzNDtcdGxnaGlcdDIsMFxcblwmIzM0O1x0XHRcdC8qIDAgaW50byBncjIgKi9cbiAgOTQ6XHRcdFx0XCYjMzQ7XHQuaW5zblx0cnJlLDB4YjJhZjAwMDAsMCwwXFxuXCYjMzQ7XHQvKiBQUUFQKFRBUFEpICovXG4gIDk1Olx0XHRcdFwmIzM0OzA6XHRsYVx0JVtyZWcxXSwxXFxuXCYjMzQ7XHRcdC8qIDEgaW50byByZWcxICovXG4gIDk2Olx0XHRcdFwmIzM0OzE6XFxuXCYjMzQ7XG4gIDk3Olx0XHRcdEVYX1RBQkxFKDBiLCAxYilcbiAgOTg6XHRcdFx0OiBbcmVnMV0gXCYjMzQ7JiM0MztcdTAwMjZkXCYjMzQ7IChyZWcxKVxuICA5OTpcdFx0XHQ6IFtyZWcwXSBcJiMzNDtkXCYjMzQ7IChyZWcwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA5MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IFZGSU8tQVAgYW5kIFFFTVUmIzM5O3MgQmVoYXZpb3IqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gYW5kIGl0IGJvaWxzIGRvd24gdG8gZXNzZW50aWFsbHkgY2hlY2tpbmcgaWYgYFBRQVAoVEFQUSlgIHRyYXBzIHdoZW4gZXhlY3V0ZWQuIFRoYXQmIzM5O3MgdGhlIGNydXggb2YgdGhlIG1hdHRlci4gVGhlIHdob2xlIHBvaW50IGhpbmdlcyBvbiBob3cgUUVNVSBoYW5kbGVzIEFQIGluc3RydWN0aW9ucyB3aXRoaW4gYSBndWVzdCBlbnZpcm9ubWVudC4gSWYgUUVNVSAqZG9lc24mIzM5O3QqIGVtdWxhdGUgQVAgaW5zdHJ1Y3Rpb25zLCB0aGVuIGEgdHJhcCBpcyBndWFyYW50ZWVkIGFuZCB3ZSByZXR1cm4gYGZhbHNlYC4KClRoZSBiaWcgcXVlc3Rpb24gaXMsIHdoYXQmIzM5O3MgUUVNVSYjMzk7cyBkZWZhdWx0IGJlaGF2aW9yPyBEb2VzIGl0IGVtdWxhdGUgQVAgaW5zdHJ1Y3Rpb25zIHJpZ2h0IG91dCBvZiB0aGUgYm94LCBvciBpcyB0aGVyZSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcmVxdWlyZWQ/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgUUVNVSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIHNwZWNpZmljIHRvIHMzOTB4IEFQIGluc3RydWN0aW9uIGhhbmRsaW5nLiBMZXQmIzM5O3Mgc2VlLi4uIEFoLCB0aGVyZSYjMzk7cyBhIGBhcD1vbmAgQ1BVIGZlYXR1cmUgbWVudGlvbmVkLiBJbnRlcmVzdGluZy4gU28gYnkgZGVmYXVsdCwgaXQgbWlnaHQgYmUgb2ZmIHVubGVzcyB0aGUgaG9zdCBtYWNoaW5lIGhhcyBBUCBzdXBwb3J0LCBvciBwZXJoYXBzIGl04oCZcyBlbXVsYXRlZCBhbnl3YXk/IFRoaXMgbmVlZHMgY2xhcmlmaWNhdGlvbi4KCldhaXQgYSBzZWNvbmTigKYgKnN5emthbGxlciogZnV6emVyIHRhcmdldHMgczM5MHgsIGRvZXNuJiMzOTt0IGl0PyBUaGF0IGNoYW5nZXMgdGhpbmdzLiBJZiBzeXprYWxsZXIgaXMgc3VjY2Vzc2Z1bGx5IGZ1enppbmcgczM5MHgsIGRvZXMgaXQgZXZlbiAqcmVhY2gqIHRoZSBgdmZpb19hcGAgY29kZSBwYXRoPyBJZiBpdCAqZG9lcyogdGhlbiBRRU1VIG11c3QgYmUgZW11bGF0aW5nIGl0LCByaWdodD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIHRvIHNlZSBpZiB0aGV5IGluY2x1ZGUgZW50cmllcyByZWxhdGVkIHRvIGB2ZmlvX2FwYC4gVGhhdCB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBhbGwgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3N5cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjYxNwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYHZmaW9fYXBgIFJlYWNoYWJpbGl0eSBpbiBRRU1VKioKCk9rYXksIEkgbmVlZCB0byBiZSBjYXJlZnVsIGhlcmUuIFRoZSBwcm9tcHQgZXhwbGljaXRseSBzYXlzIEkgY2FuJiMzOTt0IHVzZSBgZ3JlcHBlcmAgZm9yIGBzeXMvYCBvciBhbnl0aGluZyB3aXRoIGBzeXpfYCwgc28gSSBuZWVkIHRvIHN0aWNrIHdpdGggdGhhdC4gSSB3YXMgaW5pdGlhbGx5IHRoaW5raW5nIGFib3V0IHVzaW5nIGBncmVwcGVyYCwgYnV0IHRoZSBwcm9tcHQgaXMgY2xlYXI6IEkgbmVlZCB0byB1c2UgYHJlYWQtc3l6LXNwZWNgIG9yIGBzeXotZ3JlcHBlcmAgaW5zdGVhZCBmb3Igc3l6a2FsbGVyLXNwZWNpZmljIHN0dWZmLiBXYWl0Li4uIEkgY2FuJiMzOTt0IGZpbmQgYHJlYWQtc3l6LXNwZWNgIG9yIGBzeXotZ3JlcHBlcmAgaW4gdGhlIHRvb2xzIGF2YWlsYWJsZS4gVGhleSBhcmVuJiMzOTt0IGluIHRoZSBwcm92aWRlZCBsaXN0LiBPa2F5LCBJIG1pc3JlYWQgdGhlIHByb21wdCwgd2hpY2ggc2F5cywgJiMzNDtVc2UgdGhlIHJlYWQtc3l6LXNwZWMgYW5kIHN5ei1ncmVwcGVyIHRvb2xzIGluc3RlYWQmIzM0OyBidXQgZG9lc24mIzM5O3QgcHJvdmlkZSB0aGVtLiBJIGd1ZXNzIHRoYXQmIzM5O3MgZmluZTsgSSYjMzk7bGwgc2ltcGx5IGF2b2lkIHNlYXJjaGluZyBzeXpsYW5nLgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgYHZmaW9fYXBgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCB1c3VhbGx5IHJlcXVpcmVzIGFjdHVhbCBBUCBoYXJkd2FyZSBwYXNzLXRocm91Z2guIFRoZSBxdWVzdGlvbiBpcywgY2FuIEkgbG9hZCB0aGUgYHZmaW9fYXBgIG1vZHVsZSBhbmQgY3JlYXRlIGFuIG1kZXYgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50IHdpdGhvdXQgdGhhdCBBUCBoYXJkd2FyZT8gSSByZWNhbGwgdGhhdCBgdmZpb19hcF9pbml0YCByZXR1cm5zIGAtRU5PREVWYCBpZiBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCByZXR1cm5zIGZhbHNlLiBJZiB0aGF0IGAtRU5PREVWYCBoYXBwZW5zLCB0aGVuIHRoZSBkcml2ZXIgKndvbiYjMzk7dCogbG9hZCwgd2hpY2ggbWVhbnMgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLgoKU28gdGhlIGNvcmUgcXVlc3Rpb24gaXM6IGRvZXMgUUVNVSBlbXVsYXRlIEFQIGluc3RydWN0aW9ucz8gUUVNVSBpdHNlbGYgaGFuZGxlcyB0aGVtIGJ5IEtWTSwgYW5kIGlmIEtWTSBkb2VzbiYjMzk7dCBzdXBwb3J0IEFQIGJlY2F1c2UgdGhlIGhvc3QgZG9lc24mIzM5O3QgaGF2ZSBpdCwgS1ZNIHdpbGwgbm90IHRlbGwgdGhlIGd1ZXN0IGl0IGlzIHRoZXJlLiBJbiB0aGF0IGNhc2UsIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIHdvdWxkIHJldHVybiBmYWxzZS4gVGhlcmVmb3JlLCB0aGUgYHZmaW9fYXBgIGRyaXZlciAqY2Fubm90KiBiZSBsb2FkZWQgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBndWVzdCBpZiB0aGUgaG9zdCBkb2VzbiYjMzk7dCBoYXZlIEFQIGhhcmR3YXJlLiBUaGF0IGxvb2tzIGxpa2UgdGhlIGFuc3dlci4gTm93LCBpcyB0aGVyZSBhbnkga2luZCBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCB0byBhbGxvdyBmb3IgdGhpcz8gTGV0IG1lIGNoZWNrIGZvciB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oPTcyPXVuaW9uIGFwX3F1ZXVlX3N0YXR1c19yZWcge1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTgwLS8qKlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg6ODE6ICogYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIC0gVGVzdCBpZiBBUCBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZS5cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTgyLSAqXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODQtICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaDo4NTpzdGF0aWMgaW5saW5lIGJvb2wgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSh2b2lkKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODYte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMTA1PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2NyeXB0byhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTEtXHRjYXNlIEtWTV9TMzkwX1ZNX0NSWVBUT19FTkFCTEVfQVBJRTpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTUyOlx0XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTMtXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1OC1cdGNhc2UgS1ZNX1MzOTBfVk1fQ1JZUFRPX0RJU0FCTEVfQVBJRTpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTU5Olx0XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNjAtXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjEwMD1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX2hhc19hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjE1Ni1cdFx0Y2FzZSBLVk1fUzM5MF9WTV9DUllQVE9fRElTQUJMRV9BUElFOlxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIxNTc6XHRcdFx0cmV0ID0gYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpID8gMCA6IC1FTlhJTztcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMTU4LVx0XHRcdGJyZWFrO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMTAxPXN0YXRpYyBpbnQga3ZtX3MzOTBfYXB4YV9pbnN0YWxsZWQodm9pZClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEwNC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTA1Olx0aWYgKGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMDYtXHRcdGlmIChhcF9xY2koXHUwMDI2aW5mbykgPT0gMClcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz01OTI9c3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjAwLVx0LyogVmVyaWZ5IHRoYXQgdGhlIEFQIGluc3RydWN0aW9uIGFyZSBhdmFpbGFibGUgKi9cbmFyY2gvczM5MC9rdm0vcHJpdi5jOjYwMTpcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjAyLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yNTc4PXN0YXRpYyBpbnQgX19pbml0IGFwX21vZHVsZV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNTgxLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTgyOlx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjU4My1cdFx0cHJfd2FybihcJiMzNDtUaGUgaGFyZHdhcmUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgQVAgaW5zdHJ1Y3Rpb25zXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9MTY3PXN0YXRpYyBpbnQgX19pbml0IHZmaW9fYXBfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNzUtXHQvKiBJZiB0aGVyZSBhcmUgbm8gQVAgaW5zdHJ1Y3Rpb25zLCB0aGVyZSBpcyBub3RoaW5nIHRvIHBhc3MgdGhyb3VnaC4gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxNzY6XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSlcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNzctXHRcdHJldHVybiAtRU5PREVWO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg1MQoJCQkJCQkJb3V0cHV0OiAxNDUKCQkJCQkJCXRob3VnaHRzOiA4MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFZGSU8tQVAgRHJpdmVyIGFuZCBJdHMgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgZGVhbC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBzcGlkZXkgc2Vuc2VzIGFyZSB0aW5nbGluZy4gVGhlIGBhcF9idXNgIGl0c2VsZiB3b24mIzM5O3QgZXZlbiBpbml0aWFsaXplIHVubGVzcyBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCByZXR1cm5zIHRydWUuIEFuZCBmcm9tIHdoYXQgSSBzZWUgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmNgLCBpZiBpdCYjMzk7cyBmYWxzZSwgdGhlIHN5c3RlbSB0aHJvd3MgYSB3YXJuaW5nIGFuZCByZXR1cm5zIGAtRU5PREVWYC4gVGhhdCBtZWFucyB0aGUgZW50aXJlIEFQIHN1YnN5c3RlbSAqcmVxdWlyZXMqIHNvbWUgZm9ybSBvZiBoYXJkd2FyZSBzdXBwb3J0LgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgU3l6a2FsbGVyLCB3aGljaCBJIGtub3cgaXMgdGhlIGZ1enppbmcgdG9vbCBiZWluZyB1c2VkLCBydW4gb24gcmVhbCBzMzkweCBoYXJkd2FyZSBvciBpbiBRRU1VPyBBaCwgcmlnaHQsIFN5emthbGxlciB1c2VzIFFFTVUgZm9yIHMzOTB4LiBTbyB0aGUga2V5IHF1ZXN0aW9uIGlzLCBkb2VzIFFFTVUgZW11bGF0ZSBBUCBpbnN0cnVjdGlvbnM/IExldCYjMzk7cyBzZWUuLi4gUUVNVSBhbmQgQVAgaW5zdHJ1Y3Rpb25zLiBJIGRvbiYjMzk7dCByZWNhbGwgc2VlaW5nIGFueXRoaW5nIHNwZWNpZmljLiBJIHJlbWVtYmVyIHJlYWRpbmcgaW4gdGhlIHByb21wdCB0aGF0IGNlcnRhaW4gY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gUUVNVS4KClRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHRoYXQgY29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIHNob3VsZG4mIzM5O3QgYmUgY29uc2lkZXJlZCBmb3IgZnV6emluZy4gQWxzbywgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCBsaWtlIGNlcnRhaW4gUENJZSBjYXJkcywgYXJlIGFsc28gb3V0LgoKQWgsIFZGSU8gQVAuIEl0JiMzOTtzIGRlc2lnbmVkIGZvciBwYXNzaW5nIHRocm91Z2ggYWN0dWFsIHBoeXNpY2FsIEFQIGhhcmR3YXJlLCB0aG9zZSBJQk0gWiBjcnlwdG9ncmFwaGljIGNvcHJvY2Vzc29ycywgdG8gYSBndWVzdCBWTS4gVGhhdCBtZWFucyBpdCBuZWVkcyB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgKm9uIHRoZSBob3N0Ki4gU3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBBUCBoYXJkd2FyZSwgaXQganVzdCBzdXBwb3J0cyBwYXNzaW5nIGl0IHRocm91Z2ggdmlhIEtWTSBpZiB0aGUgaG9zdCBoYXMgaXQuIFNvIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgd2l0aG91dCB0aGF0IGRlZGljYXRlZCBoYXJkd2FyZSwgdGhpcyBjb2RlIHBhdGggaXMgc2ltcGx5IGluYWNjZXNzaWJsZS4KCkxldCBtZSBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnM7IElmIFFFTVUgY291bGQgZW11bGF0ZSBBUCBpbnN0cnVjdGlvbnMsIGl0IHdvdWxkIGJlIGluIFFFTVUmIzM5O3Mgc291cmNlIGNvZGUuIEkgZG9uJiMzOTt0IGhhdmUgdGhhdCBzb3VyY2UgY29kZSBpbiBmcm9udCBvZiBtZSwgYnV0IEkgKmtub3cqIHRob3NlIEFQIGluc3RydWN0aW9ucyBhcmUgdmVyeSBzcGVjaWZpYyB0byBJQk0mIzM5O3MgY3J5cHRvIGNhcmRzLiBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIGNyeXB0byBjYXJkcyB0aGVtc2VsdmVzOyBpdCBqdXN0IGhhbmRsZXMgdGhlIFZGSU8tQVAgZGV2aWNlIHBhc3MtdGhyb3VnaC4gVGhlcmVmb3JlLCBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCB3aWxsIHJldHVybiBmYWxzZSwgdGhlIGB2ZmlvX2FwX2luaXRgIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGAtRU5PREVWYCwgYW5kIHRoZSBkcml2ZXIgd29uJiMzOTt0IGV2ZW4gbG9hZC4gVGhlIGNvZGUgaW4gYHZmaW9fYXBfb3BzLmNgIGlzIHNpbXBseSB1bnJlYWNoYWJsZS4KCkkgYmV0dGVyIHZlcmlmeSB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgQVAgaW4gdGhlIGtlcm5lbCB0aGF0IEkmIzM5O20gbWlzc2luZy4gTGV0JiMzOTtzIHNlZS4uLiBJIHNlYXJjaCBmb3IgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGVgIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIG9ubHkgaW4gYGFwX2J1cy5jYCwgYHZmaW9fYXBfZHJ2LmNgLCBhbmQgYGt2bS1zMzkwLmNgLiBOb3RoaW5nIGxpa2UgYGFwX2h3c2ltYCBvciBhbnl0aGluZyBzdWdnZXN0aW5nIGEgc29mdHdhcmUgZmFsbGJhY2suIE5vcGUsIHNhZmUgdG8gc2F5IHRoaXMgbmVlZHMgdGhhdCBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZS4KCk9rYXksIGxldCBtZSByZXZpZXcgdGhlIHBhdGNoIGl0c2VsZiBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gSXQmIzM5O3Mgb25seSBtb2RpZnlpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AsIHNwZWNpZmljYWxseSBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGFuZCBgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bWAuIEJvdGggYXJlIHBhcnQgb2YgdGhlIFZGSU8gQVAgZHJpdmVyLCB3aGljaCBoaW5nZXMgb24gdGhhdCBBUCBoYXJkd2FyZS4gU28gaXQmIzM5O3MgYSBjbGVhciBjYXNlIG9mICYjMzQ7Y29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VJiMzNDsgYW5kICYjMzQ7dmVuZG9yLXNwZWNpZmljIC4uLiBkcml2ZXJzIC4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgLi4uIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IEV2ZW4gdGhvdWdoIGl0JiMzOTtzIEFQIGJ1cyBpbnN0ZWFkIG9mIFBDSWUsIHRoZSBwcmluY2lwbGUgaXMgdGhlIHNhbWUuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gcHJvdmlkZSB0aGlzIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MHgsIHdoaWNoIGlzIHVzZWQgdG8gcGFzcyB0aHJvdWdoIHBoeXNpY2FsIElCTSBaIGNyeXB0b2dyYXBoaWMgY29wcm9jZXNzb3JzIHRvIHZpcnR1YWwgbWFjaGluZXMuIFRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gKGB2ZmlvX2FwX2luaXRgKSBleHBsaWNpdGx5IGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIEFQIGluc3RydWN0aW9ucyB2aWEgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAsIHdoaWNoIHJldHVybnMgZmFsc2UgdW5sZXNzIHBoeXNpY2FsIEFQIGhhcmR3YXJlIGlzIHByZXNlbnQgYW5kIHBhc3NlZCB0aHJvdWdoIGJ5IHRoZSBob3N0LiBTdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyBkbyBub3QgZW11bGF0ZSBBUCBoYXJkd2FyZSBpbiBzb2Z0d2FyZS4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgd2l0aG91dCBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkweCwgd2hpY2ggaXMgdXNlZCB0byBwYXNzIHRocm91Z2ggcGh5c2ljYWwgSUJNIFogY3J5cHRvZ3JhcGhpYyBjb3Byb2Nlc3NvcnMgdG8gdmlydHVhbCBtYWNoaW5lcy4gVGhlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiAoYHZmaW9fYXBfaW5pdGApIGV4cGxpY2l0bHkgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgQVAgaW5zdHJ1Y3Rpb25zIHZpYSBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCwgd2hpY2ggcmV0dXJucyBmYWxzZSB1bmxlc3MgcGh5c2ljYWwgQVAgaGFyZHdhcmUgaXMgcHJlc2VudCBhbmQgcGFzc2VkIHRocm91Z2ggYnkgdGhlIGhvc3QuIFN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIGRvIG5vdCBlbXVsYXRlIEFQIGhhcmR3YXJlIGluIHNvZnR3YXJlLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB3aXRob3V0IHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ1OjE1Ljk2NDQwNDUyNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNzQxNjc2NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MHgsIHdoaWNoIGlzIHVzZWQgdG8gcGFzcyB0aHJvdWdoIHBoeXNpY2FsIElCTSBaIGNyeXB0b2dyYXBoaWMgY29wcm9jZXNzb3JzIHRvIHZpcnR1YWwgbWFjaGluZXMuIFRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiAoYHZmaW9fYXBfaW5pdGApIGV4cGxpY2l0bHkgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgQVAgaW5zdHJ1Y3Rpb25zIHZpYSBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCwgd2hpY2ggcmV0dXJucyBmYWxzZSB1bmxlc3MgcGh5c2ljYWwgQVAgaGFyZHdhcmUgaXMgcHJlc2VudCBhbmQgcGFzc2VkIHRocm91Z2ggYnkgdGhlIGhvc3QuIFN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIGRvIG5vdCBlbXVsYXRlIEFQIGhhcmR3YXJlIGluIHNvZnR3YXJlLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB3aXRob3V0IHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDU6NDU6MTUuOTY0NDExODI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzIzMDc1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYTY2ZDNiOGVlNDM0NzNmNmQ3N2Q3MzVhMzI0YjM4YTJkOTEzZDE3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMDU6NDU6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuaW5kZXggNDRiM2ExZGNjMWIzNi4uZjk0NjAzMTBkNDdiMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcXG4rKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcXG5AQCAtMTgyMSwyNyArMTgyMSwyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7XFxuIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3NldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuLVxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbTtcXG4tXFxuIFxcdGlmIChrdm0tXFx1MDAzZWFyY2guY3J5cHRvLmNyeWNiZCkge1xcbiBcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XFxuK1xcdFxcdGlmIChrdm0tXFx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykge1xcbitcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXHRcXHR9XFxuIFxcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rID0gXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2VwcWFwX2hvb2s7XFxuLVxcdFxcdHVwX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XFxuIFxcbiBcXHRcXHRnZXRfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcXG4tXFxuLVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xcbi1cXHRcXHRcXHRpZiAobSAhPSBtYXRyaXhfbWRldiBcXHUwMDI2XFx1MDAyNiBtLVxcdTAwM2Vrdm0gPT0ga3ZtKSB7XFxuLVxcdFxcdFxcdFxcdHJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuLVxcbiBcXHRcXHRrdm1fZ2V0X2t2bShrdm0pO1xcbiBcXHRcXHRtYXRyaXhfbWRldi1cXHUwMDNla3ZtID0ga3ZtO1xcbiBcXHRcXHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xcbi1cXG4gXFx0XFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xcbitcXHRcXHR1cF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTg4NSw3ICsxODc4LDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbiBcXHRpZiAoa3ZtIFxcdTAwMjZcXHUwMDI2IGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkKSB7XFxuIFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTtcXG4gXFx0XFx0a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2sgPSBOVUxMO1xcbi1cXHRcXHR1cF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xcbiBcXG4gXFx0XFx0Z2V0X3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XFxuIFxcbkBAIC0xODk1LDYgKzE4ODcsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfdW5zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuIFxcdFxcdG1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0gPSBOVUxMO1xcbiBcXG4gXFx0XFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xcbitcXHRcXHR1cF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xcbiBcXHR9XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ1OjE2LjQ5OTc3MjM2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkwMjA2Mjk5NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MHgsIHdoaWNoIGlzIHVzZWQgdG8gcGFzcyB0aHJvdWdoIHBoeXNpY2FsIElCTSBaIGNyeXB0b2dyYXBoaWMgY29wcm9jZXNzb3JzIHRvIHZpcnR1YWwgbWFjaGluZXMuIFRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiAoYHZmaW9fYXBfaW5pdGApIGV4cGxpY2l0bHkgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgQVAgaW5zdHJ1Y3Rpb25zIHZpYSBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCwgd2hpY2ggcmV0dXJucyBmYWxzZSB1bmxlc3MgcGh5c2ljYWwgQVAgaGFyZHdhcmUgaXMgcHJlc2VudCBhbmQgcGFzc2VkIHRocm91Z2ggYnkgdGhlIGhvc3QuIFN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIGRvIG5vdCBlbXVsYXRlIEFQIGhhcmR3YXJlIGluIHNvZnR3YXJlLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB3aXRob3V0IHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2E2NmQzYjhlZTQzNDczZjZkNzdkNzM1YTMyNGIzOGEyZDkxM2QxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDU6NDU6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbmluZGV4IDQ0YjNhMWRjYzFiMzYuLmY5NDYwMzEwZDQ3YjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuQEAgLTE4MjEsMjcgKzE4MjEsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnZmaW9fYXBfbWRldl9hdHRyX2dyb3Vwc1tdID0ge1xuIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3NldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbiBcdFx0XHRcdHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm07XG4tXG4gXHRpZiAoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiZCkge1xuIFx0XHRkb3duX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykge1xuK1x0XHRcdHVwX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuK1x0XHRcdHJldHVybiAtRVBFUk07XG4rXHRcdH1cbiBcdFx0a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vayA9IFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZXBxYXBfaG9vaztcbi1cdFx0dXBfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XG4gXG4gXHRcdGdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVxuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4tXHRcdFx0aWYgKG0gIT0gbWF0cml4X21kZXYgXHUwMDI2XHUwMDI2IG0tXHUwMDNla3ZtID09IGt2bSkge1xuLVx0XHRcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cbiBcdFx0a3ZtX2dldF9rdm0oa3ZtKTtcbiBcdFx0bWF0cml4X21kZXYtXHUwMDNla3ZtID0ga3ZtO1xuIFx0XHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xuLVxuIFx0XHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XG4rXHRcdHVwX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTg4NSw3ICsxODc4LDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuIFx0aWYgKGt2bSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiZCkge1xuIFx0XHRkb3duX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuIFx0XHRrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rID0gTlVMTDtcbi1cdFx0dXBfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XG4gXG4gXHRcdGdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuIFxuQEAgLTE4OTUsNiArMTg4Nyw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91bnNldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdFx0bWF0cml4X21kZXYtXHUwMDNla3ZtID0gTlVMTDtcbiBcbiBcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuK1x0XHR1cF93cml0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTtcbiBcdH1cbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NToxNi40OTk3NzUxMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDExMTk2MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZGSU8gQVAgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYC4gSXQncyB0d2Vha2luZyBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGFuZCBgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bWAsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgczM5MC1zcGVjaWZpYywgZGVhbGluZyB3aXRoIHRoZSBWRklPIEFQIOKAkyB0aGF0IGFkanVuY3QgcHJvY2Vzc29yIG1hdHJpeCBoYXJkd2FyZS4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXM6IENhbiBJIGV2ZW4gKmJlZ2luKiB0byBmdXp6IHRoaXMgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwP1xuXG5RRU1VIGhhbmRsZXMgczM5MHggZW11bGF0aW9uLCBidXQgZG9lcyBpdCBmYWl0aGZ1bGx5IG1vZGVsIHRoZSBBUCBtYXRyaXg/IFRoYXQncyB0aGUgY29yZSBodXJkbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IGV4aXN0aW5nIHN5emthbGxlciBjb3ZlcmFnZSBmb3IgdGhpcyBhcmVhLCBvciBpZiB0aGVyZSdzIGEgZmVhc2libGUgYXR0YWNrIHBhdGguXG5cbldhaXQsIHN5emthbGxlciAqZG9lcyogZnV6eiBzMzkweCwgYnV0IHRoYXQgb2Z0ZW4gcmVsaWVzIG9uIHNwZWNpZmljIGhhcmR3YXJlIG9yIGNhcmVmdWxseSBjb25zdHJ1Y3RlZCBRRU1VIGNvbmZpZ3VyYXRpb25zLiBUaGUgUUVNVSBkb2N1bWVudGF0aW9uIGhpbnRzIGF0IHNvbWUgVkZJTy1BUCBzdXBwb3J0LCBidXQgdGhhdCBzb3VuZHMgbGlrZSBpdCB3b3VsZCBpbnZvbHZlIHBhc3NpbmcgdGhyb3VnaCBob3N0IGhhcmR3YXJlIHRvIHRoZSBndWVzdCB1c2luZyBWRklPLiBUaGlzIHN1Z2dlc3RzIHRoYXQgaXQgd291bGQgdHlwaWNhbGx5IHJlcXVpcmUgYWN0dWFsIGhhcmR3YXJlIG9yIHBvdGVudGlhbGx5IGEgbWVkaWF0ZWQgZGV2aWNlIChtZGV2KSBmcmFtZXdvcmsuXG5cbk5vdyBJJ20gZGlnZ2luZyBkZWVwZXIgaW50byBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYCBhbmQgbm90aWNlIHRoZSB1c2Ugb2YgYGFwX21hdHJpeF9tZGV2YC4gVGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbjogaXMgaXQgZXZlbiBwb3NzaWJsZSB0byBjb25qdXJlIGFuIG1kZXYgd2l0aG91dCBwaHlzaWNhbGx5IHByZXNlbnQgQVAgaGFyZHdhcmU/IE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHJlbGF0ZWQgZmlsZXMgbGlrZSBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBjbHVlcyB0byBjcmVhdGluZyBhIHNpbXVsYXRlZCBkZXZpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NToyMi41MTA5NzUyOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY3MzM0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXBfbWF0cml4X21kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM0LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzozNTpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM2LXN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Jlc2V0X3FsaXN0KHN0cnVjdCBsaXN0X2hlYWQgKnFsaXN0KTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz03Nj1zdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODctICpcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6ODg6ICogQG1hdHJpeF9tZGV2OiBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgYXBfbWF0cml4X21kZXYgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIEFQXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTg5LSAqXFx0XFx0IGNvbmZpZ3VyYXRpb24gZGF0YSB0byB1c2UgdG8gdXBkYXRlIGEgS1ZNIGd1ZXN0J3MgQVBDQi5cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy05OS0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTAwOnN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfdXBkYXRlX2xvY2tzX2Zvcl9tZGV2KHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEwMS17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTExLSAqXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjExMjogKiBAbWF0cml4X21kZXY6IGEgcG9pbnRlciB0byBhIHN0cnVjdCBhcF9tYXRyaXhfbWRldiBvYmplY3QgY29udGFpbmluZyB0aGUgQVBcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTEzLSAqXFx0XFx0IGNvbmZpZ3VyYXRpb24gZGF0YSB0byB1c2UgdG8gdXBkYXRlIGEgS1ZNIGd1ZXN0J3MgQVBDQi5cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMjItICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjEyMzpzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTI0LXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNDYtICpcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTQ3OiAqIFJldHVybjogdGhlIGFwX21hdHJpeF9tZGV2IG9iamVjdCB0byB3aGljaCBAYXBxbiBpcyBhc3NpZ25lZCBvciBOVUxMIGlmIEBhcHFuXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE0ODogKlxcdCAgIGlzIG5vdCBhc3NpZ25lZCB0byBhbiBhcF9tYXRyaXhfbWRldi5cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTQ5LSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNTA6c3RhdGljIHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqZ2V0X3VwZGF0ZV9sb2Nrc19ieV9hcHFuKGludCBhcHFuKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNTEte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNTI6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTUzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4NS0gKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxODY6ICogTm90ZTogaWYgQHF1ZXVlIGlzIG5vdCBsaW5rZWQgdG8gYW4gYXBfbWF0cml4X21kZXYgb2JqZWN0LCB0aGUgS1ZNIGxvY2tcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg3LSAqXFx0ICB3aWxsIG5vdCBiZSB0YWtlbi5cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMDY9c3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICp2ZmlvX2FwX21kZXZfZ2V0X3F1ZXVlKFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMDc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA4LVxcdFxcdFxcdFxcdFxcdGludCBhcHFuKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTU4MT1zdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01ODgtXFx0XFx0XFx0ICAgICAgIC5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfUV9OT1RfQVZBSUwsIH07XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjU4OTpcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01OTAtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjEwLVxcdG1hdHJpeF9tZGV2ID0gY29udGFpbmVyX29mKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo2MTE6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGFwX21hdHJpeF9tZGV2LCBwcWFwX2hvb2spO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02MTItXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9NjQ1PXN0YXRpYyB2b2lkIHZmaW9fYXBfbWF0cml4X2luaXQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY1Mi1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NjUzOnN0YXRpYyB2b2lkIHNpZ25hbF9ndWVzdF9hcF9jZmdfY2hhbmdlZChzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02NTQte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY1OC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NjU5OnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91cGRhdGVfZ3Vlc3RfYXBjYihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02NjAte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY3MC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NjcxOnN0YXRpYyBib29sIHZmaW9fYXBfbWRldl9maWx0ZXJfY2RvbXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjcyLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz02ODM9c3RhdGljIGJvb2wgX3F1ZXVlX3Bhc3NhYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTcxOS0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NzIwOnN0YXRpYyBib29sIHZmaW9fYXBfbWRldl9maWx0ZXJfbWF0cml4KHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTcyMS1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyAqYXBtX2ZpbHRlcmVkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTc3Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc3Ny17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjc3ODpcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Nzc5OlxcdFxcdGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYsIHZkZXYpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03ODAtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9NzkwPXN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzkxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NzkyOlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc5My1cXHRpbnQgcmV0O1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTQtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjc5NTpcXHRtYXRyaXhfbWRldiA9IHZmaW9fYWxsb2NfZGV2aWNlKGFwX21hdHJpeF9tZGV2LCB2ZGV2LCBcXHUwMDI2bWRldi1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTYtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnZmaW9fYXBfbWF0cml4X2Rldl9vcHMpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTgxNS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6ODE2OnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9saW5rX3F1ZXVlKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTgxNy1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODI1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo4MjY6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2xpbmtfYXBxbihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LCBpbnQgYXBxbilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODI3LXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz04Mzk9c3RhdGljIHZvaWQgdmZpb19hcF91bmxpbmtfbWRldl9mcl9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04NDMtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjg0NDpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfdW5saW5rX2ZyX3F1ZXVlcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04NDUte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTg2MD1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODYxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6ODYyOlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNm1kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTg2My1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04NzktXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjg4MDpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfbG9nX3NoYXJpbmdfZXJyKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqYXNzaWduZWUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjg4MTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGFwX21hdHJpeF9tZGV2ICphc3NpZ25lZF90byxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODgyLVxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICphcG0sIHVuc2lnbmVkIGxvbmcgKmFxbSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04OTMtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjg5NDpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfbG9nX2luX3VzZV9lcnIoc3RydWN0IGFwX21hdHJpeF9tZGV2ICphc3NpZ25lZSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODk1LVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKmFwbSwgdW5zaWduZWQgbG9uZyAqYXFtKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTkyMS0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6OTIyOnN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3ZlcmlmeV9ub19zaGFyaW5nKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqYXNzaWduZWUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTkyMy1cXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgKm1kZXZfYXBtLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTkyNS17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjkyNjpcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKmFzc2lnbmVkX3RvO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy05MjctXFx0REVDTEFSRV9CSVRNQVAoYXBtLCBBUF9ERVZJQ0VTKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy05NzYtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjk3NzpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl92YWxpZGF0ZV9tYXNrcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy05Nzgte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTk4Ny1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6OTg4OnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9saW5rX2FkYXB0ZXIoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtOTg5LVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYXBpZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy05OTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjk5ODpzdGF0aWMgdm9pZCBjb2xsZWN0X3F1ZXVlc190b19yZXNldChzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy05OTktXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYXBpZCxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMDExLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMDEyOnN0YXRpYyB2b2lkIHJlc2V0X3F1ZXVlc19mb3JfYXBpZChzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMDEzLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhcGlkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEwMjEtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjEwMjI6c3RhdGljIGludCByZXNldF9xdWV1ZXNfZm9yX2FwaWRzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEwMjMtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nICphcG1fcmVzZXQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTA3Mz1zdGF0aWMgc3NpemVfdCBhc3NpZ25fYWRhcHRlcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTA3OS1cXHRERUNMQVJFX0JJVE1BUChhcG1fZmlsdGVyZWQsIEFQX0RFVklDRVMpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMDgwOlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTA4MS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xMTIzPXN0YXRpYyBzdHJ1Y3QgdmZpb19hcF9xdWV1ZVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMTI0Oip2ZmlvX2FwX3VubGlua19hcHFuX2ZyX21kZXYoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTEyNS1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYXBpZCwgdW5zaWduZWQgbG9uZyBhcHFpKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTExNDUtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjExNDY6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3VubGlua19hZGFwdGVyKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTExNDctXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhcGlkLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTExNjMtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjExNjQ6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfYWRhcHRlcnMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTE2NS1cXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKmFwaWRzKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTExOTQtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjExOTU6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfYWRhcHRlcihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMTk2LVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGFwaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTIyMD1zdGF0aWMgc3NpemVfdCB1bmFzc2lnbl9hZGFwdGVyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMjI1LVxcdHVuc2lnbmVkIGxvbmcgYXBpZDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTIyNjpcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEyMjctXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTI1MT1zdGF0aWMgREVWSUNFX0FUVFJfV08odW5hc3NpZ25fYWRhcHRlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEyNTItXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjEyNTM6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2xpbmtfZG9tYWluKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEyNTQtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFwcWkpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTI5Nz1zdGF0aWMgc3NpemVfdCBhc3NpZ25fZG9tYWluX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMzAzLVxcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjEzMDQ6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMzA1LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTEzNDU9c3RhdGljIERFVklDRV9BVFRSX1dPKGFzc2lnbl9kb21haW4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMzQ2LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMzQ3OnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91bmxpbmtfZG9tYWluKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEzNDgtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYXBxaSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMzY0LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMzY1OnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2RvbWFpbnMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTM2Ni1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyAqYXBxaXMpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTM5NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTM5NjpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19kb21haW4oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTM5Ny1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFwcWkpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTQyMT1zdGF0aWMgc3NpemVfdCB1bmFzc2lnbl9kb21haW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE0MjYtXFx0dW5zaWduZWQgbG9uZyBhcHFpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNDI3OlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTQyOC1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xNDY5PXN0YXRpYyBzc2l6ZV90IGFzc2lnbl9jb250cm9sX2RvbWFpbl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTQ3NC1cXHR1bnNpZ25lZCBsb25nIGlkO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNDc1OlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTQ3Ni1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xNTIzPXN0YXRpYyBzc2l6ZV90IHVuYXNzaWduX2NvbnRyb2xfZG9tYWluX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNTI4LVxcdHVuc2lnbmVkIGxvbmcgZG9taWQ7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE1Mjk6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNTMwLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE1NjE9c3RhdGljIHNzaXplX3QgY29udHJvbF9kb21haW5zX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE1NjUtXFx0dW5zaWduZWQgbG9uZyBpZDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTU2NjpcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE1NjctXFx0dW5zaWduZWQgbG9uZyBtYXhfZG9taWQgPSBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFkbV9tYXg7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTYwOD1zdGF0aWMgc3NpemVfdCBtYXRyaXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE2MTEtXFx0c3NpemVfdCBuY2hhcnM7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE2MTI6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNjEzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE2MjI9c3RhdGljIHNzaXplX3QgZ3Vlc3RfbWF0cml4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE2MjUtXFx0c3NpemVfdCBuY2hhcnM7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE2MjY6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNjI3LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE2NDI9c3RhdGljIHNzaXplX3QgYXBfY29uZmlnX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNjQ0LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTY0NTpcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE2NDYtXFx0aW50IGlkeCA9IDA7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTY2MD1zdGF0aWMgaW50IHBhcnNlX2JpdG1hcChjaGFyICoqc3RyYnVmcHRyLCB1bnNpZ25lZCBsb25nICpiaXRtYXAsIGludCBuYml0cylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNjcxLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNjcyOnN0YXRpYyBpbnQgYXBfbWF0cml4X292ZXJmbG93X2NoZWNrKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE2NzMte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE3MDU9c3RhdGljIHNzaXplX3QgYXBfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTcwNy17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE3MDg6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNzA5LVxcdHN0cnVjdCBhcF9tYXRyaXggbV9uZXcsIG1fb2xkLCBtX2FkZGVkLCBtX3JlbW92ZWQ7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTgwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTgyMC0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTgyMTpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4MjItXFx0XFx0XFx0XFx0c3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4NDItXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE4NDM6c3RhdGljIHZvaWQgdW5tYXBfaW92YShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LCB1NjQgaW92YSwgdTY0IGxlbmd0aClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg0NC17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTg1NT1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfZG1hX3VubWFwKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldiwgdTY0IGlvdmEsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg1Ny17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE4NTg6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE4NTk6XFx0XFx0Y29udGFpbmVyX29mKHZkZXYsIHN0cnVjdCBhcF9tYXRyaXhfbWRldiwgdmRldik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4NjAtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg3My0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTg3NDpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfdW5zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4NzUte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE5ODA9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwMDktXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwMTA6c3RhdGljIGludCB2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWVzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwMTEte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIwNDY9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDQ3LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA0ODpcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA0OTpcXHRcXHRjb250YWluZXJfb2YodmRldiwgc3RydWN0IGFwX21hdHJpeF9tZGV2LCB2ZGV2KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA1MC1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMDU3PXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDU4LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA1OTpcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA2MDpcXHRcXHRjb250YWluZXJfb2YodmRldiwgc3RydWN0IGFwX21hdHJpeF9tZGV2LCB2ZGV2KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA2MS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMDY1PXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9yZXF1ZXN0KHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldiwgdW5zaWduZWQgaW50IGNvdW50KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNjctXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdmRldi1cXHUwMDNlZGV2O1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMDY4OlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNjktXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNzA6XFx0bWF0cml4X21kZXYgPSBjb250YWluZXJfb2YodmRldiwgc3RydWN0IGFwX21hdHJpeF9tZGV2LCB2ZGV2KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA3MS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMTQzPXN0YXRpYyBpbnQgdmZpb19hcF9pcnFfc2V0X2luaXQoc3RydWN0IHZmaW9faXJxX3NldCAqaXJxX3NldCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjE2NC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjE2NTpzdGF0aWMgaW50IHZmaW9fYXBfc2V0X3JlcXVlc3RfaXJxKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIxNjYtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjE5OC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjE5OTpzdGF0aWMgaW50IHZmaW9fYXBfc2V0X2NmZ19jaGFuZ2VfaXJxKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjAwLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjMxLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMjMyOnN0YXRpYyBpbnQgdmZpb19hcF9zZXRfaXJxcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjMzLVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMjU3PXN0YXRpYyBzc2l6ZV90IHZmaW9fYXBfbWRldl9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjI1OS17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIyNjA6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIyNjE6XFx0XFx0Y29udGFpbmVyX29mKHZkZXYsIHN0cnVjdCBhcF9tYXRyaXhfbWRldiwgdmRldik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIyNjItXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjg2LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMjg3OnN0YXRpYyBzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKnZmaW9fYXBfbWRldl9mb3JfcXVldWUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIyODgte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMjg5OlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIyOTAtXFx0dW5zaWduZWQgbG9uZyBhcGlkID0gQVBfUUlEX0NBUkQocS1cXHUwMDNlYXBxbik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjMwMj1zdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjMwOC1cXHR1bnNpZ25lZCBsb25nIGFwaWQsIGFwcWk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzMDk6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjMxMC1cXHRzdHJ1Y3QgYXBfZGV2aWNlICphcGRldiA9IHRvX2FwX2RldihkZXYpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0MDk9aW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDEzLVxcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI0MTQ6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQxNS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNDYzPXZvaWQgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDY2LVxcdHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDY3OlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0NjgtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjUyNj1pbnQgdmZpb19hcF9tZGV2X3Jlc291cmNlX2luX3VzZSh1bnNpZ25lZCBsb25nICphcG0sIHVuc2lnbmVkIGxvbmcgKmFxbSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTQzLSAqXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI1NDQ6ICogQG1hdHJpeF9tZGV2OiBhbiBhcF9tYXRyaXhfbWRldiBvYmplY3QgYXR0YWNoZWQgdG8gYSBLVk0gZ3Vlc3QuXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1NDUtICogQGFwcmVtOiB0aGUgYWRhcHRlcnMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBob3N0J3MgQVAgY29uZmlndXJhdGlvblxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1NDktICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI1NTA6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1NTEtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqYXByZW0sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjU5MT1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjU5NC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI1OTU6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjU5Ni1cXHRERUNMQVJFX0JJVE1BUChhcHJlbSwgQVBfREVWSUNFUyk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjczND1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3MzYte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzM3OlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3MzgtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9Mjc5Nz12b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY2ZnX2luZm8sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgxMS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjgxMjpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MTMte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI4NDI9dm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjg0NC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4NDU6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjg0Ni1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMzctICpcXHRcXHRkcml2ZXIsIGJlIGl0IHVzaW5nIEBtZGV2X2xpc3Qgb3Igd3JpdGluZyB0aGUgc3RhdGUgb2YgYVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6Mzg6ICpcXHRcXHRzaW5nbGUgYXBfbWF0cml4X21kZXYgZGV2aWNlLiBJdCdzIHF1aXRlIGNvYXJzZSBidXQgd2UgZG9uJ3RcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTM5LSAqXFx0XFx0ZXhwZWN0IG11Y2ggY29udGVudGlvbi5cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtNDMtICpcXHRcXHQgd2lsbCBiZSB0YWtlbiB3aGVuIHRoZSBBUCBkZXZpY2VzIGFyZSBwbHVnZ2VkIGludG8gb3IgdW5wbHVnZ2VkXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDo0NDogKlxcdFxcdCBmcm9tIGEgZ3Vlc3QsIGFuZCB3aGVuIGFuIGFwX21hdHJpeF9tZGV2IGRldmljZSBpcyBhZGRlZCB0byBvclxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtNDUtICpcXHRcXHQgcmVtb3ZlZCBmcm9tIEBtZGV2X2xpc3Qgb3IgdGhlIGxpc3QgaXMgaXRlcmF0ZWQuXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTQ3PXN0cnVjdCBhcF9tYXRyaXhfZGV2IHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtNTAtXFx0c3RydWN0IGxpc3RfaGVhZCBtZGV2X2xpc3Q7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDo1MTpcXHRzdHJ1Y3QgbXV0ZXggbWRldnNfbG9jazsgLyogc2VyaWFsaXplcyBhY2Nlc3MgdG8gZWFjaCBhcF9tYXRyaXhfbWRldiAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtNTItXFx0c3RydWN0IGFwX2RyaXZlciAgKnZmaW9fYXBfZHJ2O1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD05MD1zdHJ1Y3QgYXBfcXVldWVfdGFibGUge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC05NC0vKipcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjk1OiAqIHN0cnVjdCBhcF9tYXRyaXhfbWRldiAtIENvbnRhaW5zIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIG1hdHJpeCBtZWRpYXRlZFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtOTYtICpcXHRcXHRcXHQgICBkZXZpY2UuXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC05Ny0gKiBAdmRldjpcXHR0aGUgdmZpbyBkZXZpY2VcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjk4OiAqIEBub2RlOlxcdGFsbG93cyB0aGUgYXBfbWF0cml4X21kZXYgc3RydWN0IHRvIGJlIGFkZGVkIHRvIGEgbGlzdFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtOTktICogQG1hdHJpeDpcXHR0aGUgYWRhcHRlcnMsIHVzYWdlIGRvbWFpbnMgYW5kIGNvbnRyb2wgZG9tYWlucyBhc3NpZ25lZCB0byB0aGVcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMTEzLSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTE0OnN0cnVjdCBhcF9tYXRyaXhfbWRldiB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xMTUtXFx0c3RydWN0IHZmaW9fZGV2aWNlIHZkZXY7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE0Mz1zdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNDQ6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE0NS1cXHRkbWFfYWRkcl90IHNhdmVkX2lvdmE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ1OjIyLjY5NzcxMzk2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjY5MTEwMzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZGSU8gQVAgTG9ja2luZyBhbmQgTG9naWMgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1vZGlmeWluZyBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGFuZCBgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bWAuIEl0IHNlZW1zIGxpa2UgdGhleSdyZSBzaW1wbGlmeWluZyB0aGUgbG9naWMgYXJvdW5kIGF0dGFjaGluZyBhbmQgZGV0YWNoaW5nIGBhcF9tYXRyaXhfbWRldmAgZGV2aWNlcyB0byBLVk0gaW5zdGFuY2VzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGhhdmUgcmVtb3ZlZCBhIGxvb3AgdGhhdCBjaGVja2VkIGZvciBjb25mbGljdGluZyBhdHRhY2htZW50cywgd2hpY2ggc3RyaWtlcyBtZSBhcyBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiB0aGUgY29uY3VycmVuY3kgbW9kZWwuXG5cbkluc3RlYWQgb2YgdGhhdCBsb29wLCB0aGUgY29kZSBub3cgY2hlY2tzIGBpZiAoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykgeyByZXR1cm4gLUVQRVJNOyB9YCB1bmRlciB0aGUgYHBxYXBfaG9va19yd3NlbWAgbG9jay4gTWFrZXMgc2Vuc2UsIHVzaW5nIGEgcmVhZC13cml0ZSBzZW1hcGhvcmUgdG8gcHJvdGVjdCBhIHBvdGVudGlhbCBkYXRhIHJhY2UuIEFsc28gaW4gYHZmaW9fYXBfbWRldl91bnNldF9rdm1gLCB0aGUgcGF0Y2ggcmVtb3ZlcyB0aGUgbG9jayByZWxlYXNlL2FjcXVpcmUgYXJvdW5kIHRoZSBga3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vayA9IE5VTEw7YCBhc3NpZ25tZW50LiBBaCwgSSBzZWUgYSBiaWdnZXIgY2hhbmdlIGluIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSBsb2NrLXByb3RlY3RlZCBjaGVjazpcblxuYGBgY1xuIFx0aWYgKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYmQpIHtcbiBcdFx0ZG93bl93cml0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTtcbitcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2spIHtcbitcdFx0XHR1cF93cml0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTtcbitcdFx0XHRyZXR1cm4gLUVQRVJNO1xuK1x0XHR9XG4gXHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2sgPSBcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2VwcWFwX2hvb2s7XG4tXHRcdHVwX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuIFxuIFx0XHRnZXRfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcbi1cbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtLCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuLVx0XHRcdGlmIChtICE9IG1hdHJpeF9tZGV2IFx1MDAyNlx1MDAyNiBtLVx1MDAzZWt2bSA9PSBrdm0pIHtcbi1cdFx0XHRcdHJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcbi1cdFx0XHRcdHJldHVybiAtRVBFUk07XG4tXHRcdFx0fVxuLVx0XHR9XG4tXG4gXHRcdGt2bV9nZXRfa3ZtKGt2bSk7XG4gXHRcdG1hdHJpeF9tZGV2LVx1MDAzZWt2bSA9IGt2bTtcbiBcdFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcbi1cbiBcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuK1x0XHR1cF93cml0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTtcbiBcdH1cbiBgYGBcblxuVGhpcyBpcyBhIHByZXR0eSBtYWpvciBzaGlmdCBpbiBsb2NraW5nIGFuZCB0aGUgb3ZlcmFsbCBhdHRhY2htZW50IGxvZ2ljIGZvciBWRklPIEFQIGRldmljZXMuIFRoZSByZW1vdmFsIG9mIHRoZSBwcmV2aW91cyBsb29wIHN1Z2dlc3RzIGEgc2ltcGxlciwgbW9yZSBkaXJlY3QgYXBwcm9hY2ggdG8gcHJldmVudGluZyBjb25mbGljdGluZyBhdHRhY2htZW50cywgYnV0IGl0IGRvZXMgcmVseSBvbiB0aGF0IGBwcWFwX2hvb2tfcndzZW1gLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MgaW50cm9kdWNlZCBieSB0aGlzLiBBbHNvLCBkb2VzIGl0IGNoYW5nZSB0aGUgZXJyb3IgcGF0aHMgYXQgYWxsP1xuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGNhbiBTeXprYWxsZXIgdHJpZ2dlciB0aGlzIGNvZGU/IEl0IHJ1bnMgb24geDg2XzY0LCBhcm02NCwgcmlzY3Y2NCwgYW5kIHMzOTB4LiBPbiBzMzkweCwgU3l6a2FsbGVyIHVzZXMgUUVNVSwgc28gdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIFFFTVUgc3VwcG9ydCBWRklPIEFQPyBWRklPIEFQIGlzIGFsbCBhYm91dCB0aGUgaG9zdCBoYXZpbmcgQVAgaGFyZHdhcmUgYW5kIHBhc3NpbmcgaXQgdG8gdGhlIGd1ZXN0LiBCdXQsIFN5emthbGxlciB1c2VzIGBzeXotZXhlY3V0b3JgIGluc2lkZSB0aGUgZ3Vlc3QuIFNvLCBpZiBTeXprYWxsZXIgaXMgcnVubmluZyAqaW5zaWRlKiB0aGUgZ3Vlc3QsIGNhbiBpdCBpbnRlcmFjdCB3aXRoIGAvZGV2L3ZmaW8vLi4uYCBpZiB0aGUgZ3Vlc3QgaXRzZWxmIGhhcyBWRklPIEFQIGRldmljZXM/IE5vLCBWRklPIEFQIGlzIGEgaG9zdCBkcml2ZXIuIFN5emthbGxlciBuZWVkcyB0byBydW4gb24gdGhlIGhvc3QgKG9yIGluIGEgbmVzdGVkIHNldHVwKSB0byBpbnRlcmFjdCB3aXRoIGAvc3lzL2J1cy9tZGV2L2RldmljZXMvYCB0byBjcmVhdGUgYW4gYGFwX21hdHJpeF9tZGV2YCBhbmQgdGhlbiB1c2UgYC9kZXYvdmZpby9gIHRvIGF0dGFjaCBpdCB0byBLVk0uXG5cbldhaXQsIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgaXMgY2FsbGVkIHdoZW4gYSBWRklPIGdyb3VwIGlzIGF0dGFjaGVkIHRvIEtWTSB2aWEgYEtWTV9ERVZfVkZJT19HUk9VUF9BRERgIG9yIHNpbWlsYXIuIEkgbmVlZCB0byBjaGVjayB3aGVyZSBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDE2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ1OjM0Ljk2Njg0NDg1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU0MjE1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19hcF9tZGV2X3NldF9rdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE4MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnZmaW9fYXBfbWRldl9hdHRyX2dyb3Vwc1tdID0ge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4MTEtLyoqXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE4MTI6ICogdmZpb19hcF9tZGV2X3NldF9rdm0gLSBzZXRzIGFsbCBkYXRhIGZvciBAbWF0cml4X21kZXYgdGhhdCBhcmUgbmVlZGVkXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4MTMtICogdG8gbWFuYWdlIEFQIHJlc291cmNlcyBmb3IgdGhlIGd1ZXN0IHdob3NlIHN0YXRlIGlzIHJlcHJlc2VudGVkIGJ5IEBrdm1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xODIwLSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxODIxOnN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3NldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTgyMi1cXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjA0Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA1My1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA1NDpcXHRyZXR1cm4gdmZpb19hcF9tZGV2X3NldF9rdm0obWF0cml4X21kZXYsIHZkZXYtXFx1MDAzZWt2bSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NTozNS4xNTIyNzk1NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODA5OTg5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWRklPIEFQIERldmljZSBPcGVuaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdmZpb19hcF9tZGV2X29wZW5fZGV2aWNlYCBmdW5jdGlvbiBjYWxsIOKAkyByaWdodCwgdGhpcyBpcyB0aGUgYC5vcGVuX2RldmljZWAgY2FsbGJhY2sgZm9yIHRoZSBWRklPIGRldmljZS4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBjb2RlIHBhdGggKmFjdHVhbGx5KiBiZSByZWFjaGVkIHdpdGhvdXQgYW55IHBoeXNpY2FsIEFQIGhhcmR3YXJlIHByZXNlbnQgaW4gdGhlIHN5c3RlbT8gVGhhdCdzIGEgY3J1Y2lhbCBxdWVzdGlvbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGB2ZmlvX2FwYCBkcml2ZXIgZXZlbiAqbG9hZHMqIGFuZCwgY3J1Y2lhbGx5LCBpZiBpdCBjcmVhdGVzIGFueSBkZXZpY2VzLCB3aXRob3V0IHVuZGVybHlpbmcgcGh5c2ljYWwgaGFyZHdhcmUuIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBoYXBwZW5zIGluIGEgcHVyZWx5IHNvZnR3YXJlIG9yIHNpbXVsYXRlZCBlbnZpcm9ubWVudC4gSWYgdGhlIGFuc3dlciBpcyB5ZXMsIHRoZW4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgdGhhdCB0aGlzIGRldmljZSBtaWdodCBiZSBpbml0aWFsaXplZCBldmVuIHdpdGhvdXQgQVAgaGFyZHdhcmUuIElmIGl0IGRvZXNuJ3QsIEkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBuZXh0IHBvc3NpYmxlIGNhdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIzOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ1OjM5LjAzMzI4MDk0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1MjA0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0yMDA9c3RhdGljIHZvaWQgX19leGl0IHZmaW9fYXBfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTIwNy1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MjA4Om1vZHVsZV9pbml0KHZmaW9fYXBfaW5pdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTIwOS1tb2R1bGVfZXhpdCh2ZmlvX2FwX2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NTozOS4xOTc4MDY0NzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk1NjQ0MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgdmZpb19hcF9pbml0YCBmdW5jdGlvbi5cblxuKipJbml0aWFsIENvbnNpZGVyYXRpb25zOiBEaXZpbmcgaW50byB2ZmlvX2FwX2luaXQqKlxuXG5BbHJpZ2h0LCBzbyBgdmZpb19hcF9pbml0YC4uLiBiYXNlZCBvbiB0aGUgbmFtZSwgdGhpcyBpcyBwcm9iYWJseSB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3Igc29tZSBhc3BlY3Qgb2YgdGhlIFZGSU8gKFZpcnR1YWwgRnVuY3Rpb24gSS9PKSBzdWJzeXN0ZW0gcmVsYXRlZCB0byBBY2Nlc3MgUGVybWlzc2lvbnMgKEFQKSBvciBBY2Nlc3MgUHJvdGVjdGlvbiAoQVApLiBUaGF0IHRlbGxzIG1lIGltbWVkaWF0ZWx5IHRoYXQgd2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIHNlY3VyaXR5LXNlbnNpdGl2ZSBhcmVhLiBWRklPIGlzIGFsbCBhYm91dCBkaXJlY3QgZGV2aWNlIGFzc2lnbm1lbnQsIGJ5cGFzc2luZyB0aGUgaHlwZXJ2aXNvciB0byBwcm92aWRlIG5lYXItbmF0aXZlIHBlcmZvcm1hbmNlIHRvIHZpcnR1YWwgbWFjaGluZXMuIFRoZSBcIkFQXCIgY29tcG9uZW50IHN1Z2dlc3RzIHRoaXMgaW5pdGlhbGl6YXRpb24gaXMgbGlrZWx5IHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSBzdHJ1Y3R1cmVzIGFuZCBtZWNoYW5pc21zIGZvciBjb250cm9sbGluZyBhY2Nlc3MgdG8gSS9PIHJlc291cmNlcywgcG90ZW50aWFsbHkgZW5zdXJpbmcgdGhhdCBhIFZNIGNhbiBvbmx5IGFjY2VzcyB0aGUgaGFyZHdhcmUgaXQncyBsZWdpdGltYXRlbHkgZW50aXRsZWQgdG8uXG5cbkknZCBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBoYW5kbGUgdGFza3MgbGlrZTpcblxuKiAgICoqUmVzb3VyY2UgQWxsb2NhdGlvbjoqKiBQb3RlbnRpYWxseSBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgZGF0YSBzdHJ1Y3R1cmVzIHRvIHRyYWNrIHdoaWNoIHJlc291cmNlcyBhcmUgYXNzaWduZWQgdG8gd2hpY2ggVk1zIGFuZCB3aGF0IGFjY2VzcyBwZXJtaXNzaW9ucyB0aG9zZSBWTXMgaGF2ZS4gVGhpcyBjb3VsZCBpbnZvbHZlIG1lbW9yeSBzdHJ1Y3R1cmVzLCBsb2Nrcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuXG4qICAgKipTZWN1cml0eSBDb250ZXh0IFNldHVwOioqIFRoaXMgbWlnaHQgaW5jbHVkZSBzZXR0aW5nIHVwIHRoZSBzZWN1cml0eSBjb250ZXh0cyBmb3IgdGhlIGhhcmR3YXJlIGRldmljZXMgcmVsYXRlZCB0byBhY2Nlc3MgcGVybWlzc2lvbnMuXG4qICAgKipJbnRlcnJ1cHQgSGFuZGxpbmc6KiogVkZJTywgYXQgdGhpcyBwb2ludCwgY291bGQgbWFuYWdlIGludGVycnVwdCByb3V0aW5nIGZvciBhc3NpZ25lZCBkZXZpY2VzLiBJZiBBUCBpcyByZWxhdGVkIHRvIGludGVycnVwdHMsIGl0IG1pZ2h0IGludm9sdmUgY29uZmlndXJpbmcgaW50ZXJydXB0IHJlbWFwcGluZyBvciBpbnRlcnJ1cHQgaW5qZWN0aW9uIG1lY2hhbmlzbXMuXG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBBIGtleSBjb21wb25lbnQgd291bGQgYmUgcm9idXN0IGVycm9yIGhhbmRsaW5nLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggZGlyZWN0IGRldmljZSBhY2Nlc3MsIGFueSBtaXNjb25maWd1cmF0aW9uIG9yIHNlY3VyaXR5IGJyZWFjaCBjYW4gY3Jhc2ggdGhlIHN5c3RlbS4gU28sIEkgd291bGQgZXhwZWN0IGNoZWNrcyBmb3IgaWxsZWdhbCByZXF1ZXN0cyBvciBhY2Nlc3MgYXR0ZW1wdHMuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgdGhlIGZ1bmN0aW9uIGFjdHVhbGx5IGRvZXMuLi4gSSdsbCBsb29rIGZvciBzcGVjaWZpYyBpbnRlcmFjdGlvbnMgd2l0aCBoYXJkd2FyZSwgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMsIGFuZCBhbnkgY2FsbHMgcmVsYXRlZCB0byBzZWN1cml0eSBjb250ZXh0cyBvciByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJ20ga2VlbiB0byBzZWUgaG93IHRoZXkncmUgaGFuZGxpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY3OCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ1OjQzLjQ5MzQ1MzkzNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MzEyNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fYXBfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE1Mz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2RiZl9pbmZvX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNjYtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE2NzpzdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTY4LXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0yMDA9c3RhdGljIHZvaWQgX19leGl0IHZmaW9fYXBfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTIwNy1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MjA4Om1vZHVsZV9pbml0KHZmaW9fYXBfaW5pdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTIwOS1tb2R1bGVfZXhpdCh2ZmlvX2FwX2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NTo0My41OTc3NzM0MjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MDYwNDUzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHZmaW9fYXBfaW5pdGAgZnVuY3Rpb24uXG5cbioqQW5hbHl6aW5nIHZmaW9fYXBfaW5pdCoqXG5cbkFscmlnaHQsIGhlcmUgd2UgZ28uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgdGhlIFZGSU8gQWRkcmVzcyBTcGFjZSAoQVApIGltcGxlbWVudGF0aW9uLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBrZXkgYXJlYXMgdGhpcyB3aWxsIHRvdWNoIHVwb24uIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgbWVtb3J5IG1hcHBpbmcsIERNQSBzZXR1cCwgaW50ZXJydXB0IGhhbmRsaW5nIGluaXRpYWxpemF0aW9uLCBhbmQgYW55IGhhcmR3YXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gdGhhdCdzIGNydWNpYWwgZm9yIGdldHRpbmcgYW4gQVAgZnVuY3Rpb25pbmcgd2l0aGluIHRoZSBWRklPIGZyYW1ld29yay4gSSdsbCBleHBlY3QgdG8gc2VlIGhvdyBpdCBtYW5hZ2VzIHRoZSBwcm90ZWN0aW9uIGRvbWFpbiBhbmQgdGhlIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiBMZXQncyBzZWUgaG93IHRoZXkndmUgYXBwcm9hY2hlZCB0aGUgYXJjaGl0ZWN0dXJlLiBJJ2xsIGJlIHJlYWxseSBmb2N1c2luZyBvbiBhbnkgb3B0aW1pemF0aW9ucyBvciB1bnVzdWFsIGNvZGUgcGF0aHMuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBkZXNpZ25lZCBmb3IgcGVyZm9ybWFuY2Ugb3IgaXMgbW9yZSBhaW1lZCBmb3IgZ2VuZXJhbGl0eS4gSSB3aWxsIG5vdGUgaG93IGl0J3MgZGVzaWduZWQuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgZG8gdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmU/IEFyZSB0aGVyZSBhbnkgY2xldmVyIHRyaWNrcyB0byBtaW5pbWl6ZSBvdmVyaGVhZCBvciBtYXhpbWl6ZSBwYXJhbGxlbGlzbT8gQXJlIHRoZXkgdGFraW5nIGFkdmFudGFnZSBvZiBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZT8gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwncyBpbiB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczOTYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NTo0Ny4wNjgzODE0NjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjcsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjc6XFx0c3RhdGljIGludCBfX2luaXQgdmZpb19hcF9pbml0KHZvaWQpXFxuIDE2ODpcXHR7XFxuIDE2OTpcXHRcXHRpbnQgcmV0O1xcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHRyZXQgPSB2ZmlvX2FwX2RiZl9pbmZvX2luaXQoKTtcXG4gMTcyOlxcdFxcdGlmIChyZXQpXFxuIDE3MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHQvKiBJZiB0aGVyZSBhcmUgbm8gQVAgaW5zdHJ1Y3Rpb25zLCB0aGVyZSBpcyBub3RoaW5nIHRvIHBhc3MgdGhyb3VnaC4gKi9cXG4gMTc2OlxcdFxcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKVxcbiAxNzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdHJldCA9IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUoKTtcXG4gMTgwOlxcdFxcdGlmIChyZXQpXFxuIDE4MTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRyZXQgPSBhcF9kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNnZmaW9fYXBfZHJ2LCBUSElTX01PRFVMRSwgVkZJT19BUF9EUlZfTkFNRSk7XFxuIDE4NDpcXHRcXHRpZiAocmV0KSB7XFxuIDE4NTpcXHRcXHRcXHR2ZmlvX2FwX21hdHJpeF9kZXZfZGVzdHJveSgpO1xcbiAxODY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTg3OlxcdFxcdH1cXG4gMTg4OlxcdFxcbiAxODk6XFx0XFx0cmV0ID0gdmZpb19hcF9tZGV2X3JlZ2lzdGVyKCk7XFxuIDE5MDpcXHRcXHRpZiAocmV0KSB7XFxuIDE5MTpcXHRcXHRcXHRhcF9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2dmZpb19hcF9kcnYpO1xcbiAxOTI6XFx0XFx0XFx0dmZpb19hcF9tYXRyaXhfZGV2X2Rlc3Ryb3koKTtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTk1OlxcdFxcdH1cXG4gMTk2OlxcdFxcbiAxOTc6XFx0XFx0cmV0dXJuIDA7XFxuIDE5ODpcXHR9XFxuIDE5OTpcXHRcXG4gMjAwOlxcdHN0YXRpYyB2b2lkIF9fZXhpdCB2ZmlvX2FwX2V4aXQodm9pZClcXG4gMjAxOlxcdHtcXG4gMjAyOlxcdFxcdHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKCk7XFxuIDIwMzpcXHRcXHRhcF9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2dmZpb19hcF9kcnYpO1xcbiAyMDQ6XFx0XFx0dmZpb19hcF9tYXRyaXhfZGV2X2Rlc3Ryb3koKTtcXG4gMjA1OlxcdFxcdGRlYnVnX3VucmVnaXN0ZXIodmZpb19hcF9kYmZfaW5mbyk7XFxuIDIwNjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ1OjQ3LjA2ODU1NzUyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE0NTQ5MzgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aCBGdXp6aW5nIC0gQSBEZWVwIERpdmUgaW50byBzMzkweCBBUCBJbnN0cnVjdGlvbnMgYW5kIFZGSU8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBhbmQgaW1tZWRpYXRlbHkgc2VlIGBpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkgcmV0dXJuIC1FTk9ERVY7YC4gVGhhdCdzIGEgcmVkIGZsYWcuIElmIHRoZSBob3N0IGRvZXNuJ3QgaGF2ZSBBZGp1bmN0IFByb2Nlc3NvciAoQVApIGluc3RydWN0aW9ucywgdGhlIGRyaXZlciB3b24ndCBldmVuIHN0YXJ0LiBUaGUgYmlnIHF1ZXN0aW9uIGlzLCBkb2VzIFFFTVUgZW11bGF0ZSB0aGlzIGZvciB0aGUgZ3Vlc3QsIGVzcGVjaWFsbHkgc2luY2Ugc3l6a2FsbGVyIGlzIHJ1bm5pbmcgd2l0aGluIGEgUUVNVSBndWVzdCBmb3IgczM5MHg/XG5cblFFTVUgKmNhbiogZW11bGF0ZSBvciBwYXNzIHRocm91Z2ggQVAgaW5zdHJ1Y3Rpb25zLCBidXQgaXQncyBub3QgdGhlIGRlZmF1bHQuIElmIHN5emthbGxlciBpcyBydW5uaW5nIGluIGEgUUVNVSBndWVzdCwgSSBuZWVkIHRvIGtub3cgaWYgQVAgaW5zdHJ1Y3Rpb25zIGFyZSBlbmFibGVkIGluICp0aGF0KiBzcGVjaWZpYyBRRU1VIGluc3RhbmNlLiBTeXprYWxsZXIgbWlnaHQgaGF2ZSBzMzkweC1zcGVjaWZpYyBzZXR1cHMsIGJ1dCB0aGlzIGlzIGEgVkZJTyBkcml2ZXIsIHNvIHdlIG5lZWQgdG8ga25vdyB3aGF0IHNldHVwIGlzIHRoZXJlLiBWRklPIGlzIGZvciBkZXZpY2UgcGFzc3Rocm91Z2guIFNvIGRvZXMgc3l6a2FsbGVyIHJ1biBhcyB0aGUgaG9zdCBmb3IgYSBuZXN0ZWQgZ3Vlc3QsIG9yIGRvZXMgaXQgZGlyZWN0bHkgb3BlbiBgL2Rldi92ZmlvLy4uLmA/IENhbiBzeXprYWxsZXIgZXZlbiB0cmlnZ2VyIGB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2VgP1xuXG5ZZXMsIGl0IGNhbiwgSUYgdGhlIGB2ZmlvX2FwYCBkcml2ZXIgaXMgbG9hZGVkIGFuZCBhbiBtZGV2IChtZWRpYXRlZCBkZXZpY2UpIGlzIGNyZWF0ZWQuIEJ1dCBjcmVhdGluZyBhbiBtZGV2IG5lZWRzIHN5c2ZzIHdyaXRlcywgYW5kIHdoaWxlIHN5emthbGxlciBkb2VzIGhhdmUgc3lzZnMgZnV6emluZywgaXQncyBwcmV0dHkgbGltaXRlZC4gVGhlIG1vcmUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciBzeXprYWxsZXIncyBzMzkweCBlbnZpcm9ubWVudCBldmVuICpoYXMqIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIHRydWUgaW4gYSB0eXBpY2FsIHMzOTB4IFFFTVUgc2V0dXAuXG5cbkluIFFFTVUsIEFQIGluc3RydWN0aW9ucyBhcmUgb25seSB0aGVyZSBpZiB0aGUgYHZmaW8tYXBgIGRldmljZSBpcyBwYXNzZWQgdGhyb3VnaCwgb3IgaWYgUUVNVSBlbXVsYXRlcyBpdC4gQW5kIEkgdGhpbmsgUUVNVSBkb2Vzbid0IGZ1bGx5IGVtdWxhdGUgQVAgaW5zdHJ1Y3Rpb25zIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2l0aG91dCB0aGUgaGFyZHdhcmUuIFJpZ2h0LCBhbmQgSSBzaG91bGQgY2hlY2sgaWYgdGhpcyBpcyBldmVuIHdvcnRoIGZ1enppbmchXG5cbkxldCdzIHNlZSB3aGF0IHRoZSBwcm9tcHQgc2F5cy4uLiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYuLi5cIiBPa2F5LCB0aGUgcHJvbXB0IGlzIGNsZWFyLiBJcyBgdmZpb19hcGAgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyPyBZZXMsIEFQIGlzIElCTSdzIG1haW5mcmFtZSBjcnlwdG9ncmFwaGljIGNvcHJvY2Vzc29yIOKAkyBpdCdzIHNwZWNpZmljIHRvIElCTSBaIChzMzkweCkgaGFyZHdhcmUuIERvZXMgUUVNVSBlbXVsYXRlIGl0PyBJIHNob3VsZCBjaGVjayBmb3IgYSBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgQVAgaW4gdGhlIGtlcm5lbCBvciBRRU1VLlxuXG5JbiB0aGUga2VybmVsLCBgZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuY2AgaGFuZGxlcyB0aGUgQVAgYnVzLCBidXQgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgbGlrZSBgbWFjODAyMTFfaHdzaW1gIG9yIGB2a21zYC4gU28sIGlmIHlvdSBydW4gUUVNVSB3aXRob3V0IGFjdHVhbCBBUCBoYXJkd2FyZSBvbiB0aGUgaG9zdCwgeW91IGNhbid0IHBhc3MgdGhyb3VnaCBBUCBkZXZpY2VzLiBXYWl0LCBpcyBpdCBldmVuIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbiBBUCBtZGV2IHdpdGhvdXQgcGh5c2ljYWwgQVAgaGFyZHdhcmU/IExldCdzIGNoZWNrIGB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMzAsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NTo1OS4yMTQwNTM5NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0aWYgKCFtYXRyaXhfZGV2KSB7XFxuIDEwMTpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiAxMDI6XFx0XFx0XFx0Z290byBtYXRyaXhfYWxsb2NfZXJyO1xcbiAxMDM6XFx0XFx0fVxcbiAxMDQ6XFx0XFxuIDEwNTpcXHRcXHQvKiBGaWxsIGluIGNvbmZpZyBpbmZvIHZpYSBQUUFQKFFDSSksIGlmIGF2YWlsYWJsZSAqL1xcbiAxMDY6XFx0XFx0aWYgKHRlc3RfZmFjaWxpdHkoMTIpKSB7XFxuIDEwNzpcXHRcXHRcXHRyZXQgPSBhcF9xY2koXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWluZm8pO1xcbiAxMDg6XFx0XFx0XFx0aWYgKHJldClcXG4gMTA5OlxcdFxcdFxcdFxcdGdvdG8gbWF0cml4X2FsbG9jX2VycjtcXG4gMTEwOlxcdFxcdH1cXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuIDExMzpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldl9saXN0KTtcXG4gMTE0OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWd1ZXN0c19sb2NrKTtcXG4gMTE1OlxcdFxcbiAxMTY6XFx0XFx0ZGV2X3NldF9uYW1lKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCIlc1xcXCIsIFZGSU9fQVBfREVWX05BTUUpO1xcbiAxMTc6XFx0XFx0bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlLnBhcmVudCA9IHJvb3RfZGV2aWNlO1xcbiAxMTg6XFx0XFx0bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlLmJ1cyA9IFxcdTAwMjZtYXRyaXhfYnVzO1xcbiAxMTk6XFx0XFx0bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlLnJlbGVhc2UgPSB2ZmlvX2FwX21hdHJpeF9kZXZfcmVsZWFzZTtcXG4gMTIwOlxcdFxcdG1hdHJpeF9kZXYtXFx1MDAzZXZmaW9fYXBfZHJ2ID0gXFx1MDAyNnZmaW9fYXBfZHJ2O1xcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHRyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWRldmljZSk7XFxuIDEyMzpcXHRcXHRpZiAocmV0KVxcbiAxMjQ6XFx0XFx0XFx0Z290byBtYXRyaXhfcmVnX2VycjtcXG4gMTI1OlxcdFxcbiAxMjY6XFx0XFx0cmV0ID0gZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZtYXRyaXhfZHJpdmVyKTtcXG4gMTI3OlxcdFxcdGlmIChyZXQpXFxuIDEyODpcXHRcXHRcXHRnb3RvIG1hdHJpeF9kcnZfZXJyO1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHRyZXR1cm4gMDtcXG4gMTMxOlxcdFxcbiAxMzI6XFx0bWF0cml4X2Rydl9lcnI6XFxuIDEzMzpcXHRcXHRkZXZpY2VfZGVsKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UpO1xcbiAxMzQ6XFx0bWF0cml4X3JlZ19lcnI6XFxuIDEzNTpcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UpO1xcbiAxMzY6XFx0bWF0cml4X2FsbG9jX2VycjpcXG4gMTM3OlxcdFxcdGJ1c191bnJlZ2lzdGVyKFxcdTAwMjZtYXRyaXhfYnVzKTtcXG4gMTM4OlxcdGJ1c19yZWdpc3Rlcl9lcnI6XFxuIDEzOTpcXHRcXHRyb290X2RldmljZV91bnJlZ2lzdGVyKHJvb3RfZGV2aWNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDU6NDU6NTkuMjE0MTYxNTM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODQwODk4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBJbnN0cnVjdGlvbiBBdmFpbGFiaWxpdHkqKlxuXG5Pa2F5LCB0aGUgY29kZSdzIGNoZWNraW5nIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIG9uIG15IG1pbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyouIFdoYXQgY3JpdGVyaWEgaXMgaXQgY2hlY2tpbmc/IElzIGl0IGxvb2tpbmcgYXQgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBwcm9ncmFtIHN0YXRlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG5hbWUgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIHRoZSBhdmFpbGFibGUgaW5zdHJ1Y3Rpb24gc2V0LCBidXQgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGlzIGtleS4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBLbm93aW5nIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIGRpY3RhdGVzIHRoZSBuZXh0IHBhdGggdGhlIHByb2dyYW0gdGFrZXMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGNvbXBsZXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzMzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NjowMi4zOTgyNTQ4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMDI1Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFwX2luc3RydWN0aW9uc19hdmFpbGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaD03Mj11bmlvbiBhcF9xdWV1ZV9zdGF0dXNfcmVnIHtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTgwLS8qKlxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oOjgxOiAqIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSAtIFRlc3QgaWYgQVAgaW5zdHJ1Y3Rpb25zIGFyZSBhdmFpbGFibGUuXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODItICpcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTg0LSAqL1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oOjg1OnN0YXRpYyBpbmxpbmUgYm9vbCBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKHZvaWQpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTExMDU9c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfY3J5cHRvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTUxLVxcdGNhc2UgS1ZNX1MzOTBfVk1fQ1JZUFRPX0VOQUJMRV9BUElFOlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTUyOlxcdFxcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTMtXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTgtXFx0Y2FzZSBLVk1fUzM5MF9WTV9DUllQVE9fRElTQUJMRV9BUElFOlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTU5OlxcdFxcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNjAtXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIxMDA9c3RhdGljIGludCBrdm1fczM5MF92bV9oYXNfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjE1Ni1cXHRcXHRjYXNlIEtWTV9TMzkwX1ZNX0NSWVBUT19ESVNBQkxFX0FQSUU6XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIxNTc6XFx0XFx0XFx0cmV0ID0gYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpID8gMCA6IC1FTlhJTztcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjE1OC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMTAxPXN0YXRpYyBpbnQga3ZtX3MzOTBfYXB4YV9pbnN0YWxsZWQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTA0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTA1OlxcdGlmIChhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEwNi1cXHRcXHRpZiAoYXBfcWNpKFxcdTAwMjZpbmZvKSA9PSAwKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NTkyPXN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjAwLVxcdC8qIFZlcmlmeSB0aGF0IHRoZSBBUCBpbnN0cnVjdGlvbiBhcmUgYXZhaWxhYmxlICovXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NjAxOlxcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTYwMi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ2OjAyLjU4OTI5Mjc2OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc5NDg5OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIEFQIEluc3RydWN0aW9uIEF2YWlsYWJpbGl0eSoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmhgLiBJJ20gZ3Vlc3NpbmcgdGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIG9yIGRlY2xhcmF0aW9uIG9mIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlYCB3b3VsZCByZXNpZGUuIEl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgaW5mb3JtYXRpb24gb24gdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGVzZSBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgaW4gdGhlIFMvMzkwIGFyY2hpdGVjdHVyZS4gSSdtIGV4cGVjdGluZyB0aGlzIGhlYWRlciBmaWxlIHRvIHByb3ZpZGUgdGhlIG1lY2hhbmlzbSwgd2hldGhlciBpdCdzIGEgbWFjcm8sIGEgc3RydWN0dXJlLCBvciBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCB0aGF0IGFsbG93cyB0aGUgY29kZSB0byBkZXRlcm1pbmUgd2hpY2ggQVAgaW5zdHJ1Y3Rpb25zIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgaGFyZHdhcmUuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGNoZWNrIGlzIHBlcmZvcm1lZCDigJMgaXMgaXQgYmFzZWQgb24gQ1BVIG1vZGVsLCBmZWF0dXJlIGJpdHMsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyB0aGUgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0ODAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NjowNi4wNjg3ODU4MjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdC8qKlxcbiAgODE6XFx0ICogYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIC0gVGVzdCBpZiBBUCBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZS5cXG4gIDgyOlxcdCAqXFxuICA4MzpcXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIEFQIGluc3RydWN0aW9ucyBhcmUgaW5zdGFsbGVkLCBvdGhlcndpc2UgZmFsc2UuXFxuICA4NDpcXHQgKi9cXG4gIDg1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKHZvaWQpXFxuICA4NjpcXHR7XFxuICA4NzpcXHRcXHR1bnNpZ25lZCBsb25nIHJlZzAgPSBBUF9NS1FJRCgwLCAwKTtcXG4gIDg4OlxcdFxcdHVuc2lnbmVkIGxvbmcgcmVnMSA9IDA7XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdGFzbSB2b2xhdGlsZShcXG4gIDkxOlxcdFxcdFxcdFxcXCJcXHRsZ3JcXHQwLCVbcmVnMF1cXFxcblxcXCJcXHRcXHQvKiBxaWQgaW50byBncjAgKi9cXG4gIDkyOlxcdFxcdFxcdFxcXCJcXHRsZ2hpXFx0MSwwXFxcXG5cXFwiXFx0XFx0XFx0LyogMCBpbnRvIGdyMSAqL1xcbiAgOTM6XFx0XFx0XFx0XFxcIlxcdGxnaGlcXHQyLDBcXFxcblxcXCJcXHRcXHRcXHQvKiAwIGludG8gZ3IyICovXFxuICA5NDpcXHRcXHRcXHRcXFwiXFx0Lmluc25cXHRycmUsMHhiMmFmMDAwMCwwLDBcXFxcblxcXCJcXHQvKiBQUUFQKFRBUFEpICovXFxuICA5NTpcXHRcXHRcXHRcXFwiMDpcXHRsYVxcdCVbcmVnMV0sMVxcXFxuXFxcIlxcdFxcdC8qIDEgaW50byByZWcxICovXFxuICA5NjpcXHRcXHRcXHRcXFwiMTpcXFxcblxcXCJcXG4gIDk3OlxcdFxcdFxcdEVYX1RBQkxFKDBiLCAxYilcXG4gIDk4OlxcdFxcdFxcdDogW3JlZzFdIFxcXCIrXFx1MDAyNmRcXFwiIChyZWcxKVxcbiAgOTk6XFx0XFx0XFx0OiBbcmVnMF0gXFxcImRcXFwiIChyZWcwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NjowNi4wNjg5Mjc0NTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc4OTQzNDMwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5OiBWRklPLUFQIGFuZCBRRU1VJ3MgQmVoYXZpb3IqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uIGFuZCBpdCBib2lscyBkb3duIHRvIGVzc2VudGlhbGx5IGNoZWNraW5nIGlmIGBQUUFQKFRBUFEpYCB0cmFwcyB3aGVuIGV4ZWN1dGVkLiBUaGF0J3MgdGhlIGNydXggb2YgdGhlIG1hdHRlci4gVGhlIHdob2xlIHBvaW50IGhpbmdlcyBvbiBob3cgUUVNVSBoYW5kbGVzIEFQIGluc3RydWN0aW9ucyB3aXRoaW4gYSBndWVzdCBlbnZpcm9ubWVudC4gSWYgUUVNVSAqZG9lc24ndCogZW11bGF0ZSBBUCBpbnN0cnVjdGlvbnMsIHRoZW4gYSB0cmFwIGlzIGd1YXJhbnRlZWQgYW5kIHdlIHJldHVybiBgZmFsc2VgLlxuXG5UaGUgYmlnIHF1ZXN0aW9uIGlzLCB3aGF0J3MgUUVNVSdzIGRlZmF1bHQgYmVoYXZpb3I/IERvZXMgaXQgZW11bGF0ZSBBUCBpbnN0cnVjdGlvbnMgcmlnaHQgb3V0IG9mIHRoZSBib3gsIG9yIGlzIHRoZXJlIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZXF1aXJlZD8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBRRU1VIHNvdXJjZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gc3BlY2lmaWMgdG8gczM5MHggQVAgaW5zdHJ1Y3Rpb24gaGFuZGxpbmcuIExldCdzIHNlZS4uLiBBaCwgdGhlcmUncyBhIGBhcD1vbmAgQ1BVIGZlYXR1cmUgbWVudGlvbmVkLiBJbnRlcmVzdGluZy4gU28gYnkgZGVmYXVsdCwgaXQgbWlnaHQgYmUgb2ZmIHVubGVzcyB0aGUgaG9zdCBtYWNoaW5lIGhhcyBBUCBzdXBwb3J0LCBvciBwZXJoYXBzIGl04oCZcyBlbXVsYXRlZCBhbnl3YXk/IFRoaXMgbmVlZHMgY2xhcmlmaWNhdGlvbi5cblxuV2FpdCBhIHNlY29uZOKApiAqc3l6a2FsbGVyKiBmdXp6ZXIgdGFyZ2V0cyBzMzkweCwgZG9lc24ndCBpdD8gVGhhdCBjaGFuZ2VzIHRoaW5ncy4gSWYgc3l6a2FsbGVyIGlzIHN1Y2Nlc3NmdWxseSBmdXp6aW5nIHMzOTB4LCBkb2VzIGl0IGV2ZW4gKnJlYWNoKiB0aGUgYHZmaW9fYXBgIGNvZGUgcGF0aD8gSWYgaXQgKmRvZXMqIHRoZW4gUUVNVSBtdXN0IGJlIGVtdWxhdGluZyBpdCwgcmlnaHQ/IEkgbmVlZCB0byBjaGVjayB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB0byBzZWUgaWYgdGhleSBpbmNsdWRlIGVudHJpZXMgcmVsYXRlZCB0byBgdmZpb19hcGAuIFRoYXQgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgYWxsIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA5MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ2OjIzLjk2MzI3Mzc0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjU5OTMzNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzeXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NjoyNC4wMzk4ODIzMTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU3MzI4MTExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYHZmaW9fYXBgIFJlYWNoYWJpbGl0eSBpbiBRRU1VKipcblxuT2theSwgSSBuZWVkIHRvIGJlIGNhcmVmdWwgaGVyZS4gVGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgSSBjYW4ndCB1c2UgYGdyZXBwZXJgIGZvciBgc3lzL2Agb3IgYW55dGhpbmcgd2l0aCBgc3l6X2AsIHNvIEkgbmVlZCB0byBzdGljayB3aXRoIHRoYXQuIEkgd2FzIGluaXRpYWxseSB0aGlua2luZyBhYm91dCB1c2luZyBgZ3JlcHBlcmAsIGJ1dCB0aGUgcHJvbXB0IGlzIGNsZWFyOiBJIG5lZWQgdG8gdXNlIGByZWFkLXN5ei1zcGVjYCBvciBgc3l6LWdyZXBwZXJgIGluc3RlYWQgZm9yIHN5emthbGxlci1zcGVjaWZpYyBzdHVmZi4gV2FpdC4uLiBJIGNhbid0IGZpbmQgYHJlYWQtc3l6LXNwZWNgIG9yIGBzeXotZ3JlcHBlcmAgaW4gdGhlIHRvb2xzIGF2YWlsYWJsZS4gVGhleSBhcmVuJ3QgaW4gdGhlIHByb3ZpZGVkIGxpc3QuIE9rYXksIEkgbWlzcmVhZCB0aGUgcHJvbXB0LCB3aGljaCBzYXlzLCBcIlVzZSB0aGUgcmVhZC1zeXotc3BlYyBhbmQgc3l6LWdyZXBwZXIgdG9vbHMgaW5zdGVhZFwiIGJ1dCBkb2Vzbid0IHByb3ZpZGUgdGhlbS4gSSBndWVzcyB0aGF0J3MgZmluZTsgSSdsbCBzaW1wbHkgYXZvaWQgc2VhcmNoaW5nIHN5emxhbmcuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgYHZmaW9fYXBgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCB1c3VhbGx5IHJlcXVpcmVzIGFjdHVhbCBBUCBoYXJkd2FyZSBwYXNzLXRocm91Z2guIFRoZSBxdWVzdGlvbiBpcywgY2FuIEkgbG9hZCB0aGUgYHZmaW9fYXBgIG1vZHVsZSBhbmQgY3JlYXRlIGFuIG1kZXYgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50IHdpdGhvdXQgdGhhdCBBUCBoYXJkd2FyZT8gSSByZWNhbGwgdGhhdCBgdmZpb19hcF9pbml0YCByZXR1cm5zIGAtRU5PREVWYCBpZiBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCByZXR1cm5zIGZhbHNlLiBJZiB0aGF0IGAtRU5PREVWYCBoYXBwZW5zLCB0aGVuIHRoZSBkcml2ZXIgKndvbid0KiBsb2FkLCB3aGljaCBtZWFucyBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuXG5cblNvIHRoZSBjb3JlIHF1ZXN0aW9uIGlzOiBkb2VzIFFFTVUgZW11bGF0ZSBBUCBpbnN0cnVjdGlvbnM/IFFFTVUgaXRzZWxmIGhhbmRsZXMgdGhlbSBieSBLVk0sIGFuZCBpZiBLVk0gZG9lc24ndCBzdXBwb3J0IEFQIGJlY2F1c2UgdGhlIGhvc3QgZG9lc24ndCBoYXZlIGl0LCBLVk0gd2lsbCBub3QgdGVsbCB0aGUgZ3Vlc3QgaXQgaXMgdGhlcmUuIEluIHRoYXQgY2FzZSwgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAgd291bGQgcmV0dXJuIGZhbHNlLiBUaGVyZWZvcmUsIHRoZSBgdmZpb19hcGAgZHJpdmVyICpjYW5ub3QqIGJlIGxvYWRlZCB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIGd1ZXN0IGlmIHRoZSBob3N0IGRvZXNuJ3QgaGF2ZSBBUCBoYXJkd2FyZS4gVGhhdCBsb29rcyBsaWtlIHRoZSBhbnN3ZXIuIE5vdywgaXMgdGhlcmUgYW55IGtpbmQgb2Ygc29mdHdhcmUgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwgdG8gYWxsb3cgZm9yIHRoaXM/IExldCBtZSBjaGVjayBmb3IgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2MTcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDU6NDY6MzEuNjEzMTY2Njk4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDcwNzk0NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFwX2luc3RydWN0aW9uc19hdmFpbGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oPTcyPXVuaW9uIGFwX3F1ZXVlX3N0YXR1c19yZWcge1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODAtLyoqXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg6ODE6ICogYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIC0gVGVzdCBpZiBBUCBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZS5cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04Mi0gKlxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODQtICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg6ODU6c3RhdGljIGlubGluZSBib29sIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUodm9pZClcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04Ni17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTEwNT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9jcnlwdG8oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTEtXFx0Y2FzZSBLVk1fUzM5MF9WTV9DUllQVE9fRU5BQkxFX0FQSUU6XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNTI6XFx0XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1My1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1OC1cXHRjYXNlIEtWTV9TMzkwX1ZNX0NSWVBUT19ESVNBQkxFX0FQSUU6XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNTk6XFx0XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE2MC1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjEwMD1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX2hhc19hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMTU2LVxcdFxcdGNhc2UgS1ZNX1MzOTBfVk1fQ1JZUFRPX0RJU0FCTEVfQVBJRTpcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjE1NzpcXHRcXHRcXHRyZXQgPSBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkgPyAwIDogLUVOWElPO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMTU4LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMxMDE9c3RhdGljIGludCBrdm1fczM5MF9hcHhhX2luc3RhbGxlZCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMDQtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxMDU6XFx0aWYgKGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTA2LVxcdFxcdGlmIChhcF9xY2koXFx1MDAyNmluZm8pID09IDApXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz01OTI9c3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy02MDAtXFx0LyogVmVyaWZ5IHRoYXQgdGhlIEFQIGluc3RydWN0aW9uIGFyZSBhdmFpbGFibGUgKi9cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo2MDE6XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjAyLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjU3OD1zdGF0aWMgaW50IF9faW5pdCBhcF9tb2R1bGVfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNTgxLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjU4MjpcXHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjU4My1cXHRcXHRwcl93YXJuKFxcXCJUaGUgaGFyZHdhcmUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgQVAgaW5zdHJ1Y3Rpb25zXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0xNjc9c3RhdGljIGludCBfX2luaXQgdmZpb19hcF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTc1LVxcdC8qIElmIHRoZXJlIGFyZSBubyBBUCBpbnN0cnVjdGlvbnMsIHRoZXJlIGlzIG5vdGhpbmcgdG8gcGFzcyB0aHJvdWdoLiAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxNzY6XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE3Ny1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDU6NDY6MzUuMDgzOTY4NzM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjIyMDYyNTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBWRklPLUFQIERyaXZlciBhbmQgSXRzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBkZWFsLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgc3BpZGV5IHNlbnNlcyBhcmUgdGluZ2xpbmcuIFRoZSBgYXBfYnVzYCBpdHNlbGYgd29uJ3QgZXZlbiBpbml0aWFsaXplIHVubGVzcyBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCByZXR1cm5zIHRydWUuIEFuZCBmcm9tIHdoYXQgSSBzZWUgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmNgLCBpZiBpdCdzIGZhbHNlLCB0aGUgc3lzdGVtIHRocm93cyBhIHdhcm5pbmcgYW5kIHJldHVybnMgYC1FTk9ERVZgLiBUaGF0IG1lYW5zIHRoZSBlbnRpcmUgQVAgc3Vic3lzdGVtICpyZXF1aXJlcyogc29tZSBmb3JtIG9mIGhhcmR3YXJlIHN1cHBvcnQuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIFN5emthbGxlciwgd2hpY2ggSSBrbm93IGlzIHRoZSBmdXp6aW5nIHRvb2wgYmVpbmcgdXNlZCwgcnVuIG9uIHJlYWwgczM5MHggaGFyZHdhcmUgb3IgaW4gUUVNVT8gQWgsIHJpZ2h0LCBTeXprYWxsZXIgdXNlcyBRRU1VIGZvciBzMzkweC4gU28gdGhlIGtleSBxdWVzdGlvbiBpcywgZG9lcyBRRU1VIGVtdWxhdGUgQVAgaW5zdHJ1Y3Rpb25zPyBMZXQncyBzZWUuLi4gUUVNVSBhbmQgQVAgaW5zdHJ1Y3Rpb25zLiBJIGRvbid0IHJlY2FsbCBzZWVpbmcgYW55dGhpbmcgc3BlY2lmaWMuIEkgcmVtZW1iZXIgcmVhZGluZyBpbiB0aGUgcHJvbXB0IHRoYXQgY2VydGFpbiBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiBRRU1VLlxuXG5UaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9ucyB0aGF0IGNvZGUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLCBzaG91bGRuJ3QgYmUgY29uc2lkZXJlZCBmb3IgZnV6emluZy4gQWxzbywgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCBsaWtlIGNlcnRhaW4gUENJZSBjYXJkcywgYXJlIGFsc28gb3V0LlxuXG5BaCwgVkZJTyBBUC4gSXQncyBkZXNpZ25lZCBmb3IgcGFzc2luZyB0aHJvdWdoIGFjdHVhbCBwaHlzaWNhbCBBUCBoYXJkd2FyZSwgdGhvc2UgSUJNIFogY3J5cHRvZ3JhcGhpYyBjb3Byb2Nlc3NvcnMsIHRvIGEgZ3Vlc3QgVk0uIFRoYXQgbWVhbnMgaXQgbmVlZHMgdGhlIHBoeXNpY2FsIGhhcmR3YXJlICpvbiB0aGUgaG9zdCouIFN0YW5kYXJkIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBBUCBoYXJkd2FyZSwgaXQganVzdCBzdXBwb3J0cyBwYXNzaW5nIGl0IHRocm91Z2ggdmlhIEtWTSBpZiB0aGUgaG9zdCBoYXMgaXQuIFNvIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgd2l0aG91dCB0aGF0IGRlZGljYXRlZCBoYXJkd2FyZSwgdGhpcyBjb2RlIHBhdGggaXMgc2ltcGx5IGluYWNjZXNzaWJsZS5cblxuTGV0IG1lIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9uczsgSWYgUUVNVSBjb3VsZCBlbXVsYXRlIEFQIGluc3RydWN0aW9ucywgaXQgd291bGQgYmUgaW4gUUVNVSdzIHNvdXJjZSBjb2RlLiBJIGRvbid0IGhhdmUgdGhhdCBzb3VyY2UgY29kZSBpbiBmcm9udCBvZiBtZSwgYnV0IEkgKmtub3cqIHRob3NlIEFQIGluc3RydWN0aW9ucyBhcmUgdmVyeSBzcGVjaWZpYyB0byBJQk0ncyBjcnlwdG8gY2FyZHMuIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBjcnlwdG8gY2FyZHMgdGhlbXNlbHZlczsgaXQganVzdCBoYW5kbGVzIHRoZSBWRklPLUFQIGRldmljZSBwYXNzLXRocm91Z2guIFRoZXJlZm9yZSwgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAgd2lsbCByZXR1cm4gZmFsc2UsIHRoZSBgdmZpb19hcF9pbml0YCBmdW5jdGlvbiB3aWxsIHJldHVybiBgLUVOT0RFVmAsIGFuZCB0aGUgZHJpdmVyIHdvbid0IGV2ZW4gbG9hZC4gVGhlIGNvZGUgaW4gYHZmaW9fYXBfb3BzLmNgIGlzIHNpbXBseSB1bnJlYWNoYWJsZS5cblxuSSBiZXR0ZXIgdmVyaWZ5IHRoZXJlJ3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIG9mIEFQIGluIHRoZSBrZXJuZWwgdGhhdCBJJ20gbWlzc2luZy4gTGV0J3Mgc2VlLi4uIEkgc2VhcmNoIGZvciBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZWAgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBvbmx5IGluIGBhcF9idXMuY2AsIGB2ZmlvX2FwX2Rydi5jYCwgYW5kIGBrdm0tczM5MC5jYC4gTm90aGluZyBsaWtlIGBhcF9od3NpbWAgb3IgYW55dGhpbmcgc3VnZ2VzdGluZyBhIHNvZnR3YXJlIGZhbGxiYWNrLiBOb3BlLCBzYWZlIHRvIHNheSB0aGlzIG5lZWRzIHRoYXQgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZS5cblxuT2theSwgbGV0IG1lIHJldmlldyB0aGUgcGF0Y2ggaXRzZWxmIGp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLiBJdCdzIG9ubHkgbW9kaWZ5aW5nIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLCBzcGVjaWZpY2FsbHkgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCBhbmQgYHZmaW9fYXBfbWRldl91bnNldF9rdm1gLiBCb3RoIGFyZSBwYXJ0IG9mIHRoZSBWRklPIEFQIGRyaXZlciwgd2hpY2ggaGluZ2VzIG9uIHRoYXQgQVAgaGFyZHdhcmUuIFNvIGl0J3MgYSBjbGVhciBjYXNlIG9mIFwiY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VXCIgYW5kIFwidmVuZG9yLXNwZWNpZmljIC4uLiBkcml2ZXJzIC4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgLi4uIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlwiIEV2ZW4gdGhvdWdoIGl0J3MgQVAgYnVzIGluc3RlYWQgb2YgUENJZSwgdGhlIHByaW5jaXBsZSBpcyB0aGUgc2FtZS5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJJ2xsIG1ha2Ugc3VyZSB0byBwcm92aWRlIHRoaXMgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDg1MSwiT3V0cHV0VG9rZW5zIjoxNDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDU6NDY6NDYuNzA2MDM0NjU3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgZm9yIHMzOTB4LCB3aGljaCBpcyB1c2VkIHRvIHBhc3MgdGhyb3VnaCBwaHlzaWNhbCBJQk0gWiBjcnlwdG9ncmFwaGljIGNvcHJvY2Vzc29ycyB0byB2aXJ0dWFsIG1hY2hpbmVzLiBUaGUgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gKGB2ZmlvX2FwX2luaXRgKSBleHBsaWNpdGx5IGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIEFQIGluc3RydWN0aW9ucyB2aWEgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAsIHdoaWNoIHJldHVybnMgZmFsc2UgdW5sZXNzIHBoeXNpY2FsIEFQIGhhcmR3YXJlIGlzIHByZXNlbnQgYW5kIHBhc3NlZCB0aHJvdWdoIGJ5IHRoZSBob3N0LiBTdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyBkbyBub3QgZW11bGF0ZSBBUCBoYXJkd2FyZSBpbiBzb2Z0d2FyZS4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgd2l0aG91dCBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkweCwgd2hpY2ggaXMgdXNlZCB0byBwYXNzIHRocm91Z2ggcGh5c2ljYWwgSUJNIFogY3J5cHRvZ3JhcGhpYyBjb3Byb2Nlc3NvcnMgdG8gdmlydHVhbCBtYWNoaW5lcy4gVGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIChgdmZpb19hcF9pbml0YCkgZXhwbGljaXRseSBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiBBUCBpbnN0cnVjdGlvbnMgdmlhIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgLCB3aGljaCByZXR1cm5zIGZhbHNlIHVubGVzcyBwaHlzaWNhbCBBUCBoYXJkd2FyZSBpcyBwcmVzZW50IGFuZCBwYXNzZWQgdGhyb3VnaCBieSB0aGUgaG9zdC4gU3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgZG8gbm90IGVtdWxhdGUgQVAgaGFyZHdhcmUgaW4gc29mdHdhcmUuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHdpdGhvdXQgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowggxbh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 05:00:48 +0000 UTC FinishedAt: 2026-08-01 05:46:47 +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+CgkJCTx0ZD4yMDI2LzA4LzAxIDA1OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkweCwgd2hpY2ggaXMgdXNlZCB0byBwYXNzIHRocm91Z2ggcGh5c2ljYWwgSUJNIFogY3J5cHRvZ3JhcGhpYyBjb3Byb2Nlc3NvcnMgdG8gdmlydHVhbCBtYWNoaW5lcy4gVGhlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiAoYHZmaW9fYXBfaW5pdGApIGV4cGxpY2l0bHkgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgQVAgaW5zdHJ1Y3Rpb25zIHZpYSBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCwgd2hpY2ggcmV0dXJucyBmYWxzZSB1bmxlc3MgcGh5c2ljYWwgQVAgaGFyZHdhcmUgaXMgcHJlc2VudCBhbmQgcGFzc2VkIHRocm91Z2ggYnkgdGhlIGhvc3QuIFN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIGRvIG5vdCBlbXVsYXRlIEFQIGhhcmR3YXJlIGluIHNvZnR3YXJlLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB3aXRob3V0IHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNhNjZkM2I4ZWU0MzQ3M2Y2ZDc3ZDczNWEzMjRiMzhhMmQ5MTNkMTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDA1OjQ1OjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuaW5kZXggNDRiM2ExZGNjMWIzNi4uZjk0NjAzMTBkNDdiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5AQCAtMTgyMSwyNyAmIzQzOzE4MjEsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnZmaW9fYXBfbWRldl9hdHRyX2dyb3Vwc1tdID0ge1xuIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3NldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbiBcdFx0XHRcdHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm07XG4tXG4gXHRpZiAoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiZCkge1xuIFx0XHRkb3duX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuJiM0MztcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2spIHtcbiYjNDM7XHRcdFx0dXBfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XG4mIzQzO1x0XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0XHR9XG4gXHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2sgPSBcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2VwcWFwX2hvb2s7XG4tXHRcdHVwX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuIFxuIFx0XHRnZXRfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcbi1cbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtLCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuLVx0XHRcdGlmIChtICE9IG1hdHJpeF9tZGV2IFx1MDAyNlx1MDAyNiBtLVx1MDAzZWt2bSA9PSBrdm0pIHtcbi1cdFx0XHRcdHJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcbi1cdFx0XHRcdHJldHVybiAtRVBFUk07XG4tXHRcdFx0fVxuLVx0XHR9XG4tXG4gXHRcdGt2bV9nZXRfa3ZtKGt2bSk7XG4gXHRcdG1hdHJpeF9tZGV2LVx1MDAzZWt2bSA9IGt2bTtcbiBcdFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcbi1cbiBcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuJiM0MztcdFx0dXBfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0xODg1LDcgJiM0MzsxODc4LDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuIFx0aWYgKGt2bSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiZCkge1xuIFx0XHRkb3duX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuIFx0XHRrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rID0gTlVMTDtcbi1cdFx0dXBfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XG4gXG4gXHRcdGdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuIFxuQEAgLTE4OTUsNiAmIzQzOzE4ODcsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfdW5zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXG4gXHRcdG1hdHJpeF9tZGV2LVx1MDAzZWt2bSA9IE5VTEw7XG4gXG4gXHRcdHJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcbiYjNDM7XHRcdHVwX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuIFx0fVxuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgZm9yIHMzOTB4LCB3aGljaCBpcyB1c2VkIHRvIHBhc3MgdGhyb3VnaCBwaHlzaWNhbCBJQk0gWiBjcnlwdG9ncmFwaGljIGNvcHJvY2Vzc29ycyB0byB2aXJ0dWFsIG1hY2hpbmVzLiBUaGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIChgdmZpb19hcF9pbml0YCkgZXhwbGljaXRseSBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiBBUCBpbnN0cnVjdGlvbnMgdmlhIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgLCB3aGljaCByZXR1cm5zIGZhbHNlIHVubGVzcyBwaHlzaWNhbCBBUCBoYXJkd2FyZSBpcyBwcmVzZW50IGFuZCBwYXNzZWQgdGhyb3VnaCBieSB0aGUgaG9zdC4gU3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgZG8gbm90IGVtdWxhdGUgQVAgaGFyZHdhcmUgaW4gc29mdHdhcmUuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHdpdGhvdXQgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2E2NmQzYjhlZTQzNDczZjZkNzdkNzM1YTMyNGIzOGEyZDkxM2QxNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMDU6NDU6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKaW5kZXggNDRiM2ExZGNjMWIzNi4uZjk0NjAzMTBkNDdiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwpAQCAtMTgyMSwyNyAmIzQzOzE4MjEsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnZmaW9fYXBfbWRldl9hdHRyX2dyb3Vwc1tdID0gewogc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LAogCQkJCXN0cnVjdCBrdm0gKmt2bSkKIHsKLQlzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm07Ci0KIAlpZiAoa3ZtLSZndDthcmNoLmNyeXB0by5jcnljYmQpIHsKIAkJZG93bl93cml0ZSgmYW1wO2t2bS0mZ3Q7YXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTsKJiM0MzsJCWlmIChrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9vaykgewomIzQzOwkJCXVwX3dyaXRlKCZhbXA7a3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pOwomIzQzOwkJCXJldHVybiAtRVBFUk07CiYjNDM7CQl9CiAJCWt2bS0mZ3Q7YXJjaC5jcnlwdG8ucHFhcF9ob29rID0gJmFtcDttYXRyaXhfbWRldi0mZ3Q7cHFhcF9ob29rOwotCQl1cF93cml0ZSgmYW1wO2t2bS0mZ3Q7YXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTsKIAogCQlnZXRfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0LCBub2RlKSB7Ci0JCQlpZiAobSAhPSBtYXRyaXhfbWRldiAmYW1wOyZhbXA7IG0tJmd0O2t2bSA9PSBrdm0pIHsKLQkJCQlyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7Ci0JCQkJcmV0dXJuIC1FUEVSTTsKLQkJCX0KLQkJfQotCiAJCWt2bV9nZXRfa3ZtKGt2bSk7CiAJCW1hdHJpeF9tZGV2LSZndDtrdm0gPSBrdm07CiAJCXZmaW9fYXBfbWRldl91cGRhdGVfZ3Vlc3RfYXBjYihtYXRyaXhfbWRldik7Ci0KIAkJcmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pOwomIzQzOwkJdXBfd3JpdGUoJmFtcDtrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xODg1LDcgJiM0MzsxODc4LDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KQogCWlmIChrdm0gJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2guY3J5cHRvLmNyeWNiZCkgewogCQlkb3duX3dyaXRlKCZhbXA7a3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pOwogCQlrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9vayA9IE5VTEw7Ci0JCXVwX3dyaXRlKCZhbXA7a3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pOwogCiAJCWdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pOwogCkBAIC0xODk1LDYgJiM0MzsxODg3LDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KQogCQltYXRyaXhfbWRldi0mZ3Q7a3ZtID0gTlVMTDsKIAogCQlyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7CiYjNDM7CQl1cF93cml0ZSgmYW1wO2t2bS0mZ3Q7YXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTsKIAl9CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipWRklPIEFQIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYC4gSXQmIzM5O3MgdHdlYWtpbmcgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCBhbmQgYHZmaW9fYXBfbWRldl91bnNldF9rdm1gLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIHMzOTAtc3BlY2lmaWMsIGRlYWxpbmcgd2l0aCB0aGUgVkZJTyBBUCDigJMgdGhhdCBhZGp1bmN0IHByb2Nlc3NvciBtYXRyaXggaGFyZHdhcmUuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBDYW4gSSBldmVuICpiZWdpbiogdG8gZnV6eiB0aGlzIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cD8KClFFTVUgaGFuZGxlcyBzMzkweCBlbXVsYXRpb24sIGJ1dCBkb2VzIGl0IGZhaXRoZnVsbHkgbW9kZWwgdGhlIEFQIG1hdHJpeD8gVGhhdCYjMzk7cyB0aGUgY29yZSBodXJkbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBleGlzdGluZyBzeXprYWxsZXIgY292ZXJhZ2UgZm9yIHRoaXMgYXJlYSwgb3IgaWYgdGhlcmUmIzM5O3MgYSBmZWFzaWJsZSBhdHRhY2sgcGF0aC4KCldhaXQsIHN5emthbGxlciAqZG9lcyogZnV6eiBzMzkweCwgYnV0IHRoYXQgb2Z0ZW4gcmVsaWVzIG9uIHNwZWNpZmljIGhhcmR3YXJlIG9yIGNhcmVmdWxseSBjb25zdHJ1Y3RlZCBRRU1VIGNvbmZpZ3VyYXRpb25zLiBUaGUgUUVNVSBkb2N1bWVudGF0aW9uIGhpbnRzIGF0IHNvbWUgVkZJTy1BUCBzdXBwb3J0LCBidXQgdGhhdCBzb3VuZHMgbGlrZSBpdCB3b3VsZCBpbnZvbHZlIHBhc3NpbmcgdGhyb3VnaCBob3N0IGhhcmR3YXJlIHRvIHRoZSBndWVzdCB1c2luZyBWRklPLiBUaGlzIHN1Z2dlc3RzIHRoYXQgaXQgd291bGQgdHlwaWNhbGx5IHJlcXVpcmUgYWN0dWFsIGhhcmR3YXJlIG9yIHBvdGVudGlhbGx5IGEgbWVkaWF0ZWQgZGV2aWNlIChtZGV2KSBmcmFtZXdvcmsuCgpOb3cgSSYjMzk7bSBkaWdnaW5nIGRlZXBlciBpbnRvIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgIGFuZCBub3RpY2UgdGhlIHVzZSBvZiBgYXBfbWF0cml4X21kZXZgLiBUaGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uOiBpcyBpdCBldmVuIHBvc3NpYmxlIHRvIGNvbmp1cmUgYW4gbWRldiB3aXRob3V0IHBoeXNpY2FsbHkgcHJlc2VudCBBUCBoYXJkd2FyZT8gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgcmVsYXRlZCBmaWxlcyBsaWtlIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNsdWVzIHRvIGNyZWF0aW5nIGEgc2ltdWxhdGVkIGRldmljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcF9tYXRyaXhfbWRldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zNC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzozNTpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzYtc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcmVzZXRfcWxpc3Qoc3RydWN0IGxpc3RfaGVhZCAqcWxpc3QpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz03Nj1zdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTg3LSAqXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6ODg6ICogQG1hdHJpeF9tZGV2OiBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgYXBfbWF0cml4X21kZXYgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIEFQXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODktICpcdFx0IGNvbmZpZ3VyYXRpb24gZGF0YSB0byB1c2UgdG8gdXBkYXRlIGEgS1ZNIGd1ZXN0JiMzOTtzIEFQQ0IuXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTk5LSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjEwMDpzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X3VwZGF0ZV9sb2Nrc19mb3JfbWRldihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEwMS17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTExMS0gKlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjExMjogKiBAbWF0cml4X21kZXY6IGEgcG9pbnRlciB0byBhIHN0cnVjdCBhcF9tYXRyaXhfbWRldiBvYmplY3QgY29udGFpbmluZyB0aGUgQVBcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMTMtICpcdFx0IGNvbmZpZ3VyYXRpb24gZGF0YSB0byB1c2UgdG8gdXBkYXRlIGEgS1ZNIGd1ZXN0JiMzOTtzIEFQQ0IuXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEyMi0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMjM6c3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9tZGV2KHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTI0LXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTQ2LSAqXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTQ3OiAqIFJldHVybjogdGhlIGFwX21hdHJpeF9tZGV2IG9iamVjdCB0byB3aGljaCBAYXBxbiBpcyBhc3NpZ25lZCBvciBOVUxMIGlmIEBhcHFuXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTQ4OiAqXHQgICBpcyBub3QgYXNzaWduZWQgdG8gYW4gYXBfbWF0cml4X21kZXYuXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTQ5LSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE1MDpzdGF0aWMgc3RydWN0IGFwX21hdHJpeF9tZGV2ICpnZXRfdXBkYXRlX2xvY2tzX2J5X2FwcW4oaW50IGFwcW4pXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTUxLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNTI6XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE1My1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg1LSAqXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTg2OiAqIE5vdGU6IGlmIEBxdWV1ZSBpcyBub3QgbGlua2VkIHRvIGFuIGFwX21hdHJpeF9tZGV2IG9iamVjdCwgdGhlIEtWTSBsb2NrXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg3LSAqXHQgIHdpbGwgbm90IGJlIHRha2VuLlxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMDY9c3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICp2ZmlvX2FwX21kZXZfZ2V0X3F1ZXVlKFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNzpcdFx0XHRcdFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDgtXHRcdFx0XHRcdGludCBhcHFuKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz01ODE9c3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTU4OC1cdFx0XHQgICAgICAgLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9RX05PVF9BVkFJTCwgfTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo1ODk6XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTU5MC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjEwLVx0bWF0cml4X21kZXYgPSBjb250YWluZXJfb2YodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjYxMTpcdFx0XHRcdCAgIHN0cnVjdCBhcF9tYXRyaXhfbWRldiwgcHFhcF9ob29rKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02MTItXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTY0NT1zdGF0aWMgdm9pZCB2ZmlvX2FwX21hdHJpeF9pbml0KHN0cnVjdCBhcF9jb25maWdfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjUyLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjY1MzpzdGF0aWMgdm9pZCBzaWduYWxfZ3Vlc3RfYXBfY2ZnX2NoYW5nZWQoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02NTQte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02NTgtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NjU5OnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91cGRhdGVfZ3Vlc3RfYXBjYihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY2MC17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY3MC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo2NzE6c3RhdGljIGJvb2wgdmZpb19hcF9tZGV2X2ZpbHRlcl9jZG9tcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY3Mi17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTY4Mz1zdGF0aWMgYm9vbCBfcXVldWVfcGFzc2FibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTcxOS0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo3MjA6c3RhdGljIGJvb2wgdmZpb19hcF9tZGV2X2ZpbHRlcl9tYXRyaXgoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03MjEtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqYXBtX2ZpbHRlcmVkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz03NzY9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfaW5pdF9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc3Ny17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Nzc4Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Nzc5Olx0XHRjb250YWluZXJfb2YodmRldiwgc3RydWN0IGFwX21hdHJpeF9tZGV2LCB2ZGV2KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03ODAtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTc5MD1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9wcm9iZShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzkxLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo3OTI6XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc5My1cdGludCByZXQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzk0LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjc5NTpcdG1hdHJpeF9tZGV2ID0gdmZpb19hbGxvY19kZXZpY2UoYXBfbWF0cml4X21kZXYsIHZkZXYsIFx1MDAyNm1kZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc5Ni1cdFx0XHRcdFx0XHUwMDI2dmZpb19hcF9tYXRyaXhfZGV2X29wcyk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTgxNS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo4MTY6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2xpbmtfcXVldWUoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04MTctXHRcdFx0XHQgICAgc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTgyNS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo4MjY6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2xpbmtfYXBxbihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LCBpbnQgYXBxbilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04Mjcte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz04Mzk9c3RhdGljIHZvaWQgdmZpb19hcF91bmxpbmtfbWRldl9mcl9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODQzLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjg0NDpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfdW5saW5rX2ZyX3F1ZXVlcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTg0NS17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTg2MD1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04NjEte1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjg2MjpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2bWRldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTg2My1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODc5LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjg4MDpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfbG9nX3NoYXJpbmdfZXJyKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqYXNzaWduZWUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6ODgxOlx0XHRcdFx0XHQgc3RydWN0IGFwX21hdHJpeF9tZGV2ICphc3NpZ25lZF90byxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04ODItXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nICphcG0sIHVuc2lnbmVkIGxvbmcgKmFxbSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODkzLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjg5NDpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfbG9nX2luX3VzZV9lcnIoc3RydWN0IGFwX21hdHJpeF9tZGV2ICphc3NpZ25lZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04OTUtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmFwbSwgdW5zaWduZWQgbG9uZyAqYXFtKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy05MjEtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6OTIyOnN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3ZlcmlmeV9ub19zaGFyaW5nKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqYXNzaWduZWUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtOTIzLVx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgKm1kZXZfYXBtLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy05MjUte1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjkyNjpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqYXNzaWduZWRfdG87XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtOTI3LVx0REVDTEFSRV9CSVRNQVAoYXBtLCBBUF9ERVZJQ0VTKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtOTc2LSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjk3NzpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl92YWxpZGF0ZV9tYXNrcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTk3OC17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTk4Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo5ODg6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2xpbmtfYWRhcHRlcihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTk4OS1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgYXBpZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtOTk3LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjk5ODpzdGF0aWMgdm9pZCBjb2xsZWN0X3F1ZXVlc190b19yZXNldChzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTk5OS1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFwaWQsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEwMTEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTAxMjpzdGF0aWMgdm9pZCByZXNldF9xdWV1ZXNfZm9yX2FwaWQoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMDEzLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFwaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEwMjEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTAyMjpzdGF0aWMgaW50IHJlc2V0X3F1ZXVlc19mb3JfYXBpZHMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMDIzLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nICphcG1fcmVzZXQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTEwNzM9c3RhdGljIHNzaXplX3QgYXNzaWduX2FkYXB0ZXJfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMDc5LVx0REVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMDgwOlx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEwODEtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTExMjM9c3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTEyNDoqdmZpb19hcF91bmxpbmtfYXBxbl9mcl9tZGV2KHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTEyNS1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYXBpZCwgdW5zaWduZWQgbG9uZyBhcHFpKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMTQ1LSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjExNDY6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3VubGlua19hZGFwdGVyKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTE0Ny1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhcGlkLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMTYzLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjExNjQ6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfYWRhcHRlcnMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMTY1LVx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKmFwaWRzKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMTk0LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjExOTU6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfYWRhcHRlcihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTExOTYtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFwaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTEyMjA9c3RhdGljIHNzaXplX3QgdW5hc3NpZ25fYWRhcHRlcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEyMjUtXHR1bnNpZ25lZCBsb25nIGFwaWQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTIyNjpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMjI3LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xMjUxPXN0YXRpYyBERVZJQ0VfQVRUUl9XTyh1bmFzc2lnbl9hZGFwdGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMjUyLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjEyNTM6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2xpbmtfZG9tYWluKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTI1NC1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhcHFpKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xMjk3PXN0YXRpYyBzc2l6ZV90IGFzc2lnbl9kb21haW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMzAzLVx0REVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMzA0Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEzMDUtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTEzNDU9c3RhdGljIERFVklDRV9BVFRSX1dPKGFzc2lnbl9kb21haW4pO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEzNDYtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTM0NzpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfdW5saW5rX2RvbWFpbihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEzNDgtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBhcHFpLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMzY0LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjEzNjU6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfZG9tYWlucyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEzNjYtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nICphcHFpcylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTM5NS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMzk2OnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2RvbWFpbihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEzOTctXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXBxaSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTQyMT1zdGF0aWMgc3NpemVfdCB1bmFzc2lnbl9kb21haW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNDI2LVx0dW5zaWduZWQgbG9uZyBhcHFpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE0Mjc6XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTQyOC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTQ2OT1zdGF0aWMgc3NpemVfdCBhc3NpZ25fY29udHJvbF9kb21haW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNDc0LVx0dW5zaWduZWQgbG9uZyBpZDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNDc1Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE0NzYtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE1MjM9c3RhdGljIHNzaXplX3QgdW5hc3NpZ25fY29udHJvbF9kb21haW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNTI4LVx0dW5zaWduZWQgbG9uZyBkb21pZDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNTI5Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE1MzAtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE1NjE9c3RhdGljIHNzaXplX3QgY29udHJvbF9kb21haW5zX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNTY1LVx0dW5zaWduZWQgbG9uZyBpZDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNTY2Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE1NjctXHR1bnNpZ25lZCBsb25nIG1heF9kb21pZCA9IG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG1fbWF4O1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xNjA4PXN0YXRpYyBzc2l6ZV90IG1hdHJpeF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE2MTEtXHRzc2l6ZV90IG5jaGFycztcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNjEyOlx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE2MTMtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE2MjI9c3RhdGljIHNzaXplX3QgZ3Vlc3RfbWF0cml4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNjI1LVx0c3NpemVfdCBuY2hhcnM7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTYyNjpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNjI3LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xNjQyPXN0YXRpYyBzc2l6ZV90IGFwX2NvbmZpZ19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE2NDQte1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE2NDU6XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTY0Ni1cdGludCBpZHggPSAwO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xNjYwPXN0YXRpYyBpbnQgcGFyc2VfYml0bWFwKGNoYXIgKipzdHJidWZwdHIsIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgaW50IG5iaXRzKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNjcxLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE2NzI6c3RhdGljIGludCBhcF9tYXRyaXhfb3ZlcmZsb3dfY2hlY2soc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNjczLXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTcwNT1zdGF0aWMgc3NpemVfdCBhcF9jb25maWdfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTcwNy17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTcwODpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNzA5LVx0c3RydWN0IGFwX21hdHJpeCBtX25ldywgbV9vbGQsIG1fYWRkZWQsIG1fcmVtb3ZlZDtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTgwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4MjAtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTgyMTpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTgyMi1cdFx0XHRcdHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg0Mi1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxODQzOnN0YXRpYyB2b2lkIHVubWFwX2lvdmEoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiwgdTY0IGlvdmEsIHU2NCBsZW5ndGgpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg0NC17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE4NTU9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2RtYV91bm1hcChzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYsIHU2NCBpb3ZhLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xODU3LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxODU4Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTg1OTpcdFx0Y29udGFpbmVyX29mKHZkZXYsIHN0cnVjdCBhcF9tYXRyaXhfbWRldiwgdmRldik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg2MC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg3My0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxODc0OnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91bnNldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xODc1LXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTk4MD1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwMDktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjAxMDpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDExLXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjA0Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA0Ny17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA0ODpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNDk6XHRcdGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYsIHZkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNTAtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIwNTc9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA1OC17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA1OTpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNjA6XHRcdGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYsIHZkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNjEtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIwNjU9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3JlcXVlc3Qoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2LCB1bnNpZ25lZCBpbnQgY291bnQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNjctXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB2ZGV2LVx1MDAzZWRldjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMDY4Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDY5LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNzA6XHRtYXRyaXhfbWRldiA9IGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYsIHZkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNzEtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIxNDM9c3RhdGljIGludCB2ZmlvX2FwX2lycV9zZXRfaW5pdChzdHJ1Y3QgdmZpb19pcnFfc2V0ICppcnFfc2V0LCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjE2NC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMTY1OnN0YXRpYyBpbnQgdmZpb19hcF9zZXRfcmVxdWVzdF9pcnEoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMTY2LVx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIxOTgtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjE5OTpzdGF0aWMgaW50IHZmaW9fYXBfc2V0X2NmZ19jaGFuZ2VfaXJxKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIyMDAte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjMxLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIyMzI6c3RhdGljIGludCB2ZmlvX2FwX3NldF9pcnFzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjIzMy1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIyNTc9c3RhdGljIHNzaXplX3QgdmZpb19hcF9tZGV2X2lvY3RsKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjI1OS17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjI2MDpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIyNjE6XHRcdGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYsIHZkZXYpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIyNjItXHRpbnQgcmV0O1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjg2LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIyODc6c3RhdGljIHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjg4LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMjg5Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjkwLVx0dW5zaWduZWQgbG9uZyBhcGlkID0gQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjMwMj1zdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzMDgtXHR1bnNpZ25lZCBsb25nIGFwaWQsIGFwcWk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjMwOTpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjMxMC1cdHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2ID0gdG9fYXBfZGV2KGRldik7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0MDk9aW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQxMy1cdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQxNDpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQxNS1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjQ2Mz12b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0NjYtXHRzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDY3Olx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDY4LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNTI2PWludCB2ZmlvX2FwX21kZXZfcmVzb3VyY2VfaW5fdXNlKHVuc2lnbmVkIGxvbmcgKmFwbSwgdW5zaWduZWQgbG9uZyAqYXFtKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTQzLSAqXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjU0NDogKiBAbWF0cml4X21kZXY6IGFuIGFwX21hdHJpeF9tZGV2IG9iamVjdCBhdHRhY2hlZCB0byBhIEtWTSBndWVzdC5cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTQ1LSAqIEBhcHJlbTogdGhlIGFkYXB0ZXJzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgaG9zdCYjMzk7cyBBUCBjb25maWd1cmF0aW9uXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1NDktICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjU1MDpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTUxLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICphcHJlbSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjU5MT1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1OTQte1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI1OTU6XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1OTYtXHRERUNMQVJFX0JJVE1BUChhcHJlbSwgQVBfREVWSUNFUyk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI3MzQ9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjczNi17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjczNzpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjczOC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9Mjc5Nz12b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY2ZnX2luZm8sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MTEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjgxMjpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgxMy17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI4NDI9dm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NDQte1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4NDU6XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NDYtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0zNy0gKlx0XHRkcml2ZXIsIGJlIGl0IHVzaW5nIEBtZGV2X2xpc3Qgb3Igd3JpdGluZyB0aGUgc3RhdGUgb2YgYVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDozODogKlx0XHRzaW5nbGUgYXBfbWF0cml4X21kZXYgZGV2aWNlLiBJdCYjMzk7cyBxdWl0ZSBjb2Fyc2UgYnV0IHdlIGRvbiYjMzk7dFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0zOS0gKlx0XHRleHBlY3QgbXVjaCBjb250ZW50aW9uLlxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtNDMtICpcdFx0IHdpbGwgYmUgdGFrZW4gd2hlbiB0aGUgQVAgZGV2aWNlcyBhcmUgcGx1Z2dlZCBpbnRvIG9yIHVucGx1Z2dlZFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDo0NDogKlx0XHQgZnJvbSBhIGd1ZXN0LCBhbmQgd2hlbiBhbiBhcF9tYXRyaXhfbWRldiBkZXZpY2UgaXMgYWRkZWQgdG8gb3JcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtNDUtICpcdFx0IHJlbW92ZWQgZnJvbSBAbWRldl9saXN0IG9yIHRoZSBsaXN0IGlzIGl0ZXJhdGVkLlxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg9NDc9c3RydWN0IGFwX21hdHJpeF9kZXYge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtNTAtXHRzdHJ1Y3QgbGlzdF9oZWFkIG1kZXZfbGlzdDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6NTE6XHRzdHJ1Y3QgbXV0ZXggbWRldnNfbG9jazsgLyogc2VyaWFsaXplcyBhY2Nlc3MgdG8gZWFjaCBhcF9tYXRyaXhfbWRldiAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC01Mi1cdHN0cnVjdCBhcF9kcml2ZXIgICp2ZmlvX2FwX2Rydjtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTkwPXN0cnVjdCBhcF9xdWV1ZV90YWJsZSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC05NC0vKipcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6OTU6ICogc3RydWN0IGFwX21hdHJpeF9tZGV2IC0gQ29udGFpbnMgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgbWF0cml4IG1lZGlhdGVkXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTk2LSAqXHRcdFx0ICAgZGV2aWNlLlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC05Ny0gKiBAdmRldjpcdHRoZSB2ZmlvIGRldmljZVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDo5ODogKiBAbm9kZTpcdGFsbG93cyB0aGUgYXBfbWF0cml4X21kZXYgc3RydWN0IHRvIGJlIGFkZGVkIHRvIGEgbGlzdFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC05OS0gKiBAbWF0cml4Olx0dGhlIGFkYXB0ZXJzLCB1c2FnZSBkb21haW5zIGFuZCBjb250cm9sIGRvbWFpbnMgYXNzaWduZWQgdG8gdGhlXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xMTMtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjExNDpzdHJ1Y3QgYXBfbWF0cml4X21kZXYge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xMTUtXHRzdHJ1Y3QgdmZpb19kZXZpY2UgdmRldjtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE0Mz1zdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE0NDpcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE0NS1cdGRtYV9hZGRyX3Qgc2F2ZWRfaW92YTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAxNgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDc5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipWRklPIEFQIExvY2tpbmcgYW5kIExvZ2ljIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCBhbmQgYHZmaW9fYXBfbWRldl91bnNldF9rdm1gLiBJdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3JlIHNpbXBsaWZ5aW5nIHRoZSBsb2dpYyBhcm91bmQgYXR0YWNoaW5nIGFuZCBkZXRhY2hpbmcgYGFwX21hdHJpeF9tZGV2YCBkZXZpY2VzIHRvIEtWTSBpbnN0YW5jZXMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gaGF2ZSByZW1vdmVkIGEgbG9vcCB0aGF0IGNoZWNrZWQgZm9yIGNvbmZsaWN0aW5nIGF0dGFjaG1lbnRzLCB3aGljaCBzdHJpa2VzIG1lIGFzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGluIHRoZSBjb25jdXJyZW5jeSBtb2RlbC4KCkluc3RlYWQgb2YgdGhhdCBsb29wLCB0aGUgY29kZSBub3cgY2hlY2tzIGBpZiAoa3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2spIHsgcmV0dXJuIC1FUEVSTTsgfWAgdW5kZXIgdGhlIGBwcWFwX2hvb2tfcndzZW1gIGxvY2suIE1ha2VzIHNlbnNlLCB1c2luZyBhIHJlYWQtd3JpdGUgc2VtYXBob3JlIHRvIHByb3RlY3QgYSBwb3RlbnRpYWwgZGF0YSByYWNlLiBBbHNvIGluIGB2ZmlvX2FwX21kZXZfdW5zZXRfa3ZtYCwgdGhlIHBhdGNoIHJlbW92ZXMgdGhlIGxvY2sgcmVsZWFzZS9hY3F1aXJlIGFyb3VuZCB0aGUgYGt2bS0mZ3Q7YXJjaC5jcnlwdG8ucHFhcF9ob29rID0gTlVMTDtgIGFzc2lnbm1lbnQuIEFoLCBJIHNlZSBhIGJpZ2dlciBjaGFuZ2UgaW4gYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGxvY2stcHJvdGVjdGVkIGNoZWNrOgoKYGBgYwogCWlmIChrdm0tJmd0O2FyY2guY3J5cHRvLmNyeWNiZCkgewogCQlkb3duX3dyaXRlKCZhbXA7a3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pOwomIzQzOwkJaWYgKGt2bS0mZ3Q7YXJjaC5jcnlwdG8ucHFhcF9ob29rKSB7CiYjNDM7CQkJdXBfd3JpdGUoJmFtcDtrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7CiYjNDM7CQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJCX0KIAkJa3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2sgPSAmYW1wO21hdHJpeF9tZGV2LSZndDtwcWFwX2hvb2s7Ci0JCXVwX3dyaXRlKCZhbXA7a3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pOwogCiAJCWdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkobSwgJmFtcDttYXRyaXhfZGV2LSZndDttZGV2X2xpc3QsIG5vZGUpIHsKLQkJCWlmIChtICE9IG1hdHJpeF9tZGV2ICZhbXA7JmFtcDsgbS0mZ3Q7a3ZtID09IGt2bSkgewotCQkJCXJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTsKLQkJCQlyZXR1cm4gLUVQRVJNOwotCQkJfQotCQl9Ci0KIAkJa3ZtX2dldF9rdm0oa3ZtKTsKIAkJbWF0cml4X21kZXYtJmd0O2t2bSA9IGt2bTsKIAkJdmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTsKLQogCQlyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7CiYjNDM7CQl1cF93cml0ZSgmYW1wO2t2bS0mZ3Q7YXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTsKIAl9CiBgYGAKClRoaXMgaXMgYSBwcmV0dHkgbWFqb3Igc2hpZnQgaW4gbG9ja2luZyBhbmQgdGhlIG92ZXJhbGwgYXR0YWNobWVudCBsb2dpYyBmb3IgVkZJTyBBUCBkZXZpY2VzLiBUaGUgcmVtb3ZhbCBvZiB0aGUgcHJldmlvdXMgbG9vcCBzdWdnZXN0cyBhIHNpbXBsZXIsIG1vcmUgZGlyZWN0IGFwcHJvYWNoIHRvIHByZXZlbnRpbmcgY29uZmxpY3RpbmcgYXR0YWNobWVudHMsIGJ1dCBpdCBkb2VzIHJlbHkgb24gdGhhdCBgcHFhcF9ob29rX3J3c2VtYC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzIGludHJvZHVjZWQgYnkgdGhpcy4gQWxzbywgZG9lcyBpdCBjaGFuZ2UgdGhlIGVycm9yIHBhdGhzIGF0IGFsbD8KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogY2FuIFN5emthbGxlciB0cmlnZ2VyIHRoaXMgY29kZT8gSXQgcnVucyBvbiB4ODZfNjQsIGFybTY0LCByaXNjdjY0LCBhbmQgczM5MHguIE9uIHMzOTB4LCBTeXprYWxsZXIgdXNlcyBRRU1VLCBzbyB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgUUVNVSBzdXBwb3J0IFZGSU8gQVA/IFZGSU8gQVAgaXMgYWxsIGFib3V0IHRoZSBob3N0IGhhdmluZyBBUCBoYXJkd2FyZSBhbmQgcGFzc2luZyBpdCB0byB0aGUgZ3Vlc3QuIEJ1dCwgU3l6a2FsbGVyIHVzZXMgYHN5ei1leGVjdXRvcmAgaW5zaWRlIHRoZSBndWVzdC4gU28sIGlmIFN5emthbGxlciBpcyBydW5uaW5nICppbnNpZGUqIHRoZSBndWVzdCwgY2FuIGl0IGludGVyYWN0IHdpdGggYC9kZXYvdmZpby8uLi5gIGlmIHRoZSBndWVzdCBpdHNlbGYgaGFzIFZGSU8gQVAgZGV2aWNlcz8gTm8sIFZGSU8gQVAgaXMgYSBob3N0IGRyaXZlci4gU3l6a2FsbGVyIG5lZWRzIHRvIHJ1biBvbiB0aGUgaG9zdCAob3IgaW4gYSBuZXN0ZWQgc2V0dXApIHRvIGludGVyYWN0IHdpdGggYC9zeXMvYnVzL21kZXYvZGV2aWNlcy9gIHRvIGNyZWF0ZSBhbiBgYXBfbWF0cml4X21kZXZgIGFuZCB0aGVuIHVzZSBgL2Rldi92ZmlvL2AgdG8gYXR0YWNoIGl0IHRvIEtWTS4KCldhaXQsIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgaXMgY2FsbGVkIHdoZW4gYSBWRklPIGdyb3VwIGlzIGF0dGFjaGVkIHRvIEtWTSB2aWEgYEtWTV9ERVZfVkZJT19HUk9VUF9BRERgIG9yIHNpbWlsYXIuIEkgbmVlZCB0byBjaGVjayB3aGVyZSBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19hcF9tZGV2X3NldF9rdm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTgwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4MTEtLyoqXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTgxMjogKiB2ZmlvX2FwX21kZXZfc2V0X2t2bSAtIHNldHMgYWxsIGRhdGEgZm9yIEBtYXRyaXhfbWRldiB0aGF0IGFyZSBuZWVkZWRcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xODEzLSAqIHRvIG1hbmFnZSBBUCByZXNvdXJjZXMgZm9yIHRoZSBndWVzdCB3aG9zZSBzdGF0ZSBpcyByZXByZXNlbnRlZCBieSBAa3ZtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4MjAtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTgyMTpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTgyMi1cdFx0XHRcdHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjA0Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNTMtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA1NDpcdHJldHVybiB2ZmlvX2FwX21kZXZfc2V0X2t2bShtYXRyaXhfbWRldiwgdmRldi1cdTAwM2Vrdm0pO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjM5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWRklPIEFQIERldmljZSBPcGVuaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2VgIGZ1bmN0aW9uIGNhbGwg4oCTIHJpZ2h0LCB0aGlzIGlzIHRoZSBgLm9wZW5fZGV2aWNlYCBjYWxsYmFjayBmb3IgdGhlIFZGSU8gZGV2aWNlLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBjb2RlIHBhdGggKmFjdHVhbGx5KiBiZSByZWFjaGVkIHdpdGhvdXQgYW55IHBoeXNpY2FsIEFQIGhhcmR3YXJlIHByZXNlbnQgaW4gdGhlIHN5c3RlbT8gVGhhdCYjMzk7cyBhIGNydWNpYWwgcXVlc3Rpb24uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBpZiB0aGUgYHZmaW9fYXBgIGRyaXZlciBldmVuICpsb2FkcyogYW5kLCBjcnVjaWFsbHksIGlmIGl0IGNyZWF0ZXMgYW55IGRldmljZXMsIHdpdGhvdXQgdW5kZXJseWluZyBwaHlzaWNhbCBoYXJkd2FyZS4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGhhcHBlbnMgaW4gYSBwdXJlbHkgc29mdHdhcmUgb3Igc2ltdWxhdGVkIGVudmlyb25tZW50LiBJZiB0aGUgYW5zd2VyIGlzIHllcywgdGhlbiBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyB0aGF0IHRoaXMgZGV2aWNlIG1pZ2h0IGJlIGluaXRpYWxpemVkIGV2ZW4gd2l0aG91dCBBUCBoYXJkd2FyZS4gSWYgaXQgZG9lc24mIzM5O3QsIEkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBuZXh0IHBvc3NpYmxlIGNhdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0yMDA9c3RhdGljIHZvaWQgX19leGl0IHZmaW9fYXBfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0yMDctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MjA4Om1vZHVsZV9pbml0KHZmaW9fYXBfaW5pdCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMjA5LW1vZHVsZV9leGl0KHZmaW9fYXBfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NzgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB2ZmlvX2FwX2luaXRgIGZ1bmN0aW9uLgoKKipJbml0aWFsIENvbnNpZGVyYXRpb25zOiBEaXZpbmcgaW50byB2ZmlvX2FwX2luaXQqKgoKQWxyaWdodCwgc28gYHZmaW9fYXBfaW5pdGAuLi4gYmFzZWQgb24gdGhlIG5hbWUsIHRoaXMgaXMgcHJvYmFibHkgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHNvbWUgYXNwZWN0IG9mIHRoZSBWRklPIChWaXJ0dWFsIEZ1bmN0aW9uIEkvTykgc3Vic3lzdGVtIHJlbGF0ZWQgdG8gQWNjZXNzIFBlcm1pc3Npb25zIChBUCkgb3IgQWNjZXNzIFByb3RlY3Rpb24gKEFQKS4gVGhhdCB0ZWxscyBtZSBpbW1lZGlhdGVseSB0aGF0IHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgc2VjdXJpdHktc2Vuc2l0aXZlIGFyZWEuIFZGSU8gaXMgYWxsIGFib3V0IGRpcmVjdCBkZXZpY2UgYXNzaWdubWVudCwgYnlwYXNzaW5nIHRoZSBoeXBlcnZpc29yIHRvIHByb3ZpZGUgbmVhci1uYXRpdmUgcGVyZm9ybWFuY2UgdG8gdmlydHVhbCBtYWNoaW5lcy4gVGhlICYjMzQ7QVAmIzM0OyBjb21wb25lbnQgc3VnZ2VzdHMgdGhpcyBpbml0aWFsaXphdGlvbiBpcyBsaWtlbHkgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IHN0cnVjdHVyZXMgYW5kIG1lY2hhbmlzbXMgZm9yIGNvbnRyb2xsaW5nIGFjY2VzcyB0byBJL08gcmVzb3VyY2VzLCBwb3RlbnRpYWxseSBlbnN1cmluZyB0aGF0IGEgVk0gY2FuIG9ubHkgYWNjZXNzIHRoZSBoYXJkd2FyZSBpdCYjMzk7cyBsZWdpdGltYXRlbHkgZW50aXRsZWQgdG8uCgpJJiMzOTtkIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGhhbmRsZSB0YXNrcyBsaWtlOgoKKiAgICoqUmVzb3VyY2UgQWxsb2NhdGlvbjoqKiBQb3RlbnRpYWxseSBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgZGF0YSBzdHJ1Y3R1cmVzIHRvIHRyYWNrIHdoaWNoIHJlc291cmNlcyBhcmUgYXNzaWduZWQgdG8gd2hpY2ggVk1zIGFuZCB3aGF0IGFjY2VzcyBwZXJtaXNzaW9ucyB0aG9zZSBWTXMgaGF2ZS4gVGhpcyBjb3VsZCBpbnZvbHZlIG1lbW9yeSBzdHJ1Y3R1cmVzLCBsb2Nrcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuCiogICAqKlNlY3VyaXR5IENvbnRleHQgU2V0dXA6KiogVGhpcyBtaWdodCBpbmNsdWRlIHNldHRpbmcgdXAgdGhlIHNlY3VyaXR5IGNvbnRleHRzIGZvciB0aGUgaGFyZHdhcmUgZGV2aWNlcyByZWxhdGVkIHRvIGFjY2VzcyBwZXJtaXNzaW9ucy4KKiAgICoqSW50ZXJydXB0IEhhbmRsaW5nOioqIFZGSU8sIGF0IHRoaXMgcG9pbnQsIGNvdWxkIG1hbmFnZSBpbnRlcnJ1cHQgcm91dGluZyBmb3IgYXNzaWduZWQgZGV2aWNlcy4gSWYgQVAgaXMgcmVsYXRlZCB0byBpbnRlcnJ1cHRzLCBpdCBtaWdodCBpbnZvbHZlIGNvbmZpZ3VyaW5nIGludGVycnVwdCByZW1hcHBpbmcgb3IgaW50ZXJydXB0IGluamVjdGlvbiBtZWNoYW5pc21zLgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBBIGtleSBjb21wb25lbnQgd291bGQgYmUgcm9idXN0IGVycm9yIGhhbmRsaW5nLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGRpcmVjdCBkZXZpY2UgYWNjZXNzLCBhbnkgbWlzY29uZmlndXJhdGlvbiBvciBzZWN1cml0eSBicmVhY2ggY2FuIGNyYXNoIHRoZSBzeXN0ZW0uIFNvLCBJIHdvdWxkIGV4cGVjdCBjaGVja3MgZm9yIGlsbGVnYWwgcmVxdWVzdHMgb3IgYWNjZXNzIGF0dGVtcHRzLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGZ1bmN0aW9uIGFjdHVhbGx5IGRvZXMuLi4gSSYjMzk7bGwgbG9vayBmb3Igc3BlY2lmaWMgaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUsIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzLCBhbmQgYW55IGNhbGxzIHJlbGF0ZWQgdG8gc2VjdXJpdHkgY29udGV4dHMgb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX2FwX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE1Mz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2RiZl9pbmZvX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTY2LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE2NzpzdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNjgte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0yMDA9c3RhdGljIHZvaWQgX19leGl0IHZmaW9fYXBfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0yMDctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MjA4Om1vZHVsZV9pbml0KHZmaW9fYXBfaW5pdCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMjA5LW1vZHVsZV9leGl0KHZmaW9fYXBfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mzk2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgdmZpb19hcF9pbml0YCBmdW5jdGlvbi4KCioqQW5hbHl6aW5nIHZmaW9fYXBfaW5pdCoqCgpBbHJpZ2h0LCBoZXJlIHdlIGdvLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHRoZSBWRklPIEFkZHJlc3MgU3BhY2UgKEFQKSBpbXBsZW1lbnRhdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIGtleSBhcmVhcyB0aGlzIHdpbGwgdG91Y2ggdXBvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgbWVtb3J5IG1hcHBpbmcsIERNQSBzZXR1cCwgaW50ZXJydXB0IGhhbmRsaW5nIGluaXRpYWxpemF0aW9uLCBhbmQgYW55IGhhcmR3YXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gdGhhdCYjMzk7cyBjcnVjaWFsIGZvciBnZXR0aW5nIGFuIEFQIGZ1bmN0aW9uaW5nIHdpdGhpbiB0aGUgVkZJTyBmcmFtZXdvcmsuIEkmIzM5O2xsIGV4cGVjdCB0byBzZWUgaG93IGl0IG1hbmFnZXMgdGhlIHByb3RlY3Rpb24gZG9tYWluIGFuZCB0aGUgYXNzb2NpYXRlZCByZXNvdXJjZXMuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGFwcHJvYWNoZWQgdGhlIGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgYmUgcmVhbGx5IGZvY3VzaW5nIG9uIGFueSBvcHRpbWl6YXRpb25zIG9yIHVudXN1YWwgY29kZSBwYXRocy4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIGRlc2lnbmVkIGZvciBwZXJmb3JtYW5jZSBvciBpcyBtb3JlIGFpbWVkIGZvciBnZW5lcmFsaXR5LiBJIHdpbGwgbm90ZSBob3cgaXQmIzM5O3MgZGVzaWduZWQuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgZG8gdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmU/IEFyZSB0aGVyZSBhbnkgY2xldmVyIHRyaWNrcyB0byBtaW5pbWl6ZSBvdmVyaGVhZCBvciBtYXhpbWl6ZSBwYXJhbGxlbGlzbT8gQXJlIHRoZXkgdGFraW5nIGFkdmFudGFnZSBvZiBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZT8gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwmIzM5O3MgaW4gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjc6XHRzdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbiAxNjg6XHR7XG4gMTY5Olx0XHRpbnQgcmV0O1xuIDE3MDpcdFxuIDE3MTpcdFx0cmV0ID0gdmZpb19hcF9kYmZfaW5mb19pbml0KCk7XG4gMTcyOlx0XHRpZiAocmV0KVxuIDE3MzpcdFx0XHRyZXR1cm4gcmV0O1xuIDE3NDpcdFxuIDE3NTpcdFx0LyogSWYgdGhlcmUgYXJlIG5vIEFQIGluc3RydWN0aW9ucywgdGhlcmUgaXMgbm90aGluZyB0byBwYXNzIHRocm91Z2guICovXG4gMTc2Olx0XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSlcbiAxNzc6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMTc4Olx0XG4gMTc5Olx0XHRyZXQgPSB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKCk7XG4gMTgwOlx0XHRpZiAocmV0KVxuIDE4MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDE4MjpcdFxuIDE4MzpcdFx0cmV0ID0gYXBfZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNnZmaW9fYXBfZHJ2LCBUSElTX01PRFVMRSwgVkZJT19BUF9EUlZfTkFNRSk7XG4gMTg0Olx0XHRpZiAocmV0KSB7XG4gMTg1Olx0XHRcdHZmaW9fYXBfbWF0cml4X2Rldl9kZXN0cm95KCk7XG4gMTg2Olx0XHRcdHJldHVybiByZXQ7XG4gMTg3Olx0XHR9XG4gMTg4Olx0XG4gMTg5Olx0XHRyZXQgPSB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIoKTtcbiAxOTA6XHRcdGlmIChyZXQpIHtcbiAxOTE6XHRcdFx0YXBfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2dmZpb19hcF9kcnYpO1xuIDE5MjpcdFx0XHR2ZmlvX2FwX21hdHJpeF9kZXZfZGVzdHJveSgpO1xuIDE5MzpcdFxuIDE5NDpcdFx0XHRyZXR1cm4gcmV0O1xuIDE5NTpcdFx0fVxuIDE5NjpcdFxuIDE5NzpcdFx0cmV0dXJuIDA7XG4gMTk4Olx0fVxuIDE5OTpcdFxuIDIwMDpcdHN0YXRpYyB2b2lkIF9fZXhpdCB2ZmlvX2FwX2V4aXQodm9pZClcbiAyMDE6XHR7XG4gMjAyOlx0XHR2ZmlvX2FwX21kZXZfdW5yZWdpc3RlcigpO1xuIDIwMzpcdFx0YXBfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2dmZpb19hcF9kcnYpO1xuIDIwNDpcdFx0dmZpb19hcF9tYXRyaXhfZGV2X2Rlc3Ryb3koKTtcbiAyMDU6XHRcdGRlYnVnX3VucmVnaXN0ZXIodmZpb19hcF9kYmZfaW5mbyk7XG4gMjA2Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIzMAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDgyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nIC0gQSBEZWVwIERpdmUgaW50byBzMzkweCBBUCBJbnN0cnVjdGlvbnMgYW5kIFZGSU8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZHJpdmVyIGFuZCBpbW1lZGlhdGVseSBzZWUgYGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSByZXR1cm4gLUVOT0RFVjtgLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIElmIHRoZSBob3N0IGRvZXNuJiMzOTt0IGhhdmUgQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBpbnN0cnVjdGlvbnMsIHRoZSBkcml2ZXIgd29uJiMzOTt0IGV2ZW4gc3RhcnQuIFRoZSBiaWcgcXVlc3Rpb24gaXMsIGRvZXMgUUVNVSBlbXVsYXRlIHRoaXMgZm9yIHRoZSBndWVzdCwgZXNwZWNpYWxseSBzaW5jZSBzeXprYWxsZXIgaXMgcnVubmluZyB3aXRoaW4gYSBRRU1VIGd1ZXN0IGZvciBzMzkweD8KClFFTVUgKmNhbiogZW11bGF0ZSBvciBwYXNzIHRocm91Z2ggQVAgaW5zdHJ1Y3Rpb25zLCBidXQgaXQmIzM5O3Mgbm90IHRoZSBkZWZhdWx0LiBJZiBzeXprYWxsZXIgaXMgcnVubmluZyBpbiBhIFFFTVUgZ3Vlc3QsIEkgbmVlZCB0byBrbm93IGlmIEFQIGluc3RydWN0aW9ucyBhcmUgZW5hYmxlZCBpbiAqdGhhdCogc3BlY2lmaWMgUUVNVSBpbnN0YW5jZS4gU3l6a2FsbGVyIG1pZ2h0IGhhdmUgczM5MHgtc3BlY2lmaWMgc2V0dXBzLCBidXQgdGhpcyBpcyBhIFZGSU8gZHJpdmVyLCBzbyB3ZSBuZWVkIHRvIGtub3cgd2hhdCBzZXR1cCBpcyB0aGVyZS4gVkZJTyBpcyBmb3IgZGV2aWNlIHBhc3N0aHJvdWdoLiBTbyBkb2VzIHN5emthbGxlciBydW4gYXMgdGhlIGhvc3QgZm9yIGEgbmVzdGVkIGd1ZXN0LCBvciBkb2VzIGl0IGRpcmVjdGx5IG9wZW4gYC9kZXYvdmZpby8uLi5gPyBDYW4gc3l6a2FsbGVyIGV2ZW4gdHJpZ2dlciBgdmZpb19hcF9tZGV2X29wZW5fZGV2aWNlYD8KClllcywgaXQgY2FuLCBJRiB0aGUgYHZmaW9fYXBgIGRyaXZlciBpcyBsb2FkZWQgYW5kIGFuIG1kZXYgKG1lZGlhdGVkIGRldmljZSkgaXMgY3JlYXRlZC4gQnV0IGNyZWF0aW5nIGFuIG1kZXYgbmVlZHMgc3lzZnMgd3JpdGVzLCBhbmQgd2hpbGUgc3l6a2FsbGVyIGRvZXMgaGF2ZSBzeXNmcyBmdXp6aW5nLCBpdCYjMzk7cyBwcmV0dHkgbGltaXRlZC4gVGhlIG1vcmUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciBzeXprYWxsZXImIzM5O3MgczM5MHggZW52aXJvbm1lbnQgZXZlbiAqaGFzKiBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgdHJ1ZSBpbiBhIHR5cGljYWwgczM5MHggUUVNVSBzZXR1cC4KCkluIFFFTVUsIEFQIGluc3RydWN0aW9ucyBhcmUgb25seSB0aGVyZSBpZiB0aGUgYHZmaW8tYXBgIGRldmljZSBpcyBwYXNzZWQgdGhyb3VnaCwgb3IgaWYgUUVNVSBlbXVsYXRlcyBpdC4gQW5kIEkgdGhpbmsgUUVNVSBkb2VzbiYjMzk7dCBmdWxseSBlbXVsYXRlIEFQIGluc3RydWN0aW9ucyBmb3IgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHdpdGhvdXQgdGhlIGhhcmR3YXJlLiBSaWdodCwgYW5kIEkgc2hvdWxkIGNoZWNrIGlmIHRoaXMgaXMgZXZlbiB3b3J0aCBmdXp6aW5nIQoKTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBwcm9tcHQgc2F5cy4uLiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYuLi4mIzM0OyBPa2F5LCB0aGUgcHJvbXB0IGlzIGNsZWFyLiBJcyBgdmZpb19hcGAgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyPyBZZXMsIEFQIGlzIElCTSYjMzk7cyBtYWluZnJhbWUgY3J5cHRvZ3JhcGhpYyBjb3Byb2Nlc3NvciDigJMgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gSUJNIFogKHMzOTB4KSBoYXJkd2FyZS4gRG9lcyBRRU1VIGVtdWxhdGUgaXQ/IEkgc2hvdWxkIGNoZWNrIGZvciBhIHNvZnR3YXJlIGVtdWxhdG9yIGZvciBBUCBpbiB0aGUga2VybmVsIG9yIFFFTVUuCgpJbiB0aGUga2VybmVsLCBgZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuY2AgaGFuZGxlcyB0aGUgQVAgYnVzLCBidXQgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgbGlrZSBgbWFjODAyMTFfaHdzaW1gIG9yIGB2a21zYC4gU28sIGlmIHlvdSBydW4gUUVNVSB3aXRob3V0IGFjdHVhbCBBUCBoYXJkd2FyZSBvbiB0aGUgaG9zdCwgeW91IGNhbiYjMzk7dCBwYXNzIHRocm91Z2ggQVAgZGV2aWNlcy4gV2FpdCwgaXMgaXQgZXZlbiBwb3NzaWJsZSB0byBjcmVhdGUgYW4gQVAgbWRldiB3aXRob3V0IHBoeXNpY2FsIEFQIGhhcmR3YXJlPyBMZXQmIzM5O3MgY2hlY2sgYHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XHRpZiAoIW1hdHJpeF9kZXYpIHtcbiAxMDE6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiAxMDI6XHRcdFx0Z290byBtYXRyaXhfYWxsb2NfZXJyO1xuIDEwMzpcdFx0fVxuIDEwNDpcdFxuIDEwNTpcdFx0LyogRmlsbCBpbiBjb25maWcgaW5mbyB2aWEgUFFBUChRQ0kpLCBpZiBhdmFpbGFibGUgKi9cbiAxMDY6XHRcdGlmICh0ZXN0X2ZhY2lsaXR5KDEyKSkge1xuIDEwNzpcdFx0XHRyZXQgPSBhcF9xY2koXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VpbmZvKTtcbiAxMDg6XHRcdFx0aWYgKHJldClcbiAxMDk6XHRcdFx0XHRnb3RvIG1hdHJpeF9hbGxvY19lcnI7XG4gMTEwOlx0XHR9XG4gMTExOlx0XG4gMTEyOlx0XHRtdXRleF9pbml0KFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4gMTEzOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCk7XG4gMTE0Olx0XHRtdXRleF9pbml0KFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuIDExNTpcdFxuIDExNjpcdFx0ZGV2X3NldF9uYW1lKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDslc1wmIzM0OywgVkZJT19BUF9ERVZfTkFNRSk7XG4gMTE3Olx0XHRtYXRyaXhfZGV2LVx1MDAzZWRldmljZS5wYXJlbnQgPSByb290X2RldmljZTtcbiAxMTg6XHRcdG1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlLmJ1cyA9IFx1MDAyNm1hdHJpeF9idXM7XG4gMTE5Olx0XHRtYXRyaXhfZGV2LVx1MDAzZWRldmljZS5yZWxlYXNlID0gdmZpb19hcF9tYXRyaXhfZGV2X3JlbGVhc2U7XG4gMTIwOlx0XHRtYXRyaXhfZGV2LVx1MDAzZXZmaW9fYXBfZHJ2ID0gXHUwMDI2dmZpb19hcF9kcnY7XG4gMTIxOlx0XG4gMTIyOlx0XHRyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VkZXZpY2UpO1xuIDEyMzpcdFx0aWYgKHJldClcbiAxMjQ6XHRcdFx0Z290byBtYXRyaXhfcmVnX2VycjtcbiAxMjU6XHRcbiAxMjY6XHRcdHJldCA9IGRyaXZlcl9yZWdpc3RlcihcdTAwMjZtYXRyaXhfZHJpdmVyKTtcbiAxMjc6XHRcdGlmIChyZXQpXG4gMTI4Olx0XHRcdGdvdG8gbWF0cml4X2Rydl9lcnI7XG4gMTI5Olx0XG4gMTMwOlx0XHRyZXR1cm4gMDtcbiAxMzE6XHRcbiAxMzI6XHRtYXRyaXhfZHJ2X2VycjpcbiAxMzM6XHRcdGRldmljZV9kZWwoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VkZXZpY2UpO1xuIDEzNDpcdG1hdHJpeF9yZWdfZXJyOlxuIDEzNTpcdFx0cHV0X2RldmljZShcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSk7XG4gMTM2Olx0bWF0cml4X2FsbG9jX2VycjpcbiAxMzc6XHRcdGJ1c191bnJlZ2lzdGVyKFx1MDAyNm1hdHJpeF9idXMpO1xuIDEzODpcdGJ1c19yZWdpc3Rlcl9lcnI6XG4gMTM5Olx0XHRyb290X2RldmljZV91bnJlZ2lzdGVyKHJvb3RfZGV2aWNlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgSW5zdHJ1Y3Rpb24gQXZhaWxhYmlsaXR5KioKCk9rYXksIHRoZSBjb2RlJiMzOTtzIGNoZWNraW5nIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBvbiBteSBtaW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqLiBXaGF0IGNyaXRlcmlhIGlzIGl0IGNoZWNraW5nPyBJcyBpdCBsb29raW5nIGF0IGhhcmR3YXJlIGNhcGFiaWxpdGllcywgcHJvZ3JhbSBzdGF0ZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBuYW1lIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGF2YWlsYWJsZSBpbnN0cnVjdGlvbiBzZXQsIGJ1dCB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaXMga2V5LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIEtub3dpbmcgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgZGljdGF0ZXMgdGhlIG5leHQgcGF0aCB0aGUgcHJvZ3JhbSB0YWtlcywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgY29tcGxldGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg9NzI9dW5pb24gYXBfcXVldWVfc3RhdHVzX3JlZyB7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODAtLyoqXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaDo4MTogKiBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkgLSBUZXN0IGlmIEFQIGluc3RydWN0aW9ucyBhcmUgYXZhaWxhYmxlLlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODItICpcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04NC0gKi9cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oOjg1OnN0YXRpYyBpbmxpbmUgYm9vbCBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKHZvaWQpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTExMDU9c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfY3J5cHRvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1MS1cdGNhc2UgS1ZNX1MzOTBfVk1fQ1JZUFRPX0VOQUJMRV9BUElFOlxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNTI6XHRcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1My1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTU4LVx0Y2FzZSBLVk1fUzM5MF9WTV9DUllQVE9fRElTQUJMRV9BUElFOlxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNTk6XHRcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE2MC1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMTAwPXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1faGFzX2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMTU2LVx0XHRjYXNlIEtWTV9TMzkwX1ZNX0NSWVBUT19ESVNBQkxFX0FQSUU6XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjE1NzpcdFx0XHRyZXQgPSBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkgPyAwIDogLUVOWElPO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIxNTgtXHRcdFx0YnJlYWs7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMxMDE9c3RhdGljIGludCBrdm1fczM5MF9hcHhhX2luc3RhbGxlZCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTA0LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxMDU6XHRpZiAoYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEwNi1cdFx0aWYgKGFwX3FjaShcdTAwMjZpbmZvKSA9PSAwKVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTU5Mj1zdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy02MDAtXHQvKiBWZXJpZnkgdGhhdCB0aGUgQVAgaW5zdHJ1Y3Rpb24gYXJlIGF2YWlsYWJsZSAqL1xuYXJjaC9zMzkwL2t2bS9wcml2LmM6NjAxOlx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy02MDItXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDU6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0ODAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEFQIEluc3RydWN0aW9uIEF2YWlsYWJpbGl0eSoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBvciBkZWNsYXJhdGlvbiBvZiBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZWAgd291bGQgcmVzaWRlLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGZvciBpbmZvcm1hdGlvbiBvbiB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZXNlIHNwZWNpZmljIGluc3RydWN0aW9ucyBpbiB0aGUgUy8zOTAgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGhlYWRlciBmaWxlIHRvIHByb3ZpZGUgdGhlIG1lY2hhbmlzbSwgd2hldGhlciBpdCYjMzk7cyBhIG1hY3JvLCBhIHN0cnVjdHVyZSwgb3IgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiwgdGhhdCBhbGxvd3MgdGhlIGNvZGUgdG8gZGV0ZXJtaW5lIHdoaWNoIEFQIGluc3RydWN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGhhcmR3YXJlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgY2hlY2sgaXMgcGVyZm9ybWVkIOKAkyBpcyBpdCBiYXNlZCBvbiBDUFUgbW9kZWwsIGZlYXR1cmUgYml0cywgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIGlzIHRoZSBmaXJzdCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdC8qKlxuICA4MTpcdCAqIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSAtIFRlc3QgaWYgQVAgaW5zdHJ1Y3Rpb25zIGFyZSBhdmFpbGFibGUuXG4gIDgyOlx0ICpcbiAgODM6XHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIEFQIGluc3RydWN0aW9ucyBhcmUgaW5zdGFsbGVkLCBvdGhlcndpc2UgZmFsc2UuXG4gIDg0Olx0ICovXG4gIDg1Olx0c3RhdGljIGlubGluZSBib29sIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUodm9pZClcbiAgODY6XHR7XG4gIDg3Olx0XHR1bnNpZ25lZCBsb25nIHJlZzAgPSBBUF9NS1FJRCgwLCAwKTtcbiAgODg6XHRcdHVuc2lnbmVkIGxvbmcgcmVnMSA9IDA7XG4gIDg5Olx0XG4gIDkwOlx0XHRhc20gdm9sYXRpbGUoXG4gIDkxOlx0XHRcdFwmIzM0O1x0bGdyXHQwLCVbcmVnMF1cXG5cJiMzNDtcdFx0LyogcWlkIGludG8gZ3IwICovXG4gIDkyOlx0XHRcdFwmIzM0O1x0bGdoaVx0MSwwXFxuXCYjMzQ7XHRcdFx0LyogMCBpbnRvIGdyMSAqL1xuICA5MzpcdFx0XHRcJiMzNDtcdGxnaGlcdDIsMFxcblwmIzM0O1x0XHRcdC8qIDAgaW50byBncjIgKi9cbiAgOTQ6XHRcdFx0XCYjMzQ7XHQuaW5zblx0cnJlLDB4YjJhZjAwMDAsMCwwXFxuXCYjMzQ7XHQvKiBQUUFQKFRBUFEpICovXG4gIDk1Olx0XHRcdFwmIzM0OzA6XHRsYVx0JVtyZWcxXSwxXFxuXCYjMzQ7XHRcdC8qIDEgaW50byByZWcxICovXG4gIDk2Olx0XHRcdFwmIzM0OzE6XFxuXCYjMzQ7XG4gIDk3Olx0XHRcdEVYX1RBQkxFKDBiLCAxYilcbiAgOTg6XHRcdFx0OiBbcmVnMV0gXCYjMzQ7JiM0MztcdTAwMjZkXCYjMzQ7IChyZWcxKVxuICA5OTpcdFx0XHQ6IFtyZWcwXSBcJiMzNDtkXCYjMzQ7IChyZWcwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA5MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IFZGSU8tQVAgYW5kIFFFTVUmIzM5O3MgQmVoYXZpb3IqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gYW5kIGl0IGJvaWxzIGRvd24gdG8gZXNzZW50aWFsbHkgY2hlY2tpbmcgaWYgYFBRQVAoVEFQUSlgIHRyYXBzIHdoZW4gZXhlY3V0ZWQuIFRoYXQmIzM5O3MgdGhlIGNydXggb2YgdGhlIG1hdHRlci4gVGhlIHdob2xlIHBvaW50IGhpbmdlcyBvbiBob3cgUUVNVSBoYW5kbGVzIEFQIGluc3RydWN0aW9ucyB3aXRoaW4gYSBndWVzdCBlbnZpcm9ubWVudC4gSWYgUUVNVSAqZG9lc24mIzM5O3QqIGVtdWxhdGUgQVAgaW5zdHJ1Y3Rpb25zLCB0aGVuIGEgdHJhcCBpcyBndWFyYW50ZWVkIGFuZCB3ZSByZXR1cm4gYGZhbHNlYC4KClRoZSBiaWcgcXVlc3Rpb24gaXMsIHdoYXQmIzM5O3MgUUVNVSYjMzk7cyBkZWZhdWx0IGJlaGF2aW9yPyBEb2VzIGl0IGVtdWxhdGUgQVAgaW5zdHJ1Y3Rpb25zIHJpZ2h0IG91dCBvZiB0aGUgYm94LCBvciBpcyB0aGVyZSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcmVxdWlyZWQ/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgUUVNVSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIHNwZWNpZmljIHRvIHMzOTB4IEFQIGluc3RydWN0aW9uIGhhbmRsaW5nLiBMZXQmIzM5O3Mgc2VlLi4uIEFoLCB0aGVyZSYjMzk7cyBhIGBhcD1vbmAgQ1BVIGZlYXR1cmUgbWVudGlvbmVkLiBJbnRlcmVzdGluZy4gU28gYnkgZGVmYXVsdCwgaXQgbWlnaHQgYmUgb2ZmIHVubGVzcyB0aGUgaG9zdCBtYWNoaW5lIGhhcyBBUCBzdXBwb3J0LCBvciBwZXJoYXBzIGl04oCZcyBlbXVsYXRlZCBhbnl3YXk/IFRoaXMgbmVlZHMgY2xhcmlmaWNhdGlvbi4KCldhaXQgYSBzZWNvbmTigKYgKnN5emthbGxlciogZnV6emVyIHRhcmdldHMgczM5MHgsIGRvZXNuJiMzOTt0IGl0PyBUaGF0IGNoYW5nZXMgdGhpbmdzLiBJZiBzeXprYWxsZXIgaXMgc3VjY2Vzc2Z1bGx5IGZ1enppbmcgczM5MHgsIGRvZXMgaXQgZXZlbiAqcmVhY2gqIHRoZSBgdmZpb19hcGAgY29kZSBwYXRoPyBJZiBpdCAqZG9lcyogdGhlbiBRRU1VIG11c3QgYmUgZW11bGF0aW5nIGl0LCByaWdodD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIHRvIHNlZSBpZiB0aGV5IGluY2x1ZGUgZW50cmllcyByZWxhdGVkIHRvIGB2ZmlvX2FwYC4gVGhhdCB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBhbGwgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3N5cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjYxNwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYHZmaW9fYXBgIFJlYWNoYWJpbGl0eSBpbiBRRU1VKioKCk9rYXksIEkgbmVlZCB0byBiZSBjYXJlZnVsIGhlcmUuIFRoZSBwcm9tcHQgZXhwbGljaXRseSBzYXlzIEkgY2FuJiMzOTt0IHVzZSBgZ3JlcHBlcmAgZm9yIGBzeXMvYCBvciBhbnl0aGluZyB3aXRoIGBzeXpfYCwgc28gSSBuZWVkIHRvIHN0aWNrIHdpdGggdGhhdC4gSSB3YXMgaW5pdGlhbGx5IHRoaW5raW5nIGFib3V0IHVzaW5nIGBncmVwcGVyYCwgYnV0IHRoZSBwcm9tcHQgaXMgY2xlYXI6IEkgbmVlZCB0byB1c2UgYHJlYWQtc3l6LXNwZWNgIG9yIGBzeXotZ3JlcHBlcmAgaW5zdGVhZCBmb3Igc3l6a2FsbGVyLXNwZWNpZmljIHN0dWZmLiBXYWl0Li4uIEkgY2FuJiMzOTt0IGZpbmQgYHJlYWQtc3l6LXNwZWNgIG9yIGBzeXotZ3JlcHBlcmAgaW4gdGhlIHRvb2xzIGF2YWlsYWJsZS4gVGhleSBhcmVuJiMzOTt0IGluIHRoZSBwcm92aWRlZCBsaXN0LiBPa2F5LCBJIG1pc3JlYWQgdGhlIHByb21wdCwgd2hpY2ggc2F5cywgJiMzNDtVc2UgdGhlIHJlYWQtc3l6LXNwZWMgYW5kIHN5ei1ncmVwcGVyIHRvb2xzIGluc3RlYWQmIzM0OyBidXQgZG9lc24mIzM5O3QgcHJvdmlkZSB0aGVtLiBJIGd1ZXNzIHRoYXQmIzM5O3MgZmluZTsgSSYjMzk7bGwgc2ltcGx5IGF2b2lkIHNlYXJjaGluZyBzeXpsYW5nLgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgYHZmaW9fYXBgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCB1c3VhbGx5IHJlcXVpcmVzIGFjdHVhbCBBUCBoYXJkd2FyZSBwYXNzLXRocm91Z2guIFRoZSBxdWVzdGlvbiBpcywgY2FuIEkgbG9hZCB0aGUgYHZmaW9fYXBgIG1vZHVsZSBhbmQgY3JlYXRlIGFuIG1kZXYgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50IHdpdGhvdXQgdGhhdCBBUCBoYXJkd2FyZT8gSSByZWNhbGwgdGhhdCBgdmZpb19hcF9pbml0YCByZXR1cm5zIGAtRU5PREVWYCBpZiBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCByZXR1cm5zIGZhbHNlLiBJZiB0aGF0IGAtRU5PREVWYCBoYXBwZW5zLCB0aGVuIHRoZSBkcml2ZXIgKndvbiYjMzk7dCogbG9hZCwgd2hpY2ggbWVhbnMgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLgoKU28gdGhlIGNvcmUgcXVlc3Rpb24gaXM6IGRvZXMgUUVNVSBlbXVsYXRlIEFQIGluc3RydWN0aW9ucz8gUUVNVSBpdHNlbGYgaGFuZGxlcyB0aGVtIGJ5IEtWTSwgYW5kIGlmIEtWTSBkb2VzbiYjMzk7dCBzdXBwb3J0IEFQIGJlY2F1c2UgdGhlIGhvc3QgZG9lc24mIzM5O3QgaGF2ZSBpdCwgS1ZNIHdpbGwgbm90IHRlbGwgdGhlIGd1ZXN0IGl0IGlzIHRoZXJlLiBJbiB0aGF0IGNhc2UsIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIHdvdWxkIHJldHVybiBmYWxzZS4gVGhlcmVmb3JlLCB0aGUgYHZmaW9fYXBgIGRyaXZlciAqY2Fubm90KiBiZSBsb2FkZWQgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBndWVzdCBpZiB0aGUgaG9zdCBkb2VzbiYjMzk7dCBoYXZlIEFQIGhhcmR3YXJlLiBUaGF0IGxvb2tzIGxpa2UgdGhlIGFuc3dlci4gTm93LCBpcyB0aGVyZSBhbnkga2luZCBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCB0byBhbGxvdyBmb3IgdGhpcz8gTGV0IG1lIGNoZWNrIGZvciB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oPTcyPXVuaW9uIGFwX3F1ZXVlX3N0YXR1c19yZWcge1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTgwLS8qKlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg6ODE6ICogYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIC0gVGVzdCBpZiBBUCBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZS5cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTgyLSAqXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODQtICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaDo4NTpzdGF0aWMgaW5saW5lIGJvb2wgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSh2b2lkKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODYte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMTA1PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2NyeXB0byhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTEtXHRjYXNlIEtWTV9TMzkwX1ZNX0NSWVBUT19FTkFCTEVfQVBJRTpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTUyOlx0XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTMtXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1OC1cdGNhc2UgS1ZNX1MzOTBfVk1fQ1JZUFRPX0RJU0FCTEVfQVBJRTpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTU5Olx0XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNjAtXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjEwMD1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX2hhc19hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjE1Ni1cdFx0Y2FzZSBLVk1fUzM5MF9WTV9DUllQVE9fRElTQUJMRV9BUElFOlxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIxNTc6XHRcdFx0cmV0ID0gYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpID8gMCA6IC1FTlhJTztcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMTU4LVx0XHRcdGJyZWFrO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMTAxPXN0YXRpYyBpbnQga3ZtX3MzOTBfYXB4YV9pbnN0YWxsZWQodm9pZClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEwNC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTA1Olx0aWYgKGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMDYtXHRcdGlmIChhcF9xY2koXHUwMDI2aW5mbykgPT0gMClcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz01OTI9c3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjAwLVx0LyogVmVyaWZ5IHRoYXQgdGhlIEFQIGluc3RydWN0aW9uIGFyZSBhdmFpbGFibGUgKi9cbmFyY2gvczM5MC9rdm0vcHJpdi5jOjYwMTpcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjAyLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yNTc4PXN0YXRpYyBpbnQgX19pbml0IGFwX21vZHVsZV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNTgxLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTgyOlx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjU4My1cdFx0cHJfd2FybihcJiMzNDtUaGUgaGFyZHdhcmUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgQVAgaW5zdHJ1Y3Rpb25zXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9MTY3PXN0YXRpYyBpbnQgX19pbml0IHZmaW9fYXBfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNzUtXHQvKiBJZiB0aGVyZSBhcmUgbm8gQVAgaW5zdHJ1Y3Rpb25zLCB0aGVyZSBpcyBub3RoaW5nIHRvIHBhc3MgdGhyb3VnaC4gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxNzY6XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSlcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNzctXHRcdHJldHVybiAtRU5PREVWO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg1MQoJCQkJCQkJb3V0cHV0OiAxNDUKCQkJCQkJCXRob3VnaHRzOiA4MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFZGSU8tQVAgRHJpdmVyIGFuZCBJdHMgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgZGVhbC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBzcGlkZXkgc2Vuc2VzIGFyZSB0aW5nbGluZy4gVGhlIGBhcF9idXNgIGl0c2VsZiB3b24mIzM5O3QgZXZlbiBpbml0aWFsaXplIHVubGVzcyBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCByZXR1cm5zIHRydWUuIEFuZCBmcm9tIHdoYXQgSSBzZWUgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmNgLCBpZiBpdCYjMzk7cyBmYWxzZSwgdGhlIHN5c3RlbSB0aHJvd3MgYSB3YXJuaW5nIGFuZCByZXR1cm5zIGAtRU5PREVWYC4gVGhhdCBtZWFucyB0aGUgZW50aXJlIEFQIHN1YnN5c3RlbSAqcmVxdWlyZXMqIHNvbWUgZm9ybSBvZiBoYXJkd2FyZSBzdXBwb3J0LgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgU3l6a2FsbGVyLCB3aGljaCBJIGtub3cgaXMgdGhlIGZ1enppbmcgdG9vbCBiZWluZyB1c2VkLCBydW4gb24gcmVhbCBzMzkweCBoYXJkd2FyZSBvciBpbiBRRU1VPyBBaCwgcmlnaHQsIFN5emthbGxlciB1c2VzIFFFTVUgZm9yIHMzOTB4LiBTbyB0aGUga2V5IHF1ZXN0aW9uIGlzLCBkb2VzIFFFTVUgZW11bGF0ZSBBUCBpbnN0cnVjdGlvbnM/IExldCYjMzk7cyBzZWUuLi4gUUVNVSBhbmQgQVAgaW5zdHJ1Y3Rpb25zLiBJIGRvbiYjMzk7dCByZWNhbGwgc2VlaW5nIGFueXRoaW5nIHNwZWNpZmljLiBJIHJlbWVtYmVyIHJlYWRpbmcgaW4gdGhlIHByb21wdCB0aGF0IGNlcnRhaW4gY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gUUVNVS4KClRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHRoYXQgY29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIHNob3VsZG4mIzM5O3QgYmUgY29uc2lkZXJlZCBmb3IgZnV6emluZy4gQWxzbywgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCBsaWtlIGNlcnRhaW4gUENJZSBjYXJkcywgYXJlIGFsc28gb3V0LgoKQWgsIFZGSU8gQVAuIEl0JiMzOTtzIGRlc2lnbmVkIGZvciBwYXNzaW5nIHRocm91Z2ggYWN0dWFsIHBoeXNpY2FsIEFQIGhhcmR3YXJlLCB0aG9zZSBJQk0gWiBjcnlwdG9ncmFwaGljIGNvcHJvY2Vzc29ycywgdG8gYSBndWVzdCBWTS4gVGhhdCBtZWFucyBpdCBuZWVkcyB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgKm9uIHRoZSBob3N0Ki4gU3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBBUCBoYXJkd2FyZSwgaXQganVzdCBzdXBwb3J0cyBwYXNzaW5nIGl0IHRocm91Z2ggdmlhIEtWTSBpZiB0aGUgaG9zdCBoYXMgaXQuIFNvIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgd2l0aG91dCB0aGF0IGRlZGljYXRlZCBoYXJkd2FyZSwgdGhpcyBjb2RlIHBhdGggaXMgc2ltcGx5IGluYWNjZXNzaWJsZS4KCkxldCBtZSBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnM7IElmIFFFTVUgY291bGQgZW11bGF0ZSBBUCBpbnN0cnVjdGlvbnMsIGl0IHdvdWxkIGJlIGluIFFFTVUmIzM5O3Mgc291cmNlIGNvZGUuIEkgZG9uJiMzOTt0IGhhdmUgdGhhdCBzb3VyY2UgY29kZSBpbiBmcm9udCBvZiBtZSwgYnV0IEkgKmtub3cqIHRob3NlIEFQIGluc3RydWN0aW9ucyBhcmUgdmVyeSBzcGVjaWZpYyB0byBJQk0mIzM5O3MgY3J5cHRvIGNhcmRzLiBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIGNyeXB0byBjYXJkcyB0aGVtc2VsdmVzOyBpdCBqdXN0IGhhbmRsZXMgdGhlIFZGSU8tQVAgZGV2aWNlIHBhc3MtdGhyb3VnaC4gVGhlcmVmb3JlLCBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCB3aWxsIHJldHVybiBmYWxzZSwgdGhlIGB2ZmlvX2FwX2luaXRgIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGAtRU5PREVWYCwgYW5kIHRoZSBkcml2ZXIgd29uJiMzOTt0IGV2ZW4gbG9hZC4gVGhlIGNvZGUgaW4gYHZmaW9fYXBfb3BzLmNgIGlzIHNpbXBseSB1bnJlYWNoYWJsZS4KCkkgYmV0dGVyIHZlcmlmeSB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgQVAgaW4gdGhlIGtlcm5lbCB0aGF0IEkmIzM5O20gbWlzc2luZy4gTGV0JiMzOTtzIHNlZS4uLiBJIHNlYXJjaCBmb3IgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGVgIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIG9ubHkgaW4gYGFwX2J1cy5jYCwgYHZmaW9fYXBfZHJ2LmNgLCBhbmQgYGt2bS1zMzkwLmNgLiBOb3RoaW5nIGxpa2UgYGFwX2h3c2ltYCBvciBhbnl0aGluZyBzdWdnZXN0aW5nIGEgc29mdHdhcmUgZmFsbGJhY2suIE5vcGUsIHNhZmUgdG8gc2F5IHRoaXMgbmVlZHMgdGhhdCBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZS4KCk9rYXksIGxldCBtZSByZXZpZXcgdGhlIHBhdGNoIGl0c2VsZiBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gSXQmIzM5O3Mgb25seSBtb2RpZnlpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AsIHNwZWNpZmljYWxseSBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGFuZCBgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bWAuIEJvdGggYXJlIHBhcnQgb2YgdGhlIFZGSU8gQVAgZHJpdmVyLCB3aGljaCBoaW5nZXMgb24gdGhhdCBBUCBoYXJkd2FyZS4gU28gaXQmIzM5O3MgYSBjbGVhciBjYXNlIG9mICYjMzQ7Y29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VJiMzNDsgYW5kICYjMzQ7dmVuZG9yLXNwZWNpZmljIC4uLiBkcml2ZXJzIC4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgLi4uIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IEV2ZW4gdGhvdWdoIGl0JiMzOTtzIEFQIGJ1cyBpbnN0ZWFkIG9mIFBDSWUsIHRoZSBwcmluY2lwbGUgaXMgdGhlIHNhbWUuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gcHJvdmlkZSB0aGlzIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MHgsIHdoaWNoIGlzIHVzZWQgdG8gcGFzcyB0aHJvdWdoIHBoeXNpY2FsIElCTSBaIGNyeXB0b2dyYXBoaWMgY29wcm9jZXNzb3JzIHRvIHZpcnR1YWwgbWFjaGluZXMuIFRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gKGB2ZmlvX2FwX2luaXRgKSBleHBsaWNpdGx5IGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIEFQIGluc3RydWN0aW9ucyB2aWEgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAsIHdoaWNoIHJldHVybnMgZmFsc2UgdW5sZXNzIHBoeXNpY2FsIEFQIGhhcmR3YXJlIGlzIHByZXNlbnQgYW5kIHBhc3NlZCB0aHJvdWdoIGJ5IHRoZSBob3N0LiBTdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyBkbyBub3QgZW11bGF0ZSBBUCBoYXJkd2FyZSBpbiBzb2Z0d2FyZS4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgd2l0aG91dCBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkweCwgd2hpY2ggaXMgdXNlZCB0byBwYXNzIHRocm91Z2ggcGh5c2ljYWwgSUJNIFogY3J5cHRvZ3JhcGhpYyBjb3Byb2Nlc3NvcnMgdG8gdmlydHVhbCBtYWNoaW5lcy4gVGhlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiAoYHZmaW9fYXBfaW5pdGApIGV4cGxpY2l0bHkgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgQVAgaW5zdHJ1Y3Rpb25zIHZpYSBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCwgd2hpY2ggcmV0dXJucyBmYWxzZSB1bmxlc3MgcGh5c2ljYWwgQVAgaGFyZHdhcmUgaXMgcHJlc2VudCBhbmQgcGFzc2VkIHRocm91Z2ggYnkgdGhlIGhvc3QuIFN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIGRvIG5vdCBlbXVsYXRlIEFQIGhhcmR3YXJlIGluIHNvZnR3YXJlLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB3aXRob3V0IHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ1OjE1Ljk2NDQwNDUyNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNzQxNjc2NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MHgsIHdoaWNoIGlzIHVzZWQgdG8gcGFzcyB0aHJvdWdoIHBoeXNpY2FsIElCTSBaIGNyeXB0b2dyYXBoaWMgY29wcm9jZXNzb3JzIHRvIHZpcnR1YWwgbWFjaGluZXMuIFRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiAoYHZmaW9fYXBfaW5pdGApIGV4cGxpY2l0bHkgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgQVAgaW5zdHJ1Y3Rpb25zIHZpYSBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCwgd2hpY2ggcmV0dXJucyBmYWxzZSB1bmxlc3MgcGh5c2ljYWwgQVAgaGFyZHdhcmUgaXMgcHJlc2VudCBhbmQgcGFzc2VkIHRocm91Z2ggYnkgdGhlIGhvc3QuIFN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIGRvIG5vdCBlbXVsYXRlIEFQIGhhcmR3YXJlIGluIHNvZnR3YXJlLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB3aXRob3V0IHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDU6NDU6MTUuOTY0NDExODI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzIzMDc1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYTY2ZDNiOGVlNDM0NzNmNmQ3N2Q3MzVhMzI0YjM4YTJkOTEzZDE3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMDU6NDU6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuaW5kZXggNDRiM2ExZGNjMWIzNi4uZjk0NjAzMTBkNDdiMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcXG4rKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcXG5AQCAtMTgyMSwyNyArMTgyMSwyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7XFxuIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3NldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuLVxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbTtcXG4tXFxuIFxcdGlmIChrdm0tXFx1MDAzZWFyY2guY3J5cHRvLmNyeWNiZCkge1xcbiBcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XFxuK1xcdFxcdGlmIChrdm0tXFx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykge1xcbitcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXHRcXHR9XFxuIFxcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rID0gXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2VwcWFwX2hvb2s7XFxuLVxcdFxcdHVwX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XFxuIFxcbiBcXHRcXHRnZXRfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcXG4tXFxuLVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobSwgXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xcbi1cXHRcXHRcXHRpZiAobSAhPSBtYXRyaXhfbWRldiBcXHUwMDI2XFx1MDAyNiBtLVxcdTAwM2Vrdm0gPT0ga3ZtKSB7XFxuLVxcdFxcdFxcdFxcdHJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuLVxcbiBcXHRcXHRrdm1fZ2V0X2t2bShrdm0pO1xcbiBcXHRcXHRtYXRyaXhfbWRldi1cXHUwMDNla3ZtID0ga3ZtO1xcbiBcXHRcXHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xcbi1cXG4gXFx0XFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xcbitcXHRcXHR1cF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTg4NSw3ICsxODc4LDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbiBcXHRpZiAoa3ZtIFxcdTAwMjZcXHUwMDI2IGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkKSB7XFxuIFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTtcXG4gXFx0XFx0a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2sgPSBOVUxMO1xcbi1cXHRcXHR1cF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xcbiBcXG4gXFx0XFx0Z2V0X3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XFxuIFxcbkBAIC0xODk1LDYgKzE4ODcsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfdW5zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuIFxcdFxcdG1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0gPSBOVUxMO1xcbiBcXG4gXFx0XFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xcbitcXHRcXHR1cF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xcbiBcXHR9XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ1OjE2LjQ5OTc3MjM2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkwMjA2Mjk5NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MHgsIHdoaWNoIGlzIHVzZWQgdG8gcGFzcyB0aHJvdWdoIHBoeXNpY2FsIElCTSBaIGNyeXB0b2dyYXBoaWMgY29wcm9jZXNzb3JzIHRvIHZpcnR1YWwgbWFjaGluZXMuIFRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiAoYHZmaW9fYXBfaW5pdGApIGV4cGxpY2l0bHkgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgQVAgaW5zdHJ1Y3Rpb25zIHZpYSBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCwgd2hpY2ggcmV0dXJucyBmYWxzZSB1bmxlc3MgcGh5c2ljYWwgQVAgaGFyZHdhcmUgaXMgcHJlc2VudCBhbmQgcGFzc2VkIHRocm91Z2ggYnkgdGhlIGhvc3QuIFN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIGRvIG5vdCBlbXVsYXRlIEFQIGhhcmR3YXJlIGluIHNvZnR3YXJlLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB3aXRob3V0IHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2E2NmQzYjhlZTQzNDczZjZkNzdkNzM1YTMyNGIzOGEyZDkxM2QxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDU6NDU6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbmluZGV4IDQ0YjNhMWRjYzFiMzYuLmY5NDYwMzEwZDQ3YjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuQEAgLTE4MjEsMjcgKzE4MjEsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnZmaW9fYXBfbWRldl9hdHRyX2dyb3Vwc1tdID0ge1xuIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3NldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbiBcdFx0XHRcdHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm07XG4tXG4gXHRpZiAoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiZCkge1xuIFx0XHRkb3duX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykge1xuK1x0XHRcdHVwX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuK1x0XHRcdHJldHVybiAtRVBFUk07XG4rXHRcdH1cbiBcdFx0a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vayA9IFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZXBxYXBfaG9vaztcbi1cdFx0dXBfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XG4gXG4gXHRcdGdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVxuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4tXHRcdFx0aWYgKG0gIT0gbWF0cml4X21kZXYgXHUwMDI2XHUwMDI2IG0tXHUwMDNla3ZtID09IGt2bSkge1xuLVx0XHRcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cbiBcdFx0a3ZtX2dldF9rdm0oa3ZtKTtcbiBcdFx0bWF0cml4X21kZXYtXHUwMDNla3ZtID0ga3ZtO1xuIFx0XHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xuLVxuIFx0XHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XG4rXHRcdHVwX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTg4NSw3ICsxODc4LDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuIFx0aWYgKGt2bSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiZCkge1xuIFx0XHRkb3duX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuIFx0XHRrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rID0gTlVMTDtcbi1cdFx0dXBfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9va19yd3NlbSk7XG4gXG4gXHRcdGdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuIFxuQEAgLTE4OTUsNiArMTg4Nyw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91bnNldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdFx0bWF0cml4X21kZXYtXHUwMDNla3ZtID0gTlVMTDtcbiBcbiBcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuK1x0XHR1cF93cml0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTtcbiBcdH1cbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NToxNi40OTk3NzUxMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDExMTk2MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZGSU8gQVAgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYC4gSXQncyB0d2Vha2luZyBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGFuZCBgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bWAsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgczM5MC1zcGVjaWZpYywgZGVhbGluZyB3aXRoIHRoZSBWRklPIEFQIOKAkyB0aGF0IGFkanVuY3QgcHJvY2Vzc29yIG1hdHJpeCBoYXJkd2FyZS4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXM6IENhbiBJIGV2ZW4gKmJlZ2luKiB0byBmdXp6IHRoaXMgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwP1xuXG5RRU1VIGhhbmRsZXMgczM5MHggZW11bGF0aW9uLCBidXQgZG9lcyBpdCBmYWl0aGZ1bGx5IG1vZGVsIHRoZSBBUCBtYXRyaXg/IFRoYXQncyB0aGUgY29yZSBodXJkbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IGV4aXN0aW5nIHN5emthbGxlciBjb3ZlcmFnZSBmb3IgdGhpcyBhcmVhLCBvciBpZiB0aGVyZSdzIGEgZmVhc2libGUgYXR0YWNrIHBhdGguXG5cbldhaXQsIHN5emthbGxlciAqZG9lcyogZnV6eiBzMzkweCwgYnV0IHRoYXQgb2Z0ZW4gcmVsaWVzIG9uIHNwZWNpZmljIGhhcmR3YXJlIG9yIGNhcmVmdWxseSBjb25zdHJ1Y3RlZCBRRU1VIGNvbmZpZ3VyYXRpb25zLiBUaGUgUUVNVSBkb2N1bWVudGF0aW9uIGhpbnRzIGF0IHNvbWUgVkZJTy1BUCBzdXBwb3J0LCBidXQgdGhhdCBzb3VuZHMgbGlrZSBpdCB3b3VsZCBpbnZvbHZlIHBhc3NpbmcgdGhyb3VnaCBob3N0IGhhcmR3YXJlIHRvIHRoZSBndWVzdCB1c2luZyBWRklPLiBUaGlzIHN1Z2dlc3RzIHRoYXQgaXQgd291bGQgdHlwaWNhbGx5IHJlcXVpcmUgYWN0dWFsIGhhcmR3YXJlIG9yIHBvdGVudGlhbGx5IGEgbWVkaWF0ZWQgZGV2aWNlIChtZGV2KSBmcmFtZXdvcmsuXG5cbk5vdyBJJ20gZGlnZ2luZyBkZWVwZXIgaW50byBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYCBhbmQgbm90aWNlIHRoZSB1c2Ugb2YgYGFwX21hdHJpeF9tZGV2YC4gVGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbjogaXMgaXQgZXZlbiBwb3NzaWJsZSB0byBjb25qdXJlIGFuIG1kZXYgd2l0aG91dCBwaHlzaWNhbGx5IHByZXNlbnQgQVAgaGFyZHdhcmU/IE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHJlbGF0ZWQgZmlsZXMgbGlrZSBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBjbHVlcyB0byBjcmVhdGluZyBhIHNpbXVsYXRlZCBkZXZpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NToyMi41MTA5NzUyOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY3MzM0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXBfbWF0cml4X21kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM0LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzozNTpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM2LXN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Jlc2V0X3FsaXN0KHN0cnVjdCBsaXN0X2hlYWQgKnFsaXN0KTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz03Nj1zdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODctICpcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6ODg6ICogQG1hdHJpeF9tZGV2OiBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgYXBfbWF0cml4X21kZXYgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIEFQXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTg5LSAqXFx0XFx0IGNvbmZpZ3VyYXRpb24gZGF0YSB0byB1c2UgdG8gdXBkYXRlIGEgS1ZNIGd1ZXN0J3MgQVBDQi5cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy05OS0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTAwOnN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfdXBkYXRlX2xvY2tzX2Zvcl9tZGV2KHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEwMS17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTExLSAqXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjExMjogKiBAbWF0cml4X21kZXY6IGEgcG9pbnRlciB0byBhIHN0cnVjdCBhcF9tYXRyaXhfbWRldiBvYmplY3QgY29udGFpbmluZyB0aGUgQVBcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTEzLSAqXFx0XFx0IGNvbmZpZ3VyYXRpb24gZGF0YSB0byB1c2UgdG8gdXBkYXRlIGEgS1ZNIGd1ZXN0J3MgQVBDQi5cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMjItICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjEyMzpzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTI0LXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNDYtICpcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTQ3OiAqIFJldHVybjogdGhlIGFwX21hdHJpeF9tZGV2IG9iamVjdCB0byB3aGljaCBAYXBxbiBpcyBhc3NpZ25lZCBvciBOVUxMIGlmIEBhcHFuXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE0ODogKlxcdCAgIGlzIG5vdCBhc3NpZ25lZCB0byBhbiBhcF9tYXRyaXhfbWRldi5cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTQ5LSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNTA6c3RhdGljIHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqZ2V0X3VwZGF0ZV9sb2Nrc19ieV9hcHFuKGludCBhcHFuKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNTEte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNTI6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTUzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4NS0gKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxODY6ICogTm90ZTogaWYgQHF1ZXVlIGlzIG5vdCBsaW5rZWQgdG8gYW4gYXBfbWF0cml4X21kZXYgb2JqZWN0LCB0aGUgS1ZNIGxvY2tcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg3LSAqXFx0ICB3aWxsIG5vdCBiZSB0YWtlbi5cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMDY9c3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICp2ZmlvX2FwX21kZXZfZ2V0X3F1ZXVlKFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMDc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA4LVxcdFxcdFxcdFxcdFxcdGludCBhcHFuKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTU4MT1zdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01ODgtXFx0XFx0XFx0ICAgICAgIC5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfUV9OT1RfQVZBSUwsIH07XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjU4OTpcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01OTAtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjEwLVxcdG1hdHJpeF9tZGV2ID0gY29udGFpbmVyX29mKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo2MTE6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGFwX21hdHJpeF9tZGV2LCBwcWFwX2hvb2spO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02MTItXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9NjQ1PXN0YXRpYyB2b2lkIHZmaW9fYXBfbWF0cml4X2luaXQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY1Mi1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NjUzOnN0YXRpYyB2b2lkIHNpZ25hbF9ndWVzdF9hcF9jZmdfY2hhbmdlZChzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02NTQte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY1OC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NjU5OnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91cGRhdGVfZ3Vlc3RfYXBjYihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02NjAte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY3MC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NjcxOnN0YXRpYyBib29sIHZmaW9fYXBfbWRldl9maWx0ZXJfY2RvbXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjcyLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz02ODM9c3RhdGljIGJvb2wgX3F1ZXVlX3Bhc3NhYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTcxOS0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NzIwOnN0YXRpYyBib29sIHZmaW9fYXBfbWRldl9maWx0ZXJfbWF0cml4KHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTcyMS1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyAqYXBtX2ZpbHRlcmVkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTc3Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc3Ny17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjc3ODpcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Nzc5OlxcdFxcdGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYsIHZkZXYpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03ODAtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9NzkwPXN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzkxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NzkyOlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc5My1cXHRpbnQgcmV0O1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTQtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjc5NTpcXHRtYXRyaXhfbWRldiA9IHZmaW9fYWxsb2NfZGV2aWNlKGFwX21hdHJpeF9tZGV2LCB2ZGV2LCBcXHUwMDI2bWRldi1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTYtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnZmaW9fYXBfbWF0cml4X2Rldl9vcHMpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTgxNS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6ODE2OnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9saW5rX3F1ZXVlKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTgxNy1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODI1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo4MjY6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2xpbmtfYXBxbihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LCBpbnQgYXBxbilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODI3LXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz04Mzk9c3RhdGljIHZvaWQgdmZpb19hcF91bmxpbmtfbWRldl9mcl9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04NDMtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjg0NDpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfdW5saW5rX2ZyX3F1ZXVlcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04NDUte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTg2MD1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODYxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6ODYyOlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNm1kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTg2My1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04NzktXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjg4MDpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfbG9nX3NoYXJpbmdfZXJyKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqYXNzaWduZWUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjg4MTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGFwX21hdHJpeF9tZGV2ICphc3NpZ25lZF90byxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODgyLVxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICphcG0sIHVuc2lnbmVkIGxvbmcgKmFxbSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy04OTMtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjg5NDpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfbG9nX2luX3VzZV9lcnIoc3RydWN0IGFwX21hdHJpeF9tZGV2ICphc3NpZ25lZSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtODk1LVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKmFwbSwgdW5zaWduZWQgbG9uZyAqYXFtKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTkyMS0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6OTIyOnN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3ZlcmlmeV9ub19zaGFyaW5nKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqYXNzaWduZWUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTkyMy1cXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgKm1kZXZfYXBtLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTkyNS17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjkyNjpcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKmFzc2lnbmVkX3RvO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy05MjctXFx0REVDTEFSRV9CSVRNQVAoYXBtLCBBUF9ERVZJQ0VTKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy05NzYtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjk3NzpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl92YWxpZGF0ZV9tYXNrcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy05Nzgte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTk4Ny1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6OTg4OnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9saW5rX2FkYXB0ZXIoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtOTg5LVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYXBpZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy05OTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjk5ODpzdGF0aWMgdm9pZCBjb2xsZWN0X3F1ZXVlc190b19yZXNldChzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy05OTktXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYXBpZCxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMDExLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMDEyOnN0YXRpYyB2b2lkIHJlc2V0X3F1ZXVlc19mb3JfYXBpZChzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMDEzLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhcGlkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEwMjEtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjEwMjI6c3RhdGljIGludCByZXNldF9xdWV1ZXNfZm9yX2FwaWRzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEwMjMtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nICphcG1fcmVzZXQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTA3Mz1zdGF0aWMgc3NpemVfdCBhc3NpZ25fYWRhcHRlcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTA3OS1cXHRERUNMQVJFX0JJVE1BUChhcG1fZmlsdGVyZWQsIEFQX0RFVklDRVMpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMDgwOlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTA4MS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xMTIzPXN0YXRpYyBzdHJ1Y3QgdmZpb19hcF9xdWV1ZVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMTI0Oip2ZmlvX2FwX3VubGlua19hcHFuX2ZyX21kZXYoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTEyNS1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYXBpZCwgdW5zaWduZWQgbG9uZyBhcHFpKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTExNDUtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjExNDY6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3VubGlua19hZGFwdGVyKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTExNDctXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhcGlkLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTExNjMtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjExNjQ6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfYWRhcHRlcnMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTE2NS1cXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKmFwaWRzKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTExOTQtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjExOTU6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfYWRhcHRlcihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMTk2LVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGFwaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTIyMD1zdGF0aWMgc3NpemVfdCB1bmFzc2lnbl9hZGFwdGVyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMjI1LVxcdHVuc2lnbmVkIGxvbmcgYXBpZDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTIyNjpcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEyMjctXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTI1MT1zdGF0aWMgREVWSUNFX0FUVFJfV08odW5hc3NpZ25fYWRhcHRlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEyNTItXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjEyNTM6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2xpbmtfZG9tYWluKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEyNTQtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFwcWkpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTI5Nz1zdGF0aWMgc3NpemVfdCBhc3NpZ25fZG9tYWluX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMzAzLVxcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjEzMDQ6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMzA1LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTEzNDU9c3RhdGljIERFVklDRV9BVFRSX1dPKGFzc2lnbl9kb21haW4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMzQ2LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMzQ3OnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91bmxpbmtfZG9tYWluKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTEzNDgtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYXBxaSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xMzY0LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxMzY1OnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2RvbWFpbnMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTM2Ni1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyAqYXBxaXMpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTM5NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTM5NjpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19kb21haW4oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTM5Ny1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFwcWkpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTQyMT1zdGF0aWMgc3NpemVfdCB1bmFzc2lnbl9kb21haW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE0MjYtXFx0dW5zaWduZWQgbG9uZyBhcHFpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNDI3OlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTQyOC1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xNDY5PXN0YXRpYyBzc2l6ZV90IGFzc2lnbl9jb250cm9sX2RvbWFpbl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTQ3NC1cXHR1bnNpZ25lZCBsb25nIGlkO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNDc1OlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTQ3Ni1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0xNTIzPXN0YXRpYyBzc2l6ZV90IHVuYXNzaWduX2NvbnRyb2xfZG9tYWluX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNTI4LVxcdHVuc2lnbmVkIGxvbmcgZG9taWQ7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE1Mjk6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNTMwLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE1NjE9c3RhdGljIHNzaXplX3QgY29udHJvbF9kb21haW5zX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE1NjUtXFx0dW5zaWduZWQgbG9uZyBpZDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTU2NjpcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE1NjctXFx0dW5zaWduZWQgbG9uZyBtYXhfZG9taWQgPSBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFkbV9tYXg7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTYwOD1zdGF0aWMgc3NpemVfdCBtYXRyaXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE2MTEtXFx0c3NpemVfdCBuY2hhcnM7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE2MTI6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNjEzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE2MjI9c3RhdGljIHNzaXplX3QgZ3Vlc3RfbWF0cml4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE2MjUtXFx0c3NpemVfdCBuY2hhcnM7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE2MjY6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNjI3LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE2NDI9c3RhdGljIHNzaXplX3QgYXBfY29uZmlnX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNjQ0LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTY0NTpcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE2NDYtXFx0aW50IGlkeCA9IDA7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTY2MD1zdGF0aWMgaW50IHBhcnNlX2JpdG1hcChjaGFyICoqc3RyYnVmcHRyLCB1bnNpZ25lZCBsb25nICpiaXRtYXAsIGludCBuYml0cylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNjcxLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxNjcyOnN0YXRpYyBpbnQgYXBfbWF0cml4X292ZXJmbG93X2NoZWNrKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE2NzMte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE3MDU9c3RhdGljIHNzaXplX3QgYXBfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTcwNy17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE3MDg6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xNzA5LVxcdHN0cnVjdCBhcF9tYXRyaXggbV9uZXcsIG1fb2xkLCBtX2FkZGVkLCBtX3JlbW92ZWQ7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTgwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTgyMC0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTgyMTpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4MjItXFx0XFx0XFx0XFx0c3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4NDItXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE4NDM6c3RhdGljIHZvaWQgdW5tYXBfaW92YShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LCB1NjQgaW92YSwgdTY0IGxlbmd0aClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg0NC17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MTg1NT1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfZG1hX3VubWFwKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldiwgdTY0IGlvdmEsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg1Ny17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE4NTg6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE4NTk6XFx0XFx0Y29udGFpbmVyX29mKHZkZXYsIHN0cnVjdCBhcF9tYXRyaXhfbWRldiwgdmRldik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4NjAtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTg3My0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MTg3NDpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfdW5zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4NzUte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE5ODA9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwMDktXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwMTA6c3RhdGljIGludCB2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWVzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwMTEte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIwNDY9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDQ3LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA0ODpcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA0OTpcXHRcXHRjb250YWluZXJfb2YodmRldiwgc3RydWN0IGFwX21hdHJpeF9tZGV2LCB2ZGV2KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA1MC1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMDU3PXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDU4LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA1OTpcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA2MDpcXHRcXHRjb250YWluZXJfb2YodmRldiwgc3RydWN0IGFwX21hdHJpeF9tZGV2LCB2ZGV2KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA2MS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMDY1PXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9yZXF1ZXN0KHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldiwgdW5zaWduZWQgaW50IGNvdW50KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNjctXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdmRldi1cXHUwMDNlZGV2O1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMDY4OlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNjktXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNzA6XFx0bWF0cml4X21kZXYgPSBjb250YWluZXJfb2YodmRldiwgc3RydWN0IGFwX21hdHJpeF9tZGV2LCB2ZGV2KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA3MS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMTQzPXN0YXRpYyBpbnQgdmZpb19hcF9pcnFfc2V0X2luaXQoc3RydWN0IHZmaW9faXJxX3NldCAqaXJxX3NldCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjE2NC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjE2NTpzdGF0aWMgaW50IHZmaW9fYXBfc2V0X3JlcXVlc3RfaXJxKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIxNjYtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjE5OC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjE5OTpzdGF0aWMgaW50IHZmaW9fYXBfc2V0X2NmZ19jaGFuZ2VfaXJxKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjAwLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjMxLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMjMyOnN0YXRpYyBpbnQgdmZpb19hcF9zZXRfaXJxcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjMzLVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMjU3PXN0YXRpYyBzc2l6ZV90IHZmaW9fYXBfbWRldl9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjI1OS17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIyNjA6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIyNjE6XFx0XFx0Y29udGFpbmVyX29mKHZkZXYsIHN0cnVjdCBhcF9tYXRyaXhfbWRldiwgdmRldik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIyNjItXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjg2LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMjg3OnN0YXRpYyBzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKnZmaW9fYXBfbWRldl9mb3JfcXVldWUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIyODgte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMjg5OlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIyOTAtXFx0dW5zaWduZWQgbG9uZyBhcGlkID0gQVBfUUlEX0NBUkQocS1cXHUwMDNlYXBxbik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjMwMj1zdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjMwOC1cXHR1bnNpZ25lZCBsb25nIGFwaWQsIGFwcWk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzMDk6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjMxMC1cXHRzdHJ1Y3QgYXBfZGV2aWNlICphcGRldiA9IHRvX2FwX2RldihkZXYpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0MDk9aW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDEzLVxcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI0MTQ6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQxNS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNDYzPXZvaWQgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDY2LVxcdHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDY3OlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0NjgtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjUyNj1pbnQgdmZpb19hcF9tZGV2X3Jlc291cmNlX2luX3VzZSh1bnNpZ25lZCBsb25nICphcG0sIHVuc2lnbmVkIGxvbmcgKmFxbSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTQzLSAqXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI1NDQ6ICogQG1hdHJpeF9tZGV2OiBhbiBhcF9tYXRyaXhfbWRldiBvYmplY3QgYXR0YWNoZWQgdG8gYSBLVk0gZ3Vlc3QuXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1NDUtICogQGFwcmVtOiB0aGUgYWRhcHRlcnMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBob3N0J3MgQVAgY29uZmlndXJhdGlvblxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1NDktICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI1NTA6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1NTEtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqYXByZW0sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjU5MT1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjU5NC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI1OTU6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjU5Ni1cXHRERUNMQVJFX0JJVE1BUChhcHJlbSwgQVBfREVWSUNFUyk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjczND1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3MzYte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzM3OlxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3MzgtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9Mjc5Nz12b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY2ZnX2luZm8sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgxMS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjgxMjpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MTMte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI4NDI9dm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjg0NC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4NDU6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjg0Ni1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMzctICpcXHRcXHRkcml2ZXIsIGJlIGl0IHVzaW5nIEBtZGV2X2xpc3Qgb3Igd3JpdGluZyB0aGUgc3RhdGUgb2YgYVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6Mzg6ICpcXHRcXHRzaW5nbGUgYXBfbWF0cml4X21kZXYgZGV2aWNlLiBJdCdzIHF1aXRlIGNvYXJzZSBidXQgd2UgZG9uJ3RcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTM5LSAqXFx0XFx0ZXhwZWN0IG11Y2ggY29udGVudGlvbi5cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtNDMtICpcXHRcXHQgd2lsbCBiZSB0YWtlbiB3aGVuIHRoZSBBUCBkZXZpY2VzIGFyZSBwbHVnZ2VkIGludG8gb3IgdW5wbHVnZ2VkXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDo0NDogKlxcdFxcdCBmcm9tIGEgZ3Vlc3QsIGFuZCB3aGVuIGFuIGFwX21hdHJpeF9tZGV2IGRldmljZSBpcyBhZGRlZCB0byBvclxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtNDUtICpcXHRcXHQgcmVtb3ZlZCBmcm9tIEBtZGV2X2xpc3Qgb3IgdGhlIGxpc3QgaXMgaXRlcmF0ZWQuXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTQ3PXN0cnVjdCBhcF9tYXRyaXhfZGV2IHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtNTAtXFx0c3RydWN0IGxpc3RfaGVhZCBtZGV2X2xpc3Q7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDo1MTpcXHRzdHJ1Y3QgbXV0ZXggbWRldnNfbG9jazsgLyogc2VyaWFsaXplcyBhY2Nlc3MgdG8gZWFjaCBhcF9tYXRyaXhfbWRldiAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtNTItXFx0c3RydWN0IGFwX2RyaXZlciAgKnZmaW9fYXBfZHJ2O1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD05MD1zdHJ1Y3QgYXBfcXVldWVfdGFibGUge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC05NC0vKipcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjk1OiAqIHN0cnVjdCBhcF9tYXRyaXhfbWRldiAtIENvbnRhaW5zIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIG1hdHJpeCBtZWRpYXRlZFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtOTYtICpcXHRcXHRcXHQgICBkZXZpY2UuXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC05Ny0gKiBAdmRldjpcXHR0aGUgdmZpbyBkZXZpY2VcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjk4OiAqIEBub2RlOlxcdGFsbG93cyB0aGUgYXBfbWF0cml4X21kZXYgc3RydWN0IHRvIGJlIGFkZGVkIHRvIGEgbGlzdFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtOTktICogQG1hdHJpeDpcXHR0aGUgYWRhcHRlcnMsIHVzYWdlIGRvbWFpbnMgYW5kIGNvbnRyb2wgZG9tYWlucyBhc3NpZ25lZCB0byB0aGVcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMTEzLSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTE0OnN0cnVjdCBhcF9tYXRyaXhfbWRldiB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xMTUtXFx0c3RydWN0IHZmaW9fZGV2aWNlIHZkZXY7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE0Mz1zdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNDQ6XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE0NS1cXHRkbWFfYWRkcl90IHNhdmVkX2lvdmE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ1OjIyLjY5NzcxMzk2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjY5MTEwMzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZGSU8gQVAgTG9ja2luZyBhbmQgTG9naWMgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1vZGlmeWluZyBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGFuZCBgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bWAuIEl0IHNlZW1zIGxpa2UgdGhleSdyZSBzaW1wbGlmeWluZyB0aGUgbG9naWMgYXJvdW5kIGF0dGFjaGluZyBhbmQgZGV0YWNoaW5nIGBhcF9tYXRyaXhfbWRldmAgZGV2aWNlcyB0byBLVk0gaW5zdGFuY2VzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGhhdmUgcmVtb3ZlZCBhIGxvb3AgdGhhdCBjaGVja2VkIGZvciBjb25mbGljdGluZyBhdHRhY2htZW50cywgd2hpY2ggc3RyaWtlcyBtZSBhcyBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiB0aGUgY29uY3VycmVuY3kgbW9kZWwuXG5cbkluc3RlYWQgb2YgdGhhdCBsb29wLCB0aGUgY29kZSBub3cgY2hlY2tzIGBpZiAoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykgeyByZXR1cm4gLUVQRVJNOyB9YCB1bmRlciB0aGUgYHBxYXBfaG9va19yd3NlbWAgbG9jay4gTWFrZXMgc2Vuc2UsIHVzaW5nIGEgcmVhZC13cml0ZSBzZW1hcGhvcmUgdG8gcHJvdGVjdCBhIHBvdGVudGlhbCBkYXRhIHJhY2UuIEFsc28gaW4gYHZmaW9fYXBfbWRldl91bnNldF9rdm1gLCB0aGUgcGF0Y2ggcmVtb3ZlcyB0aGUgbG9jayByZWxlYXNlL2FjcXVpcmUgYXJvdW5kIHRoZSBga3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vayA9IE5VTEw7YCBhc3NpZ25tZW50LiBBaCwgSSBzZWUgYSBiaWdnZXIgY2hhbmdlIGluIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSBsb2NrLXByb3RlY3RlZCBjaGVjazpcblxuYGBgY1xuIFx0aWYgKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYmQpIHtcbiBcdFx0ZG93bl93cml0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTtcbitcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2spIHtcbitcdFx0XHR1cF93cml0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTtcbitcdFx0XHRyZXR1cm4gLUVQRVJNO1xuK1x0XHR9XG4gXHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2sgPSBcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2VwcWFwX2hvb2s7XG4tXHRcdHVwX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuIFxuIFx0XHRnZXRfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcbi1cbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtLCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuLVx0XHRcdGlmIChtICE9IG1hdHJpeF9tZGV2IFx1MDAyNlx1MDAyNiBtLVx1MDAzZWt2bSA9PSBrdm0pIHtcbi1cdFx0XHRcdHJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9rdm0oa3ZtKTtcbi1cdFx0XHRcdHJldHVybiAtRVBFUk07XG4tXHRcdFx0fVxuLVx0XHR9XG4tXG4gXHRcdGt2bV9nZXRfa3ZtKGt2bSk7XG4gXHRcdG1hdHJpeF9tZGV2LVx1MDAzZWt2bSA9IGt2bTtcbiBcdFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcbi1cbiBcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuK1x0XHR1cF93cml0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTtcbiBcdH1cbiBgYGBcblxuVGhpcyBpcyBhIHByZXR0eSBtYWpvciBzaGlmdCBpbiBsb2NraW5nIGFuZCB0aGUgb3ZlcmFsbCBhdHRhY2htZW50IGxvZ2ljIGZvciBWRklPIEFQIGRldmljZXMuIFRoZSByZW1vdmFsIG9mIHRoZSBwcmV2aW91cyBsb29wIHN1Z2dlc3RzIGEgc2ltcGxlciwgbW9yZSBkaXJlY3QgYXBwcm9hY2ggdG8gcHJldmVudGluZyBjb25mbGljdGluZyBhdHRhY2htZW50cywgYnV0IGl0IGRvZXMgcmVseSBvbiB0aGF0IGBwcWFwX2hvb2tfcndzZW1gLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MgaW50cm9kdWNlZCBieSB0aGlzLiBBbHNvLCBkb2VzIGl0IGNoYW5nZSB0aGUgZXJyb3IgcGF0aHMgYXQgYWxsP1xuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGNhbiBTeXprYWxsZXIgdHJpZ2dlciB0aGlzIGNvZGU/IEl0IHJ1bnMgb24geDg2XzY0LCBhcm02NCwgcmlzY3Y2NCwgYW5kIHMzOTB4LiBPbiBzMzkweCwgU3l6a2FsbGVyIHVzZXMgUUVNVSwgc28gdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIFFFTVUgc3VwcG9ydCBWRklPIEFQPyBWRklPIEFQIGlzIGFsbCBhYm91dCB0aGUgaG9zdCBoYXZpbmcgQVAgaGFyZHdhcmUgYW5kIHBhc3NpbmcgaXQgdG8gdGhlIGd1ZXN0LiBCdXQsIFN5emthbGxlciB1c2VzIGBzeXotZXhlY3V0b3JgIGluc2lkZSB0aGUgZ3Vlc3QuIFNvLCBpZiBTeXprYWxsZXIgaXMgcnVubmluZyAqaW5zaWRlKiB0aGUgZ3Vlc3QsIGNhbiBpdCBpbnRlcmFjdCB3aXRoIGAvZGV2L3ZmaW8vLi4uYCBpZiB0aGUgZ3Vlc3QgaXRzZWxmIGhhcyBWRklPIEFQIGRldmljZXM/IE5vLCBWRklPIEFQIGlzIGEgaG9zdCBkcml2ZXIuIFN5emthbGxlciBuZWVkcyB0byBydW4gb24gdGhlIGhvc3QgKG9yIGluIGEgbmVzdGVkIHNldHVwKSB0byBpbnRlcmFjdCB3aXRoIGAvc3lzL2J1cy9tZGV2L2RldmljZXMvYCB0byBjcmVhdGUgYW4gYGFwX21hdHJpeF9tZGV2YCBhbmQgdGhlbiB1c2UgYC9kZXYvdmZpby9gIHRvIGF0dGFjaCBpdCB0byBLVk0uXG5cbldhaXQsIGB2ZmlvX2FwX21kZXZfc2V0X2t2bWAgaXMgY2FsbGVkIHdoZW4gYSBWRklPIGdyb3VwIGlzIGF0dGFjaGVkIHRvIEtWTSB2aWEgYEtWTV9ERVZfVkZJT19HUk9VUF9BRERgIG9yIHNpbWlsYXIuIEkgbmVlZCB0byBjaGVjayB3aGVyZSBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDE2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ1OjM0Ljk2Njg0NDg1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU0MjE1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19hcF9tZGV2X3NldF9rdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTE4MDY9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnZmaW9fYXBfbWRldl9hdHRyX2dyb3Vwc1tdID0ge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4MTEtLyoqXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjE4MTI6ICogdmZpb19hcF9tZGV2X3NldF9rdm0gLSBzZXRzIGFsbCBkYXRhIGZvciBAbWF0cml4X21kZXYgdGhhdCBhcmUgbmVlZGVkXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTE4MTMtICogdG8gbWFuYWdlIEFQIHJlc291cmNlcyBmb3IgdGhlIGd1ZXN0IHdob3NlIHN0YXRlIGlzIHJlcHJlc2VudGVkIGJ5IEBrdm1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0xODIwLSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoxODIxOnN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3NldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMTgyMi1cXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjA0Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA1My1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjA1NDpcXHRyZXR1cm4gdmZpb19hcF9tZGV2X3NldF9rdm0obWF0cml4X21kZXYsIHZkZXYtXFx1MDAzZWt2bSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NTozNS4xNTIyNzk1NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODA5OTg5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWRklPIEFQIERldmljZSBPcGVuaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdmZpb19hcF9tZGV2X29wZW5fZGV2aWNlYCBmdW5jdGlvbiBjYWxsIOKAkyByaWdodCwgdGhpcyBpcyB0aGUgYC5vcGVuX2RldmljZWAgY2FsbGJhY2sgZm9yIHRoZSBWRklPIGRldmljZS4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBjb2RlIHBhdGggKmFjdHVhbGx5KiBiZSByZWFjaGVkIHdpdGhvdXQgYW55IHBoeXNpY2FsIEFQIGhhcmR3YXJlIHByZXNlbnQgaW4gdGhlIHN5c3RlbT8gVGhhdCdzIGEgY3J1Y2lhbCBxdWVzdGlvbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGB2ZmlvX2FwYCBkcml2ZXIgZXZlbiAqbG9hZHMqIGFuZCwgY3J1Y2lhbGx5LCBpZiBpdCBjcmVhdGVzIGFueSBkZXZpY2VzLCB3aXRob3V0IHVuZGVybHlpbmcgcGh5c2ljYWwgaGFyZHdhcmUuIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBoYXBwZW5zIGluIGEgcHVyZWx5IHNvZnR3YXJlIG9yIHNpbXVsYXRlZCBlbnZpcm9ubWVudC4gSWYgdGhlIGFuc3dlciBpcyB5ZXMsIHRoZW4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgdGhhdCB0aGlzIGRldmljZSBtaWdodCBiZSBpbml0aWFsaXplZCBldmVuIHdpdGhvdXQgQVAgaGFyZHdhcmUuIElmIGl0IGRvZXNuJ3QsIEkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBuZXh0IHBvc3NpYmxlIGNhdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIzOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ1OjM5LjAzMzI4MDk0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1MjA0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0yMDA9c3RhdGljIHZvaWQgX19leGl0IHZmaW9fYXBfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTIwNy1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MjA4Om1vZHVsZV9pbml0KHZmaW9fYXBfaW5pdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTIwOS1tb2R1bGVfZXhpdCh2ZmlvX2FwX2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NTozOS4xOTc4MDY0NzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk1NjQ0MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgdmZpb19hcF9pbml0YCBmdW5jdGlvbi5cblxuKipJbml0aWFsIENvbnNpZGVyYXRpb25zOiBEaXZpbmcgaW50byB2ZmlvX2FwX2luaXQqKlxuXG5BbHJpZ2h0LCBzbyBgdmZpb19hcF9pbml0YC4uLiBiYXNlZCBvbiB0aGUgbmFtZSwgdGhpcyBpcyBwcm9iYWJseSB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3Igc29tZSBhc3BlY3Qgb2YgdGhlIFZGSU8gKFZpcnR1YWwgRnVuY3Rpb24gSS9PKSBzdWJzeXN0ZW0gcmVsYXRlZCB0byBBY2Nlc3MgUGVybWlzc2lvbnMgKEFQKSBvciBBY2Nlc3MgUHJvdGVjdGlvbiAoQVApLiBUaGF0IHRlbGxzIG1lIGltbWVkaWF0ZWx5IHRoYXQgd2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIHNlY3VyaXR5LXNlbnNpdGl2ZSBhcmVhLiBWRklPIGlzIGFsbCBhYm91dCBkaXJlY3QgZGV2aWNlIGFzc2lnbm1lbnQsIGJ5cGFzc2luZyB0aGUgaHlwZXJ2aXNvciB0byBwcm92aWRlIG5lYXItbmF0aXZlIHBlcmZvcm1hbmNlIHRvIHZpcnR1YWwgbWFjaGluZXMuIFRoZSBcIkFQXCIgY29tcG9uZW50IHN1Z2dlc3RzIHRoaXMgaW5pdGlhbGl6YXRpb24gaXMgbGlrZWx5IHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSBzdHJ1Y3R1cmVzIGFuZCBtZWNoYW5pc21zIGZvciBjb250cm9sbGluZyBhY2Nlc3MgdG8gSS9PIHJlc291cmNlcywgcG90ZW50aWFsbHkgZW5zdXJpbmcgdGhhdCBhIFZNIGNhbiBvbmx5IGFjY2VzcyB0aGUgaGFyZHdhcmUgaXQncyBsZWdpdGltYXRlbHkgZW50aXRsZWQgdG8uXG5cbkknZCBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBoYW5kbGUgdGFza3MgbGlrZTpcblxuKiAgICoqUmVzb3VyY2UgQWxsb2NhdGlvbjoqKiBQb3RlbnRpYWxseSBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgZGF0YSBzdHJ1Y3R1cmVzIHRvIHRyYWNrIHdoaWNoIHJlc291cmNlcyBhcmUgYXNzaWduZWQgdG8gd2hpY2ggVk1zIGFuZCB3aGF0IGFjY2VzcyBwZXJtaXNzaW9ucyB0aG9zZSBWTXMgaGF2ZS4gVGhpcyBjb3VsZCBpbnZvbHZlIG1lbW9yeSBzdHJ1Y3R1cmVzLCBsb2Nrcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuXG4qICAgKipTZWN1cml0eSBDb250ZXh0IFNldHVwOioqIFRoaXMgbWlnaHQgaW5jbHVkZSBzZXR0aW5nIHVwIHRoZSBzZWN1cml0eSBjb250ZXh0cyBmb3IgdGhlIGhhcmR3YXJlIGRldmljZXMgcmVsYXRlZCB0byBhY2Nlc3MgcGVybWlzc2lvbnMuXG4qICAgKipJbnRlcnJ1cHQgSGFuZGxpbmc6KiogVkZJTywgYXQgdGhpcyBwb2ludCwgY291bGQgbWFuYWdlIGludGVycnVwdCByb3V0aW5nIGZvciBhc3NpZ25lZCBkZXZpY2VzLiBJZiBBUCBpcyByZWxhdGVkIHRvIGludGVycnVwdHMsIGl0IG1pZ2h0IGludm9sdmUgY29uZmlndXJpbmcgaW50ZXJydXB0IHJlbWFwcGluZyBvciBpbnRlcnJ1cHQgaW5qZWN0aW9uIG1lY2hhbmlzbXMuXG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBBIGtleSBjb21wb25lbnQgd291bGQgYmUgcm9idXN0IGVycm9yIGhhbmRsaW5nLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggZGlyZWN0IGRldmljZSBhY2Nlc3MsIGFueSBtaXNjb25maWd1cmF0aW9uIG9yIHNlY3VyaXR5IGJyZWFjaCBjYW4gY3Jhc2ggdGhlIHN5c3RlbS4gU28sIEkgd291bGQgZXhwZWN0IGNoZWNrcyBmb3IgaWxsZWdhbCByZXF1ZXN0cyBvciBhY2Nlc3MgYXR0ZW1wdHMuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgdGhlIGZ1bmN0aW9uIGFjdHVhbGx5IGRvZXMuLi4gSSdsbCBsb29rIGZvciBzcGVjaWZpYyBpbnRlcmFjdGlvbnMgd2l0aCBoYXJkd2FyZSwgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMsIGFuZCBhbnkgY2FsbHMgcmVsYXRlZCB0byBzZWN1cml0eSBjb250ZXh0cyBvciByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJ20ga2VlbiB0byBzZWUgaG93IHRoZXkncmUgaGFuZGxpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY3OCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ1OjQzLjQ5MzQ1MzkzNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MzEyNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fYXBfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE1Mz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2RiZl9pbmZvX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNjYtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE2NzpzdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTY4LXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0yMDA9c3RhdGljIHZvaWQgX19leGl0IHZmaW9fYXBfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTIwNy1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MjA4Om1vZHVsZV9pbml0KHZmaW9fYXBfaW5pdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTIwOS1tb2R1bGVfZXhpdCh2ZmlvX2FwX2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NTo0My41OTc3NzM0MjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MDYwNDUzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHZmaW9fYXBfaW5pdGAgZnVuY3Rpb24uXG5cbioqQW5hbHl6aW5nIHZmaW9fYXBfaW5pdCoqXG5cbkFscmlnaHQsIGhlcmUgd2UgZ28uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgdGhlIFZGSU8gQWRkcmVzcyBTcGFjZSAoQVApIGltcGxlbWVudGF0aW9uLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBrZXkgYXJlYXMgdGhpcyB3aWxsIHRvdWNoIHVwb24uIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgbWVtb3J5IG1hcHBpbmcsIERNQSBzZXR1cCwgaW50ZXJydXB0IGhhbmRsaW5nIGluaXRpYWxpemF0aW9uLCBhbmQgYW55IGhhcmR3YXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gdGhhdCdzIGNydWNpYWwgZm9yIGdldHRpbmcgYW4gQVAgZnVuY3Rpb25pbmcgd2l0aGluIHRoZSBWRklPIGZyYW1ld29yay4gSSdsbCBleHBlY3QgdG8gc2VlIGhvdyBpdCBtYW5hZ2VzIHRoZSBwcm90ZWN0aW9uIGRvbWFpbiBhbmQgdGhlIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiBMZXQncyBzZWUgaG93IHRoZXkndmUgYXBwcm9hY2hlZCB0aGUgYXJjaGl0ZWN0dXJlLiBJJ2xsIGJlIHJlYWxseSBmb2N1c2luZyBvbiBhbnkgb3B0aW1pemF0aW9ucyBvciB1bnVzdWFsIGNvZGUgcGF0aHMuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBkZXNpZ25lZCBmb3IgcGVyZm9ybWFuY2Ugb3IgaXMgbW9yZSBhaW1lZCBmb3IgZ2VuZXJhbGl0eS4gSSB3aWxsIG5vdGUgaG93IGl0J3MgZGVzaWduZWQuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgZG8gdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmU/IEFyZSB0aGVyZSBhbnkgY2xldmVyIHRyaWNrcyB0byBtaW5pbWl6ZSBvdmVyaGVhZCBvciBtYXhpbWl6ZSBwYXJhbGxlbGlzbT8gQXJlIHRoZXkgdGFraW5nIGFkdmFudGFnZSBvZiBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZT8gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwncyBpbiB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczOTYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NTo0Ny4wNjgzODE0NjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjcsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjc6XFx0c3RhdGljIGludCBfX2luaXQgdmZpb19hcF9pbml0KHZvaWQpXFxuIDE2ODpcXHR7XFxuIDE2OTpcXHRcXHRpbnQgcmV0O1xcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHRyZXQgPSB2ZmlvX2FwX2RiZl9pbmZvX2luaXQoKTtcXG4gMTcyOlxcdFxcdGlmIChyZXQpXFxuIDE3MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHQvKiBJZiB0aGVyZSBhcmUgbm8gQVAgaW5zdHJ1Y3Rpb25zLCB0aGVyZSBpcyBub3RoaW5nIHRvIHBhc3MgdGhyb3VnaC4gKi9cXG4gMTc2OlxcdFxcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKVxcbiAxNzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdHJldCA9IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUoKTtcXG4gMTgwOlxcdFxcdGlmIChyZXQpXFxuIDE4MTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRyZXQgPSBhcF9kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNnZmaW9fYXBfZHJ2LCBUSElTX01PRFVMRSwgVkZJT19BUF9EUlZfTkFNRSk7XFxuIDE4NDpcXHRcXHRpZiAocmV0KSB7XFxuIDE4NTpcXHRcXHRcXHR2ZmlvX2FwX21hdHJpeF9kZXZfZGVzdHJveSgpO1xcbiAxODY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTg3OlxcdFxcdH1cXG4gMTg4OlxcdFxcbiAxODk6XFx0XFx0cmV0ID0gdmZpb19hcF9tZGV2X3JlZ2lzdGVyKCk7XFxuIDE5MDpcXHRcXHRpZiAocmV0KSB7XFxuIDE5MTpcXHRcXHRcXHRhcF9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2dmZpb19hcF9kcnYpO1xcbiAxOTI6XFx0XFx0XFx0dmZpb19hcF9tYXRyaXhfZGV2X2Rlc3Ryb3koKTtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTk1OlxcdFxcdH1cXG4gMTk2OlxcdFxcbiAxOTc6XFx0XFx0cmV0dXJuIDA7XFxuIDE5ODpcXHR9XFxuIDE5OTpcXHRcXG4gMjAwOlxcdHN0YXRpYyB2b2lkIF9fZXhpdCB2ZmlvX2FwX2V4aXQodm9pZClcXG4gMjAxOlxcdHtcXG4gMjAyOlxcdFxcdHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKCk7XFxuIDIwMzpcXHRcXHRhcF9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2dmZpb19hcF9kcnYpO1xcbiAyMDQ6XFx0XFx0dmZpb19hcF9tYXRyaXhfZGV2X2Rlc3Ryb3koKTtcXG4gMjA1OlxcdFxcdGRlYnVnX3VucmVnaXN0ZXIodmZpb19hcF9kYmZfaW5mbyk7XFxuIDIwNjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ1OjQ3LjA2ODU1NzUyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE0NTQ5MzgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aCBGdXp6aW5nIC0gQSBEZWVwIERpdmUgaW50byBzMzkweCBBUCBJbnN0cnVjdGlvbnMgYW5kIFZGSU8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBhbmQgaW1tZWRpYXRlbHkgc2VlIGBpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkgcmV0dXJuIC1FTk9ERVY7YC4gVGhhdCdzIGEgcmVkIGZsYWcuIElmIHRoZSBob3N0IGRvZXNuJ3QgaGF2ZSBBZGp1bmN0IFByb2Nlc3NvciAoQVApIGluc3RydWN0aW9ucywgdGhlIGRyaXZlciB3b24ndCBldmVuIHN0YXJ0LiBUaGUgYmlnIHF1ZXN0aW9uIGlzLCBkb2VzIFFFTVUgZW11bGF0ZSB0aGlzIGZvciB0aGUgZ3Vlc3QsIGVzcGVjaWFsbHkgc2luY2Ugc3l6a2FsbGVyIGlzIHJ1bm5pbmcgd2l0aGluIGEgUUVNVSBndWVzdCBmb3IgczM5MHg/XG5cblFFTVUgKmNhbiogZW11bGF0ZSBvciBwYXNzIHRocm91Z2ggQVAgaW5zdHJ1Y3Rpb25zLCBidXQgaXQncyBub3QgdGhlIGRlZmF1bHQuIElmIHN5emthbGxlciBpcyBydW5uaW5nIGluIGEgUUVNVSBndWVzdCwgSSBuZWVkIHRvIGtub3cgaWYgQVAgaW5zdHJ1Y3Rpb25zIGFyZSBlbmFibGVkIGluICp0aGF0KiBzcGVjaWZpYyBRRU1VIGluc3RhbmNlLiBTeXprYWxsZXIgbWlnaHQgaGF2ZSBzMzkweC1zcGVjaWZpYyBzZXR1cHMsIGJ1dCB0aGlzIGlzIGEgVkZJTyBkcml2ZXIsIHNvIHdlIG5lZWQgdG8ga25vdyB3aGF0IHNldHVwIGlzIHRoZXJlLiBWRklPIGlzIGZvciBkZXZpY2UgcGFzc3Rocm91Z2guIFNvIGRvZXMgc3l6a2FsbGVyIHJ1biBhcyB0aGUgaG9zdCBmb3IgYSBuZXN0ZWQgZ3Vlc3QsIG9yIGRvZXMgaXQgZGlyZWN0bHkgb3BlbiBgL2Rldi92ZmlvLy4uLmA/IENhbiBzeXprYWxsZXIgZXZlbiB0cmlnZ2VyIGB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2VgP1xuXG5ZZXMsIGl0IGNhbiwgSUYgdGhlIGB2ZmlvX2FwYCBkcml2ZXIgaXMgbG9hZGVkIGFuZCBhbiBtZGV2IChtZWRpYXRlZCBkZXZpY2UpIGlzIGNyZWF0ZWQuIEJ1dCBjcmVhdGluZyBhbiBtZGV2IG5lZWRzIHN5c2ZzIHdyaXRlcywgYW5kIHdoaWxlIHN5emthbGxlciBkb2VzIGhhdmUgc3lzZnMgZnV6emluZywgaXQncyBwcmV0dHkgbGltaXRlZC4gVGhlIG1vcmUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciBzeXprYWxsZXIncyBzMzkweCBlbnZpcm9ubWVudCBldmVuICpoYXMqIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIHRydWUgaW4gYSB0eXBpY2FsIHMzOTB4IFFFTVUgc2V0dXAuXG5cbkluIFFFTVUsIEFQIGluc3RydWN0aW9ucyBhcmUgb25seSB0aGVyZSBpZiB0aGUgYHZmaW8tYXBgIGRldmljZSBpcyBwYXNzZWQgdGhyb3VnaCwgb3IgaWYgUUVNVSBlbXVsYXRlcyBpdC4gQW5kIEkgdGhpbmsgUUVNVSBkb2Vzbid0IGZ1bGx5IGVtdWxhdGUgQVAgaW5zdHJ1Y3Rpb25zIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2l0aG91dCB0aGUgaGFyZHdhcmUuIFJpZ2h0LCBhbmQgSSBzaG91bGQgY2hlY2sgaWYgdGhpcyBpcyBldmVuIHdvcnRoIGZ1enppbmchXG5cbkxldCdzIHNlZSB3aGF0IHRoZSBwcm9tcHQgc2F5cy4uLiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYuLi5cIiBPa2F5LCB0aGUgcHJvbXB0IGlzIGNsZWFyLiBJcyBgdmZpb19hcGAgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyPyBZZXMsIEFQIGlzIElCTSdzIG1haW5mcmFtZSBjcnlwdG9ncmFwaGljIGNvcHJvY2Vzc29yIOKAkyBpdCdzIHNwZWNpZmljIHRvIElCTSBaIChzMzkweCkgaGFyZHdhcmUuIERvZXMgUUVNVSBlbXVsYXRlIGl0PyBJIHNob3VsZCBjaGVjayBmb3IgYSBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgQVAgaW4gdGhlIGtlcm5lbCBvciBRRU1VLlxuXG5JbiB0aGUga2VybmVsLCBgZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuY2AgaGFuZGxlcyB0aGUgQVAgYnVzLCBidXQgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgbGlrZSBgbWFjODAyMTFfaHdzaW1gIG9yIGB2a21zYC4gU28sIGlmIHlvdSBydW4gUUVNVSB3aXRob3V0IGFjdHVhbCBBUCBoYXJkd2FyZSBvbiB0aGUgaG9zdCwgeW91IGNhbid0IHBhc3MgdGhyb3VnaCBBUCBkZXZpY2VzLiBXYWl0LCBpcyBpdCBldmVuIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbiBBUCBtZGV2IHdpdGhvdXQgcGh5c2ljYWwgQVAgaGFyZHdhcmU/IExldCdzIGNoZWNrIGB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMzAsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NTo1OS4yMTQwNTM5NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0aWYgKCFtYXRyaXhfZGV2KSB7XFxuIDEwMTpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiAxMDI6XFx0XFx0XFx0Z290byBtYXRyaXhfYWxsb2NfZXJyO1xcbiAxMDM6XFx0XFx0fVxcbiAxMDQ6XFx0XFxuIDEwNTpcXHRcXHQvKiBGaWxsIGluIGNvbmZpZyBpbmZvIHZpYSBQUUFQKFFDSSksIGlmIGF2YWlsYWJsZSAqL1xcbiAxMDY6XFx0XFx0aWYgKHRlc3RfZmFjaWxpdHkoMTIpKSB7XFxuIDEwNzpcXHRcXHRcXHRyZXQgPSBhcF9xY2koXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWluZm8pO1xcbiAxMDg6XFx0XFx0XFx0aWYgKHJldClcXG4gMTA5OlxcdFxcdFxcdFxcdGdvdG8gbWF0cml4X2FsbG9jX2VycjtcXG4gMTEwOlxcdFxcdH1cXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuIDExMzpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldl9saXN0KTtcXG4gMTE0OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWd1ZXN0c19sb2NrKTtcXG4gMTE1OlxcdFxcbiAxMTY6XFx0XFx0ZGV2X3NldF9uYW1lKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCIlc1xcXCIsIFZGSU9fQVBfREVWX05BTUUpO1xcbiAxMTc6XFx0XFx0bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlLnBhcmVudCA9IHJvb3RfZGV2aWNlO1xcbiAxMTg6XFx0XFx0bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlLmJ1cyA9IFxcdTAwMjZtYXRyaXhfYnVzO1xcbiAxMTk6XFx0XFx0bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlLnJlbGVhc2UgPSB2ZmlvX2FwX21hdHJpeF9kZXZfcmVsZWFzZTtcXG4gMTIwOlxcdFxcdG1hdHJpeF9kZXYtXFx1MDAzZXZmaW9fYXBfZHJ2ID0gXFx1MDAyNnZmaW9fYXBfZHJ2O1xcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHRyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWRldmljZSk7XFxuIDEyMzpcXHRcXHRpZiAocmV0KVxcbiAxMjQ6XFx0XFx0XFx0Z290byBtYXRyaXhfcmVnX2VycjtcXG4gMTI1OlxcdFxcbiAxMjY6XFx0XFx0cmV0ID0gZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZtYXRyaXhfZHJpdmVyKTtcXG4gMTI3OlxcdFxcdGlmIChyZXQpXFxuIDEyODpcXHRcXHRcXHRnb3RvIG1hdHJpeF9kcnZfZXJyO1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHRyZXR1cm4gMDtcXG4gMTMxOlxcdFxcbiAxMzI6XFx0bWF0cml4X2Rydl9lcnI6XFxuIDEzMzpcXHRcXHRkZXZpY2VfZGVsKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UpO1xcbiAxMzQ6XFx0bWF0cml4X3JlZ19lcnI6XFxuIDEzNTpcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UpO1xcbiAxMzY6XFx0bWF0cml4X2FsbG9jX2VycjpcXG4gMTM3OlxcdFxcdGJ1c191bnJlZ2lzdGVyKFxcdTAwMjZtYXRyaXhfYnVzKTtcXG4gMTM4OlxcdGJ1c19yZWdpc3Rlcl9lcnI6XFxuIDEzOTpcXHRcXHRyb290X2RldmljZV91bnJlZ2lzdGVyKHJvb3RfZGV2aWNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDU6NDU6NTkuMjE0MTYxNTM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODQwODk4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBJbnN0cnVjdGlvbiBBdmFpbGFiaWxpdHkqKlxuXG5Pa2F5LCB0aGUgY29kZSdzIGNoZWNraW5nIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIG9uIG15IG1pbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyouIFdoYXQgY3JpdGVyaWEgaXMgaXQgY2hlY2tpbmc/IElzIGl0IGxvb2tpbmcgYXQgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBwcm9ncmFtIHN0YXRlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG5hbWUgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIHRoZSBhdmFpbGFibGUgaW5zdHJ1Y3Rpb24gc2V0LCBidXQgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGlzIGtleS4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBLbm93aW5nIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIGRpY3RhdGVzIHRoZSBuZXh0IHBhdGggdGhlIHByb2dyYW0gdGFrZXMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGNvbXBsZXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzMzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NjowMi4zOTgyNTQ4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMDI1Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFwX2luc3RydWN0aW9uc19hdmFpbGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaD03Mj11bmlvbiBhcF9xdWV1ZV9zdGF0dXNfcmVnIHtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTgwLS8qKlxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oOjgxOiAqIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSAtIFRlc3QgaWYgQVAgaW5zdHJ1Y3Rpb25zIGFyZSBhdmFpbGFibGUuXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODItICpcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTg0LSAqL1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oOjg1OnN0YXRpYyBpbmxpbmUgYm9vbCBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKHZvaWQpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTExMDU9c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfY3J5cHRvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTUxLVxcdGNhc2UgS1ZNX1MzOTBfVk1fQ1JZUFRPX0VOQUJMRV9BUElFOlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTUyOlxcdFxcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTMtXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTgtXFx0Y2FzZSBLVk1fUzM5MF9WTV9DUllQVE9fRElTQUJMRV9BUElFOlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTU5OlxcdFxcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNjAtXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIxMDA9c3RhdGljIGludCBrdm1fczM5MF92bV9oYXNfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjE1Ni1cXHRcXHRjYXNlIEtWTV9TMzkwX1ZNX0NSWVBUT19ESVNBQkxFX0FQSUU6XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIxNTc6XFx0XFx0XFx0cmV0ID0gYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpID8gMCA6IC1FTlhJTztcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjE1OC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMTAxPXN0YXRpYyBpbnQga3ZtX3MzOTBfYXB4YV9pbnN0YWxsZWQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTA0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTA1OlxcdGlmIChhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEwNi1cXHRcXHRpZiAoYXBfcWNpKFxcdTAwMjZpbmZvKSA9PSAwKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NTkyPXN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjAwLVxcdC8qIFZlcmlmeSB0aGF0IHRoZSBBUCBpbnN0cnVjdGlvbiBhcmUgYXZhaWxhYmxlICovXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NjAxOlxcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTYwMi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ2OjAyLjU4OTI5Mjc2OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc5NDg5OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIEFQIEluc3RydWN0aW9uIEF2YWlsYWJpbGl0eSoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmhgLiBJJ20gZ3Vlc3NpbmcgdGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIG9yIGRlY2xhcmF0aW9uIG9mIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlYCB3b3VsZCByZXNpZGUuIEl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgaW5mb3JtYXRpb24gb24gdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGVzZSBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgaW4gdGhlIFMvMzkwIGFyY2hpdGVjdHVyZS4gSSdtIGV4cGVjdGluZyB0aGlzIGhlYWRlciBmaWxlIHRvIHByb3ZpZGUgdGhlIG1lY2hhbmlzbSwgd2hldGhlciBpdCdzIGEgbWFjcm8sIGEgc3RydWN0dXJlLCBvciBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCB0aGF0IGFsbG93cyB0aGUgY29kZSB0byBkZXRlcm1pbmUgd2hpY2ggQVAgaW5zdHJ1Y3Rpb25zIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgaGFyZHdhcmUuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGNoZWNrIGlzIHBlcmZvcm1lZCDigJMgaXMgaXQgYmFzZWQgb24gQ1BVIG1vZGVsLCBmZWF0dXJlIGJpdHMsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyB0aGUgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0ODAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NjowNi4wNjg3ODU4MjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdC8qKlxcbiAgODE6XFx0ICogYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIC0gVGVzdCBpZiBBUCBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZS5cXG4gIDgyOlxcdCAqXFxuICA4MzpcXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIEFQIGluc3RydWN0aW9ucyBhcmUgaW5zdGFsbGVkLCBvdGhlcndpc2UgZmFsc2UuXFxuICA4NDpcXHQgKi9cXG4gIDg1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKHZvaWQpXFxuICA4NjpcXHR7XFxuICA4NzpcXHRcXHR1bnNpZ25lZCBsb25nIHJlZzAgPSBBUF9NS1FJRCgwLCAwKTtcXG4gIDg4OlxcdFxcdHVuc2lnbmVkIGxvbmcgcmVnMSA9IDA7XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdGFzbSB2b2xhdGlsZShcXG4gIDkxOlxcdFxcdFxcdFxcXCJcXHRsZ3JcXHQwLCVbcmVnMF1cXFxcblxcXCJcXHRcXHQvKiBxaWQgaW50byBncjAgKi9cXG4gIDkyOlxcdFxcdFxcdFxcXCJcXHRsZ2hpXFx0MSwwXFxcXG5cXFwiXFx0XFx0XFx0LyogMCBpbnRvIGdyMSAqL1xcbiAgOTM6XFx0XFx0XFx0XFxcIlxcdGxnaGlcXHQyLDBcXFxcblxcXCJcXHRcXHRcXHQvKiAwIGludG8gZ3IyICovXFxuICA5NDpcXHRcXHRcXHRcXFwiXFx0Lmluc25cXHRycmUsMHhiMmFmMDAwMCwwLDBcXFxcblxcXCJcXHQvKiBQUUFQKFRBUFEpICovXFxuICA5NTpcXHRcXHRcXHRcXFwiMDpcXHRsYVxcdCVbcmVnMV0sMVxcXFxuXFxcIlxcdFxcdC8qIDEgaW50byByZWcxICovXFxuICA5NjpcXHRcXHRcXHRcXFwiMTpcXFxcblxcXCJcXG4gIDk3OlxcdFxcdFxcdEVYX1RBQkxFKDBiLCAxYilcXG4gIDk4OlxcdFxcdFxcdDogW3JlZzFdIFxcXCIrXFx1MDAyNmRcXFwiIChyZWcxKVxcbiAgOTk6XFx0XFx0XFx0OiBbcmVnMF0gXFxcImRcXFwiIChyZWcwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NjowNi4wNjg5Mjc0NTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc4OTQzNDMwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5OiBWRklPLUFQIGFuZCBRRU1VJ3MgQmVoYXZpb3IqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uIGFuZCBpdCBib2lscyBkb3duIHRvIGVzc2VudGlhbGx5IGNoZWNraW5nIGlmIGBQUUFQKFRBUFEpYCB0cmFwcyB3aGVuIGV4ZWN1dGVkLiBUaGF0J3MgdGhlIGNydXggb2YgdGhlIG1hdHRlci4gVGhlIHdob2xlIHBvaW50IGhpbmdlcyBvbiBob3cgUUVNVSBoYW5kbGVzIEFQIGluc3RydWN0aW9ucyB3aXRoaW4gYSBndWVzdCBlbnZpcm9ubWVudC4gSWYgUUVNVSAqZG9lc24ndCogZW11bGF0ZSBBUCBpbnN0cnVjdGlvbnMsIHRoZW4gYSB0cmFwIGlzIGd1YXJhbnRlZWQgYW5kIHdlIHJldHVybiBgZmFsc2VgLlxuXG5UaGUgYmlnIHF1ZXN0aW9uIGlzLCB3aGF0J3MgUUVNVSdzIGRlZmF1bHQgYmVoYXZpb3I/IERvZXMgaXQgZW11bGF0ZSBBUCBpbnN0cnVjdGlvbnMgcmlnaHQgb3V0IG9mIHRoZSBib3gsIG9yIGlzIHRoZXJlIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZXF1aXJlZD8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBRRU1VIHNvdXJjZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gc3BlY2lmaWMgdG8gczM5MHggQVAgaW5zdHJ1Y3Rpb24gaGFuZGxpbmcuIExldCdzIHNlZS4uLiBBaCwgdGhlcmUncyBhIGBhcD1vbmAgQ1BVIGZlYXR1cmUgbWVudGlvbmVkLiBJbnRlcmVzdGluZy4gU28gYnkgZGVmYXVsdCwgaXQgbWlnaHQgYmUgb2ZmIHVubGVzcyB0aGUgaG9zdCBtYWNoaW5lIGhhcyBBUCBzdXBwb3J0LCBvciBwZXJoYXBzIGl04oCZcyBlbXVsYXRlZCBhbnl3YXk/IFRoaXMgbmVlZHMgY2xhcmlmaWNhdGlvbi5cblxuV2FpdCBhIHNlY29uZOKApiAqc3l6a2FsbGVyKiBmdXp6ZXIgdGFyZ2V0cyBzMzkweCwgZG9lc24ndCBpdD8gVGhhdCBjaGFuZ2VzIHRoaW5ncy4gSWYgc3l6a2FsbGVyIGlzIHN1Y2Nlc3NmdWxseSBmdXp6aW5nIHMzOTB4LCBkb2VzIGl0IGV2ZW4gKnJlYWNoKiB0aGUgYHZmaW9fYXBgIGNvZGUgcGF0aD8gSWYgaXQgKmRvZXMqIHRoZW4gUUVNVSBtdXN0IGJlIGVtdWxhdGluZyBpdCwgcmlnaHQ/IEkgbmVlZCB0byBjaGVjayB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB0byBzZWUgaWYgdGhleSBpbmNsdWRlIGVudHJpZXMgcmVsYXRlZCB0byBgdmZpb19hcGAuIFRoYXQgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgYWxsIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA5MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA1OjQ2OjIzLjk2MzI3Mzc0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjU5OTMzNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzeXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNTo0NjoyNC4wMzk4ODIzMTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU3MzI4MTExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYHZmaW9fYXBgIFJlYWNoYWJpbGl0eSBpbiBRRU1VKipcblxuT2theSwgSSBuZWVkIHRvIGJlIGNhcmVmdWwgaGVyZS4gVGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgSSBjYW4ndCB1c2UgYGdyZXBwZXJgIGZvciBgc3lzL2Agb3IgYW55dGhpbmcgd2l0aCBgc3l6X2AsIHNvIEkgbmVlZCB0byBzdGljayB3aXRoIHRoYXQuIEkgd2FzIGluaXRpYWxseSB0aGlua2luZyBhYm91dCB1c2luZyBgZ3JlcHBlcmAsIGJ1dCB0aGUgcHJvbXB0IGlzIGNsZWFyOiBJIG5lZWQgdG8gdXNlIGByZWFkLXN5ei1zcGVjYCBvciBgc3l6LWdyZXBwZXJgIGluc3RlYWQgZm9yIHN5emthbGxlci1zcGVjaWZpYyBzdHVmZi4gV2FpdC4uLiBJIGNhbid0IGZpbmQgYHJlYWQtc3l6LXNwZWNgIG9yIGBzeXotZ3JlcHBlcmAgaW4gdGhlIHRvb2xzIGF2YWlsYWJsZS4gVGhleSBhcmVuJ3QgaW4gdGhlIHByb3ZpZGVkIGxpc3QuIE9rYXksIEkgbWlzcmVhZCB0aGUgcHJvbXB0LCB3aGljaCBzYXlzLCBcIlVzZSB0aGUgcmVhZC1zeXotc3BlYyBhbmQgc3l6LWdyZXBwZXIgdG9vbHMgaW5zdGVhZFwiIGJ1dCBkb2Vzbid0IHByb3ZpZGUgdGhlbS4gSSBndWVzcyB0aGF0J3MgZmluZTsgSSdsbCBzaW1wbHkgYXZvaWQgc2VhcmNoaW5nIHN5emxhbmcuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgYHZmaW9fYXBgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCB1c3VhbGx5IHJlcXVpcmVzIGFjdHVhbCBBUCBoYXJkd2FyZSBwYXNzLXRocm91Z2guIFRoZSBxdWVzdGlvbiBpcywgY2FuIEkgbG9hZCB0aGUgYHZmaW9fYXBgIG1vZHVsZSBhbmQgY3JlYXRlIGFuIG1kZXYgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50IHdpdGhvdXQgdGhhdCBBUCBoYXJkd2FyZT8gSSByZWNhbGwgdGhhdCBgdmZpb19hcF9pbml0YCByZXR1cm5zIGAtRU5PREVWYCBpZiBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCByZXR1cm5zIGZhbHNlLiBJZiB0aGF0IGAtRU5PREVWYCBoYXBwZW5zLCB0aGVuIHRoZSBkcml2ZXIgKndvbid0KiBsb2FkLCB3aGljaCBtZWFucyBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuXG5cblNvIHRoZSBjb3JlIHF1ZXN0aW9uIGlzOiBkb2VzIFFFTVUgZW11bGF0ZSBBUCBpbnN0cnVjdGlvbnM/IFFFTVUgaXRzZWxmIGhhbmRsZXMgdGhlbSBieSBLVk0sIGFuZCBpZiBLVk0gZG9lc24ndCBzdXBwb3J0IEFQIGJlY2F1c2UgdGhlIGhvc3QgZG9lc24ndCBoYXZlIGl0LCBLVk0gd2lsbCBub3QgdGVsbCB0aGUgZ3Vlc3QgaXQgaXMgdGhlcmUuIEluIHRoYXQgY2FzZSwgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAgd291bGQgcmV0dXJuIGZhbHNlLiBUaGVyZWZvcmUsIHRoZSBgdmZpb19hcGAgZHJpdmVyICpjYW5ub3QqIGJlIGxvYWRlZCB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIGd1ZXN0IGlmIHRoZSBob3N0IGRvZXNuJ3QgaGF2ZSBBUCBoYXJkd2FyZS4gVGhhdCBsb29rcyBsaWtlIHRoZSBhbnN3ZXIuIE5vdywgaXMgdGhlcmUgYW55IGtpbmQgb2Ygc29mdHdhcmUgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwgdG8gYWxsb3cgZm9yIHRoaXM/IExldCBtZSBjaGVjayBmb3IgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2MTcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDU6NDY6MzEuNjEzMTY2Njk4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDcwNzk0NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFwX2luc3RydWN0aW9uc19hdmFpbGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oPTcyPXVuaW9uIGFwX3F1ZXVlX3N0YXR1c19yZWcge1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODAtLyoqXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg6ODE6ICogYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIC0gVGVzdCBpZiBBUCBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZS5cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04Mi0gKlxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODQtICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg6ODU6c3RhdGljIGlubGluZSBib29sIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUodm9pZClcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04Ni17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTEwNT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9jcnlwdG8oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTEtXFx0Y2FzZSBLVk1fUzM5MF9WTV9DUllQVE9fRU5BQkxFX0FQSUU6XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNTI6XFx0XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1My1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1OC1cXHRjYXNlIEtWTV9TMzkwX1ZNX0NSWVBUT19ESVNBQkxFX0FQSUU6XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNTk6XFx0XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE2MC1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjEwMD1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX2hhc19hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMTU2LVxcdFxcdGNhc2UgS1ZNX1MzOTBfVk1fQ1JZUFRPX0RJU0FCTEVfQVBJRTpcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjE1NzpcXHRcXHRcXHRyZXQgPSBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkgPyAwIDogLUVOWElPO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMTU4LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMxMDE9c3RhdGljIGludCBrdm1fczM5MF9hcHhhX2luc3RhbGxlZCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMDQtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxMDU6XFx0aWYgKGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTA2LVxcdFxcdGlmIChhcF9xY2koXFx1MDAyNmluZm8pID09IDApXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz01OTI9c3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy02MDAtXFx0LyogVmVyaWZ5IHRoYXQgdGhlIEFQIGluc3RydWN0aW9uIGFyZSBhdmFpbGFibGUgKi9cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo2MDE6XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjAyLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjU3OD1zdGF0aWMgaW50IF9faW5pdCBhcF9tb2R1bGVfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNTgxLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjU4MjpcXHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjU4My1cXHRcXHRwcl93YXJuKFxcXCJUaGUgaGFyZHdhcmUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgQVAgaW5zdHJ1Y3Rpb25zXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0xNjc9c3RhdGljIGludCBfX2luaXQgdmZpb19hcF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTc1LVxcdC8qIElmIHRoZXJlIGFyZSBubyBBUCBpbnN0cnVjdGlvbnMsIHRoZXJlIGlzIG5vdGhpbmcgdG8gcGFzcyB0aHJvdWdoLiAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxNzY6XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE3Ny1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDU6NDY6MzUuMDgzOTY4NzM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjIyMDYyNTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBWRklPLUFQIERyaXZlciBhbmQgSXRzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBkZWFsLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgc3BpZGV5IHNlbnNlcyBhcmUgdGluZ2xpbmcuIFRoZSBgYXBfYnVzYCBpdHNlbGYgd29uJ3QgZXZlbiBpbml0aWFsaXplIHVubGVzcyBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCByZXR1cm5zIHRydWUuIEFuZCBmcm9tIHdoYXQgSSBzZWUgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmNgLCBpZiBpdCdzIGZhbHNlLCB0aGUgc3lzdGVtIHRocm93cyBhIHdhcm5pbmcgYW5kIHJldHVybnMgYC1FTk9ERVZgLiBUaGF0IG1lYW5zIHRoZSBlbnRpcmUgQVAgc3Vic3lzdGVtICpyZXF1aXJlcyogc29tZSBmb3JtIG9mIGhhcmR3YXJlIHN1cHBvcnQuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIFN5emthbGxlciwgd2hpY2ggSSBrbm93IGlzIHRoZSBmdXp6aW5nIHRvb2wgYmVpbmcgdXNlZCwgcnVuIG9uIHJlYWwgczM5MHggaGFyZHdhcmUgb3IgaW4gUUVNVT8gQWgsIHJpZ2h0LCBTeXprYWxsZXIgdXNlcyBRRU1VIGZvciBzMzkweC4gU28gdGhlIGtleSBxdWVzdGlvbiBpcywgZG9lcyBRRU1VIGVtdWxhdGUgQVAgaW5zdHJ1Y3Rpb25zPyBMZXQncyBzZWUuLi4gUUVNVSBhbmQgQVAgaW5zdHJ1Y3Rpb25zLiBJIGRvbid0IHJlY2FsbCBzZWVpbmcgYW55dGhpbmcgc3BlY2lmaWMuIEkgcmVtZW1iZXIgcmVhZGluZyBpbiB0aGUgcHJvbXB0IHRoYXQgY2VydGFpbiBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiBRRU1VLlxuXG5UaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9ucyB0aGF0IGNvZGUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLCBzaG91bGRuJ3QgYmUgY29uc2lkZXJlZCBmb3IgZnV6emluZy4gQWxzbywgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCBsaWtlIGNlcnRhaW4gUENJZSBjYXJkcywgYXJlIGFsc28gb3V0LlxuXG5BaCwgVkZJTyBBUC4gSXQncyBkZXNpZ25lZCBmb3IgcGFzc2luZyB0aHJvdWdoIGFjdHVhbCBwaHlzaWNhbCBBUCBoYXJkd2FyZSwgdGhvc2UgSUJNIFogY3J5cHRvZ3JhcGhpYyBjb3Byb2Nlc3NvcnMsIHRvIGEgZ3Vlc3QgVk0uIFRoYXQgbWVhbnMgaXQgbmVlZHMgdGhlIHBoeXNpY2FsIGhhcmR3YXJlICpvbiB0aGUgaG9zdCouIFN0YW5kYXJkIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBBUCBoYXJkd2FyZSwgaXQganVzdCBzdXBwb3J0cyBwYXNzaW5nIGl0IHRocm91Z2ggdmlhIEtWTSBpZiB0aGUgaG9zdCBoYXMgaXQuIFNvIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgd2l0aG91dCB0aGF0IGRlZGljYXRlZCBoYXJkd2FyZSwgdGhpcyBjb2RlIHBhdGggaXMgc2ltcGx5IGluYWNjZXNzaWJsZS5cblxuTGV0IG1lIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9uczsgSWYgUUVNVSBjb3VsZCBlbXVsYXRlIEFQIGluc3RydWN0aW9ucywgaXQgd291bGQgYmUgaW4gUUVNVSdzIHNvdXJjZSBjb2RlLiBJIGRvbid0IGhhdmUgdGhhdCBzb3VyY2UgY29kZSBpbiBmcm9udCBvZiBtZSwgYnV0IEkgKmtub3cqIHRob3NlIEFQIGluc3RydWN0aW9ucyBhcmUgdmVyeSBzcGVjaWZpYyB0byBJQk0ncyBjcnlwdG8gY2FyZHMuIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBjcnlwdG8gY2FyZHMgdGhlbXNlbHZlczsgaXQganVzdCBoYW5kbGVzIHRoZSBWRklPLUFQIGRldmljZSBwYXNzLXRocm91Z2guIFRoZXJlZm9yZSwgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAgd2lsbCByZXR1cm4gZmFsc2UsIHRoZSBgdmZpb19hcF9pbml0YCBmdW5jdGlvbiB3aWxsIHJldHVybiBgLUVOT0RFVmAsIGFuZCB0aGUgZHJpdmVyIHdvbid0IGV2ZW4gbG9hZC4gVGhlIGNvZGUgaW4gYHZmaW9fYXBfb3BzLmNgIGlzIHNpbXBseSB1bnJlYWNoYWJsZS5cblxuSSBiZXR0ZXIgdmVyaWZ5IHRoZXJlJ3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIG9mIEFQIGluIHRoZSBrZXJuZWwgdGhhdCBJJ20gbWlzc2luZy4gTGV0J3Mgc2VlLi4uIEkgc2VhcmNoIGZvciBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZWAgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBvbmx5IGluIGBhcF9idXMuY2AsIGB2ZmlvX2FwX2Rydi5jYCwgYW5kIGBrdm0tczM5MC5jYC4gTm90aGluZyBsaWtlIGBhcF9od3NpbWAgb3IgYW55dGhpbmcgc3VnZ2VzdGluZyBhIHNvZnR3YXJlIGZhbGxiYWNrLiBOb3BlLCBzYWZlIHRvIHNheSB0aGlzIG5lZWRzIHRoYXQgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZS5cblxuT2theSwgbGV0IG1lIHJldmlldyB0aGUgcGF0Y2ggaXRzZWxmIGp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLiBJdCdzIG9ubHkgbW9kaWZ5aW5nIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLCBzcGVjaWZpY2FsbHkgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCBhbmQgYHZmaW9fYXBfbWRldl91bnNldF9rdm1gLiBCb3RoIGFyZSBwYXJ0IG9mIHRoZSBWRklPIEFQIGRyaXZlciwgd2hpY2ggaGluZ2VzIG9uIHRoYXQgQVAgaGFyZHdhcmUuIFNvIGl0J3MgYSBjbGVhciBjYXNlIG9mIFwiY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VXCIgYW5kIFwidmVuZG9yLXNwZWNpZmljIC4uLiBkcml2ZXJzIC4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgLi4uIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlwiIEV2ZW4gdGhvdWdoIGl0J3MgQVAgYnVzIGluc3RlYWQgb2YgUENJZSwgdGhlIHByaW5jaXBsZSBpcyB0aGUgc2FtZS5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJJ2xsIG1ha2Ugc3VyZSB0byBwcm92aWRlIHRoaXMgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDg1MSwiT3V0cHV0VG9rZW5zIjoxNDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDU6NDY6NDYuNzA2MDM0NjU3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgZm9yIHMzOTB4LCB3aGljaCBpcyB1c2VkIHRvIHBhc3MgdGhyb3VnaCBwaHlzaWNhbCBJQk0gWiBjcnlwdG9ncmFwaGljIGNvcHJvY2Vzc29ycyB0byB2aXJ0dWFsIG1hY2hpbmVzLiBUaGUgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gKGB2ZmlvX2FwX2luaXRgKSBleHBsaWNpdGx5IGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIEFQIGluc3RydWN0aW9ucyB2aWEgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAsIHdoaWNoIHJldHVybnMgZmFsc2UgdW5sZXNzIHBoeXNpY2FsIEFQIGhhcmR3YXJlIGlzIHByZXNlbnQgYW5kIHBhc3NlZCB0aHJvdWdoIGJ5IHRoZSBob3N0LiBTdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyBkbyBub3QgZW11bGF0ZSBBUCBoYXJkd2FyZSBpbiBzb2Z0d2FyZS4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgd2l0aG91dCBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkweCwgd2hpY2ggaXMgdXNlZCB0byBwYXNzIHRocm91Z2ggcGh5c2ljYWwgSUJNIFogY3J5cHRvZ3JhcGhpYyBjb3Byb2Nlc3NvcnMgdG8gdmlydHVhbCBtYWNoaW5lcy4gVGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIChgdmZpb19hcF9pbml0YCkgZXhwbGljaXRseSBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiBBUCBpbnN0cnVjdGlvbnMgdmlhIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgLCB3aGljaCByZXR1cm5zIGZhbHNlIHVubGVzcyBwaHlzaWNhbCBBUCBoYXJkd2FyZSBpcyBwcmVzZW50IGFuZCBwYXNzZWQgdGhyb3VnaCBieSB0aGUgaG9zdC4gU3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgZG8gbm90IGVtdWxhdGUgQVAgaGFyZHdhcmUgaW4gc29mdHdhcmUuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHdpdGhvdXQgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowggxbh[1] Phase: Running StartedAt: 2026-08-01 05:47:17 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbh[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-01 05:47:17 +0000 UTC FinishedAt: 2026-08-01 05:47:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}