Name: series-workflowstdg7 Phase: Failed StartedAt: 2026-08-09 15:33:40 +0000 UTC FinishedAt: 2026-08-09 16:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowstdg7[0] Phase: Succeeded StartedAt: 2026-08-09 15:33:40 +0000 UTC FinishedAt: 2026-08-09 16:16:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowstdg7[0].run-triage Phase: Succeeded StartedAt: 2026-08-09 15:33:40 +0000 UTC FinishedAt: 2026-08-09 16:16:50 +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+CgkJCTx0ZD4yMDI2LzA4LzA5IDE2OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBOUFUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTY6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYTViYzE5ZTlkNjMzNDQ3NTk5ZWRkMTRjYThmNWQ5YWY4Zjg3ODk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAxNjoxNTo1MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xuaW5kZXggYjY3OWJlZDk1MmRlMy4uYzgzOWUwYTQxOWFhNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbkBAIC0yMyw2ICYjNDM7MjMsMTIgQEBcbiAjZGVmaW5lIE5QVV9FTjc1ODFfRklSTVdBUkVfUlYzMl9NQVhfU0laRVx0MHgyMDAwMDBcbiAjZGVmaW5lIE5QVV9FTjc1ODFfRklSTVdBUkVfREFUQV9NQVhfU0laRVx0MHgxMDAwMFxuICNkZWZpbmUgTlBVX0RVTVBfU0laRVx0XHRcdFx0NTEyXG4mIzQzOy8qXG4mIzQzOyAqIE1haWxib3ggRE1BIHBheWxvYWQgc2l6ZS4gQ292ZXJzIHNpemVvZihzdHJ1Y3QgcHBlX21ib3hfZGF0YSkgKDI4KSBhbmRcbiYjNDM7ICogV0xBTiBUTFYgbWVzc2FnZXMgKGhlYWRlciAmIzQzOyBwYXlsb2FkKTsgbGFyZ2VzdCBpbi10cmVlIFdMQU4gcGF5bG9hZCB0b2RheVxuJiM0MzsgKiBpcyAxNiBieXRlcyAoSU5PREVfVFhSWF9SRUdfQUREUikuIEtlZXAgaGVhZHJvb20gZm9yIGZ1dHVyZSBjb21tYW5kcy5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgQUlST0hBX05QVV9NQk9YX1NJWkVcdFx0XHQyNTZcbiBcbiAjZGVmaW5lIFJFR19OUFVfTE9DQUxfU1JBTVx0XHQweDBcbiBcbkBAIC0xNjAsMjMgJiM0MzsxNjYsMzQgQEAgc3RydWN0IHdsYW5fbWJveF9kYXRhIHtcbiBcdERFQ0xBUkVfRkxFWF9BUlJBWSh1OCwgZCk7XG4gfTtcbiBcbi1zdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4tXHRcdFx0ICAgICAgIHZvaWQgKnAsIGludCBzaXplKVxuJiM0MztzdGF0aWMgaW50IF9fYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbiYjNDM7XHRcdFx0XHQgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbiwgdm9pZCAqcmVwbHksXG4mIzQzO1x0XHRcdFx0IHUxNiByZXBseV9sZW4pXG4ge1xuLVx0dTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqL1xuLVx0dTMyIHZhbCwgb2Zmc2V0ID0gY29yZSBcdTAwM2NcdTAwM2MgNDtcbi1cdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1swXTsgLyogRklYTUU6IGNvcmUgKi9cbiYjNDM7XHR1MzIgdmFsLCBvZmZzZXQgPSAwO1xuIFx0aW50IHJldDtcbiBcbi1cdGRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUobnB1LVx1MDAzZWRldiwgcCwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpO1xuLVx0cmV0ID0gZG1hX21hcHBpbmdfZXJyb3IobnB1LVx1MDAzZWRldiwgZG1hX2FkZHIpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAobGVuIFx1MDAzZSBBSVJPSEFfTlBVX01CT1hfU0laRSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocmVwbHkgXHUwMDI2XHUwMDI2IHJlcGx5X2xlbiBcdTAwM2UgbGVuKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWFpbGJveCBwYXlsb2FkcyBhcmUgYmlkaXJlY3Rpb25hbCAoQ1BVIHJlcXVlc3QsIE5QVSByZXNwb25zZSkuXG4mIzQzO1x0ICogT24gRU43NTgxJiM0MztNVDc5OTYsIHN0cmVhbWluZyBETUFfQklESVJFQ1RJT05BTCBhZ2FpbnN0IHRoZVxuJiM0MztcdCAqIGNhbGxlciBremFsbG9jKCkgYnVmZmVyIGNhbiBsZWF2ZSBXTEFOX0ZVTkNfR0VUX1dBSVRfTlBVX1ZFUlNJT05cbiYjNDM7XHQgKiByZWFkaW5nIGFzIDAuMCBkZXNwaXRlIE1CT1ggc3VjY2Vzcy4gUmV1c2UgYSBwcm9iZS10aW1lIGNvaGVyZW50XG4mIzQzO1x0ICogYm91bmNlIGJ1ZmZlciB1bmRlciB0aGUgcGVyLWNvcmUgbG9jayAoYWxzbyB1c2VkIGZyb20gUFBFXG4mIzQzO1x0ICogZm9lX2NvbW1pdCB1bmRlciBhdG9taWMgY29udGV4dCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmNvcmUtXHUwMDNlbG9jayk7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2NvcmVdLmxvY2spO1xuJiM0MztcdG1lbWNweShjb3JlLVx1MDAzZWJ1ZiwgZGF0YSwgbGVuKTtcbiBcbi1cdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICYjNDM7IG9mZnNldCwgZG1hX2FkZHIpO1xuLVx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgJiM0Mzsgb2Zmc2V0LCBzaXplKTtcbiYjNDM7XHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgwKSAmIzQzOyBvZmZzZXQsIGNvcmUtXHUwMDNlYWRkcik7XG4mIzQzO1x0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgJiM0Mzsgb2Zmc2V0LCBsZW4pO1xuIFx0cmVnbWFwX3JlYWQobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgyKSAmIzQzOyBvZmZzZXQsIFx1MDAyNnZhbCk7XG4gXHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgyKSAmIzQzOyBvZmZzZXQsIHZhbCAmIzQzOyAxKTtcbiBcdHZhbCA9IEZJRUxEX1BSRVAoTUJPWF9NU0dfRlVOQ19JRCwgZnVuY19pZCkgfCBNQk9YX01TR19XQUlUX1JTUDtcbkBAIC0xODksMTMgJiM0MzsyMDYsMjEgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuIFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IEZJRUxEX0dFVChNQk9YX01TR19TVEFUVVMsIHZhbCkgIT0gTlBVX01CT1hfU1VDQ0VTUylcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcbiYjNDM7XHQvKiBDb3B5IHRoZSB0cmFpbGluZyByZXBseV9sZW4gYnl0ZXMgb2YgdGhlIHJlc3BvbnNlLiAqL1xuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiByZXBseSlcbiYjNDM7XHRcdG1lbWNweShyZXBseSwgY29yZS1cdTAwM2VidWYgJiM0MzsgbGVuIC0gcmVwbHlfbGVuLCByZXBseV9sZW4pO1xuIFxuLVx0ZG1hX3VubWFwX3NpbmdsZShucHUtXHUwMDNlZGV2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNvcmUtXHUwMDNlbG9jayk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuJiM0MztcdFx0XHQgICAgICAgdm9pZCAqZGF0YSwgaW50IGxlbilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX2Fpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBmdW5jX2lkLCBkYXRhLCBsZW4sIGRhdGEsIGxlbik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmFkZHIsXG4gXHRcdFx0XHQgICAgY29uc3QgY2hhciAqZndfbmFtZSwgaW50IGZ3X21heF9zaXplKVxuIHtcbkBAIC00OTcsOSAmIzQzOzUyMiw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV93bGFuX21zZ19nZXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGlmaW5kZXgsXG4gXHR3bGFuX2RhdGEtXHUwMDNlZnVuY190eXBlID0gTlBVX09QX0dFVDtcbiBcdHdsYW5fZGF0YS1cdTAwM2VmdW5jX2lkID0gZnVuY19pZDtcbiBcbi1cdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbik7XG4tXHRpZiAoIWVycilcbi1cdFx0bWVtY3B5KGRhdGEsIHdsYW5fZGF0YS1cdTAwM2VkLCBkYXRhX2xlbik7XG4mIzQzO1x0ZXJyID0gX19haXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4sXG4mIzQzO1x0XHRcdFx0ICAgIGRhdGEsIGRhdGFfbGVuKTtcbiBcdGtmcmVlKHdsYW5fZGF0YSk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTc3MCw2ICYjNDM7Nzk0LDE1IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cdTAwM2Vjb3Jlcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlID0gXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGNvcmUtXHUwMDNlYnVmID0gZG1hbV9hbGxvY19jb2hlcmVudChkZXYsIEFJUk9IQV9OUFVfTUJPWF9TSVpFLFxuJiM0MztcdFx0XHRcdFx0XHRcdTAwMjZjb3JlLVx1MDAzZWFkZHIsIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCFjb3JlLVx1MDAzZWJ1ZilcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiBcdGVyciA9IGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlKGRldiwgYmFzZSwgXHUwMDI2cmVzKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcJiMzNDtmYWlsZWQgdG8gcnVuIG5wdSBmaXJtd2FyZVxcblwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmggYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxuaW5kZXggNzU4OWZjY2ZlZWY2ZC4uMTZhOTg4YWQ3NDY3YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxuQEAgLTE3Myw2ICYjNDM7MTczLDkgQEAgc3RydWN0IGFpcm9oYV9ucHUge1xuIFx0XHQvKiBwcm90ZWN0IGNvbmN1cnJlbnQgbnB1IG1lbW9yeSBhY2Nlc3NlcyAqL1xuIFx0XHRzcGlubG9ja190IGxvY2s7XG4gXHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB3ZHRfd29yaztcbiYjNDM7XHRcdC8qIENvaGVyZW50IGJvdW5jZSBidWZmZXIgZm9yIG1haWxib3ggY21kL3JzcCAqL1xuJiM0MztcdFx0dm9pZCAqYnVmO1xuJiM0MztcdFx0ZG1hX2FkZHJfdCBhZGRyO1xuIFx0fSBjb3Jlc1tOUFVfTlVNX0NPUkVTXTtcbiBcbiBcdGludCBpcnFzW05QVV9OVU1fSVJRXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxNjoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBOUFUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYTViYzE5ZTlkNjMzNDQ3NTk5ZWRkMTRjYThmNWQ5YWY4Zjg3ODk5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgOSAxNjoxNTo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jCmluZGV4IGI2NzliZWQ5NTJkZTMuLmM4MzllMGE0MTlhYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYwpAQCAtMjMsNiAmIzQzOzIzLDEyIEBACiAjZGVmaW5lIE5QVV9FTjc1ODFfRklSTVdBUkVfUlYzMl9NQVhfU0laRQkweDIwMDAwMAogI2RlZmluZSBOUFVfRU43NTgxX0ZJUk1XQVJFX0RBVEFfTUFYX1NJWkUJMHgxMDAwMAogI2RlZmluZSBOUFVfRFVNUF9TSVpFCQkJCTUxMgomIzQzOy8qCiYjNDM7ICogTWFpbGJveCBETUEgcGF5bG9hZCBzaXplLiBDb3ZlcnMgc2l6ZW9mKHN0cnVjdCBwcGVfbWJveF9kYXRhKSAoMjgpIGFuZAomIzQzOyAqIFdMQU4gVExWIG1lc3NhZ2VzIChoZWFkZXIgJiM0MzsgcGF5bG9hZCk7IGxhcmdlc3QgaW4tdHJlZSBXTEFOIHBheWxvYWQgdG9kYXkKJiM0MzsgKiBpcyAxNiBieXRlcyAoSU5PREVfVFhSWF9SRUdfQUREUikuIEtlZXAgaGVhZHJvb20gZm9yIGZ1dHVyZSBjb21tYW5kcy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEFJUk9IQV9OUFVfTUJPWF9TSVpFCQkJMjU2CiAKICNkZWZpbmUgUkVHX05QVV9MT0NBTF9TUkFNCQkweDAKIApAQCAtMTYwLDIzICYjNDM7MTY2LDM0IEBAIHN0cnVjdCB3bGFuX21ib3hfZGF0YSB7CiAJREVDTEFSRV9GTEVYX0FSUkFZKHU4LCBkKTsKIH07CiAKLXN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCwKLQkJCSAgICAgICB2b2lkICpwLCBpbnQgc2l6ZSkKJiM0MztzdGF0aWMgaW50IF9fYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCwKJiM0MzsJCQkJIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4sIHZvaWQgKnJlcGx5LAomIzQzOwkJCQkgdTE2IHJlcGx5X2xlbikKIHsKLQl1MTYgY29yZSA9IDA7IC8qIEZJWE1FICovCi0JdTMyIHZhbCwgb2Zmc2V0ID0gY29yZSAmbHQ7Jmx0OyA0OwotCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiYjNDM7CXN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSAmYW1wO25wdS0mZ3Q7Y29yZXNbMF07IC8qIEZJWE1FOiBjb3JlICovCiYjNDM7CXUzMiB2YWwsIG9mZnNldCA9IDA7CiAJaW50IHJldDsKIAotCWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUobnB1LSZndDtkZXYsIHAsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTsKLQlyZXQgPSBkbWFfbWFwcGluZ19lcnJvcihucHUtJmd0O2RldiwgZG1hX2FkZHIpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiYjNDM7CWlmIChsZW4gJmd0OyBBSVJPSEFfTlBVX01CT1hfU0laRSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAocmVwbHkgJmFtcDsmYW1wOyByZXBseV9sZW4gJmd0OyBsZW4pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFpbGJveCBwYXlsb2FkcyBhcmUgYmlkaXJlY3Rpb25hbCAoQ1BVIHJlcXVlc3QsIE5QVSByZXNwb25zZSkuCiYjNDM7CSAqIE9uIEVONzU4MSYjNDM7TVQ3OTk2LCBzdHJlYW1pbmcgRE1BX0JJRElSRUNUSU9OQUwgYWdhaW5zdCB0aGUKJiM0MzsJICogY2FsbGVyIGt6YWxsb2MoKSBidWZmZXIgY2FuIGxlYXZlIFdMQU5fRlVOQ19HRVRfV0FJVF9OUFVfVkVSU0lPTgomIzQzOwkgKiByZWFkaW5nIGFzIDAuMCBkZXNwaXRlIE1CT1ggc3VjY2Vzcy4gUmV1c2UgYSBwcm9iZS10aW1lIGNvaGVyZW50CiYjNDM7CSAqIGJvdW5jZSBidWZmZXIgdW5kZXIgdGhlIHBlci1jb3JlIGxvY2sgKGFsc28gdXNlZCBmcm9tIFBQRQomIzQzOwkgKiBmb2VfY29tbWl0IHVuZGVyIGF0b21pYyBjb250ZXh0KS4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO2NvcmUtJmd0O2xvY2spOwogCi0Jc3Bpbl9sb2NrX2JoKCZhbXA7bnB1LSZndDtjb3Jlc1tjb3JlXS5sb2NrKTsKJiM0MzsJbWVtY3B5KGNvcmUtJmd0O2J1ZiwgZGF0YSwgbGVuKTsKIAotCXJlZ21hcF93cml0ZShucHUtJmd0O3JlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgwKSAmIzQzOyBvZmZzZXQsIGRtYV9hZGRyKTsKLQlyZWdtYXBfd3JpdGUobnB1LSZndDtyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgJiM0Mzsgb2Zmc2V0LCBzaXplKTsKJiM0MzsJcmVnbWFwX3dyaXRlKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICYjNDM7IG9mZnNldCwgY29yZS0mZ3Q7YWRkcik7CiYjNDM7CXJlZ21hcF93cml0ZShucHUtJmd0O3JlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgxKSAmIzQzOyBvZmZzZXQsIGxlbik7CiAJcmVnbWFwX3JlYWQobnB1LSZndDtyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgJiM0Mzsgb2Zmc2V0LCAmYW1wO3ZhbCk7CiAJcmVnbWFwX3dyaXRlKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICYjNDM7IG9mZnNldCwgdmFsICYjNDM7IDEpOwogCXZhbCA9IEZJRUxEX1BSRVAoTUJPWF9NU0dfRlVOQ19JRCwgZnVuY19pZCkgfCBNQk9YX01TR19XQUlUX1JTUDsKQEAgLTE4OSwxMyAmIzQzOzIwNiwyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsCiAJaWYgKCFyZXQgJmFtcDsmYW1wOyBGSUVMRF9HRVQoTUJPWF9NU0dfU1RBVFVTLCB2YWwpICE9IE5QVV9NQk9YX1NVQ0NFU1MpCiAJCXJldCA9IC1FSU5WQUw7CiAKLQlzcGluX3VubG9ja19iaCgmYW1wO25wdS0mZ3Q7Y29yZXNbY29yZV0ubG9jayk7CiYjNDM7CS8qIENvcHkgdGhlIHRyYWlsaW5nIHJlcGx5X2xlbiBieXRlcyBvZiB0aGUgcmVzcG9uc2UuICovCiYjNDM7CWlmICghcmV0ICZhbXA7JmFtcDsgcmVwbHkpCiYjNDM7CQltZW1jcHkocmVwbHksIGNvcmUtJmd0O2J1ZiAmIzQzOyBsZW4gLSByZXBseV9sZW4sIHJlcGx5X2xlbik7CiAKLQlkbWFfdW5tYXBfc2luZ2xlKG5wdS0mZ3Q7ZGV2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO2NvcmUtJmd0O2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCwKJiM0MzsJCQkgICAgICAgdm9pZCAqZGF0YSwgaW50IGxlbikKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2Fpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBmdW5jX2lkLCBkYXRhLCBsZW4sIGRhdGEsIGxlbik7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmFkZHIsCiAJCQkJICAgIGNvbnN0IGNoYXIgKmZ3X25hbWUsIGludCBmd19tYXhfc2l6ZSkKIHsKQEAgLTQ5Nyw5ICYjNDM7NTIyLDggQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3dsYW5fbXNnX2dldChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgaWZpbmRleCwKIAl3bGFuX2RhdGEtJmd0O2Z1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7CiAJd2xhbl9kYXRhLSZndDtmdW5jX2lkID0gZnVuY19pZDsKIAotCWVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbik7Ci0JaWYgKCFlcnIpCi0JCW1lbWNweShkYXRhLCB3bGFuX2RhdGEtJmd0O2QsIGRhdGFfbGVuKTsKJiM0MzsJZXJyID0gX19haXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4sCiYjNDM7CQkJCSAgICBkYXRhLCBkYXRhX2xlbik7CiAJa2ZyZWUod2xhbl9kYXRhKTsKIAogCXJldHVybiBlcnI7CkBAIC03NzAsNiAmIzQzOzc5NCwxNSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKG5wdS0mZ3Q7Y29yZXMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9ICZhbXA7bnB1LSZndDtjb3Jlc1tpXTsKJiM0MzsKJiM0MzsJCWNvcmUtJmd0O2J1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSwKJiM0MzsJCQkJCQkmYW1wO2NvcmUtJmd0O2FkZHIsIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKCFjb3JlLSZndDtidWYpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsICZhbXA7cmVzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgJiMzNDtmYWlsZWQgdG8gcnVuIG5wdSBmaXJtd2FyZVxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmggYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaAppbmRleCA3NTg5ZmNjZmVlZjZkLi4xNmE5ODhhZDc0NjdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaApAQCAtMTczLDYgJiM0MzsxNzMsOSBAQCBzdHJ1Y3QgYWlyb2hhX25wdSB7CiAJCS8qIHByb3RlY3QgY29uY3VycmVudCBucHUgbWVtb3J5IGFjY2Vzc2VzICovCiAJCXNwaW5sb2NrX3QgbG9jazsKIAkJc3RydWN0IHdvcmtfc3RydWN0IHdkdF93b3JrOwomIzQzOwkJLyogQ29oZXJlbnQgYm91bmNlIGJ1ZmZlciBmb3IgbWFpbGJveCBjbWQvcnNwICovCiYjNDM7CQl2b2lkICpidWY7CiYjNDM7CQlkbWFfYWRkcl90IGFkZHI7CiAJfSBjb3Jlc1tOUFVfTlVNX0NPUkVTXTsKIAogCWludCBpcnFzW05QVV9OVU1fSVJRXTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTY6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFpcm9oYSBOUFUgTWFpbGJveCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBzd2l0Y2hlZCB1cCB0aGUgbWVzc2FnZSBzZW5kaW5nIHByb2Nlc3MgdG8gdGhlIE5ldHdvcmsgUHJvY2Vzc2luZyBVbml0IChOUFUpIHZpYSB0aGUgbWFpbGJveC4gSW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgY2FsbGVyLXByb3ZpZGVkIGJ1ZmZlciBhbmQgYGRtYV9tYXBfc2luZ2xlYCB3aXRoIGBETUFfQklESVJFQ1RJT05BTGAsIHRoZXkmIzM5O3JlIG5vdyBhbGxvY2F0aW5nIGEgY29oZXJlbnQgRE1BIGJ1ZmZlciBkdXJpbmcgdGhlIGRldmljZSBwcm9iZSB1c2luZyBgZG1hbV9hbGxvY19jb2hlcmVudGAuIFRoZW4sIHRoZSBkYXRhIGlzIGNvcGllZCB0byBhbmQgZnJvbSB0aGF0IGNvaGVyZW50IGJ1ZmZlciBpbiBgX19haXJvaGFfbnB1X3NlbmRfbXNnYC4gSW50ZXJlc3RpbmcuCgpUaGUgbW90aXZhdGlvbiBoZXJlIGlzIGEgc3RyZWFtaW5nIERNQSBwcm9ibGVtIG9uIEVONzU4MSB3aXRoIE1UNzk5NiDigJMgd2hlcmUgdGhlIGRhdGEgZ2V0cyB6ZXJvZWQgb3V0IGV2ZW4gdGhvdWdoIHRoZSBtYWlsYm94IGNvbW11bmljYXRpb24gaXMgc3VwcG9zZWRseSBzdWNjZXNzZnVsLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBETUEgY29oZXJlbmNlIGlzc3VlLCBzbyB0aGlzIGFwcHJvYWNoIG1ha2VzIHNlbnNlIGFzIGEgcG90ZW50aWFsIGZpeC4gSXQgYWxzbyBpbmRpY2F0ZXMgdGhleSB0aGluayB0aGlzIGlzIGEgcGxhdGZvcm0gc3BlY2lmaWMgcHJvYmxlbSwgYXMgaXQgZG9lcyBub3QgYWZmZWN0IGFsbCBwbGF0Zm9ybXMuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgaG93IHJlYWNoYWJsZSBpcyB0aGlzIGNvZGUgcGF0aCwgYW5kIGlzIHRoaXMgY2hhbmdlIHNvbWV0aGluZyB3ZSBtaWdodCB3YW50IHRvIHRhcmdldCBmb3IgZnV6emluZz8gTGV0JiMzOTtzIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBzZWUgaWYgd2UgY2FuIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmVjb25kaXRpb25zIGZvciB0aGlzIGNvZGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaXJvaGFfbnB1Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9NYWtlZmlsZT04PWFpcm9oYS1ldGgtJChDT05GSUdfREVCVUdfRlMpICYjNDM7PSBhaXJvaGFfcHBlX2RlYnVnZnMub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX05FVF9BSVJPSEFfTlBVKSAmIzQzOz0gYWlyb2hhX25wdS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQxOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyB0aGUgYENPTkZJR19ORVRfQUlST0hBX05QVWAgRmxhZyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBgQ09ORklHX05FVF9BSVJPSEFfTlBVYCBkaXJlY3RpdmUuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpbnZvbHZlcyBhIGNvbmZpZ3VyYXRpb24gZmxhZyByZWxhdGVkIHRvLCBzcGVjaWZpY2FsbHksIGFuIEFpcm9oYSBOZXR3b3JrIFByb2Nlc3NpbmcgVW5pdCwgb3IgTlBVLiBJdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgbmFtaW5nIGNvbnZlbnRpb247IHRoZSAmIzM0O05FVCYjMzQ7IHN1Z2dlc3RzIHRoZSBuZXR3b3JraW5nIGNvbnRleHQuCgpNeSBpbW1lZGlhdGUgZm9sbG93IHVwIHF1ZXN0aW9ucyB3b3VsZCBjZW50ZXIgYXJvdW5kOgoKKiAgICoqV2hhdCBzcGVjaWZpYyBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZD8qKiBJcyB0aGlzIHJlbGF0ZWQgdG8gb2ZmbG9hZGluZyBwYWNrZXQgcHJvY2Vzc2luZywgaGFyZHdhcmUgYWNjZWxlcmF0aW9uLCBzZWN1cml0eSBmZWF0dXJlcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEFpcm9oYSBpcyBhIGZhaXJseSBsYXJnZSBwbGF5ZXIgaW4gdGhlIFNvQyBzcGFjZSwgc28gSSYjMzk7ZCBuZWVkIHRvIG5hcnJvdyBkb3duIHRoZSB0YXJnZXQgYXBwbGljYXRpb24uCiogICAqKldoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/KiogRG9lcyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhhdmUgZG93bnN0cmVhbSBpbXBhY3RzIG9uIG90aGVyIGRyaXZlcnMsIG1vZHVsZXMsIG9yIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzPyBJJiMzOTtkIGNoZWNrIGZvciBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCBpdHMgZnVsbCBzY29wZS4KKiAgICoqV2hhdCBpcyB0aGUgZGVmYXVsdCBzdGF0ZSBhbmQgd2h5PyoqIElzIHRoaXMgYSBkZWZhdWx0LWVuYWJsZWQgZmVhdHVyZSBvciBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBleHBsaWNpdCBhY3RpdmF0aW9uPyBBbmQgaWYgaXQmIzM5O3MgZGlzYWJsZWQgYnkgZGVmYXVsdCwgSSB3b3VsZCBiZSB2ZXJ5IGludGVyZXN0ZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGFuZCByZWFzb25zIGZvciBkaXNhYmxpbmcuCiogICAqKldoYXQgdmVyc2lvbiBvZiB0aGUgQWlyb2hhIE5QVT8qKiBUaGVyZSBhcmUgc29tZXRpbWVzIG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBzYW1lIGNoaXBzZXQuIFRoaXMgY2FuIGdyZWF0bHkgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgc29mdHdhcmUgYW5kIGhhcmR3YXJlLgoqICAgKipJcyB0aGlzIGEga2VybmVsLWxldmVsIGNvbmZpZ3VyYXRpb24/KiogT3IgaXMgdGhpcyB3aXRoaW4gYSB1c2VyLXNwYWNlIHV0aWxpdHkgdGhhdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBOUFU/IFRoaXMgaGVscHMgd2l0aCB1bmRlcnN0YW5kaW5nIHdoYXQgdG9vbHMgYXJlIG5lZWRlZCB0byBhY3R1YWxseSBjb25maWd1cmUgYW5kIHVzZSB0aGlzLgoKRXNzZW50aWFsbHksIHNlZWluZyB0aGlzIGZsYWcsIG15IHRob3VnaHQgcHJvY2VzcyBpcyBhbGwgYWJvdXQgKmNvbnRleHQqLiBJIG5lZWQgbW9yZSBkZXRhaWxzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBpbiByZWxhdGlvbiB0byB0aGUgYnJvYWRlciBuZXR3b3JrIGluZnJhc3RydWN0dXJlLiBJdCYjMzk7cyBhIHN0YXJ0aW5nIHBvaW50LCBidXQgYSBzdGFydGluZyBwb2ludCB0aGF0IHNwYXJrcyBhIHNlcmllcyBvZiB0YXJnZXRlZCBpbnF1aXJpZXMgYW5kIGludmVzdGlnYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQUlST0hBX05QVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc9OD1pZiBORVRfVkVORE9SX0FJUk9IQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjEwOmNvbmZpZyBORVRfQUlST0hBX05QVVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtBaXJvaGEgTlBVIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDAxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJiMzOTttIHRoaW5raW5nIGFib3V0LCBwcmVzZW50ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgRGVwZW5kZW5jaWVzIG9mIE5FVF9BSVJPSEFfTlBVKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9BSVJPSEFfTlBVYC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRob3NlIGxpbmthZ2VzLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdGhpbmsgYWJvdXQgdGhlIGxheWVycyBpbnZvbHZlZC4gV2hhdCBvdGhlciBtb2R1bGVzLCBsaWJyYXJpZXMsIG9yIGhhcmR3YXJlIGNvbXBvbmVudHMgZG9lcyBpdCByZWx5IG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gSXMgaXQgYSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciAoSEFMKSBmb3IgYSBzcGVjaWZpYyBOUFU/IE9yIHBlcmhhcHMgYW4gaW50ZXJtZWRpYXJ5IGRyaXZlcj8gSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHNvZnR3YXJlIHN0YWNrLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0IGhhcyBleHRlcm5hbCBkZXBlbmRlbmNpZXMsIGFuZCB3aGF0IHRob3NlIGFyZS4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhvc2UuIEFyZSB0aGVyZSBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcyBpbnZvbHZlZCwgb3IgbGlicmFyaWVzIHJlcXVpcmVkIHRvIGJlIGxvYWRlZD8gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nLCBwb3J0aW5nLCBvciBldmVuIGp1c3Qgb3B0aW1pemluZyB0aGUgc3lzdGVtLiBJdCB3aWxsIGFsc28gaGVscCBpZGVudGlmeSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uZmxpY3Qgd2l0aCBvdGhlciBzeXN0ZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTkVUX1ZFTkRPUl9BSVJPSEFcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7QWlyb2hhIGRldmljZXNcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIElmIHlvdSBoYXZlIGEgQWlyb2hhIFNvQyB3aXRoIGV0aGVybmV0LCBzYXkgWS5cbiAgIDc6XHRcbiAgIDg6XHRpZiBORVRfVkVORE9SX0FJUk9IQVxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBORVRfQUlST0hBX05QVVxuICAxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIE5QVSBzdXBwb3J0XCYjMzQ7XG4gIDEyOlx0XHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcbiAgMTM6XHRcdHNlbGVjdCBSRUdNQVBfTU1JT1xuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBaXJvaGEgTmV0d29yayBQcm9jZXNzb3IgKE5QVSkgYXZhaWxhYmxlXG4gIDE2Olx0XHQgIG9uIHRoZSBBaXJvaGEgU29jIGZhbWlseS5cbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgTkVUX0FJUk9IQVxuICAxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gTkVUX0RTQSB8fCAhTkVUX0RTQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgTlBVIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhpcyBjb2RlJiMzOTtzIGRlcGVuZGVuY2llcyBhcmUgYSBiaXQgY29udm9sdXRlZCDigJMgaXQgaGluZ2VzIG9uIGBORVRfVkVORE9SX0FJUk9IQWAsIHdoaWNoIGluIHR1cm4gcmVsaWVzIG9uIGVpdGhlciBgQVJDSF9BSVJPSEFgIG9yIGBDT01QSUxFX1RFU1RgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHRoaXMgY29kZSBwYXRoICpldmVuKiBiZSBoaXQgd2hlbiBydW5uaW5nIGluIFFFTVU/IEkgaGF2ZSB0byBiZSBzdXJlIGl0JiMzOTtzIHJlbGV2YW50IGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC4KCkxldCYjMzk7cyBzZWUsIGl0JiMzOTtzIGFuIE5QVSBkcml2ZXIgKGBhaXJvaGFfbnB1LmNgKSBpbnRlbmRlZCBmb3IgQWlyb2hhIFNvQ3MuIEl0IHJlZ2lzdGVycyBpdHNlbGYgYXMgYSBwbGF0Zm9ybSBkcml2ZXIuIEFoLCBzbyB0aGlzIGlzIGxpa2VseSBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciwgbWVhbmluZyBpdCBkZWFscyB3aXRoIHJlZ2lzdGVyIG1hcHBpbmcsIGZpcm13YXJlIGxvYWRpbmcsIGFuZCB0aGluZ3Mgb2YgdGhhdCBuYXR1cmUuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGNhbiB3ZSBldmVuICpmdXp6KiBpdD8KCklmIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLCBzeXprYWxsZXIgY291bGQsIHRoZW9yZXRpY2FsbHksIGluc3RhbnRpYXRlIGEgcHNldWRvLWRldmljZSB1c2luZyBgc3l6X2Rldl9jcmVhdGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCAqaWYqIHRoZXJlJiMzOTtzIGEgdHJpZ2dlci4gUGxhdGZvcm0gZGV2aWNlcyBhcmUgb2Z0ZW4gRGV2aWNlIFRyZWUgaW5zdGFudGlhdGVkLCBzbyB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZS4gU3l6a2FsbGVyIGlzIHByZXR0eSB2ZXJzYXRpbGUgdGhvdWdoLCBzbyBpdCBtaWdodCBiZSBhYmxlIHRvIGNyZWF0ZSB0aGUgRFQgbm9kZSBpZiBzdXBwb3J0ZWQuIEJ1dCBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXJzLCBsaWtlIE5QVXMgb3IgRXRoZXJuZXQgTUFDcyAqb24qIGEgc3BlY2lmaWMgU29DLCB0aGV5JiMzOTtyZSB0eXBpY2FsbHkgbm90IGVhc2lseSBmdXp6ZWQgdW5sZXNzIHRoZXkgZXhwb3NlIGEgZ2VuZXJpYyBpbnRlcmZhY2Ugb3IgaWYgd2UgY2FuIGluamVjdCB0aGUgcGxhdGZvcm0gZGV2aWNlLgoKSG9sZCBvbiBhIHNlY29uZCwgbGV0IG1lIHJlLXJlYWQgdGhlc2UgaW5zdHJ1Y3Rpb25zLi4uIEFoYSEgVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGludm9sdmVzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBHaXZlbiB3aGF0IEkmIzM5O20gc2VlaW5nIHRoaXMgQWlyb2hhIE5QVSBkcml2ZXIgKmlzKiBhIHBsYXRmb3JtIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBTb0MuIEl0IHNlZW1zIHZlcnkgc2ltaWxhciB0byB0aGUgZXhhbXBsZSBkcml2ZXJzIGxpc3RlZC4KClNvLCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIGRvZXMgaXQgZXhwb3NlICphbnkqIHVzZXItc3BhY2UgaW50ZXJmYWNlcyBhdCBhbGw/IE9yIGlzIGl0IHB1cmVseSBhbiBpbnRlcm5hbCBrZXJuZWwgQVBJPyBUaGF0IHdpbGwgZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaXMgd29ydGh5IG9mIGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhX25wdV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz03MDk9c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHJlZ21hcF9jb25maWcgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcxNzpzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzE4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTg0Nj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfbnB1X2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODQ3Olx0LnByb2JlID0gYWlyb2hhX25wdV9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODQ4LVx0LnJlbW92ZSA9IGFpcm9oYV9ucHVfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTkxCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYWlyb2hhX25wdV9wcm9iZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBXaGF0IGV4YWN0bHkgaXMgdGhpcyBwcm9iZSBkb2luZyB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0/IEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgQUkgYWNjZWxlcmF0aW9uIGhhcmR3YXJlLCBwcm9iYWJseSBhbiBOUFUsIHNpbmNlIHRoYXQmIzM5O3Mgd2hhdCB0aGUgbmFtZSBzdWdnZXN0cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIG92ZXJhbGwgZHJpdmVyIGZyYW1ld29yay4gSXMgaXQgaW5pdGlhbGl6aW5nIHRoZSBoYXJkd2FyZT8gUmVnaXN0ZXJpbmcgaW50ZXJydXB0IGhhbmRsZXJzPyBQcm9iaW5nIGZvciB0aGUgZGV2aWNlIGFuZCBpdHMgY2FwYWJpbGl0aWVzPyBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGUgcHJvYmUgZmFpbHM/IERvZXMgaXQgZ3JhY2VmdWxseSBmYWxsYmFjaywgb3IgZG9lcyBpdCBicmluZyBkb3duIHRoZSB3aG9sZSBzeXN0ZW0/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UgaWYgdGhpcyBwcm9iZSBnb2VzIHNpZGV3YXlzLiBLbm93aW5nIHRoZSBkZXRhaWxzIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIGFueSBwb3RlbnRpYWwgaW50ZWdyYXRpb24gaXNzdWVzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcxNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcxNzpcdHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIDcxODpcdHtcbiA3MTk6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuIDcyMDpcdFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcbiA3MjE6XHRcdHN0cnVjdCByZXNvdXJjZSByZXM7XG4gNzIyOlx0XHR2b2lkIF9faW9tZW0gKmJhc2U7XG4gNzIzOlx0XHRpbnQgaSwgaXJxLCBlcnI7XG4gNzI0Olx0XHR1MzIgdmFsO1xuIDcyNTpcdFxuIDcyNjpcdFx0YmFzZSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTtcbiA3Mjc6XHRcdGlmIChJU19FUlIoYmFzZSkpXG4gNzI4Olx0XHRcdHJldHVybiBQVFJfRVJSKGJhc2UpO1xuIDcyOTpcdFxuIDczMDpcdFx0bnB1ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpucHUpLCBHRlBfS0VSTkVMKTtcbiA3MzE6XHRcdGlmICghbnB1KVxuIDczMjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA3MzM6XHRcbiA3MzQ6XHRcdG5wdS1cdTAwM2VkZXYgPSBkZXY7XG4gNzM1Olx0XHRucHUtXHUwMDNlb3BzLnBwZV9pbml0ID0gYWlyb2hhX25wdV9wcGVfaW5pdDtcbiA3MzY6XHRcdG5wdS1cdTAwM2VvcHMucHBlX2RlaW5pdCA9IGFpcm9oYV9ucHVfcHBlX2RlaW5pdDtcbiA3Mzc6XHRcdG5wdS1cdTAwM2VvcHMucHBlX2luaXRfc3RhdHMgPSBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cDtcbiA3Mzg6XHRcdG5wdS1cdTAwM2VvcHMucHBlX2ZsdXNoX3NyYW1fZW50cmllcyA9IGFpcm9oYV9ucHVfcHBlX2ZsdXNoX3NyYW1fZW50cmllcztcbiA3Mzk6XHRcdG5wdS1cdTAwM2VvcHMucHBlX2ZvZV9jb21taXRfZW50cnkgPSBhaXJvaGFfbnB1X2ZvZV9jb21taXRfZW50cnk7XG4gNzQwOlx0XHRucHUtXHUwMDNlb3BzLndsYW5faW5pdF9yZXNlcnZlZF9tZW1vcnkgPSBhaXJvaGFfbnB1X3dsYW5faW5pdF9tZW1vcnk7XG4gNzQxOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fc2VuZF9tc2cgPSBhaXJvaGFfbnB1X3dsYW5fbXNnX3NlbmQ7XG4gNzQyOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fZ2V0X21zZyA9IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0O1xuIDc0MzpcdFx0bnB1LVx1MDAzZW9wcy53bGFuX2dldF9xdWV1ZV9hZGRyID0gYWlyb2hhX25wdV93bGFuX3F1ZXVlX2FkZHJfZ2V0O1xuIDc0NDpcdFx0bnB1LVx1MDAzZW9wcy53bGFuX3NldF9pcnFfc3RhdHVzID0gYWlyb2hhX25wdV93bGFuX2lycV9zdGF0dXNfc2V0O1xuIDc0NTpcdFx0bnB1LVx1MDAzZW9wcy53bGFuX2dldF9pcnFfc3RhdHVzID0gYWlyb2hhX25wdV93bGFuX2lycV9zdGF0dXNfZ2V0O1xuIDc0NjpcdFx0bnB1LVx1MDAzZW9wcy53bGFuX2VuYWJsZV9pcnEgPSBhaXJvaGFfbnB1X3dsYW5faXJxX2VuYWJsZTtcbiA3NDc6XHRcdG5wdS1cdTAwM2VvcHMud2xhbl9kaXNhYmxlX2lycSA9IGFpcm9oYV9ucHVfd2xhbl9pcnFfZGlzYWJsZTtcbiA3NDg6XHRcbiA3NDk6XHRcdG5wdS1cdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oZGV2LCBiYXNlLCBcdTAwMjZyZWdtYXBfY29uZmlnKTtcbiA3NTA6XHRcdGlmIChJU19FUlIobnB1LVx1MDAzZXJlZ21hcCkpXG4gNzUxOlx0XHRcdHJldHVybiBQVFJfRVJSKG5wdS1cdTAwM2VyZWdtYXApO1xuIDc1MjpcdFxuIDc1MzpcdFx0ZXJyID0gb2ZfcmVzZXJ2ZWRfbWVtX3JlZ2lvbl90b19yZXNvdXJjZShkZXYtXHUwMDNlb2Zfbm9kZSwgMCwgXHUwMDI2cmVzKTtcbiA3NTQ6XHRcdGlmIChlcnIpXG4gNzU1Olx0XHRcdHJldHVybiBlcnI7XG4gNzU2Olx0XG4gNzU3Olx0XHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApO1xuIDc1ODpcdFx0aWYgKGlycSBcdTAwM2MgMClcbiA3NTk6XHRcdFx0cmV0dXJuIGlycTtcbiA3NjA6XHRcbiA3NjE6XHRcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIGFpcm9oYV9ucHVfbWJveF9oYW5kbGVyLFxuIDc2MjpcdFx0XHRcdCAgICAgICBJUlFGX1NIQVJFRCwgXCYjMzQ7YWlyb2hhLW5wdS1tYm94XCYjMzQ7LCBucHUpO1xuIDc2MzpcdFx0aWYgKGVycilcbiA3NjQ6XHRcdFx0cmV0dXJuIGVycjtcbiA3NjU6XHRcbiA3NjY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobnB1LVx1MDAzZWNvcmVzKTsgaSYjNDM7JiM0MzspIHtcbiA3Njc6XHRcdFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tpXTtcbiA3Njg6XHRcbiA3Njk6XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y29yZS1cdTAwM2Vsb2NrKTtcbiA3NzA6XHRcdFx0Y29yZS1cdTAwM2VucHUgPSBucHU7XG4gNzcxOlx0XG4gNzcyOlx0XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSAmIzQzOyAxKTtcbiA3NzM6XHRcdFx0aWYgKGlycSBcdTAwM2MgMClcbiA3NzQ6XHRcdFx0XHRyZXR1cm4gaXJxO1xuIDc3NTpcdFxuIDc3NjpcdFx0XHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBhaXJvaGFfbnB1X3dkdF9oYW5kbGVyLFxuIDc3NzpcdFx0XHRcdFx0ICAgICAgIElSUUZfU0hBUkVELCBcJiMzNDthaXJvaGEtbnB1LXdkdFwmIzM0OywgY29yZSk7XG4gNzc4Olx0XHRcdGlmIChlcnIpXG4gNzc5Olx0XHRcdFx0cmV0dXJuIGVycjtcbiA3ODA6XHRcbiA3ODE6XHRcdFx0SU5JVF9XT1JLKFx1MDAyNmNvcmUtXHUwMDNld2R0X3dvcmssIGFpcm9oYV9ucHVfd2R0X3dvcmspO1xuIDc4MjpcdFx0fVxuIDc4MzpcdFxuIDc4NDpcdFx0Lyogd2xhbiBJUlEgbGluZXMgKi9cbiA3ODU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobnB1LVx1MDAzZWlycXMpOyBpJiM0MzsmIzQzOykge1xuIDc4NjpcdFx0XHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGkgJiM0MzsgQVJSQVlfU0laRShucHUtXHUwMDNlY29yZXMpICYjNDM7IDEpO1xuIDc4NzpcdFx0XHRpZiAoaXJxIFx1MDAzYyAwKVxuIDc4ODpcdFx0XHRcdHJldHVybiBpcnE7XG4gNzg5Olx0XG4gNzkwOlx0XHRcdG5wdS1cdTAwM2VpcnFzW2ldID0gaXJxO1xuIDc5MTpcdFx0fVxuIDc5MjpcdFxuIDc5MzpcdFx0ZXJyID0gZG1hX3NldF9jb2hlcmVudF9tYXNrKGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XG4gNzk0Olx0XHRpZiAoZXJyKVxuIDc5NTpcdFx0XHRyZXR1cm4gZXJyO1xuIDc5NjpcdFxuIDc5NzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShucHUtXHUwMDNlY29yZXMpOyBpJiM0MzsmIzQzOykge1xuIDc5ODpcdFx0XHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlID0gXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2ldO1xuIDc5OTpcdFxuIDgwMDpcdFx0XHRjb3JlLVx1MDAzZWJ1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSxcbiA4MDE6XHRcdFx0XHRcdFx0XHRcdTAwMjZjb3JlLVx1MDAzZWFkZHIsIEdGUF9LRVJORUwpO1xuIDgwMjpcdFx0XHRpZiAoIWNvcmUtXHUwMDNlYnVmKVxuIDgwMzpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDgwNDpcdFx0fVxuIDgwNTpcdFxuIDgwNjpcdFx0ZXJyID0gYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoZGV2LCBiYXNlLCBcdTAwMjZyZXMpO1xuIDgwNzpcdFx0aWYgKGVycilcbiA4MDg6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwmIzM0O2ZhaWxlZCB0byBydW4gbnB1IGZpcm13YXJlXFxuXCYjMzQ7KTtcbiA4MDk6XHRcbiA4MTA6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMCksXG4gODExOlx0XHRcdCAgICAgcmVzLnN0YXJ0ICYjNDM7IE5QVV9FTjc1ODFfRklSTVdBUkVfUlYzMl9NQVhfU0laRSk7XG4gODEyOlx0XHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX05QVV9NSUIoMTEpLCAweDQwMDAwKTsgLyogU1JBTSAyNTZLICovXG4gODEzOlx0XHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX05QVV9NSUIoMTIpLCAwKTtcbiA4MTQ6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigyMSksIDEpO1xuIDgxNTpcdFx0bXNsZWVwKDEwMCk7XG4gODE2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NDgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgTlBVIERyaXZlciBhbmQgaXRzIEZlYXNpYmlsaXR5IGluIFFFTVUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBkcml2ZXIsIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBpdCYjMzk7cyBEZXZpY2UgVHJlZS1kZXBlbmRlbnQuIEl0JiMzOTtzIHVzaW5nIGBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlYCBhbmQgZ3JhYmJpbmcgSVJRcyB3aXRoIGBwbGF0Zm9ybV9nZXRfaXJxYCwgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGZpcm1seSBpbiBEVCBsYW5kLiBBbmQgaXQmIzM5O3MgbG9hZGluZyBmaXJtd2FyZSB1c2luZyBgYWlyb2hhX25wdV9ydW5fZmlybXdhcmVgLCB3aGljaCwgSSYjMzk7bSBhc3N1bWluZywgaXMgd3JpdGluZyBkaXJlY3RseSB0byByZWdpc3RlcnMgYW5kIHdhaXRpbmcgZm9yIHRoZSBOZXVyYWwgUHJvY2Vzc2luZyBVbml0IHRvIGtpY2sgb24uIFJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaXMsIGNhbiBJIGV2ZW4gKnRvdWNoKiB0aGlzIHRoaW5nIGluIFFFTVU/CgpCYXNlZCBvbiB0aGUgaW5pdGlhbCBpbmZvcm1hdGlvbiwgcHJvYmFibHkgbm90LCBpdCBsb29rcyBsaWtlIGl0IGlzIGEgdmVyeSBzcGVjaWZpYyBTb0MgZHJpdmVyLCB0aGUgQWlyb2hhIEVONzU4MS4gUUVNVSBkZWZpbml0ZWx5IHdvdWxkbiYjMzk7dCBoYXZlIGJ1aWx0LWluIGVtdWxhdGlvbiBmb3IgdGhhdCBwYXJ0aWN1bGFyIE5QVSBhcmNoaXRlY3R1cmUuCgpCdXQgdGhlbiBhZ2Fpbiwgc3l6a2FsbGVyICpjb3VsZCogcG90ZW50aWFsbHkgZ2V0IHVzIHRoZXJlLiBJZiB3ZSBjb3VsZCBpbmplY3QgYSBwbGF0Zm9ybSBkZXZpY2UgdXNpbmcgYHN5el9kZXZfY3JlYXRlYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbWF5YmUgd2UgY291bGQgdHJpY2sgaXQuIFRoZSBjYXRjaCwgb2YgY291cnNlLCBpcyB0aGF0IHdlJiMzOTtkIGhhdmUgdG8gbW9jayB0aGUgbWVtb3J5LW1hcHBlZCBJL08sIHdoaWNoIGlzIHJhcmVseSBkb25lIGZvciByYW5kb20gU29DcyB1bmxlc3MgdGhlcmUmIzM5O3MgYSBkZWRpY2F0ZWQgc3l6a2FsbGVyIGRlc2NyaXB0aW9uLiAKClNvIHRoZSBuZXh0IHN0ZXAgaXMgcHJldHR5IG9idmlvdXM6IGxldCBtZSBjaGVjayBpZiB0aGVyZSYjMzk7cyAqYW55KiBzeXprYWxsZXIgZGVzY3JpcHRpb24sIGEgZGVkaWNhdGVkIG9uZSwgZm9yIHRoaXMgZHJpdmVyLiBUaGF0IHdvdWxkIGJlIHRoZSBzaWx2ZXIgYnVsbGV0IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyODUKCQkJCQkJCW91dHB1dDogOTQKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQWlyb2hhIE5QVSBEcml2ZXIgLSBOb3QgRnV6emFibGUgd2l0aCBDdXJyZW50IFJlc291cmNlcyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBObyBleGlzdGluZyBzeXprYWxsZXIgZGVzY3JpcHRpb24gZm9yIEFpcm9oYSwgd2hpY2ggaXNuJiMzOTt0IGEgZ3JlYXQgc2lnbiB0byBiZWdpbiB3aXRoLiBUaGVuLCBJIHJlbWVtYmVyIHRoZSBpbnN0cnVjdGlvbjogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7CgpBaCwgcmlnaHQuIFRoaXMgQWlyb2hhIE5QVSBkcml2ZXIgKmRlZmluaXRlbHkqIGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gSXTigJlzIGEgdmVuZG9yLXNwZWNpZmljIE5QVSBkcml2ZXIsIGFuZCB0aG9zZSB0aGluZ3MgYWx3YXlzIG5lZWQgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBvciB2ZXJ5IHNwZWNpZmljIFNvQyBlbXVsYXRpb24sIHdoaWNoIHdlICpkb24mIzM5O3QqIGhhdmUgaW4gYSB0eXBpY2FsIFFFTVUgc2V0dXAsIG9yLCBJJiMzOTttIGFzc3VtaW5nLCBzb21ldGhpbmcgbGlrZSBHQ0UuIFRodXMsIGl0IGlzIG5vdCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiAKClRoZXJlZm9yZSwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCBpdCYjMzk7cyBhIG5vLWdvIGZvciBmdXp6aW5nIHJpZ2h0IG5vdy4gSeKAmW0gbWFya2luZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgTlBVIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIE5QVSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTb0MgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTY6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDE2OjE1OjU0LjEyOTIxMjk5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjA3Mzc5MTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBOUFUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDE2OjE1OjU0LjEyOTIxODMxOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MzQwMzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNhNWJjMTllOWQ2MzM0NDc1OTllZGQxNGNhOGY1ZDlhZjhmODc4OTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgOSAxNjoxNTo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xcbmluZGV4IGI2NzliZWQ5NTJkZTMuLmM4MzllMGE0MTlhYTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcXG5AQCAtMjMsNiArMjMsMTIgQEBcXG4gI2RlZmluZSBOUFVfRU43NTgxX0ZJUk1XQVJFX1JWMzJfTUFYX1NJWkVcXHQweDIwMDAwMFxcbiAjZGVmaW5lIE5QVV9FTjc1ODFfRklSTVdBUkVfREFUQV9NQVhfU0laRVxcdDB4MTAwMDBcXG4gI2RlZmluZSBOUFVfRFVNUF9TSVpFXFx0XFx0XFx0XFx0NTEyXFxuKy8qXFxuKyAqIE1haWxib3ggRE1BIHBheWxvYWQgc2l6ZS4gQ292ZXJzIHNpemVvZihzdHJ1Y3QgcHBlX21ib3hfZGF0YSkgKDI4KSBhbmRcXG4rICogV0xBTiBUTFYgbWVzc2FnZXMgKGhlYWRlciArIHBheWxvYWQpOyBsYXJnZXN0IGluLXRyZWUgV0xBTiBwYXlsb2FkIHRvZGF5XFxuKyAqIGlzIDE2IGJ5dGVzIChJTk9ERV9UWFJYX1JFR19BRERSKS4gS2VlcCBoZWFkcm9vbSBmb3IgZnV0dXJlIGNvbW1hbmRzLlxcbisgKi9cXG4rI2RlZmluZSBBSVJPSEFfTlBVX01CT1hfU0laRVxcdFxcdFxcdDI1NlxcbiBcXG4gI2RlZmluZSBSRUdfTlBVX0xPQ0FMX1NSQU1cXHRcXHQweDBcXG4gXFxuQEAgLTE2MCwyMyArMTY2LDM0IEBAIHN0cnVjdCB3bGFuX21ib3hfZGF0YSB7XFxuIFxcdERFQ0xBUkVfRkxFWF9BUlJBWSh1OCwgZCk7XFxuIH07XFxuIFxcbi1zdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXFxuLVxcdFxcdFxcdCAgICAgICB2b2lkICpwLCBpbnQgc2l6ZSlcXG4rc3RhdGljIGludCBfX2Fpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXFxuK1xcdFxcdFxcdFxcdCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuLCB2b2lkICpyZXBseSxcXG4rXFx0XFx0XFx0XFx0IHUxNiByZXBseV9sZW4pXFxuIHtcXG4tXFx0dTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqL1xcbi1cXHR1MzIgdmFsLCBvZmZzZXQgPSBjb3JlIFxcdTAwM2NcXHUwMDNjIDQ7XFxuLVxcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XFxuK1xcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSBcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1swXTsgLyogRklYTUU6IGNvcmUgKi9cXG4rXFx0dTMyIHZhbCwgb2Zmc2V0ID0gMDtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdGRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUobnB1LVxcdTAwM2VkZXYsIHAsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTtcXG4tXFx0cmV0ID0gZG1hX21hcHBpbmdfZXJyb3IobnB1LVxcdTAwM2VkZXYsIGRtYV9hZGRyKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKGxlbiBcXHUwMDNlIEFJUk9IQV9OUFVfTUJPWF9TSVpFKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChyZXBseSBcXHUwMDI2XFx1MDAyNiByZXBseV9sZW4gXFx1MDAzZSBsZW4pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFpbGJveCBwYXlsb2FkcyBhcmUgYmlkaXJlY3Rpb25hbCAoQ1BVIHJlcXVlc3QsIE5QVSByZXNwb25zZSkuXFxuK1xcdCAqIE9uIEVONzU4MStNVDc5OTYsIHN0cmVhbWluZyBETUFfQklESVJFQ1RJT05BTCBhZ2FpbnN0IHRoZVxcbitcXHQgKiBjYWxsZXIga3phbGxvYygpIGJ1ZmZlciBjYW4gbGVhdmUgV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OXFxuK1xcdCAqIHJlYWRpbmcgYXMgMC4wIGRlc3BpdGUgTUJPWCBzdWNjZXNzLiBSZXVzZSBhIHByb2JlLXRpbWUgY29oZXJlbnRcXG4rXFx0ICogYm91bmNlIGJ1ZmZlciB1bmRlciB0aGUgcGVyLWNvcmUgbG9jayAoYWxzbyB1c2VkIGZyb20gUFBFXFxuK1xcdCAqIGZvZV9jb21taXQgdW5kZXIgYXRvbWljIGNvbnRleHQpLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjb3JlLVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcXG4rXFx0bWVtY3B5KGNvcmUtXFx1MDAzZWJ1ZiwgZGF0YSwgbGVuKTtcXG4gXFxuLVxcdHJlZ21hcF93cml0ZShucHUtXFx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgwKSArIG9mZnNldCwgZG1hX2FkZHIpO1xcbi1cXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgKyBvZmZzZXQsIHNpemUpO1xcbitcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgKyBvZmZzZXQsIGNvcmUtXFx1MDAzZWFkZHIpO1xcbitcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgKyBvZmZzZXQsIGxlbik7XFxuIFxcdHJlZ21hcF9yZWFkKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICsgb2Zmc2V0LCBcXHUwMDI2dmFsKTtcXG4gXFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICsgb2Zmc2V0LCB2YWwgKyAxKTtcXG4gXFx0dmFsID0gRklFTERfUFJFUChNQk9YX01TR19GVU5DX0lELCBmdW5jX2lkKSB8IE1CT1hfTVNHX1dBSVRfUlNQO1xcbkBAIC0xODksMTMgKzIwNiwyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXFxuIFxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IEZJRUxEX0dFVChNQk9YX01TR19TVEFUVVMsIHZhbCkgIT0gTlBVX01CT1hfU1VDQ0VTUylcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFxuLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZucHUtXFx1MDAzZWNvcmVzW2NvcmVdLmxvY2spO1xcbitcXHQvKiBDb3B5IHRoZSB0cmFpbGluZyByZXBseV9sZW4gYnl0ZXMgb2YgdGhlIHJlc3BvbnNlLiAqL1xcbitcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiByZXBseSlcXG4rXFx0XFx0bWVtY3B5KHJlcGx5LCBjb3JlLVxcdTAwM2VidWYgKyBsZW4gLSByZXBseV9sZW4sIHJlcGx5X2xlbik7XFxuIFxcbi1cXHRkbWFfdW5tYXBfc2luZ2xlKG5wdS1cXHUwMDNlZGV2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y29yZS1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXFxuK1xcdFxcdFxcdCAgICAgICB2b2lkICpkYXRhLCBpbnQgbGVuKVxcbit7XFxuK1xcdHJldHVybiBfX2Fpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBmdW5jX2lkLCBkYXRhLCBsZW4sIGRhdGEsIGxlbik7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICphZGRyLFxcbiBcXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciAqZndfbmFtZSwgaW50IGZ3X21heF9zaXplKVxcbiB7XFxuQEAgLTQ5Nyw5ICs1MjIsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxcbiBcXHR3bGFuX2RhdGEtXFx1MDAzZWZ1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7XFxuIFxcdHdsYW5fZGF0YS1cXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XFxuIFxcbi1cXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xcbi1cXHRpZiAoIWVycilcXG4tXFx0XFx0bWVtY3B5KGRhdGEsIHdsYW5fZGF0YS1cXHUwMDNlZCwgZGF0YV9sZW4pO1xcbitcXHRlcnIgPSBfX2Fpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbixcXG4rXFx0XFx0XFx0XFx0ICAgIGRhdGEsIGRhdGFfbGVuKTtcXG4gXFx0a2ZyZWUod2xhbl9kYXRhKTtcXG4gXFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTc3MCw2ICs3OTQsMTUgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShucHUtXFx1MDAzZWNvcmVzKTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSBcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tpXTtcXG4rXFxuK1xcdFxcdGNvcmUtXFx1MDAzZWJ1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNvcmUtXFx1MDAzZWFkZHIsIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIWNvcmUtXFx1MDAzZWJ1ZilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuIFxcdGVyciA9IGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlKGRldiwgYmFzZSwgXFx1MDAyNnJlcyk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcXFwiZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXFxcblxcXCIpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaCBiL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oXFxuaW5kZXggNzU4OWZjY2ZlZWY2ZC4uMTZhOTg4YWQ3NDY3YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oXFxuQEAgLTE3Myw2ICsxNzMsOSBAQCBzdHJ1Y3QgYWlyb2hhX25wdSB7XFxuIFxcdFxcdC8qIHByb3RlY3QgY29uY3VycmVudCBucHUgbWVtb3J5IGFjY2Vzc2VzICovXFxuIFxcdFxcdHNwaW5sb2NrX3QgbG9jaztcXG4gXFx0XFx0c3RydWN0IHdvcmtfc3RydWN0IHdkdF93b3JrO1xcbitcXHRcXHQvKiBDb2hlcmVudCBib3VuY2UgYnVmZmVyIGZvciBtYWlsYm94IGNtZC9yc3AgKi9cXG4rXFx0XFx0dm9pZCAqYnVmO1xcbitcXHRcXHRkbWFfYWRkcl90IGFkZHI7XFxuIFxcdH0gY29yZXNbTlBVX05VTV9DT1JFU107XFxuIFxcbiBcXHRpbnQgaXJxc1tOUFVfTlVNX0lSUV07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDE2OjE1OjU1LjgyMzM0NjIyOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQzNTEzMjMzOTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIE5QVSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTb0MgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2E1YmMxOWU5ZDYzMzQ0NzU5OWVkZDE0Y2E4ZjVkOWFmOGY4Nzg5OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDkgMTY6MTU6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xuaW5kZXggYjY3OWJlZDk1MmRlMy4uYzgzOWUwYTQxOWFhNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbkBAIC0yMyw2ICsyMywxMiBAQFxuICNkZWZpbmUgTlBVX0VONzU4MV9GSVJNV0FSRV9SVjMyX01BWF9TSVpFXHQweDIwMDAwMFxuICNkZWZpbmUgTlBVX0VONzU4MV9GSVJNV0FSRV9EQVRBX01BWF9TSVpFXHQweDEwMDAwXG4gI2RlZmluZSBOUFVfRFVNUF9TSVpFXHRcdFx0XHQ1MTJcbisvKlxuKyAqIE1haWxib3ggRE1BIHBheWxvYWQgc2l6ZS4gQ292ZXJzIHNpemVvZihzdHJ1Y3QgcHBlX21ib3hfZGF0YSkgKDI4KSBhbmRcbisgKiBXTEFOIFRMViBtZXNzYWdlcyAoaGVhZGVyICsgcGF5bG9hZCk7IGxhcmdlc3QgaW4tdHJlZSBXTEFOIHBheWxvYWQgdG9kYXlcbisgKiBpcyAxNiBieXRlcyAoSU5PREVfVFhSWF9SRUdfQUREUikuIEtlZXAgaGVhZHJvb20gZm9yIGZ1dHVyZSBjb21tYW5kcy5cbisgKi9cbisjZGVmaW5lIEFJUk9IQV9OUFVfTUJPWF9TSVpFXHRcdFx0MjU2XG4gXG4gI2RlZmluZSBSRUdfTlBVX0xPQ0FMX1NSQU1cdFx0MHgwXG4gXG5AQCAtMTYwLDIzICsxNjYsMzQgQEAgc3RydWN0IHdsYW5fbWJveF9kYXRhIHtcbiBcdERFQ0xBUkVfRkxFWF9BUlJBWSh1OCwgZCk7XG4gfTtcbiBcbi1zdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4tXHRcdFx0ICAgICAgIHZvaWQgKnAsIGludCBzaXplKVxuK3N0YXRpYyBpbnQgX19haXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuK1x0XHRcdFx0IGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4sIHZvaWQgKnJlcGx5LFxuK1x0XHRcdFx0IHUxNiByZXBseV9sZW4pXG4ge1xuLVx0dTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqL1xuLVx0dTMyIHZhbCwgb2Zmc2V0ID0gY29yZSBcdTAwM2NcdTAwM2MgNDtcbi1cdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4rXHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlID0gXHUwMDI2bnB1LVx1MDAzZWNvcmVzWzBdOyAvKiBGSVhNRTogY29yZSAqL1xuK1x0dTMyIHZhbCwgb2Zmc2V0ID0gMDtcbiBcdGludCByZXQ7XG4gXG4tXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS1cdTAwM2VkZXYsIHAsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTtcbi1cdHJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKG5wdS1cdTAwM2VkZXYsIGRtYV9hZGRyKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHRpZiAobGVuIFx1MDAzZSBBSVJPSEFfTlBVX01CT1hfU0laRSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAocmVwbHkgXHUwMDI2XHUwMDI2IHJlcGx5X2xlbiBcdTAwM2UgbGVuKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qXG4rXHQgKiBNYWlsYm94IHBheWxvYWRzIGFyZSBiaWRpcmVjdGlvbmFsIChDUFUgcmVxdWVzdCwgTlBVIHJlc3BvbnNlKS5cbitcdCAqIE9uIEVONzU4MStNVDc5OTYsIHN0cmVhbWluZyBETUFfQklESVJFQ1RJT05BTCBhZ2FpbnN0IHRoZVxuK1x0ICogY2FsbGVyIGt6YWxsb2MoKSBidWZmZXIgY2FuIGxlYXZlIFdMQU5fRlVOQ19HRVRfV0FJVF9OUFVfVkVSU0lPTlxuK1x0ICogcmVhZGluZyBhcyAwLjAgZGVzcGl0ZSBNQk9YIHN1Y2Nlc3MuIFJldXNlIGEgcHJvYmUtdGltZSBjb2hlcmVudFxuK1x0ICogYm91bmNlIGJ1ZmZlciB1bmRlciB0aGUgcGVyLWNvcmUgbG9jayAoYWxzbyB1c2VkIGZyb20gUFBFXG4rXHQgKiBmb2VfY29tbWl0IHVuZGVyIGF0b21pYyBjb250ZXh0KS5cbitcdCAqL1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmNvcmUtXHUwMDNlbG9jayk7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2NvcmVdLmxvY2spO1xuK1x0bWVtY3B5KGNvcmUtXHUwMDNlYnVmLCBkYXRhLCBsZW4pO1xuIFxuLVx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgKyBvZmZzZXQsIGRtYV9hZGRyKTtcbi1cdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICsgb2Zmc2V0LCBzaXplKTtcbitcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICsgb2Zmc2V0LCBjb3JlLVx1MDAzZWFkZHIpO1xuK1x0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgKyBvZmZzZXQsIGxlbik7XG4gXHRyZWdtYXBfcmVhZChucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICsgb2Zmc2V0LCBcdTAwMjZ2YWwpO1xuIFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgKyBvZmZzZXQsIHZhbCArIDEpO1xuIFx0dmFsID0gRklFTERfUFJFUChNQk9YX01TR19GVU5DX0lELCBmdW5jX2lkKSB8IE1CT1hfTVNHX1dBSVRfUlNQO1xuQEAgLTE4OSwxMyArMjA2LDIxIEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbiBcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBGSUVMRF9HRVQoTUJPWF9NU0dfU1RBVFVTLCB2YWwpICE9IE5QVV9NQk9YX1NVQ0NFU1MpXG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XG4rXHQvKiBDb3B5IHRoZSB0cmFpbGluZyByZXBseV9sZW4gYnl0ZXMgb2YgdGhlIHJlc3BvbnNlLiAqL1xuK1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHJlcGx5KVxuK1x0XHRtZW1jcHkocmVwbHksIGNvcmUtXHUwMDNlYnVmICsgbGVuIC0gcmVwbHlfbGVuLCByZXBseV9sZW4pO1xuIFxuLVx0ZG1hX3VubWFwX3NpbmdsZShucHUtXHUwMDNlZGV2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y29yZS1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbitcdFx0XHQgICAgICAgdm9pZCAqZGF0YSwgaW50IGxlbilcbit7XG4rXHRyZXR1cm4gX19haXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgZnVuY19pZCwgZGF0YSwgbGVuLCBkYXRhLCBsZW4pO1xuK31cbitcbiBzdGF0aWMgaW50IGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqYWRkcixcbiBcdFx0XHRcdCAgICBjb25zdCBjaGFyICpmd19uYW1lLCBpbnQgZndfbWF4X3NpemUpXG4ge1xuQEAgLTQ5Nyw5ICs1MjIsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxuIFx0d2xhbl9kYXRhLVx1MDAzZWZ1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7XG4gXHR3bGFuX2RhdGEtXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XG4gXG4tXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xuLVx0aWYgKCFlcnIpXG4tXHRcdG1lbWNweShkYXRhLCB3bGFuX2RhdGEtXHUwMDNlZCwgZGF0YV9sZW4pO1xuK1x0ZXJyID0gX19haXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4sXG4rXHRcdFx0XHQgICAgZGF0YSwgZGF0YV9sZW4pO1xuIFx0a2ZyZWUod2xhbl9kYXRhKTtcbiBcbiBcdHJldHVybiBlcnI7XG5AQCAtNzcwLDYgKzc5NCwxNSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cdTAwM2Vjb3Jlcyk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlID0gXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2ldO1xuK1xuK1x0XHRjb3JlLVx1MDAzZWJ1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSxcbitcdFx0XHRcdFx0XHRcdTAwMjZjb3JlLVx1MDAzZWFkZHIsIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIWNvcmUtXHUwMDNlYnVmKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuIFx0ZXJyID0gYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoZGV2LCBiYXNlLCBcdTAwMjZyZXMpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwiZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXG5cIik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmggYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxuaW5kZXggNzU4OWZjY2ZlZWY2ZC4uMTZhOTg4YWQ3NDY3YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxuQEAgLTE3Myw2ICsxNzMsOSBAQCBzdHJ1Y3QgYWlyb2hhX25wdSB7XG4gXHRcdC8qIHByb3RlY3QgY29uY3VycmVudCBucHUgbWVtb3J5IGFjY2Vzc2VzICovXG4gXHRcdHNwaW5sb2NrX3QgbG9jaztcbiBcdFx0c3RydWN0IHdvcmtfc3RydWN0IHdkdF93b3JrO1xuK1x0XHQvKiBDb2hlcmVudCBib3VuY2UgYnVmZmVyIGZvciBtYWlsYm94IGNtZC9yc3AgKi9cbitcdFx0dm9pZCAqYnVmO1xuK1x0XHRkbWFfYWRkcl90IGFkZHI7XG4gXHR9IGNvcmVzW05QVV9OVU1fQ09SRVNdO1xuIFxuIFx0aW50IGlycXNbTlBVX05VTV9JUlFdO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTY6MTU6NTUuODIzMzQ3NTE4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM4MzIzNDkzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFpcm9oYSBOUFUgTWFpbGJveCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jYC4gSXQgc2VlbXMgdGhleSd2ZSBzd2l0Y2hlZCB1cCB0aGUgbWVzc2FnZSBzZW5kaW5nIHByb2Nlc3MgdG8gdGhlIE5ldHdvcmsgUHJvY2Vzc2luZyBVbml0IChOUFUpIHZpYSB0aGUgbWFpbGJveC4gSW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgY2FsbGVyLXByb3ZpZGVkIGJ1ZmZlciBhbmQgYGRtYV9tYXBfc2luZ2xlYCB3aXRoIGBETUFfQklESVJFQ1RJT05BTGAsIHRoZXkncmUgbm93IGFsbG9jYXRpbmcgYSBjb2hlcmVudCBETUEgYnVmZmVyIGR1cmluZyB0aGUgZGV2aWNlIHByb2JlIHVzaW5nIGBkbWFtX2FsbG9jX2NvaGVyZW50YC4gVGhlbiwgdGhlIGRhdGEgaXMgY29waWVkIHRvIGFuZCBmcm9tIHRoYXQgY29oZXJlbnQgYnVmZmVyIGluIGBfX2Fpcm9oYV9ucHVfc2VuZF9tc2dgLiBJbnRlcmVzdGluZy5cblxuVGhlIG1vdGl2YXRpb24gaGVyZSBpcyBhIHN0cmVhbWluZyBETUEgcHJvYmxlbSBvbiBFTjc1ODEgd2l0aCBNVDc5OTYg4oCTIHdoZXJlIHRoZSBkYXRhIGdldHMgemVyb2VkIG91dCBldmVuIHRob3VnaCB0aGUgbWFpbGJveCBjb21tdW5pY2F0aW9uIGlzIHN1cHBvc2VkbHkgc3VjY2Vzc2Z1bC4gVGhhdCdzIGEgY2xhc3NpYyBETUEgY29oZXJlbmNlIGlzc3VlLCBzbyB0aGlzIGFwcHJvYWNoIG1ha2VzIHNlbnNlIGFzIGEgcG90ZW50aWFsIGZpeC4gSXQgYWxzbyBpbmRpY2F0ZXMgdGhleSB0aGluayB0aGlzIGlzIGEgcGxhdGZvcm0gc3BlY2lmaWMgcHJvYmxlbSwgYXMgaXQgZG9lcyBub3QgYWZmZWN0IGFsbCBwbGF0Zm9ybXMuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBob3cgcmVhY2hhYmxlIGlzIHRoaXMgY29kZSBwYXRoLCBhbmQgaXMgdGhpcyBjaGFuZ2Ugc29tZXRoaW5nIHdlIG1pZ2h0IHdhbnQgdG8gdGFyZ2V0IGZvciBmdXp6aW5nPyBMZXQncyBjaGVjayB0aGUgS2NvbmZpZyBhbmQgc2VlIGlmIHdlIGNhbiBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJlY29uZGl0aW9ucyBmb3IgdGhpcyBjb2RlIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxNjoxNjowNS4yMDY1ODUyMDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQyMzI5NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlyb2hhX25wdS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL01ha2VmaWxlPTg9YWlyb2hhLWV0aC0kKENPTkZJR19ERUJVR19GUykgKz0gYWlyb2hhX3BwZV9kZWJ1Z2ZzLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTkVUX0FJUk9IQV9OUFUpICs9IGFpcm9oYV9ucHUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxNjoxNjowNS4yNzA4MjM4ODNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzM0MjQxODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVjb2RpbmcgdGhlIGBDT05GSUdfTkVUX0FJUk9IQV9OUFVgIEZsYWcqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBDT05GSUdfTkVUX0FJUk9IQV9OUFVgIGRpcmVjdGl2ZS4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGludm9sdmVzIGEgY29uZmlndXJhdGlvbiBmbGFnIHJlbGF0ZWQgdG8sIHNwZWNpZmljYWxseSwgYW4gQWlyb2hhIE5ldHdvcmsgUHJvY2Vzc2luZyBVbml0LCBvciBOUFUuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG5hbWluZyBjb252ZW50aW9uOyB0aGUgXCJORVRcIiBzdWdnZXN0cyB0aGUgbmV0d29ya2luZyBjb250ZXh0LlxuXG5NeSBpbW1lZGlhdGUgZm9sbG93IHVwIHF1ZXN0aW9ucyB3b3VsZCBjZW50ZXIgYXJvdW5kOlxuXG4qICAgKipXaGF0IHNwZWNpZmljIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkPyoqIElzIHRoaXMgcmVsYXRlZCB0byBvZmZsb2FkaW5nIHBhY2tldCBwcm9jZXNzaW5nLCBoYXJkd2FyZSBhY2NlbGVyYXRpb24sIHNlY3VyaXR5IGZlYXR1cmVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQWlyb2hhIGlzIGEgZmFpcmx5IGxhcmdlIHBsYXllciBpbiB0aGUgU29DIHNwYWNlLCBzbyBJJ2QgbmVlZCB0byBuYXJyb3cgZG93biB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uLlxuKiAgICoqV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8qKiBEb2VzIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaGF2ZSBkb3duc3RyZWFtIGltcGFjdHMgb24gb3RoZXIgZHJpdmVycywgbW9kdWxlcywgb3IgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHM/IEknZCBjaGVjayBmb3IgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bGwgc2NvcGUuXG4qICAgKipXaGF0IGlzIHRoZSBkZWZhdWx0IHN0YXRlIGFuZCB3aHk/KiogSXMgdGhpcyBhIGRlZmF1bHQtZW5hYmxlZCBmZWF0dXJlIG9yIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIGV4cGxpY2l0IGFjdGl2YXRpb24/IEFuZCBpZiBpdCdzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIEkgd291bGQgYmUgdmVyeSBpbnRlcmVzdGVkIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBhbmQgcmVhc29ucyBmb3IgZGlzYWJsaW5nLlxuKiAgICoqV2hhdCB2ZXJzaW9uIG9mIHRoZSBBaXJvaGEgTlBVPyoqIFRoZXJlIGFyZSBzb21ldGltZXMgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgY2hpcHNldC4gVGhpcyBjYW4gZ3JlYXRseSBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUuXG4qICAgKipJcyB0aGlzIGEga2VybmVsLWxldmVsIGNvbmZpZ3VyYXRpb24/KiogT3IgaXMgdGhpcyB3aXRoaW4gYSB1c2VyLXNwYWNlIHV0aWxpdHkgdGhhdCdzIHJlbGF0ZWQgdG8gdGhlIE5QVT8gVGhpcyBoZWxwcyB3aXRoIHVuZGVyc3RhbmRpbmcgd2hhdCB0b29scyBhcmUgbmVlZGVkIHRvIGFjdHVhbGx5IGNvbmZpZ3VyZSBhbmQgdXNlIHRoaXMuXG5cbkVzc2VudGlhbGx5LCBzZWVpbmcgdGhpcyBmbGFnLCBteSB0aG91Z2h0IHByb2Nlc3MgaXMgYWxsIGFib3V0ICpjb250ZXh0Ki4gSSBuZWVkIG1vcmUgZGV0YWlscyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25maWd1cmF0aW9uIHNldHRpbmcgaW4gcmVsYXRpb24gdG8gdGhlIGJyb2FkZXIgbmV0d29yayBpbmZyYXN0cnVjdHVyZS4gSXQncyBhIHN0YXJ0aW5nIHBvaW50LCBidXQgYSBzdGFydGluZyBwb2ludCB0aGF0IHNwYXJrcyBhIHNlcmllcyBvZiB0YXJnZXRlZCBpbnF1aXJpZXMgYW5kIGludmVzdGlnYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDE4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTY6MTY6MTAuMDA1MDc0ODg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTYyMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQUlST0hBX05QVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnPTg9aWYgTkVUX1ZFTkRPUl9BSVJPSEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy05LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjEwOmNvbmZpZyBORVRfQUlST0hBX05QVVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgTlBVIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDE2OjE2OjEwLjA1MDI0NjU2NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzczODIxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB3aGF0IEknbSB0aGlua2luZyBhYm91dCwgcHJlc2VudGVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgRGVwZW5kZW5jaWVzIG9mIE5FVF9BSVJPSEFfTlBVKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0FJUk9IQV9OUFVgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aG9zZSBsaW5rYWdlcy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRoaW5rIGFib3V0IHRoZSBsYXllcnMgaW52b2x2ZWQuIFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBoYXJkd2FyZSBjb21wb25lbnRzIGRvZXMgaXQgcmVseSBvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IElzIGl0IGEgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIgKEhBTCkgZm9yIGEgc3BlY2lmaWMgTlBVPyBPciBwZXJoYXBzIGFuIGludGVybWVkaWFyeSBkcml2ZXI/IEkgbmVlZCB0byBrbm93IHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBzb2Z0d2FyZSBzdGFjay4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCBoYXMgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLCBhbmQgd2hhdCB0aG9zZSBhcmUuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhvc2UuIEFyZSB0aGVyZSBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcyBpbnZvbHZlZCwgb3IgbGlicmFyaWVzIHJlcXVpcmVkIHRvIGJlIGxvYWRlZD8gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nLCBwb3J0aW5nLCBvciBldmVuIGp1c3Qgb3B0aW1pemluZyB0aGUgc3lzdGVtLiBJdCB3aWxsIGFsc28gaGVscCBpZGVudGlmeSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uZmxpY3Qgd2l0aCBvdGhlciBzeXN0ZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDAxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTY6MTY6MTMuOTI3NjMxMzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXFxuICAgMzpcXHRcXHRib29sIFxcXCJBaXJvaGEgZGV2aWNlc1xcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIElmIHlvdSBoYXZlIGEgQWlyb2hhIFNvQyB3aXRoIGV0aGVybmV0LCBzYXkgWS5cXG4gICA3OlxcdFxcbiAgIDg6XFx0aWYgTkVUX1ZFTkRPUl9BSVJPSEFcXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIE5FVF9BSVJPSEFfTlBVXFxuICAxMTpcXHRcXHR0cmlzdGF0ZSBcXFwiQWlyb2hhIE5QVSBzdXBwb3J0XFxcIlxcbiAgMTI6XFx0XFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXFxuICAxMzpcXHRcXHRzZWxlY3QgUkVHTUFQX01NSU9cXG4gIDE0OlxcdFxcdGhlbHBcXG4gIDE1OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQWlyb2hhIE5ldHdvcmsgUHJvY2Vzc29yIChOUFUpIGF2YWlsYWJsZVxcbiAgMTY6XFx0XFx0ICBvbiB0aGUgQWlyb2hhIFNvYyBmYW1pbHkuXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNvbmZpZyBORVRfQUlST0hBXFxuICAxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiQWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuICAyMDpcXHRcXHRkZXBlbmRzIG9uIE5FVF9EU0EgfHwgIU5FVF9EU0FcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTY6MTY6MTMuOTI3Njg0M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MjUxMDk2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgTlBVIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUncyBkZXBlbmRlbmNpZXMgYXJlIGEgYml0IGNvbnZvbHV0ZWQg4oCTIGl0IGhpbmdlcyBvbiBgTkVUX1ZFTkRPUl9BSVJPSEFgLCB3aGljaCBpbiB0dXJuIHJlbGllcyBvbiBlaXRoZXIgYEFSQ0hfQUlST0hBYCBvciBgQ09NUElMRV9URVNUYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGNvZGUgcGF0aCAqZXZlbiogYmUgaGl0IHdoZW4gcnVubmluZyBpbiBRRU1VPyBJIGhhdmUgdG8gYmUgc3VyZSBpdCdzIHJlbGV2YW50IGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC5cblxuTGV0J3Mgc2VlLCBpdCdzIGFuIE5QVSBkcml2ZXIgKGBhaXJvaGFfbnB1LmNgKSBpbnRlbmRlZCBmb3IgQWlyb2hhIFNvQ3MuIEl0IHJlZ2lzdGVycyBpdHNlbGYgYXMgYSBwbGF0Zm9ybSBkcml2ZXIuIEFoLCBzbyB0aGlzIGlzIGxpa2VseSBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciwgbWVhbmluZyBpdCBkZWFscyB3aXRoIHJlZ2lzdGVyIG1hcHBpbmcsIGZpcm13YXJlIGxvYWRpbmcsIGFuZCB0aGluZ3Mgb2YgdGhhdCBuYXR1cmUuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGNhbiB3ZSBldmVuICpmdXp6KiBpdD9cblxuSWYgaXQncyBhIHBsYXRmb3JtIGRyaXZlciwgc3l6a2FsbGVyIGNvdWxkLCB0aGVvcmV0aWNhbGx5LCBpbnN0YW50aWF0ZSBhIHBzZXVkby1kZXZpY2UgdXNpbmcgYHN5el9kZXZfY3JlYXRlYCBvciBzb21ldGhpbmcgc2ltaWxhciwgKmlmKiB0aGVyZSdzIGEgdHJpZ2dlci4gUGxhdGZvcm0gZGV2aWNlcyBhcmUgb2Z0ZW4gRGV2aWNlIFRyZWUgaW5zdGFudGlhdGVkLCBzbyB0aGF0J3Mgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlLiBTeXprYWxsZXIgaXMgcHJldHR5IHZlcnNhdGlsZSB0aG91Z2gsIHNvIGl0IG1pZ2h0IGJlIGFibGUgdG8gY3JlYXRlIHRoZSBEVCBub2RlIGlmIHN1cHBvcnRlZC4gQnV0IGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlcnMsIGxpa2UgTlBVcyBvciBFdGhlcm5ldCBNQUNzICpvbiogYSBzcGVjaWZpYyBTb0MsIHRoZXkncmUgdHlwaWNhbGx5IG5vdCBlYXNpbHkgZnV6emVkIHVubGVzcyB0aGV5IGV4cG9zZSBhIGdlbmVyaWMgaW50ZXJmYWNlIG9yIGlmIHdlIGNhbiBpbmplY3QgdGhlIHBsYXRmb3JtIGRldmljZS5cblxuSG9sZCBvbiBhIHNlY29uZCwgbGV0IG1lIHJlLXJlYWQgdGhlc2UgaW5zdHJ1Y3Rpb25zLi4uIEFoYSEgVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGludm9sdmVzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBHaXZlbiB3aGF0IEknbSBzZWVpbmcgdGhpcyBBaXJvaGEgTlBVIGRyaXZlciAqaXMqIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBhIHNwZWNpZmljIFNvQy4gSXQgc2VlbXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBleGFtcGxlIGRyaXZlcnMgbGlzdGVkLlxuXG5TbywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCBkb2VzIGl0IGV4cG9zZSAqYW55KiB1c2VyLXNwYWNlIGludGVyZmFjZXMgYXQgYWxsPyBPciBpcyBpdCBwdXJlbHkgYW4gaW50ZXJuYWwga2VybmVsIEFQST8gVGhhdCB3aWxsIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoeSBvZiBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxNjoxNjoyMS44NTI3OTYxNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkyODc1MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlyb2hhX25wdV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9NzA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByZWdtYXBfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MTc6c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04NDY9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4NDc6XFx0LnByb2JlID0gYWlyb2hhX25wdV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTg0OC1cXHQucmVtb3ZlID0gYWlyb2hhX25wdV9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDE2OjE2OjIxLjkzMjA4NjU3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTkxODUxOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYWlyb2hhX25wdV9wcm9iZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBXaGF0IGV4YWN0bHkgaXMgdGhpcyBwcm9iZSBkb2luZyB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0/IEknbSBhc3N1bWluZyBpdCdzIHJlbGF0ZWQgdG8gdGhlIEFJIGFjY2VsZXJhdGlvbiBoYXJkd2FyZSwgcHJvYmFibHkgYW4gTlBVLCBzaW5jZSB0aGF0J3Mgd2hhdCB0aGUgbmFtZSBzdWdnZXN0cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgb3ZlcmFsbCBkcml2ZXIgZnJhbWV3b3JrLiBJcyBpdCBpbml0aWFsaXppbmcgdGhlIGhhcmR3YXJlPyBSZWdpc3RlcmluZyBpbnRlcnJ1cHQgaGFuZGxlcnM/IFByb2JpbmcgZm9yIHRoZSBkZXZpY2UgYW5kIGl0cyBjYXBhYmlsaXRpZXM/IEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHByb2JlIGZhaWxzPyBEb2VzIGl0IGdyYWNlZnVsbHkgZmFsbGJhY2ssIG9yIGRvZXMgaXQgYnJpbmcgZG93biB0aGUgd2hvbGUgc3lzdGVtPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlIGlmIHRoaXMgcHJvYmUgZ29lcyBzaWRld2F5cy4gS25vd2luZyB0aGUgZGV0YWlscyB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIGludGVncmF0aW9uIGlzc3VlcyBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4gVGltZSB0byBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTkxLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTY6MTY6MjUuNTIzOTQxMjUxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcxNyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTc6XFx0c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIDcxODpcXHR7XFxuIDcxOTpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbiA3MjA6XFx0XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcXG4gNzIxOlxcdFxcdHN0cnVjdCByZXNvdXJjZSByZXM7XFxuIDcyMjpcXHRcXHR2b2lkIF9faW9tZW0gKmJhc2U7XFxuIDcyMzpcXHRcXHRpbnQgaSwgaXJxLCBlcnI7XFxuIDcyNDpcXHRcXHR1MzIgdmFsO1xcbiA3MjU6XFx0XFxuIDcyNjpcXHRcXHRiYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApO1xcbiA3Mjc6XFx0XFx0aWYgKElTX0VSUihiYXNlKSlcXG4gNzI4OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJhc2UpO1xcbiA3Mjk6XFx0XFxuIDczMDpcXHRcXHRucHUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm5wdSksIEdGUF9LRVJORUwpO1xcbiA3MzE6XFx0XFx0aWYgKCFucHUpXFxuIDczMjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNzMzOlxcdFxcbiA3MzQ6XFx0XFx0bnB1LVxcdTAwM2VkZXYgPSBkZXY7XFxuIDczNTpcXHRcXHRucHUtXFx1MDAzZW9wcy5wcGVfaW5pdCA9IGFpcm9oYV9ucHVfcHBlX2luaXQ7XFxuIDczNjpcXHRcXHRucHUtXFx1MDAzZW9wcy5wcGVfZGVpbml0ID0gYWlyb2hhX25wdV9wcGVfZGVpbml0O1xcbiA3Mzc6XFx0XFx0bnB1LVxcdTAwM2VvcHMucHBlX2luaXRfc3RhdHMgPSBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cDtcXG4gNzM4OlxcdFxcdG5wdS1cXHUwMDNlb3BzLnBwZV9mbHVzaF9zcmFtX2VudHJpZXMgPSBhaXJvaGFfbnB1X3BwZV9mbHVzaF9zcmFtX2VudHJpZXM7XFxuIDczOTpcXHRcXHRucHUtXFx1MDAzZW9wcy5wcGVfZm9lX2NvbW1pdF9lbnRyeSA9IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeTtcXG4gNzQwOlxcdFxcdG5wdS1cXHUwMDNlb3BzLndsYW5faW5pdF9yZXNlcnZlZF9tZW1vcnkgPSBhaXJvaGFfbnB1X3dsYW5faW5pdF9tZW1vcnk7XFxuIDc0MTpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX3NlbmRfbXNnID0gYWlyb2hhX25wdV93bGFuX21zZ19zZW5kO1xcbiA3NDI6XFx0XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9nZXRfbXNnID0gYWlyb2hhX25wdV93bGFuX21zZ19nZXQ7XFxuIDc0MzpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX2dldF9xdWV1ZV9hZGRyID0gYWlyb2hhX25wdV93bGFuX3F1ZXVlX2FkZHJfZ2V0O1xcbiA3NDQ6XFx0XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9zZXRfaXJxX3N0YXR1cyA9IGFpcm9oYV9ucHVfd2xhbl9pcnFfc3RhdHVzX3NldDtcXG4gNzQ1OlxcdFxcdG5wdS1cXHUwMDNlb3BzLndsYW5fZ2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19nZXQ7XFxuIDc0NjpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX2VuYWJsZV9pcnEgPSBhaXJvaGFfbnB1X3dsYW5faXJxX2VuYWJsZTtcXG4gNzQ3OlxcdFxcdG5wdS1cXHUwMDNlb3BzLndsYW5fZGlzYWJsZV9pcnEgPSBhaXJvaGFfbnB1X3dsYW5faXJxX2Rpc2FibGU7XFxuIDc0ODpcXHRcXG4gNzQ5OlxcdFxcdG5wdS1cXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKGRldiwgYmFzZSwgXFx1MDAyNnJlZ21hcF9jb25maWcpO1xcbiA3NTA6XFx0XFx0aWYgKElTX0VSUihucHUtXFx1MDAzZXJlZ21hcCkpXFxuIDc1MTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihucHUtXFx1MDAzZXJlZ21hcCk7XFxuIDc1MjpcXHRcXG4gNzUzOlxcdFxcdGVyciA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGV2LVxcdTAwM2VvZl9ub2RlLCAwLCBcXHUwMDI2cmVzKTtcXG4gNzU0OlxcdFxcdGlmIChlcnIpXFxuIDc1NTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3NTY6XFx0XFxuIDc1NzpcXHRcXHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApO1xcbiA3NTg6XFx0XFx0aWYgKGlycSBcXHUwMDNjIDApXFxuIDc1OTpcXHRcXHRcXHRyZXR1cm4gaXJxO1xcbiA3NjA6XFx0XFxuIDc2MTpcXHRcXHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBhaXJvaGFfbnB1X21ib3hfaGFuZGxlcixcXG4gNzYyOlxcdFxcdFxcdFxcdCAgICAgICBJUlFGX1NIQVJFRCwgXFxcImFpcm9oYS1ucHUtbWJveFxcXCIsIG5wdSk7XFxuIDc2MzpcXHRcXHRpZiAoZXJyKVxcbiA3NjQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzY1OlxcdFxcbiA3NjY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobnB1LVxcdTAwM2Vjb3Jlcyk7IGkrKykge1xcbiA3Njc6XFx0XFx0XFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFxcdTAwMjZucHUtXFx1MDAzZWNvcmVzW2ldO1xcbiA3Njg6XFx0XFxuIDc2OTpcXHRcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2Y29yZS1cXHUwMDNlbG9jayk7XFxuIDc3MDpcXHRcXHRcXHRjb3JlLVxcdTAwM2VucHUgPSBucHU7XFxuIDc3MTpcXHRcXG4gNzcyOlxcdFxcdFxcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSArIDEpO1xcbiA3NzM6XFx0XFx0XFx0aWYgKGlycSBcXHUwMDNjIDApXFxuIDc3NDpcXHRcXHRcXHRcXHRyZXR1cm4gaXJxO1xcbiA3NzU6XFx0XFxuIDc3NjpcXHRcXHRcXHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBhaXJvaGFfbnB1X3dkdF9oYW5kbGVyLFxcbiA3Nzc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIElSUUZfU0hBUkVELCBcXFwiYWlyb2hhLW5wdS13ZHRcXFwiLCBjb3JlKTtcXG4gNzc4OlxcdFxcdFxcdGlmIChlcnIpXFxuIDc3OTpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3ODA6XFx0XFxuIDc4MTpcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNmNvcmUtXFx1MDAzZXdkdF93b3JrLCBhaXJvaGFfbnB1X3dkdF93b3JrKTtcXG4gNzgyOlxcdFxcdH1cXG4gNzgzOlxcdFxcbiA3ODQ6XFx0XFx0Lyogd2xhbiBJUlEgbGluZXMgKi9cXG4gNzg1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cXHUwMDNlaXJxcyk7IGkrKykge1xcbiA3ODY6XFx0XFx0XFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpICsgQVJSQVlfU0laRShucHUtXFx1MDAzZWNvcmVzKSArIDEpO1xcbiA3ODc6XFx0XFx0XFx0aWYgKGlycSBcXHUwMDNjIDApXFxuIDc4ODpcXHRcXHRcXHRcXHRyZXR1cm4gaXJxO1xcbiA3ODk6XFx0XFxuIDc5MDpcXHRcXHRcXHRucHUtXFx1MDAzZWlycXNbaV0gPSBpcnE7XFxuIDc5MTpcXHRcXHR9XFxuIDc5MjpcXHRcXG4gNzkzOlxcdFxcdGVyciA9IGRtYV9zZXRfY29oZXJlbnRfbWFzayhkZXYsIERNQV9CSVRfTUFTSygzMikpO1xcbiA3OTQ6XFx0XFx0aWYgKGVycilcXG4gNzk1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDc5NjpcXHRcXG4gNzk3OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cXHUwMDNlY29yZXMpOyBpKyspIHtcXG4gNzk4OlxcdFxcdFxcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSBcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tpXTtcXG4gNzk5OlxcdFxcbiA4MDA6XFx0XFx0XFx0Y29yZS1cXHUwMDNlYnVmID0gZG1hbV9hbGxvY19jb2hlcmVudChkZXYsIEFJUk9IQV9OUFVfTUJPWF9TSVpFLFxcbiA4MDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNvcmUtXFx1MDAzZWFkZHIsIEdGUF9LRVJORUwpO1xcbiA4MDI6XFx0XFx0XFx0aWYgKCFjb3JlLVxcdTAwM2VidWYpXFxuIDgwMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODA0OlxcdFxcdH1cXG4gODA1OlxcdFxcbiA4MDY6XFx0XFx0ZXJyID0gYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoZGV2LCBiYXNlLCBcXHUwMDI2cmVzKTtcXG4gODA3OlxcdFxcdGlmIChlcnIpXFxuIDgwODpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXFxcImZhaWxlZCB0byBydW4gbnB1IGZpcm13YXJlXFxcXG5cXFwiKTtcXG4gODA5OlxcdFxcbiA4MTA6XFx0XFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMCksXFxuIDgxMTpcXHRcXHRcXHQgICAgIHJlcy5zdGFydCArIE5QVV9FTjc1ODFfRklSTVdBUkVfUlYzMl9NQVhfU0laRSk7XFxuIDgxMjpcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDExKSwgMHg0MDAwMCk7IC8qIFNSQU0gMjU2SyAqL1xcbiA4MTM6XFx0XFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMiksIDApO1xcbiA4MTQ6XFx0XFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigyMSksIDEpO1xcbiA4MTU6XFx0XFx0bXNsZWVwKDEwMCk7XFxuIDgxNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTY6MTY6MjUuNTI0MDU3MzQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5MzUzMDI4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgTlBVIERyaXZlciBhbmQgaXRzIEZlYXNpYmlsaXR5IGluIFFFTVUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgZHJpdmVyLCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgaXQncyBEZXZpY2UgVHJlZS1kZXBlbmRlbnQuIEl0J3MgdXNpbmcgYG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2VgIGFuZCBncmFiYmluZyBJUlFzIHdpdGggYHBsYXRmb3JtX2dldF9pcnFgLCB3aGljaCBtZWFucyB3ZSdyZSBmaXJtbHkgaW4gRFQgbGFuZC4gQW5kIGl0J3MgbG9hZGluZyBmaXJtd2FyZSB1c2luZyBgYWlyb2hhX25wdV9ydW5fZmlybXdhcmVgLCB3aGljaCwgSSdtIGFzc3VtaW5nLCBpcyB3cml0aW5nIGRpcmVjdGx5IHRvIHJlZ2lzdGVycyBhbmQgd2FpdGluZyBmb3IgdGhlIE5ldXJhbCBQcm9jZXNzaW5nIFVuaXQgdG8ga2ljayBvbi4gUmlnaHQsIHNvIHRoZSBxdWVzdGlvbiBpcywgY2FuIEkgZXZlbiAqdG91Y2gqIHRoaXMgdGhpbmcgaW4gUUVNVT9cblxuQmFzZWQgb24gdGhlIGluaXRpYWwgaW5mb3JtYXRpb24sIHByb2JhYmx5IG5vdCwgaXQgbG9va3MgbGlrZSBpdCBpcyBhIHZlcnkgc3BlY2lmaWMgU29DIGRyaXZlciwgdGhlIEFpcm9oYSBFTjc1ODEuIFFFTVUgZGVmaW5pdGVseSB3b3VsZG4ndCBoYXZlIGJ1aWx0LWluIGVtdWxhdGlvbiBmb3IgdGhhdCBwYXJ0aWN1bGFyIE5QVSBhcmNoaXRlY3R1cmUuXG5cbkJ1dCB0aGVuIGFnYWluLCBzeXprYWxsZXIgKmNvdWxkKiBwb3RlbnRpYWxseSBnZXQgdXMgdGhlcmUuIElmIHdlIGNvdWxkIGluamVjdCBhIHBsYXRmb3JtIGRldmljZSB1c2luZyBgc3l6X2Rldl9jcmVhdGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBtYXliZSB3ZSBjb3VsZCB0cmljayBpdC4gVGhlIGNhdGNoLCBvZiBjb3Vyc2UsIGlzIHRoYXQgd2UnZCBoYXZlIHRvIG1vY2sgdGhlIG1lbW9yeS1tYXBwZWQgSS9PLCB3aGljaCBpcyByYXJlbHkgZG9uZSBmb3IgcmFuZG9tIFNvQ3MgdW5sZXNzIHRoZXJlJ3MgYSBkZWRpY2F0ZWQgc3l6a2FsbGVyIGRlc2NyaXB0aW9uLiBcblxuU28gdGhlIG5leHQgc3RlcCBpcyBwcmV0dHkgb2J2aW91czogbGV0IG1lIGNoZWNrIGlmIHRoZXJlJ3MgKmFueSogc3l6a2FsbGVyIGRlc2NyaXB0aW9uLCBhIGRlZGljYXRlZCBvbmUsIGZvciB0aGlzIGRyaXZlci4gVGhhdCB3b3VsZCBiZSB0aGUgc2lsdmVyIGJ1bGxldCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzQ4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTY6MTY6MzEuNDU5MzYyMzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODIzNzYxNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlyb2hhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInN5cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDE2OjE2OjMxLjkzNzYwNjkzNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzk4OTUwMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFpcm9oYSBOUFUgRHJpdmVyIC0gTm90IEZ1enphYmxlIHdpdGggQ3VycmVudCBSZXNvdXJjZXMqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIE5vIGV4aXN0aW5nIHN5emthbGxlciBkZXNjcmlwdGlvbiBmb3IgQWlyb2hhLCB3aGljaCBpc24ndCBhIGdyZWF0IHNpZ24gdG8gYmVnaW4gd2l0aC4gVGhlbiwgSSByZW1lbWJlciB0aGUgaW5zdHJ1Y3Rpb246IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIlxuXG5BaCwgcmlnaHQuIFRoaXMgQWlyb2hhIE5QVSBkcml2ZXIgKmRlZmluaXRlbHkqIGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gSXTigJlzIGEgdmVuZG9yLXNwZWNpZmljIE5QVSBkcml2ZXIsIGFuZCB0aG9zZSB0aGluZ3MgYWx3YXlzIG5lZWQgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBvciB2ZXJ5IHNwZWNpZmljIFNvQyBlbXVsYXRpb24sIHdoaWNoIHdlICpkb24ndCogaGF2ZSBpbiBhIHR5cGljYWwgUUVNVSBzZXR1cCwgb3IsIEknbSBhc3N1bWluZywgc29tZXRoaW5nIGxpa2UgR0NFLiBUaHVzLCBpdCBpcyBub3QgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gXG5cblRoZXJlZm9yZSwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCBpdCdzIGEgbm8tZ28gZm9yIGZ1enppbmcgcmlnaHQgbm93LiBJ4oCZbSBtYXJraW5nIHRoaXMgYXMgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyODUsIk91dHB1dFRva2VucyI6OTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTY6MTY6MzkuMzM2NTU5NjAzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBOUFUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgTlBVIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxNjoxNjozOS4zMzY1ODIyMTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowstdg7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-09 15:33:40 +0000 UTC FinishedAt: 2026-08-09 16:16:40 +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+CgkJCTx0ZD4yMDI2LzA4LzA5IDE2OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBOUFUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTY6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYTViYzE5ZTlkNjMzNDQ3NTk5ZWRkMTRjYThmNWQ5YWY4Zjg3ODk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAxNjoxNTo1MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xuaW5kZXggYjY3OWJlZDk1MmRlMy4uYzgzOWUwYTQxOWFhNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbkBAIC0yMyw2ICYjNDM7MjMsMTIgQEBcbiAjZGVmaW5lIE5QVV9FTjc1ODFfRklSTVdBUkVfUlYzMl9NQVhfU0laRVx0MHgyMDAwMDBcbiAjZGVmaW5lIE5QVV9FTjc1ODFfRklSTVdBUkVfREFUQV9NQVhfU0laRVx0MHgxMDAwMFxuICNkZWZpbmUgTlBVX0RVTVBfU0laRVx0XHRcdFx0NTEyXG4mIzQzOy8qXG4mIzQzOyAqIE1haWxib3ggRE1BIHBheWxvYWQgc2l6ZS4gQ292ZXJzIHNpemVvZihzdHJ1Y3QgcHBlX21ib3hfZGF0YSkgKDI4KSBhbmRcbiYjNDM7ICogV0xBTiBUTFYgbWVzc2FnZXMgKGhlYWRlciAmIzQzOyBwYXlsb2FkKTsgbGFyZ2VzdCBpbi10cmVlIFdMQU4gcGF5bG9hZCB0b2RheVxuJiM0MzsgKiBpcyAxNiBieXRlcyAoSU5PREVfVFhSWF9SRUdfQUREUikuIEtlZXAgaGVhZHJvb20gZm9yIGZ1dHVyZSBjb21tYW5kcy5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgQUlST0hBX05QVV9NQk9YX1NJWkVcdFx0XHQyNTZcbiBcbiAjZGVmaW5lIFJFR19OUFVfTE9DQUxfU1JBTVx0XHQweDBcbiBcbkBAIC0xNjAsMjMgJiM0MzsxNjYsMzQgQEAgc3RydWN0IHdsYW5fbWJveF9kYXRhIHtcbiBcdERFQ0xBUkVfRkxFWF9BUlJBWSh1OCwgZCk7XG4gfTtcbiBcbi1zdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4tXHRcdFx0ICAgICAgIHZvaWQgKnAsIGludCBzaXplKVxuJiM0MztzdGF0aWMgaW50IF9fYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbiYjNDM7XHRcdFx0XHQgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbiwgdm9pZCAqcmVwbHksXG4mIzQzO1x0XHRcdFx0IHUxNiByZXBseV9sZW4pXG4ge1xuLVx0dTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqL1xuLVx0dTMyIHZhbCwgb2Zmc2V0ID0gY29yZSBcdTAwM2NcdTAwM2MgNDtcbi1cdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1swXTsgLyogRklYTUU6IGNvcmUgKi9cbiYjNDM7XHR1MzIgdmFsLCBvZmZzZXQgPSAwO1xuIFx0aW50IHJldDtcbiBcbi1cdGRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUobnB1LVx1MDAzZWRldiwgcCwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpO1xuLVx0cmV0ID0gZG1hX21hcHBpbmdfZXJyb3IobnB1LVx1MDAzZWRldiwgZG1hX2FkZHIpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAobGVuIFx1MDAzZSBBSVJPSEFfTlBVX01CT1hfU0laRSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocmVwbHkgXHUwMDI2XHUwMDI2IHJlcGx5X2xlbiBcdTAwM2UgbGVuKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWFpbGJveCBwYXlsb2FkcyBhcmUgYmlkaXJlY3Rpb25hbCAoQ1BVIHJlcXVlc3QsIE5QVSByZXNwb25zZSkuXG4mIzQzO1x0ICogT24gRU43NTgxJiM0MztNVDc5OTYsIHN0cmVhbWluZyBETUFfQklESVJFQ1RJT05BTCBhZ2FpbnN0IHRoZVxuJiM0MztcdCAqIGNhbGxlciBremFsbG9jKCkgYnVmZmVyIGNhbiBsZWF2ZSBXTEFOX0ZVTkNfR0VUX1dBSVRfTlBVX1ZFUlNJT05cbiYjNDM7XHQgKiByZWFkaW5nIGFzIDAuMCBkZXNwaXRlIE1CT1ggc3VjY2Vzcy4gUmV1c2UgYSBwcm9iZS10aW1lIGNvaGVyZW50XG4mIzQzO1x0ICogYm91bmNlIGJ1ZmZlciB1bmRlciB0aGUgcGVyLWNvcmUgbG9jayAoYWxzbyB1c2VkIGZyb20gUFBFXG4mIzQzO1x0ICogZm9lX2NvbW1pdCB1bmRlciBhdG9taWMgY29udGV4dCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmNvcmUtXHUwMDNlbG9jayk7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2NvcmVdLmxvY2spO1xuJiM0MztcdG1lbWNweShjb3JlLVx1MDAzZWJ1ZiwgZGF0YSwgbGVuKTtcbiBcbi1cdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICYjNDM7IG9mZnNldCwgZG1hX2FkZHIpO1xuLVx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgJiM0Mzsgb2Zmc2V0LCBzaXplKTtcbiYjNDM7XHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgwKSAmIzQzOyBvZmZzZXQsIGNvcmUtXHUwMDNlYWRkcik7XG4mIzQzO1x0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgJiM0Mzsgb2Zmc2V0LCBsZW4pO1xuIFx0cmVnbWFwX3JlYWQobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgyKSAmIzQzOyBvZmZzZXQsIFx1MDAyNnZhbCk7XG4gXHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgyKSAmIzQzOyBvZmZzZXQsIHZhbCAmIzQzOyAxKTtcbiBcdHZhbCA9IEZJRUxEX1BSRVAoTUJPWF9NU0dfRlVOQ19JRCwgZnVuY19pZCkgfCBNQk9YX01TR19XQUlUX1JTUDtcbkBAIC0xODksMTMgJiM0MzsyMDYsMjEgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuIFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IEZJRUxEX0dFVChNQk9YX01TR19TVEFUVVMsIHZhbCkgIT0gTlBVX01CT1hfU1VDQ0VTUylcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcbiYjNDM7XHQvKiBDb3B5IHRoZSB0cmFpbGluZyByZXBseV9sZW4gYnl0ZXMgb2YgdGhlIHJlc3BvbnNlLiAqL1xuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiByZXBseSlcbiYjNDM7XHRcdG1lbWNweShyZXBseSwgY29yZS1cdTAwM2VidWYgJiM0MzsgbGVuIC0gcmVwbHlfbGVuLCByZXBseV9sZW4pO1xuIFxuLVx0ZG1hX3VubWFwX3NpbmdsZShucHUtXHUwMDNlZGV2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNvcmUtXHUwMDNlbG9jayk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuJiM0MztcdFx0XHQgICAgICAgdm9pZCAqZGF0YSwgaW50IGxlbilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX2Fpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBmdW5jX2lkLCBkYXRhLCBsZW4sIGRhdGEsIGxlbik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmFkZHIsXG4gXHRcdFx0XHQgICAgY29uc3QgY2hhciAqZndfbmFtZSwgaW50IGZ3X21heF9zaXplKVxuIHtcbkBAIC00OTcsOSAmIzQzOzUyMiw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV93bGFuX21zZ19nZXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGlmaW5kZXgsXG4gXHR3bGFuX2RhdGEtXHUwMDNlZnVuY190eXBlID0gTlBVX09QX0dFVDtcbiBcdHdsYW5fZGF0YS1cdTAwM2VmdW5jX2lkID0gZnVuY19pZDtcbiBcbi1cdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbik7XG4tXHRpZiAoIWVycilcbi1cdFx0bWVtY3B5KGRhdGEsIHdsYW5fZGF0YS1cdTAwM2VkLCBkYXRhX2xlbik7XG4mIzQzO1x0ZXJyID0gX19haXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4sXG4mIzQzO1x0XHRcdFx0ICAgIGRhdGEsIGRhdGFfbGVuKTtcbiBcdGtmcmVlKHdsYW5fZGF0YSk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTc3MCw2ICYjNDM7Nzk0LDE1IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cdTAwM2Vjb3Jlcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlID0gXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGNvcmUtXHUwMDNlYnVmID0gZG1hbV9hbGxvY19jb2hlcmVudChkZXYsIEFJUk9IQV9OUFVfTUJPWF9TSVpFLFxuJiM0MztcdFx0XHRcdFx0XHRcdTAwMjZjb3JlLVx1MDAzZWFkZHIsIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCFjb3JlLVx1MDAzZWJ1ZilcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiBcdGVyciA9IGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlKGRldiwgYmFzZSwgXHUwMDI2cmVzKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcJiMzNDtmYWlsZWQgdG8gcnVuIG5wdSBmaXJtd2FyZVxcblwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmggYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxuaW5kZXggNzU4OWZjY2ZlZWY2ZC4uMTZhOTg4YWQ3NDY3YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxuQEAgLTE3Myw2ICYjNDM7MTczLDkgQEAgc3RydWN0IGFpcm9oYV9ucHUge1xuIFx0XHQvKiBwcm90ZWN0IGNvbmN1cnJlbnQgbnB1IG1lbW9yeSBhY2Nlc3NlcyAqL1xuIFx0XHRzcGlubG9ja190IGxvY2s7XG4gXHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB3ZHRfd29yaztcbiYjNDM7XHRcdC8qIENvaGVyZW50IGJvdW5jZSBidWZmZXIgZm9yIG1haWxib3ggY21kL3JzcCAqL1xuJiM0MztcdFx0dm9pZCAqYnVmO1xuJiM0MztcdFx0ZG1hX2FkZHJfdCBhZGRyO1xuIFx0fSBjb3Jlc1tOUFVfTlVNX0NPUkVTXTtcbiBcbiBcdGludCBpcnFzW05QVV9OVU1fSVJRXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxNjoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBOUFUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYTViYzE5ZTlkNjMzNDQ3NTk5ZWRkMTRjYThmNWQ5YWY4Zjg3ODk5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgOSAxNjoxNTo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jCmluZGV4IGI2NzliZWQ5NTJkZTMuLmM4MzllMGE0MTlhYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYwpAQCAtMjMsNiAmIzQzOzIzLDEyIEBACiAjZGVmaW5lIE5QVV9FTjc1ODFfRklSTVdBUkVfUlYzMl9NQVhfU0laRQkweDIwMDAwMAogI2RlZmluZSBOUFVfRU43NTgxX0ZJUk1XQVJFX0RBVEFfTUFYX1NJWkUJMHgxMDAwMAogI2RlZmluZSBOUFVfRFVNUF9TSVpFCQkJCTUxMgomIzQzOy8qCiYjNDM7ICogTWFpbGJveCBETUEgcGF5bG9hZCBzaXplLiBDb3ZlcnMgc2l6ZW9mKHN0cnVjdCBwcGVfbWJveF9kYXRhKSAoMjgpIGFuZAomIzQzOyAqIFdMQU4gVExWIG1lc3NhZ2VzIChoZWFkZXIgJiM0MzsgcGF5bG9hZCk7IGxhcmdlc3QgaW4tdHJlZSBXTEFOIHBheWxvYWQgdG9kYXkKJiM0MzsgKiBpcyAxNiBieXRlcyAoSU5PREVfVFhSWF9SRUdfQUREUikuIEtlZXAgaGVhZHJvb20gZm9yIGZ1dHVyZSBjb21tYW5kcy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEFJUk9IQV9OUFVfTUJPWF9TSVpFCQkJMjU2CiAKICNkZWZpbmUgUkVHX05QVV9MT0NBTF9TUkFNCQkweDAKIApAQCAtMTYwLDIzICYjNDM7MTY2LDM0IEBAIHN0cnVjdCB3bGFuX21ib3hfZGF0YSB7CiAJREVDTEFSRV9GTEVYX0FSUkFZKHU4LCBkKTsKIH07CiAKLXN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCwKLQkJCSAgICAgICB2b2lkICpwLCBpbnQgc2l6ZSkKJiM0MztzdGF0aWMgaW50IF9fYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCwKJiM0MzsJCQkJIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4sIHZvaWQgKnJlcGx5LAomIzQzOwkJCQkgdTE2IHJlcGx5X2xlbikKIHsKLQl1MTYgY29yZSA9IDA7IC8qIEZJWE1FICovCi0JdTMyIHZhbCwgb2Zmc2V0ID0gY29yZSAmbHQ7Jmx0OyA0OwotCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiYjNDM7CXN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSAmYW1wO25wdS0mZ3Q7Y29yZXNbMF07IC8qIEZJWE1FOiBjb3JlICovCiYjNDM7CXUzMiB2YWwsIG9mZnNldCA9IDA7CiAJaW50IHJldDsKIAotCWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUobnB1LSZndDtkZXYsIHAsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTsKLQlyZXQgPSBkbWFfbWFwcGluZ19lcnJvcihucHUtJmd0O2RldiwgZG1hX2FkZHIpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiYjNDM7CWlmIChsZW4gJmd0OyBBSVJPSEFfTlBVX01CT1hfU0laRSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAocmVwbHkgJmFtcDsmYW1wOyByZXBseV9sZW4gJmd0OyBsZW4pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFpbGJveCBwYXlsb2FkcyBhcmUgYmlkaXJlY3Rpb25hbCAoQ1BVIHJlcXVlc3QsIE5QVSByZXNwb25zZSkuCiYjNDM7CSAqIE9uIEVONzU4MSYjNDM7TVQ3OTk2LCBzdHJlYW1pbmcgRE1BX0JJRElSRUNUSU9OQUwgYWdhaW5zdCB0aGUKJiM0MzsJICogY2FsbGVyIGt6YWxsb2MoKSBidWZmZXIgY2FuIGxlYXZlIFdMQU5fRlVOQ19HRVRfV0FJVF9OUFVfVkVSU0lPTgomIzQzOwkgKiByZWFkaW5nIGFzIDAuMCBkZXNwaXRlIE1CT1ggc3VjY2Vzcy4gUmV1c2UgYSBwcm9iZS10aW1lIGNvaGVyZW50CiYjNDM7CSAqIGJvdW5jZSBidWZmZXIgdW5kZXIgdGhlIHBlci1jb3JlIGxvY2sgKGFsc28gdXNlZCBmcm9tIFBQRQomIzQzOwkgKiBmb2VfY29tbWl0IHVuZGVyIGF0b21pYyBjb250ZXh0KS4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO2NvcmUtJmd0O2xvY2spOwogCi0Jc3Bpbl9sb2NrX2JoKCZhbXA7bnB1LSZndDtjb3Jlc1tjb3JlXS5sb2NrKTsKJiM0MzsJbWVtY3B5KGNvcmUtJmd0O2J1ZiwgZGF0YSwgbGVuKTsKIAotCXJlZ21hcF93cml0ZShucHUtJmd0O3JlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgwKSAmIzQzOyBvZmZzZXQsIGRtYV9hZGRyKTsKLQlyZWdtYXBfd3JpdGUobnB1LSZndDtyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgJiM0Mzsgb2Zmc2V0LCBzaXplKTsKJiM0MzsJcmVnbWFwX3dyaXRlKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICYjNDM7IG9mZnNldCwgY29yZS0mZ3Q7YWRkcik7CiYjNDM7CXJlZ21hcF93cml0ZShucHUtJmd0O3JlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgxKSAmIzQzOyBvZmZzZXQsIGxlbik7CiAJcmVnbWFwX3JlYWQobnB1LSZndDtyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgJiM0Mzsgb2Zmc2V0LCAmYW1wO3ZhbCk7CiAJcmVnbWFwX3dyaXRlKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICYjNDM7IG9mZnNldCwgdmFsICYjNDM7IDEpOwogCXZhbCA9IEZJRUxEX1BSRVAoTUJPWF9NU0dfRlVOQ19JRCwgZnVuY19pZCkgfCBNQk9YX01TR19XQUlUX1JTUDsKQEAgLTE4OSwxMyAmIzQzOzIwNiwyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsCiAJaWYgKCFyZXQgJmFtcDsmYW1wOyBGSUVMRF9HRVQoTUJPWF9NU0dfU1RBVFVTLCB2YWwpICE9IE5QVV9NQk9YX1NVQ0NFU1MpCiAJCXJldCA9IC1FSU5WQUw7CiAKLQlzcGluX3VubG9ja19iaCgmYW1wO25wdS0mZ3Q7Y29yZXNbY29yZV0ubG9jayk7CiYjNDM7CS8qIENvcHkgdGhlIHRyYWlsaW5nIHJlcGx5X2xlbiBieXRlcyBvZiB0aGUgcmVzcG9uc2UuICovCiYjNDM7CWlmICghcmV0ICZhbXA7JmFtcDsgcmVwbHkpCiYjNDM7CQltZW1jcHkocmVwbHksIGNvcmUtJmd0O2J1ZiAmIzQzOyBsZW4gLSByZXBseV9sZW4sIHJlcGx5X2xlbik7CiAKLQlkbWFfdW5tYXBfc2luZ2xlKG5wdS0mZ3Q7ZGV2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO2NvcmUtJmd0O2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCwKJiM0MzsJCQkgICAgICAgdm9pZCAqZGF0YSwgaW50IGxlbikKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2Fpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBmdW5jX2lkLCBkYXRhLCBsZW4sIGRhdGEsIGxlbik7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmFkZHIsCiAJCQkJICAgIGNvbnN0IGNoYXIgKmZ3X25hbWUsIGludCBmd19tYXhfc2l6ZSkKIHsKQEAgLTQ5Nyw5ICYjNDM7NTIyLDggQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3dsYW5fbXNnX2dldChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgaWZpbmRleCwKIAl3bGFuX2RhdGEtJmd0O2Z1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7CiAJd2xhbl9kYXRhLSZndDtmdW5jX2lkID0gZnVuY19pZDsKIAotCWVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbik7Ci0JaWYgKCFlcnIpCi0JCW1lbWNweShkYXRhLCB3bGFuX2RhdGEtJmd0O2QsIGRhdGFfbGVuKTsKJiM0MzsJZXJyID0gX19haXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4sCiYjNDM7CQkJCSAgICBkYXRhLCBkYXRhX2xlbik7CiAJa2ZyZWUod2xhbl9kYXRhKTsKIAogCXJldHVybiBlcnI7CkBAIC03NzAsNiAmIzQzOzc5NCwxNSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKG5wdS0mZ3Q7Y29yZXMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9ICZhbXA7bnB1LSZndDtjb3Jlc1tpXTsKJiM0MzsKJiM0MzsJCWNvcmUtJmd0O2J1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSwKJiM0MzsJCQkJCQkmYW1wO2NvcmUtJmd0O2FkZHIsIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKCFjb3JlLSZndDtidWYpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsICZhbXA7cmVzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgJiMzNDtmYWlsZWQgdG8gcnVuIG5wdSBmaXJtd2FyZVxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmggYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaAppbmRleCA3NTg5ZmNjZmVlZjZkLi4xNmE5ODhhZDc0NjdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaApAQCAtMTczLDYgJiM0MzsxNzMsOSBAQCBzdHJ1Y3QgYWlyb2hhX25wdSB7CiAJCS8qIHByb3RlY3QgY29uY3VycmVudCBucHUgbWVtb3J5IGFjY2Vzc2VzICovCiAJCXNwaW5sb2NrX3QgbG9jazsKIAkJc3RydWN0IHdvcmtfc3RydWN0IHdkdF93b3JrOwomIzQzOwkJLyogQ29oZXJlbnQgYm91bmNlIGJ1ZmZlciBmb3IgbWFpbGJveCBjbWQvcnNwICovCiYjNDM7CQl2b2lkICpidWY7CiYjNDM7CQlkbWFfYWRkcl90IGFkZHI7CiAJfSBjb3Jlc1tOUFVfTlVNX0NPUkVTXTsKIAogCWludCBpcnFzW05QVV9OVU1fSVJRXTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTY6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFpcm9oYSBOUFUgTWFpbGJveCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBzd2l0Y2hlZCB1cCB0aGUgbWVzc2FnZSBzZW5kaW5nIHByb2Nlc3MgdG8gdGhlIE5ldHdvcmsgUHJvY2Vzc2luZyBVbml0IChOUFUpIHZpYSB0aGUgbWFpbGJveC4gSW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgY2FsbGVyLXByb3ZpZGVkIGJ1ZmZlciBhbmQgYGRtYV9tYXBfc2luZ2xlYCB3aXRoIGBETUFfQklESVJFQ1RJT05BTGAsIHRoZXkmIzM5O3JlIG5vdyBhbGxvY2F0aW5nIGEgY29oZXJlbnQgRE1BIGJ1ZmZlciBkdXJpbmcgdGhlIGRldmljZSBwcm9iZSB1c2luZyBgZG1hbV9hbGxvY19jb2hlcmVudGAuIFRoZW4sIHRoZSBkYXRhIGlzIGNvcGllZCB0byBhbmQgZnJvbSB0aGF0IGNvaGVyZW50IGJ1ZmZlciBpbiBgX19haXJvaGFfbnB1X3NlbmRfbXNnYC4gSW50ZXJlc3RpbmcuCgpUaGUgbW90aXZhdGlvbiBoZXJlIGlzIGEgc3RyZWFtaW5nIERNQSBwcm9ibGVtIG9uIEVONzU4MSB3aXRoIE1UNzk5NiDigJMgd2hlcmUgdGhlIGRhdGEgZ2V0cyB6ZXJvZWQgb3V0IGV2ZW4gdGhvdWdoIHRoZSBtYWlsYm94IGNvbW11bmljYXRpb24gaXMgc3VwcG9zZWRseSBzdWNjZXNzZnVsLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBETUEgY29oZXJlbmNlIGlzc3VlLCBzbyB0aGlzIGFwcHJvYWNoIG1ha2VzIHNlbnNlIGFzIGEgcG90ZW50aWFsIGZpeC4gSXQgYWxzbyBpbmRpY2F0ZXMgdGhleSB0aGluayB0aGlzIGlzIGEgcGxhdGZvcm0gc3BlY2lmaWMgcHJvYmxlbSwgYXMgaXQgZG9lcyBub3QgYWZmZWN0IGFsbCBwbGF0Zm9ybXMuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgaG93IHJlYWNoYWJsZSBpcyB0aGlzIGNvZGUgcGF0aCwgYW5kIGlzIHRoaXMgY2hhbmdlIHNvbWV0aGluZyB3ZSBtaWdodCB3YW50IHRvIHRhcmdldCBmb3IgZnV6emluZz8gTGV0JiMzOTtzIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBzZWUgaWYgd2UgY2FuIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmVjb25kaXRpb25zIGZvciB0aGlzIGNvZGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaXJvaGFfbnB1Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9NYWtlZmlsZT04PWFpcm9oYS1ldGgtJChDT05GSUdfREVCVUdfRlMpICYjNDM7PSBhaXJvaGFfcHBlX2RlYnVnZnMub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX05FVF9BSVJPSEFfTlBVKSAmIzQzOz0gYWlyb2hhX25wdS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQxOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyB0aGUgYENPTkZJR19ORVRfQUlST0hBX05QVWAgRmxhZyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBgQ09ORklHX05FVF9BSVJPSEFfTlBVYCBkaXJlY3RpdmUuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpbnZvbHZlcyBhIGNvbmZpZ3VyYXRpb24gZmxhZyByZWxhdGVkIHRvLCBzcGVjaWZpY2FsbHksIGFuIEFpcm9oYSBOZXR3b3JrIFByb2Nlc3NpbmcgVW5pdCwgb3IgTlBVLiBJdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgbmFtaW5nIGNvbnZlbnRpb247IHRoZSAmIzM0O05FVCYjMzQ7IHN1Z2dlc3RzIHRoZSBuZXR3b3JraW5nIGNvbnRleHQuCgpNeSBpbW1lZGlhdGUgZm9sbG93IHVwIHF1ZXN0aW9ucyB3b3VsZCBjZW50ZXIgYXJvdW5kOgoKKiAgICoqV2hhdCBzcGVjaWZpYyBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZD8qKiBJcyB0aGlzIHJlbGF0ZWQgdG8gb2ZmbG9hZGluZyBwYWNrZXQgcHJvY2Vzc2luZywgaGFyZHdhcmUgYWNjZWxlcmF0aW9uLCBzZWN1cml0eSBmZWF0dXJlcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEFpcm9oYSBpcyBhIGZhaXJseSBsYXJnZSBwbGF5ZXIgaW4gdGhlIFNvQyBzcGFjZSwgc28gSSYjMzk7ZCBuZWVkIHRvIG5hcnJvdyBkb3duIHRoZSB0YXJnZXQgYXBwbGljYXRpb24uCiogICAqKldoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/KiogRG9lcyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhhdmUgZG93bnN0cmVhbSBpbXBhY3RzIG9uIG90aGVyIGRyaXZlcnMsIG1vZHVsZXMsIG9yIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzPyBJJiMzOTtkIGNoZWNrIGZvciBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCBpdHMgZnVsbCBzY29wZS4KKiAgICoqV2hhdCBpcyB0aGUgZGVmYXVsdCBzdGF0ZSBhbmQgd2h5PyoqIElzIHRoaXMgYSBkZWZhdWx0LWVuYWJsZWQgZmVhdHVyZSBvciBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBleHBsaWNpdCBhY3RpdmF0aW9uPyBBbmQgaWYgaXQmIzM5O3MgZGlzYWJsZWQgYnkgZGVmYXVsdCwgSSB3b3VsZCBiZSB2ZXJ5IGludGVyZXN0ZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGFuZCByZWFzb25zIGZvciBkaXNhYmxpbmcuCiogICAqKldoYXQgdmVyc2lvbiBvZiB0aGUgQWlyb2hhIE5QVT8qKiBUaGVyZSBhcmUgc29tZXRpbWVzIG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBzYW1lIGNoaXBzZXQuIFRoaXMgY2FuIGdyZWF0bHkgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgc29mdHdhcmUgYW5kIGhhcmR3YXJlLgoqICAgKipJcyB0aGlzIGEga2VybmVsLWxldmVsIGNvbmZpZ3VyYXRpb24/KiogT3IgaXMgdGhpcyB3aXRoaW4gYSB1c2VyLXNwYWNlIHV0aWxpdHkgdGhhdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBOUFU/IFRoaXMgaGVscHMgd2l0aCB1bmRlcnN0YW5kaW5nIHdoYXQgdG9vbHMgYXJlIG5lZWRlZCB0byBhY3R1YWxseSBjb25maWd1cmUgYW5kIHVzZSB0aGlzLgoKRXNzZW50aWFsbHksIHNlZWluZyB0aGlzIGZsYWcsIG15IHRob3VnaHQgcHJvY2VzcyBpcyBhbGwgYWJvdXQgKmNvbnRleHQqLiBJIG5lZWQgbW9yZSBkZXRhaWxzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBpbiByZWxhdGlvbiB0byB0aGUgYnJvYWRlciBuZXR3b3JrIGluZnJhc3RydWN0dXJlLiBJdCYjMzk7cyBhIHN0YXJ0aW5nIHBvaW50LCBidXQgYSBzdGFydGluZyBwb2ludCB0aGF0IHNwYXJrcyBhIHNlcmllcyBvZiB0YXJnZXRlZCBpbnF1aXJpZXMgYW5kIGludmVzdGlnYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQUlST0hBX05QVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc9OD1pZiBORVRfVkVORE9SX0FJUk9IQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjEwOmNvbmZpZyBORVRfQUlST0hBX05QVVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtBaXJvaGEgTlBVIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDAxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJiMzOTttIHRoaW5raW5nIGFib3V0LCBwcmVzZW50ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgRGVwZW5kZW5jaWVzIG9mIE5FVF9BSVJPSEFfTlBVKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9BSVJPSEFfTlBVYC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRob3NlIGxpbmthZ2VzLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdGhpbmsgYWJvdXQgdGhlIGxheWVycyBpbnZvbHZlZC4gV2hhdCBvdGhlciBtb2R1bGVzLCBsaWJyYXJpZXMsIG9yIGhhcmR3YXJlIGNvbXBvbmVudHMgZG9lcyBpdCByZWx5IG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gSXMgaXQgYSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciAoSEFMKSBmb3IgYSBzcGVjaWZpYyBOUFU/IE9yIHBlcmhhcHMgYW4gaW50ZXJtZWRpYXJ5IGRyaXZlcj8gSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHNvZnR3YXJlIHN0YWNrLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0IGhhcyBleHRlcm5hbCBkZXBlbmRlbmNpZXMsIGFuZCB3aGF0IHRob3NlIGFyZS4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhvc2UuIEFyZSB0aGVyZSBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcyBpbnZvbHZlZCwgb3IgbGlicmFyaWVzIHJlcXVpcmVkIHRvIGJlIGxvYWRlZD8gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nLCBwb3J0aW5nLCBvciBldmVuIGp1c3Qgb3B0aW1pemluZyB0aGUgc3lzdGVtLiBJdCB3aWxsIGFsc28gaGVscCBpZGVudGlmeSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uZmxpY3Qgd2l0aCBvdGhlciBzeXN0ZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTkVUX1ZFTkRPUl9BSVJPSEFcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7QWlyb2hhIGRldmljZXNcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIElmIHlvdSBoYXZlIGEgQWlyb2hhIFNvQyB3aXRoIGV0aGVybmV0LCBzYXkgWS5cbiAgIDc6XHRcbiAgIDg6XHRpZiBORVRfVkVORE9SX0FJUk9IQVxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBORVRfQUlST0hBX05QVVxuICAxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIE5QVSBzdXBwb3J0XCYjMzQ7XG4gIDEyOlx0XHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcbiAgMTM6XHRcdHNlbGVjdCBSRUdNQVBfTU1JT1xuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBaXJvaGEgTmV0d29yayBQcm9jZXNzb3IgKE5QVSkgYXZhaWxhYmxlXG4gIDE2Olx0XHQgIG9uIHRoZSBBaXJvaGEgU29jIGZhbWlseS5cbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgTkVUX0FJUk9IQVxuICAxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gTkVUX0RTQSB8fCAhTkVUX0RTQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgTlBVIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhpcyBjb2RlJiMzOTtzIGRlcGVuZGVuY2llcyBhcmUgYSBiaXQgY29udm9sdXRlZCDigJMgaXQgaGluZ2VzIG9uIGBORVRfVkVORE9SX0FJUk9IQWAsIHdoaWNoIGluIHR1cm4gcmVsaWVzIG9uIGVpdGhlciBgQVJDSF9BSVJPSEFgIG9yIGBDT01QSUxFX1RFU1RgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHRoaXMgY29kZSBwYXRoICpldmVuKiBiZSBoaXQgd2hlbiBydW5uaW5nIGluIFFFTVU/IEkgaGF2ZSB0byBiZSBzdXJlIGl0JiMzOTtzIHJlbGV2YW50IGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC4KCkxldCYjMzk7cyBzZWUsIGl0JiMzOTtzIGFuIE5QVSBkcml2ZXIgKGBhaXJvaGFfbnB1LmNgKSBpbnRlbmRlZCBmb3IgQWlyb2hhIFNvQ3MuIEl0IHJlZ2lzdGVycyBpdHNlbGYgYXMgYSBwbGF0Zm9ybSBkcml2ZXIuIEFoLCBzbyB0aGlzIGlzIGxpa2VseSBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciwgbWVhbmluZyBpdCBkZWFscyB3aXRoIHJlZ2lzdGVyIG1hcHBpbmcsIGZpcm13YXJlIGxvYWRpbmcsIGFuZCB0aGluZ3Mgb2YgdGhhdCBuYXR1cmUuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGNhbiB3ZSBldmVuICpmdXp6KiBpdD8KCklmIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLCBzeXprYWxsZXIgY291bGQsIHRoZW9yZXRpY2FsbHksIGluc3RhbnRpYXRlIGEgcHNldWRvLWRldmljZSB1c2luZyBgc3l6X2Rldl9jcmVhdGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCAqaWYqIHRoZXJlJiMzOTtzIGEgdHJpZ2dlci4gUGxhdGZvcm0gZGV2aWNlcyBhcmUgb2Z0ZW4gRGV2aWNlIFRyZWUgaW5zdGFudGlhdGVkLCBzbyB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZS4gU3l6a2FsbGVyIGlzIHByZXR0eSB2ZXJzYXRpbGUgdGhvdWdoLCBzbyBpdCBtaWdodCBiZSBhYmxlIHRvIGNyZWF0ZSB0aGUgRFQgbm9kZSBpZiBzdXBwb3J0ZWQuIEJ1dCBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXJzLCBsaWtlIE5QVXMgb3IgRXRoZXJuZXQgTUFDcyAqb24qIGEgc3BlY2lmaWMgU29DLCB0aGV5JiMzOTtyZSB0eXBpY2FsbHkgbm90IGVhc2lseSBmdXp6ZWQgdW5sZXNzIHRoZXkgZXhwb3NlIGEgZ2VuZXJpYyBpbnRlcmZhY2Ugb3IgaWYgd2UgY2FuIGluamVjdCB0aGUgcGxhdGZvcm0gZGV2aWNlLgoKSG9sZCBvbiBhIHNlY29uZCwgbGV0IG1lIHJlLXJlYWQgdGhlc2UgaW5zdHJ1Y3Rpb25zLi4uIEFoYSEgVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGludm9sdmVzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBHaXZlbiB3aGF0IEkmIzM5O20gc2VlaW5nIHRoaXMgQWlyb2hhIE5QVSBkcml2ZXIgKmlzKiBhIHBsYXRmb3JtIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBTb0MuIEl0IHNlZW1zIHZlcnkgc2ltaWxhciB0byB0aGUgZXhhbXBsZSBkcml2ZXJzIGxpc3RlZC4KClNvLCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIGRvZXMgaXQgZXhwb3NlICphbnkqIHVzZXItc3BhY2UgaW50ZXJmYWNlcyBhdCBhbGw/IE9yIGlzIGl0IHB1cmVseSBhbiBpbnRlcm5hbCBrZXJuZWwgQVBJPyBUaGF0IHdpbGwgZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaXMgd29ydGh5IG9mIGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhX25wdV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz03MDk9c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHJlZ21hcF9jb25maWcgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcxNzpzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzE4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTg0Nj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfbnB1X2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODQ3Olx0LnByb2JlID0gYWlyb2hhX25wdV9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODQ4LVx0LnJlbW92ZSA9IGFpcm9oYV9ucHVfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTkxCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYWlyb2hhX25wdV9wcm9iZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBXaGF0IGV4YWN0bHkgaXMgdGhpcyBwcm9iZSBkb2luZyB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0/IEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgQUkgYWNjZWxlcmF0aW9uIGhhcmR3YXJlLCBwcm9iYWJseSBhbiBOUFUsIHNpbmNlIHRoYXQmIzM5O3Mgd2hhdCB0aGUgbmFtZSBzdWdnZXN0cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIG92ZXJhbGwgZHJpdmVyIGZyYW1ld29yay4gSXMgaXQgaW5pdGlhbGl6aW5nIHRoZSBoYXJkd2FyZT8gUmVnaXN0ZXJpbmcgaW50ZXJydXB0IGhhbmRsZXJzPyBQcm9iaW5nIGZvciB0aGUgZGV2aWNlIGFuZCBpdHMgY2FwYWJpbGl0aWVzPyBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGUgcHJvYmUgZmFpbHM/IERvZXMgaXQgZ3JhY2VmdWxseSBmYWxsYmFjaywgb3IgZG9lcyBpdCBicmluZyBkb3duIHRoZSB3aG9sZSBzeXN0ZW0/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UgaWYgdGhpcyBwcm9iZSBnb2VzIHNpZGV3YXlzLiBLbm93aW5nIHRoZSBkZXRhaWxzIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIGFueSBwb3RlbnRpYWwgaW50ZWdyYXRpb24gaXNzdWVzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcxNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcxNzpcdHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIDcxODpcdHtcbiA3MTk6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuIDcyMDpcdFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcbiA3MjE6XHRcdHN0cnVjdCByZXNvdXJjZSByZXM7XG4gNzIyOlx0XHR2b2lkIF9faW9tZW0gKmJhc2U7XG4gNzIzOlx0XHRpbnQgaSwgaXJxLCBlcnI7XG4gNzI0Olx0XHR1MzIgdmFsO1xuIDcyNTpcdFxuIDcyNjpcdFx0YmFzZSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTtcbiA3Mjc6XHRcdGlmIChJU19FUlIoYmFzZSkpXG4gNzI4Olx0XHRcdHJldHVybiBQVFJfRVJSKGJhc2UpO1xuIDcyOTpcdFxuIDczMDpcdFx0bnB1ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpucHUpLCBHRlBfS0VSTkVMKTtcbiA3MzE6XHRcdGlmICghbnB1KVxuIDczMjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA3MzM6XHRcbiA3MzQ6XHRcdG5wdS1cdTAwM2VkZXYgPSBkZXY7XG4gNzM1Olx0XHRucHUtXHUwMDNlb3BzLnBwZV9pbml0ID0gYWlyb2hhX25wdV9wcGVfaW5pdDtcbiA3MzY6XHRcdG5wdS1cdTAwM2VvcHMucHBlX2RlaW5pdCA9IGFpcm9oYV9ucHVfcHBlX2RlaW5pdDtcbiA3Mzc6XHRcdG5wdS1cdTAwM2VvcHMucHBlX2luaXRfc3RhdHMgPSBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cDtcbiA3Mzg6XHRcdG5wdS1cdTAwM2VvcHMucHBlX2ZsdXNoX3NyYW1fZW50cmllcyA9IGFpcm9oYV9ucHVfcHBlX2ZsdXNoX3NyYW1fZW50cmllcztcbiA3Mzk6XHRcdG5wdS1cdTAwM2VvcHMucHBlX2ZvZV9jb21taXRfZW50cnkgPSBhaXJvaGFfbnB1X2ZvZV9jb21taXRfZW50cnk7XG4gNzQwOlx0XHRucHUtXHUwMDNlb3BzLndsYW5faW5pdF9yZXNlcnZlZF9tZW1vcnkgPSBhaXJvaGFfbnB1X3dsYW5faW5pdF9tZW1vcnk7XG4gNzQxOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fc2VuZF9tc2cgPSBhaXJvaGFfbnB1X3dsYW5fbXNnX3NlbmQ7XG4gNzQyOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fZ2V0X21zZyA9IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0O1xuIDc0MzpcdFx0bnB1LVx1MDAzZW9wcy53bGFuX2dldF9xdWV1ZV9hZGRyID0gYWlyb2hhX25wdV93bGFuX3F1ZXVlX2FkZHJfZ2V0O1xuIDc0NDpcdFx0bnB1LVx1MDAzZW9wcy53bGFuX3NldF9pcnFfc3RhdHVzID0gYWlyb2hhX25wdV93bGFuX2lycV9zdGF0dXNfc2V0O1xuIDc0NTpcdFx0bnB1LVx1MDAzZW9wcy53bGFuX2dldF9pcnFfc3RhdHVzID0gYWlyb2hhX25wdV93bGFuX2lycV9zdGF0dXNfZ2V0O1xuIDc0NjpcdFx0bnB1LVx1MDAzZW9wcy53bGFuX2VuYWJsZV9pcnEgPSBhaXJvaGFfbnB1X3dsYW5faXJxX2VuYWJsZTtcbiA3NDc6XHRcdG5wdS1cdTAwM2VvcHMud2xhbl9kaXNhYmxlX2lycSA9IGFpcm9oYV9ucHVfd2xhbl9pcnFfZGlzYWJsZTtcbiA3NDg6XHRcbiA3NDk6XHRcdG5wdS1cdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oZGV2LCBiYXNlLCBcdTAwMjZyZWdtYXBfY29uZmlnKTtcbiA3NTA6XHRcdGlmIChJU19FUlIobnB1LVx1MDAzZXJlZ21hcCkpXG4gNzUxOlx0XHRcdHJldHVybiBQVFJfRVJSKG5wdS1cdTAwM2VyZWdtYXApO1xuIDc1MjpcdFxuIDc1MzpcdFx0ZXJyID0gb2ZfcmVzZXJ2ZWRfbWVtX3JlZ2lvbl90b19yZXNvdXJjZShkZXYtXHUwMDNlb2Zfbm9kZSwgMCwgXHUwMDI2cmVzKTtcbiA3NTQ6XHRcdGlmIChlcnIpXG4gNzU1Olx0XHRcdHJldHVybiBlcnI7XG4gNzU2Olx0XG4gNzU3Olx0XHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApO1xuIDc1ODpcdFx0aWYgKGlycSBcdTAwM2MgMClcbiA3NTk6XHRcdFx0cmV0dXJuIGlycTtcbiA3NjA6XHRcbiA3NjE6XHRcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIGFpcm9oYV9ucHVfbWJveF9oYW5kbGVyLFxuIDc2MjpcdFx0XHRcdCAgICAgICBJUlFGX1NIQVJFRCwgXCYjMzQ7YWlyb2hhLW5wdS1tYm94XCYjMzQ7LCBucHUpO1xuIDc2MzpcdFx0aWYgKGVycilcbiA3NjQ6XHRcdFx0cmV0dXJuIGVycjtcbiA3NjU6XHRcbiA3NjY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobnB1LVx1MDAzZWNvcmVzKTsgaSYjNDM7JiM0MzspIHtcbiA3Njc6XHRcdFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tpXTtcbiA3Njg6XHRcbiA3Njk6XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y29yZS1cdTAwM2Vsb2NrKTtcbiA3NzA6XHRcdFx0Y29yZS1cdTAwM2VucHUgPSBucHU7XG4gNzcxOlx0XG4gNzcyOlx0XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSAmIzQzOyAxKTtcbiA3NzM6XHRcdFx0aWYgKGlycSBcdTAwM2MgMClcbiA3NzQ6XHRcdFx0XHRyZXR1cm4gaXJxO1xuIDc3NTpcdFxuIDc3NjpcdFx0XHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBhaXJvaGFfbnB1X3dkdF9oYW5kbGVyLFxuIDc3NzpcdFx0XHRcdFx0ICAgICAgIElSUUZfU0hBUkVELCBcJiMzNDthaXJvaGEtbnB1LXdkdFwmIzM0OywgY29yZSk7XG4gNzc4Olx0XHRcdGlmIChlcnIpXG4gNzc5Olx0XHRcdFx0cmV0dXJuIGVycjtcbiA3ODA6XHRcbiA3ODE6XHRcdFx0SU5JVF9XT1JLKFx1MDAyNmNvcmUtXHUwMDNld2R0X3dvcmssIGFpcm9oYV9ucHVfd2R0X3dvcmspO1xuIDc4MjpcdFx0fVxuIDc4MzpcdFxuIDc4NDpcdFx0Lyogd2xhbiBJUlEgbGluZXMgKi9cbiA3ODU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobnB1LVx1MDAzZWlycXMpOyBpJiM0MzsmIzQzOykge1xuIDc4NjpcdFx0XHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGkgJiM0MzsgQVJSQVlfU0laRShucHUtXHUwMDNlY29yZXMpICYjNDM7IDEpO1xuIDc4NzpcdFx0XHRpZiAoaXJxIFx1MDAzYyAwKVxuIDc4ODpcdFx0XHRcdHJldHVybiBpcnE7XG4gNzg5Olx0XG4gNzkwOlx0XHRcdG5wdS1cdTAwM2VpcnFzW2ldID0gaXJxO1xuIDc5MTpcdFx0fVxuIDc5MjpcdFxuIDc5MzpcdFx0ZXJyID0gZG1hX3NldF9jb2hlcmVudF9tYXNrKGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XG4gNzk0Olx0XHRpZiAoZXJyKVxuIDc5NTpcdFx0XHRyZXR1cm4gZXJyO1xuIDc5NjpcdFxuIDc5NzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShucHUtXHUwMDNlY29yZXMpOyBpJiM0MzsmIzQzOykge1xuIDc5ODpcdFx0XHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlID0gXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2ldO1xuIDc5OTpcdFxuIDgwMDpcdFx0XHRjb3JlLVx1MDAzZWJ1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSxcbiA4MDE6XHRcdFx0XHRcdFx0XHRcdTAwMjZjb3JlLVx1MDAzZWFkZHIsIEdGUF9LRVJORUwpO1xuIDgwMjpcdFx0XHRpZiAoIWNvcmUtXHUwMDNlYnVmKVxuIDgwMzpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDgwNDpcdFx0fVxuIDgwNTpcdFxuIDgwNjpcdFx0ZXJyID0gYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoZGV2LCBiYXNlLCBcdTAwMjZyZXMpO1xuIDgwNzpcdFx0aWYgKGVycilcbiA4MDg6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwmIzM0O2ZhaWxlZCB0byBydW4gbnB1IGZpcm13YXJlXFxuXCYjMzQ7KTtcbiA4MDk6XHRcbiA4MTA6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMCksXG4gODExOlx0XHRcdCAgICAgcmVzLnN0YXJ0ICYjNDM7IE5QVV9FTjc1ODFfRklSTVdBUkVfUlYzMl9NQVhfU0laRSk7XG4gODEyOlx0XHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX05QVV9NSUIoMTEpLCAweDQwMDAwKTsgLyogU1JBTSAyNTZLICovXG4gODEzOlx0XHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX05QVV9NSUIoMTIpLCAwKTtcbiA4MTQ6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigyMSksIDEpO1xuIDgxNTpcdFx0bXNsZWVwKDEwMCk7XG4gODE2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NDgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgTlBVIERyaXZlciBhbmQgaXRzIEZlYXNpYmlsaXR5IGluIFFFTVUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBkcml2ZXIsIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBpdCYjMzk7cyBEZXZpY2UgVHJlZS1kZXBlbmRlbnQuIEl0JiMzOTtzIHVzaW5nIGBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlYCBhbmQgZ3JhYmJpbmcgSVJRcyB3aXRoIGBwbGF0Zm9ybV9nZXRfaXJxYCwgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGZpcm1seSBpbiBEVCBsYW5kLiBBbmQgaXQmIzM5O3MgbG9hZGluZyBmaXJtd2FyZSB1c2luZyBgYWlyb2hhX25wdV9ydW5fZmlybXdhcmVgLCB3aGljaCwgSSYjMzk7bSBhc3N1bWluZywgaXMgd3JpdGluZyBkaXJlY3RseSB0byByZWdpc3RlcnMgYW5kIHdhaXRpbmcgZm9yIHRoZSBOZXVyYWwgUHJvY2Vzc2luZyBVbml0IHRvIGtpY2sgb24uIFJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaXMsIGNhbiBJIGV2ZW4gKnRvdWNoKiB0aGlzIHRoaW5nIGluIFFFTVU/CgpCYXNlZCBvbiB0aGUgaW5pdGlhbCBpbmZvcm1hdGlvbiwgcHJvYmFibHkgbm90LCBpdCBsb29rcyBsaWtlIGl0IGlzIGEgdmVyeSBzcGVjaWZpYyBTb0MgZHJpdmVyLCB0aGUgQWlyb2hhIEVONzU4MS4gUUVNVSBkZWZpbml0ZWx5IHdvdWxkbiYjMzk7dCBoYXZlIGJ1aWx0LWluIGVtdWxhdGlvbiBmb3IgdGhhdCBwYXJ0aWN1bGFyIE5QVSBhcmNoaXRlY3R1cmUuCgpCdXQgdGhlbiBhZ2Fpbiwgc3l6a2FsbGVyICpjb3VsZCogcG90ZW50aWFsbHkgZ2V0IHVzIHRoZXJlLiBJZiB3ZSBjb3VsZCBpbmplY3QgYSBwbGF0Zm9ybSBkZXZpY2UgdXNpbmcgYHN5el9kZXZfY3JlYXRlYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbWF5YmUgd2UgY291bGQgdHJpY2sgaXQuIFRoZSBjYXRjaCwgb2YgY291cnNlLCBpcyB0aGF0IHdlJiMzOTtkIGhhdmUgdG8gbW9jayB0aGUgbWVtb3J5LW1hcHBlZCBJL08sIHdoaWNoIGlzIHJhcmVseSBkb25lIGZvciByYW5kb20gU29DcyB1bmxlc3MgdGhlcmUmIzM5O3MgYSBkZWRpY2F0ZWQgc3l6a2FsbGVyIGRlc2NyaXB0aW9uLiAKClNvIHRoZSBuZXh0IHN0ZXAgaXMgcHJldHR5IG9idmlvdXM6IGxldCBtZSBjaGVjayBpZiB0aGVyZSYjMzk7cyAqYW55KiBzeXprYWxsZXIgZGVzY3JpcHRpb24sIGEgZGVkaWNhdGVkIG9uZSwgZm9yIHRoaXMgZHJpdmVyLiBUaGF0IHdvdWxkIGJlIHRoZSBzaWx2ZXIgYnVsbGV0IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyODUKCQkJCQkJCW91dHB1dDogOTQKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQWlyb2hhIE5QVSBEcml2ZXIgLSBOb3QgRnV6emFibGUgd2l0aCBDdXJyZW50IFJlc291cmNlcyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBObyBleGlzdGluZyBzeXprYWxsZXIgZGVzY3JpcHRpb24gZm9yIEFpcm9oYSwgd2hpY2ggaXNuJiMzOTt0IGEgZ3JlYXQgc2lnbiB0byBiZWdpbiB3aXRoLiBUaGVuLCBJIHJlbWVtYmVyIHRoZSBpbnN0cnVjdGlvbjogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7CgpBaCwgcmlnaHQuIFRoaXMgQWlyb2hhIE5QVSBkcml2ZXIgKmRlZmluaXRlbHkqIGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gSXTigJlzIGEgdmVuZG9yLXNwZWNpZmljIE5QVSBkcml2ZXIsIGFuZCB0aG9zZSB0aGluZ3MgYWx3YXlzIG5lZWQgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBvciB2ZXJ5IHNwZWNpZmljIFNvQyBlbXVsYXRpb24sIHdoaWNoIHdlICpkb24mIzM5O3QqIGhhdmUgaW4gYSB0eXBpY2FsIFFFTVUgc2V0dXAsIG9yLCBJJiMzOTttIGFzc3VtaW5nLCBzb21ldGhpbmcgbGlrZSBHQ0UuIFRodXMsIGl0IGlzIG5vdCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiAKClRoZXJlZm9yZSwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCBpdCYjMzk7cyBhIG5vLWdvIGZvciBmdXp6aW5nIHJpZ2h0IG5vdy4gSeKAmW0gbWFya2luZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgTlBVIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIE5QVSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTb0MgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTY6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDE2OjE1OjU0LjEyOTIxMjk5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjA3Mzc5MTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBOUFUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDE2OjE1OjU0LjEyOTIxODMxOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MzQwMzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNhNWJjMTllOWQ2MzM0NDc1OTllZGQxNGNhOGY1ZDlhZjhmODc4OTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgOSAxNjoxNTo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xcbmluZGV4IGI2NzliZWQ5NTJkZTMuLmM4MzllMGE0MTlhYTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcXG5AQCAtMjMsNiArMjMsMTIgQEBcXG4gI2RlZmluZSBOUFVfRU43NTgxX0ZJUk1XQVJFX1JWMzJfTUFYX1NJWkVcXHQweDIwMDAwMFxcbiAjZGVmaW5lIE5QVV9FTjc1ODFfRklSTVdBUkVfREFUQV9NQVhfU0laRVxcdDB4MTAwMDBcXG4gI2RlZmluZSBOUFVfRFVNUF9TSVpFXFx0XFx0XFx0XFx0NTEyXFxuKy8qXFxuKyAqIE1haWxib3ggRE1BIHBheWxvYWQgc2l6ZS4gQ292ZXJzIHNpemVvZihzdHJ1Y3QgcHBlX21ib3hfZGF0YSkgKDI4KSBhbmRcXG4rICogV0xBTiBUTFYgbWVzc2FnZXMgKGhlYWRlciArIHBheWxvYWQpOyBsYXJnZXN0IGluLXRyZWUgV0xBTiBwYXlsb2FkIHRvZGF5XFxuKyAqIGlzIDE2IGJ5dGVzIChJTk9ERV9UWFJYX1JFR19BRERSKS4gS2VlcCBoZWFkcm9vbSBmb3IgZnV0dXJlIGNvbW1hbmRzLlxcbisgKi9cXG4rI2RlZmluZSBBSVJPSEFfTlBVX01CT1hfU0laRVxcdFxcdFxcdDI1NlxcbiBcXG4gI2RlZmluZSBSRUdfTlBVX0xPQ0FMX1NSQU1cXHRcXHQweDBcXG4gXFxuQEAgLTE2MCwyMyArMTY2LDM0IEBAIHN0cnVjdCB3bGFuX21ib3hfZGF0YSB7XFxuIFxcdERFQ0xBUkVfRkxFWF9BUlJBWSh1OCwgZCk7XFxuIH07XFxuIFxcbi1zdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXFxuLVxcdFxcdFxcdCAgICAgICB2b2lkICpwLCBpbnQgc2l6ZSlcXG4rc3RhdGljIGludCBfX2Fpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXFxuK1xcdFxcdFxcdFxcdCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuLCB2b2lkICpyZXBseSxcXG4rXFx0XFx0XFx0XFx0IHUxNiByZXBseV9sZW4pXFxuIHtcXG4tXFx0dTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqL1xcbi1cXHR1MzIgdmFsLCBvZmZzZXQgPSBjb3JlIFxcdTAwM2NcXHUwMDNjIDQ7XFxuLVxcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XFxuK1xcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSBcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1swXTsgLyogRklYTUU6IGNvcmUgKi9cXG4rXFx0dTMyIHZhbCwgb2Zmc2V0ID0gMDtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdGRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUobnB1LVxcdTAwM2VkZXYsIHAsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTtcXG4tXFx0cmV0ID0gZG1hX21hcHBpbmdfZXJyb3IobnB1LVxcdTAwM2VkZXYsIGRtYV9hZGRyKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKGxlbiBcXHUwMDNlIEFJUk9IQV9OUFVfTUJPWF9TSVpFKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChyZXBseSBcXHUwMDI2XFx1MDAyNiByZXBseV9sZW4gXFx1MDAzZSBsZW4pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFpbGJveCBwYXlsb2FkcyBhcmUgYmlkaXJlY3Rpb25hbCAoQ1BVIHJlcXVlc3QsIE5QVSByZXNwb25zZSkuXFxuK1xcdCAqIE9uIEVONzU4MStNVDc5OTYsIHN0cmVhbWluZyBETUFfQklESVJFQ1RJT05BTCBhZ2FpbnN0IHRoZVxcbitcXHQgKiBjYWxsZXIga3phbGxvYygpIGJ1ZmZlciBjYW4gbGVhdmUgV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OXFxuK1xcdCAqIHJlYWRpbmcgYXMgMC4wIGRlc3BpdGUgTUJPWCBzdWNjZXNzLiBSZXVzZSBhIHByb2JlLXRpbWUgY29oZXJlbnRcXG4rXFx0ICogYm91bmNlIGJ1ZmZlciB1bmRlciB0aGUgcGVyLWNvcmUgbG9jayAoYWxzbyB1c2VkIGZyb20gUFBFXFxuK1xcdCAqIGZvZV9jb21taXQgdW5kZXIgYXRvbWljIGNvbnRleHQpLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjb3JlLVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcXG4rXFx0bWVtY3B5KGNvcmUtXFx1MDAzZWJ1ZiwgZGF0YSwgbGVuKTtcXG4gXFxuLVxcdHJlZ21hcF93cml0ZShucHUtXFx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgwKSArIG9mZnNldCwgZG1hX2FkZHIpO1xcbi1cXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgKyBvZmZzZXQsIHNpemUpO1xcbitcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgKyBvZmZzZXQsIGNvcmUtXFx1MDAzZWFkZHIpO1xcbitcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgKyBvZmZzZXQsIGxlbik7XFxuIFxcdHJlZ21hcF9yZWFkKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICsgb2Zmc2V0LCBcXHUwMDI2dmFsKTtcXG4gXFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICsgb2Zmc2V0LCB2YWwgKyAxKTtcXG4gXFx0dmFsID0gRklFTERfUFJFUChNQk9YX01TR19GVU5DX0lELCBmdW5jX2lkKSB8IE1CT1hfTVNHX1dBSVRfUlNQO1xcbkBAIC0xODksMTMgKzIwNiwyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXFxuIFxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IEZJRUxEX0dFVChNQk9YX01TR19TVEFUVVMsIHZhbCkgIT0gTlBVX01CT1hfU1VDQ0VTUylcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFxuLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZucHUtXFx1MDAzZWNvcmVzW2NvcmVdLmxvY2spO1xcbitcXHQvKiBDb3B5IHRoZSB0cmFpbGluZyByZXBseV9sZW4gYnl0ZXMgb2YgdGhlIHJlc3BvbnNlLiAqL1xcbitcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiByZXBseSlcXG4rXFx0XFx0bWVtY3B5KHJlcGx5LCBjb3JlLVxcdTAwM2VidWYgKyBsZW4gLSByZXBseV9sZW4sIHJlcGx5X2xlbik7XFxuIFxcbi1cXHRkbWFfdW5tYXBfc2luZ2xlKG5wdS1cXHUwMDNlZGV2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y29yZS1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXFxuK1xcdFxcdFxcdCAgICAgICB2b2lkICpkYXRhLCBpbnQgbGVuKVxcbit7XFxuK1xcdHJldHVybiBfX2Fpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBmdW5jX2lkLCBkYXRhLCBsZW4sIGRhdGEsIGxlbik7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICphZGRyLFxcbiBcXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciAqZndfbmFtZSwgaW50IGZ3X21heF9zaXplKVxcbiB7XFxuQEAgLTQ5Nyw5ICs1MjIsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxcbiBcXHR3bGFuX2RhdGEtXFx1MDAzZWZ1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7XFxuIFxcdHdsYW5fZGF0YS1cXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XFxuIFxcbi1cXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xcbi1cXHRpZiAoIWVycilcXG4tXFx0XFx0bWVtY3B5KGRhdGEsIHdsYW5fZGF0YS1cXHUwMDNlZCwgZGF0YV9sZW4pO1xcbitcXHRlcnIgPSBfX2Fpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbixcXG4rXFx0XFx0XFx0XFx0ICAgIGRhdGEsIGRhdGFfbGVuKTtcXG4gXFx0a2ZyZWUod2xhbl9kYXRhKTtcXG4gXFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTc3MCw2ICs3OTQsMTUgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShucHUtXFx1MDAzZWNvcmVzKTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSBcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tpXTtcXG4rXFxuK1xcdFxcdGNvcmUtXFx1MDAzZWJ1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNvcmUtXFx1MDAzZWFkZHIsIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIWNvcmUtXFx1MDAzZWJ1ZilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuIFxcdGVyciA9IGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlKGRldiwgYmFzZSwgXFx1MDAyNnJlcyk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcXFwiZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXFxcblxcXCIpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaCBiL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oXFxuaW5kZXggNzU4OWZjY2ZlZWY2ZC4uMTZhOTg4YWQ3NDY3YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oXFxuQEAgLTE3Myw2ICsxNzMsOSBAQCBzdHJ1Y3QgYWlyb2hhX25wdSB7XFxuIFxcdFxcdC8qIHByb3RlY3QgY29uY3VycmVudCBucHUgbWVtb3J5IGFjY2Vzc2VzICovXFxuIFxcdFxcdHNwaW5sb2NrX3QgbG9jaztcXG4gXFx0XFx0c3RydWN0IHdvcmtfc3RydWN0IHdkdF93b3JrO1xcbitcXHRcXHQvKiBDb2hlcmVudCBib3VuY2UgYnVmZmVyIGZvciBtYWlsYm94IGNtZC9yc3AgKi9cXG4rXFx0XFx0dm9pZCAqYnVmO1xcbitcXHRcXHRkbWFfYWRkcl90IGFkZHI7XFxuIFxcdH0gY29yZXNbTlBVX05VTV9DT1JFU107XFxuIFxcbiBcXHRpbnQgaXJxc1tOUFVfTlVNX0lSUV07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDE2OjE1OjU1LjgyMzM0NjIyOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQzNTEzMjMzOTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIE5QVSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTb0MgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2E1YmMxOWU5ZDYzMzQ0NzU5OWVkZDE0Y2E4ZjVkOWFmOGY4Nzg5OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDkgMTY6MTU6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xuaW5kZXggYjY3OWJlZDk1MmRlMy4uYzgzOWUwYTQxOWFhNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbkBAIC0yMyw2ICsyMywxMiBAQFxuICNkZWZpbmUgTlBVX0VONzU4MV9GSVJNV0FSRV9SVjMyX01BWF9TSVpFXHQweDIwMDAwMFxuICNkZWZpbmUgTlBVX0VONzU4MV9GSVJNV0FSRV9EQVRBX01BWF9TSVpFXHQweDEwMDAwXG4gI2RlZmluZSBOUFVfRFVNUF9TSVpFXHRcdFx0XHQ1MTJcbisvKlxuKyAqIE1haWxib3ggRE1BIHBheWxvYWQgc2l6ZS4gQ292ZXJzIHNpemVvZihzdHJ1Y3QgcHBlX21ib3hfZGF0YSkgKDI4KSBhbmRcbisgKiBXTEFOIFRMViBtZXNzYWdlcyAoaGVhZGVyICsgcGF5bG9hZCk7IGxhcmdlc3QgaW4tdHJlZSBXTEFOIHBheWxvYWQgdG9kYXlcbisgKiBpcyAxNiBieXRlcyAoSU5PREVfVFhSWF9SRUdfQUREUikuIEtlZXAgaGVhZHJvb20gZm9yIGZ1dHVyZSBjb21tYW5kcy5cbisgKi9cbisjZGVmaW5lIEFJUk9IQV9OUFVfTUJPWF9TSVpFXHRcdFx0MjU2XG4gXG4gI2RlZmluZSBSRUdfTlBVX0xPQ0FMX1NSQU1cdFx0MHgwXG4gXG5AQCAtMTYwLDIzICsxNjYsMzQgQEAgc3RydWN0IHdsYW5fbWJveF9kYXRhIHtcbiBcdERFQ0xBUkVfRkxFWF9BUlJBWSh1OCwgZCk7XG4gfTtcbiBcbi1zdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4tXHRcdFx0ICAgICAgIHZvaWQgKnAsIGludCBzaXplKVxuK3N0YXRpYyBpbnQgX19haXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuK1x0XHRcdFx0IGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4sIHZvaWQgKnJlcGx5LFxuK1x0XHRcdFx0IHUxNiByZXBseV9sZW4pXG4ge1xuLVx0dTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqL1xuLVx0dTMyIHZhbCwgb2Zmc2V0ID0gY29yZSBcdTAwM2NcdTAwM2MgNDtcbi1cdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4rXHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlID0gXHUwMDI2bnB1LVx1MDAzZWNvcmVzWzBdOyAvKiBGSVhNRTogY29yZSAqL1xuK1x0dTMyIHZhbCwgb2Zmc2V0ID0gMDtcbiBcdGludCByZXQ7XG4gXG4tXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS1cdTAwM2VkZXYsIHAsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTtcbi1cdHJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKG5wdS1cdTAwM2VkZXYsIGRtYV9hZGRyKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHRpZiAobGVuIFx1MDAzZSBBSVJPSEFfTlBVX01CT1hfU0laRSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAocmVwbHkgXHUwMDI2XHUwMDI2IHJlcGx5X2xlbiBcdTAwM2UgbGVuKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qXG4rXHQgKiBNYWlsYm94IHBheWxvYWRzIGFyZSBiaWRpcmVjdGlvbmFsIChDUFUgcmVxdWVzdCwgTlBVIHJlc3BvbnNlKS5cbitcdCAqIE9uIEVONzU4MStNVDc5OTYsIHN0cmVhbWluZyBETUFfQklESVJFQ1RJT05BTCBhZ2FpbnN0IHRoZVxuK1x0ICogY2FsbGVyIGt6YWxsb2MoKSBidWZmZXIgY2FuIGxlYXZlIFdMQU5fRlVOQ19HRVRfV0FJVF9OUFVfVkVSU0lPTlxuK1x0ICogcmVhZGluZyBhcyAwLjAgZGVzcGl0ZSBNQk9YIHN1Y2Nlc3MuIFJldXNlIGEgcHJvYmUtdGltZSBjb2hlcmVudFxuK1x0ICogYm91bmNlIGJ1ZmZlciB1bmRlciB0aGUgcGVyLWNvcmUgbG9jayAoYWxzbyB1c2VkIGZyb20gUFBFXG4rXHQgKiBmb2VfY29tbWl0IHVuZGVyIGF0b21pYyBjb250ZXh0KS5cbitcdCAqL1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmNvcmUtXHUwMDNlbG9jayk7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2NvcmVdLmxvY2spO1xuK1x0bWVtY3B5KGNvcmUtXHUwMDNlYnVmLCBkYXRhLCBsZW4pO1xuIFxuLVx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgKyBvZmZzZXQsIGRtYV9hZGRyKTtcbi1cdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICsgb2Zmc2V0LCBzaXplKTtcbitcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICsgb2Zmc2V0LCBjb3JlLVx1MDAzZWFkZHIpO1xuK1x0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgKyBvZmZzZXQsIGxlbik7XG4gXHRyZWdtYXBfcmVhZChucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICsgb2Zmc2V0LCBcdTAwMjZ2YWwpO1xuIFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgKyBvZmZzZXQsIHZhbCArIDEpO1xuIFx0dmFsID0gRklFTERfUFJFUChNQk9YX01TR19GVU5DX0lELCBmdW5jX2lkKSB8IE1CT1hfTVNHX1dBSVRfUlNQO1xuQEAgLTE4OSwxMyArMjA2LDIxIEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbiBcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBGSUVMRF9HRVQoTUJPWF9NU0dfU1RBVFVTLCB2YWwpICE9IE5QVV9NQk9YX1NVQ0NFU1MpXG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XG4rXHQvKiBDb3B5IHRoZSB0cmFpbGluZyByZXBseV9sZW4gYnl0ZXMgb2YgdGhlIHJlc3BvbnNlLiAqL1xuK1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHJlcGx5KVxuK1x0XHRtZW1jcHkocmVwbHksIGNvcmUtXHUwMDNlYnVmICsgbGVuIC0gcmVwbHlfbGVuLCByZXBseV9sZW4pO1xuIFxuLVx0ZG1hX3VubWFwX3NpbmdsZShucHUtXHUwMDNlZGV2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y29yZS1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbitcdFx0XHQgICAgICAgdm9pZCAqZGF0YSwgaW50IGxlbilcbit7XG4rXHRyZXR1cm4gX19haXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgZnVuY19pZCwgZGF0YSwgbGVuLCBkYXRhLCBsZW4pO1xuK31cbitcbiBzdGF0aWMgaW50IGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqYWRkcixcbiBcdFx0XHRcdCAgICBjb25zdCBjaGFyICpmd19uYW1lLCBpbnQgZndfbWF4X3NpemUpXG4ge1xuQEAgLTQ5Nyw5ICs1MjIsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxuIFx0d2xhbl9kYXRhLVx1MDAzZWZ1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7XG4gXHR3bGFuX2RhdGEtXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XG4gXG4tXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xuLVx0aWYgKCFlcnIpXG4tXHRcdG1lbWNweShkYXRhLCB3bGFuX2RhdGEtXHUwMDNlZCwgZGF0YV9sZW4pO1xuK1x0ZXJyID0gX19haXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4sXG4rXHRcdFx0XHQgICAgZGF0YSwgZGF0YV9sZW4pO1xuIFx0a2ZyZWUod2xhbl9kYXRhKTtcbiBcbiBcdHJldHVybiBlcnI7XG5AQCAtNzcwLDYgKzc5NCwxNSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cdTAwM2Vjb3Jlcyk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlID0gXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2ldO1xuK1xuK1x0XHRjb3JlLVx1MDAzZWJ1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSxcbitcdFx0XHRcdFx0XHRcdTAwMjZjb3JlLVx1MDAzZWFkZHIsIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIWNvcmUtXHUwMDNlYnVmKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuIFx0ZXJyID0gYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoZGV2LCBiYXNlLCBcdTAwMjZyZXMpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwiZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXG5cIik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmggYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxuaW5kZXggNzU4OWZjY2ZlZWY2ZC4uMTZhOTg4YWQ3NDY3YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxuQEAgLTE3Myw2ICsxNzMsOSBAQCBzdHJ1Y3QgYWlyb2hhX25wdSB7XG4gXHRcdC8qIHByb3RlY3QgY29uY3VycmVudCBucHUgbWVtb3J5IGFjY2Vzc2VzICovXG4gXHRcdHNwaW5sb2NrX3QgbG9jaztcbiBcdFx0c3RydWN0IHdvcmtfc3RydWN0IHdkdF93b3JrO1xuK1x0XHQvKiBDb2hlcmVudCBib3VuY2UgYnVmZmVyIGZvciBtYWlsYm94IGNtZC9yc3AgKi9cbitcdFx0dm9pZCAqYnVmO1xuK1x0XHRkbWFfYWRkcl90IGFkZHI7XG4gXHR9IGNvcmVzW05QVV9OVU1fQ09SRVNdO1xuIFxuIFx0aW50IGlycXNbTlBVX05VTV9JUlFdO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTY6MTU6NTUuODIzMzQ3NTE4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM4MzIzNDkzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFpcm9oYSBOUFUgTWFpbGJveCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jYC4gSXQgc2VlbXMgdGhleSd2ZSBzd2l0Y2hlZCB1cCB0aGUgbWVzc2FnZSBzZW5kaW5nIHByb2Nlc3MgdG8gdGhlIE5ldHdvcmsgUHJvY2Vzc2luZyBVbml0IChOUFUpIHZpYSB0aGUgbWFpbGJveC4gSW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgY2FsbGVyLXByb3ZpZGVkIGJ1ZmZlciBhbmQgYGRtYV9tYXBfc2luZ2xlYCB3aXRoIGBETUFfQklESVJFQ1RJT05BTGAsIHRoZXkncmUgbm93IGFsbG9jYXRpbmcgYSBjb2hlcmVudCBETUEgYnVmZmVyIGR1cmluZyB0aGUgZGV2aWNlIHByb2JlIHVzaW5nIGBkbWFtX2FsbG9jX2NvaGVyZW50YC4gVGhlbiwgdGhlIGRhdGEgaXMgY29waWVkIHRvIGFuZCBmcm9tIHRoYXQgY29oZXJlbnQgYnVmZmVyIGluIGBfX2Fpcm9oYV9ucHVfc2VuZF9tc2dgLiBJbnRlcmVzdGluZy5cblxuVGhlIG1vdGl2YXRpb24gaGVyZSBpcyBhIHN0cmVhbWluZyBETUEgcHJvYmxlbSBvbiBFTjc1ODEgd2l0aCBNVDc5OTYg4oCTIHdoZXJlIHRoZSBkYXRhIGdldHMgemVyb2VkIG91dCBldmVuIHRob3VnaCB0aGUgbWFpbGJveCBjb21tdW5pY2F0aW9uIGlzIHN1cHBvc2VkbHkgc3VjY2Vzc2Z1bC4gVGhhdCdzIGEgY2xhc3NpYyBETUEgY29oZXJlbmNlIGlzc3VlLCBzbyB0aGlzIGFwcHJvYWNoIG1ha2VzIHNlbnNlIGFzIGEgcG90ZW50aWFsIGZpeC4gSXQgYWxzbyBpbmRpY2F0ZXMgdGhleSB0aGluayB0aGlzIGlzIGEgcGxhdGZvcm0gc3BlY2lmaWMgcHJvYmxlbSwgYXMgaXQgZG9lcyBub3QgYWZmZWN0IGFsbCBwbGF0Zm9ybXMuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBob3cgcmVhY2hhYmxlIGlzIHRoaXMgY29kZSBwYXRoLCBhbmQgaXMgdGhpcyBjaGFuZ2Ugc29tZXRoaW5nIHdlIG1pZ2h0IHdhbnQgdG8gdGFyZ2V0IGZvciBmdXp6aW5nPyBMZXQncyBjaGVjayB0aGUgS2NvbmZpZyBhbmQgc2VlIGlmIHdlIGNhbiBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJlY29uZGl0aW9ucyBmb3IgdGhpcyBjb2RlIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxNjoxNjowNS4yMDY1ODUyMDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQyMzI5NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlyb2hhX25wdS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL01ha2VmaWxlPTg9YWlyb2hhLWV0aC0kKENPTkZJR19ERUJVR19GUykgKz0gYWlyb2hhX3BwZV9kZWJ1Z2ZzLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTkVUX0FJUk9IQV9OUFUpICs9IGFpcm9oYV9ucHUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxNjoxNjowNS4yNzA4MjM4ODNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzM0MjQxODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVjb2RpbmcgdGhlIGBDT05GSUdfTkVUX0FJUk9IQV9OUFVgIEZsYWcqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBDT05GSUdfTkVUX0FJUk9IQV9OUFVgIGRpcmVjdGl2ZS4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGludm9sdmVzIGEgY29uZmlndXJhdGlvbiBmbGFnIHJlbGF0ZWQgdG8sIHNwZWNpZmljYWxseSwgYW4gQWlyb2hhIE5ldHdvcmsgUHJvY2Vzc2luZyBVbml0LCBvciBOUFUuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG5hbWluZyBjb252ZW50aW9uOyB0aGUgXCJORVRcIiBzdWdnZXN0cyB0aGUgbmV0d29ya2luZyBjb250ZXh0LlxuXG5NeSBpbW1lZGlhdGUgZm9sbG93IHVwIHF1ZXN0aW9ucyB3b3VsZCBjZW50ZXIgYXJvdW5kOlxuXG4qICAgKipXaGF0IHNwZWNpZmljIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkPyoqIElzIHRoaXMgcmVsYXRlZCB0byBvZmZsb2FkaW5nIHBhY2tldCBwcm9jZXNzaW5nLCBoYXJkd2FyZSBhY2NlbGVyYXRpb24sIHNlY3VyaXR5IGZlYXR1cmVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQWlyb2hhIGlzIGEgZmFpcmx5IGxhcmdlIHBsYXllciBpbiB0aGUgU29DIHNwYWNlLCBzbyBJJ2QgbmVlZCB0byBuYXJyb3cgZG93biB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uLlxuKiAgICoqV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8qKiBEb2VzIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaGF2ZSBkb3duc3RyZWFtIGltcGFjdHMgb24gb3RoZXIgZHJpdmVycywgbW9kdWxlcywgb3IgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHM/IEknZCBjaGVjayBmb3IgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bGwgc2NvcGUuXG4qICAgKipXaGF0IGlzIHRoZSBkZWZhdWx0IHN0YXRlIGFuZCB3aHk/KiogSXMgdGhpcyBhIGRlZmF1bHQtZW5hYmxlZCBmZWF0dXJlIG9yIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIGV4cGxpY2l0IGFjdGl2YXRpb24/IEFuZCBpZiBpdCdzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIEkgd291bGQgYmUgdmVyeSBpbnRlcmVzdGVkIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBhbmQgcmVhc29ucyBmb3IgZGlzYWJsaW5nLlxuKiAgICoqV2hhdCB2ZXJzaW9uIG9mIHRoZSBBaXJvaGEgTlBVPyoqIFRoZXJlIGFyZSBzb21ldGltZXMgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgY2hpcHNldC4gVGhpcyBjYW4gZ3JlYXRseSBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUuXG4qICAgKipJcyB0aGlzIGEga2VybmVsLWxldmVsIGNvbmZpZ3VyYXRpb24/KiogT3IgaXMgdGhpcyB3aXRoaW4gYSB1c2VyLXNwYWNlIHV0aWxpdHkgdGhhdCdzIHJlbGF0ZWQgdG8gdGhlIE5QVT8gVGhpcyBoZWxwcyB3aXRoIHVuZGVyc3RhbmRpbmcgd2hhdCB0b29scyBhcmUgbmVlZGVkIHRvIGFjdHVhbGx5IGNvbmZpZ3VyZSBhbmQgdXNlIHRoaXMuXG5cbkVzc2VudGlhbGx5LCBzZWVpbmcgdGhpcyBmbGFnLCBteSB0aG91Z2h0IHByb2Nlc3MgaXMgYWxsIGFib3V0ICpjb250ZXh0Ki4gSSBuZWVkIG1vcmUgZGV0YWlscyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25maWd1cmF0aW9uIHNldHRpbmcgaW4gcmVsYXRpb24gdG8gdGhlIGJyb2FkZXIgbmV0d29yayBpbmZyYXN0cnVjdHVyZS4gSXQncyBhIHN0YXJ0aW5nIHBvaW50LCBidXQgYSBzdGFydGluZyBwb2ludCB0aGF0IHNwYXJrcyBhIHNlcmllcyBvZiB0YXJnZXRlZCBpbnF1aXJpZXMgYW5kIGludmVzdGlnYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDE4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTY6MTY6MTAuMDA1MDc0ODg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTYyMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQUlST0hBX05QVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnPTg9aWYgTkVUX1ZFTkRPUl9BSVJPSEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy05LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjEwOmNvbmZpZyBORVRfQUlST0hBX05QVVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgTlBVIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDE2OjE2OjEwLjA1MDI0NjU2NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzczODIxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB3aGF0IEknbSB0aGlua2luZyBhYm91dCwgcHJlc2VudGVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgRGVwZW5kZW5jaWVzIG9mIE5FVF9BSVJPSEFfTlBVKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0FJUk9IQV9OUFVgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aG9zZSBsaW5rYWdlcy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRoaW5rIGFib3V0IHRoZSBsYXllcnMgaW52b2x2ZWQuIFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBoYXJkd2FyZSBjb21wb25lbnRzIGRvZXMgaXQgcmVseSBvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IElzIGl0IGEgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIgKEhBTCkgZm9yIGEgc3BlY2lmaWMgTlBVPyBPciBwZXJoYXBzIGFuIGludGVybWVkaWFyeSBkcml2ZXI/IEkgbmVlZCB0byBrbm93IHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBzb2Z0d2FyZSBzdGFjay4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCBoYXMgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLCBhbmQgd2hhdCB0aG9zZSBhcmUuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhvc2UuIEFyZSB0aGVyZSBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcyBpbnZvbHZlZCwgb3IgbGlicmFyaWVzIHJlcXVpcmVkIHRvIGJlIGxvYWRlZD8gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nLCBwb3J0aW5nLCBvciBldmVuIGp1c3Qgb3B0aW1pemluZyB0aGUgc3lzdGVtLiBJdCB3aWxsIGFsc28gaGVscCBpZGVudGlmeSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uZmxpY3Qgd2l0aCBvdGhlciBzeXN0ZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDAxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTY6MTY6MTMuOTI3NjMxMzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXFxuICAgMzpcXHRcXHRib29sIFxcXCJBaXJvaGEgZGV2aWNlc1xcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIElmIHlvdSBoYXZlIGEgQWlyb2hhIFNvQyB3aXRoIGV0aGVybmV0LCBzYXkgWS5cXG4gICA3OlxcdFxcbiAgIDg6XFx0aWYgTkVUX1ZFTkRPUl9BSVJPSEFcXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIE5FVF9BSVJPSEFfTlBVXFxuICAxMTpcXHRcXHR0cmlzdGF0ZSBcXFwiQWlyb2hhIE5QVSBzdXBwb3J0XFxcIlxcbiAgMTI6XFx0XFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXFxuICAxMzpcXHRcXHRzZWxlY3QgUkVHTUFQX01NSU9cXG4gIDE0OlxcdFxcdGhlbHBcXG4gIDE1OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQWlyb2hhIE5ldHdvcmsgUHJvY2Vzc29yIChOUFUpIGF2YWlsYWJsZVxcbiAgMTY6XFx0XFx0ICBvbiB0aGUgQWlyb2hhIFNvYyBmYW1pbHkuXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNvbmZpZyBORVRfQUlST0hBXFxuICAxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiQWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuICAyMDpcXHRcXHRkZXBlbmRzIG9uIE5FVF9EU0EgfHwgIU5FVF9EU0FcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTY6MTY6MTMuOTI3Njg0M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MjUxMDk2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgTlBVIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUncyBkZXBlbmRlbmNpZXMgYXJlIGEgYml0IGNvbnZvbHV0ZWQg4oCTIGl0IGhpbmdlcyBvbiBgTkVUX1ZFTkRPUl9BSVJPSEFgLCB3aGljaCBpbiB0dXJuIHJlbGllcyBvbiBlaXRoZXIgYEFSQ0hfQUlST0hBYCBvciBgQ09NUElMRV9URVNUYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGNvZGUgcGF0aCAqZXZlbiogYmUgaGl0IHdoZW4gcnVubmluZyBpbiBRRU1VPyBJIGhhdmUgdG8gYmUgc3VyZSBpdCdzIHJlbGV2YW50IGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC5cblxuTGV0J3Mgc2VlLCBpdCdzIGFuIE5QVSBkcml2ZXIgKGBhaXJvaGFfbnB1LmNgKSBpbnRlbmRlZCBmb3IgQWlyb2hhIFNvQ3MuIEl0IHJlZ2lzdGVycyBpdHNlbGYgYXMgYSBwbGF0Zm9ybSBkcml2ZXIuIEFoLCBzbyB0aGlzIGlzIGxpa2VseSBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlciwgbWVhbmluZyBpdCBkZWFscyB3aXRoIHJlZ2lzdGVyIG1hcHBpbmcsIGZpcm13YXJlIGxvYWRpbmcsIGFuZCB0aGluZ3Mgb2YgdGhhdCBuYXR1cmUuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGNhbiB3ZSBldmVuICpmdXp6KiBpdD9cblxuSWYgaXQncyBhIHBsYXRmb3JtIGRyaXZlciwgc3l6a2FsbGVyIGNvdWxkLCB0aGVvcmV0aWNhbGx5LCBpbnN0YW50aWF0ZSBhIHBzZXVkby1kZXZpY2UgdXNpbmcgYHN5el9kZXZfY3JlYXRlYCBvciBzb21ldGhpbmcgc2ltaWxhciwgKmlmKiB0aGVyZSdzIGEgdHJpZ2dlci4gUGxhdGZvcm0gZGV2aWNlcyBhcmUgb2Z0ZW4gRGV2aWNlIFRyZWUgaW5zdGFudGlhdGVkLCBzbyB0aGF0J3Mgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlLiBTeXprYWxsZXIgaXMgcHJldHR5IHZlcnNhdGlsZSB0aG91Z2gsIHNvIGl0IG1pZ2h0IGJlIGFibGUgdG8gY3JlYXRlIHRoZSBEVCBub2RlIGlmIHN1cHBvcnRlZC4gQnV0IGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlcnMsIGxpa2UgTlBVcyBvciBFdGhlcm5ldCBNQUNzICpvbiogYSBzcGVjaWZpYyBTb0MsIHRoZXkncmUgdHlwaWNhbGx5IG5vdCBlYXNpbHkgZnV6emVkIHVubGVzcyB0aGV5IGV4cG9zZSBhIGdlbmVyaWMgaW50ZXJmYWNlIG9yIGlmIHdlIGNhbiBpbmplY3QgdGhlIHBsYXRmb3JtIGRldmljZS5cblxuSG9sZCBvbiBhIHNlY29uZCwgbGV0IG1lIHJlLXJlYWQgdGhlc2UgaW5zdHJ1Y3Rpb25zLi4uIEFoYSEgVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGludm9sdmVzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBHaXZlbiB3aGF0IEknbSBzZWVpbmcgdGhpcyBBaXJvaGEgTlBVIGRyaXZlciAqaXMqIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBhIHNwZWNpZmljIFNvQy4gSXQgc2VlbXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBleGFtcGxlIGRyaXZlcnMgbGlzdGVkLlxuXG5TbywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCBkb2VzIGl0IGV4cG9zZSAqYW55KiB1c2VyLXNwYWNlIGludGVyZmFjZXMgYXQgYWxsPyBPciBpcyBpdCBwdXJlbHkgYW4gaW50ZXJuYWwga2VybmVsIEFQST8gVGhhdCB3aWxsIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoeSBvZiBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxNjoxNjoyMS44NTI3OTYxNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkyODc1MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlyb2hhX25wdV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9NzA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByZWdtYXBfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MTc6c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04NDY9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4NDc6XFx0LnByb2JlID0gYWlyb2hhX25wdV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTg0OC1cXHQucmVtb3ZlID0gYWlyb2hhX25wdV9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDE2OjE2OjIxLjkzMjA4NjU3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTkxODUxOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYWlyb2hhX25wdV9wcm9iZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBXaGF0IGV4YWN0bHkgaXMgdGhpcyBwcm9iZSBkb2luZyB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0/IEknbSBhc3N1bWluZyBpdCdzIHJlbGF0ZWQgdG8gdGhlIEFJIGFjY2VsZXJhdGlvbiBoYXJkd2FyZSwgcHJvYmFibHkgYW4gTlBVLCBzaW5jZSB0aGF0J3Mgd2hhdCB0aGUgbmFtZSBzdWdnZXN0cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgb3ZlcmFsbCBkcml2ZXIgZnJhbWV3b3JrLiBJcyBpdCBpbml0aWFsaXppbmcgdGhlIGhhcmR3YXJlPyBSZWdpc3RlcmluZyBpbnRlcnJ1cHQgaGFuZGxlcnM/IFByb2JpbmcgZm9yIHRoZSBkZXZpY2UgYW5kIGl0cyBjYXBhYmlsaXRpZXM/IEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHByb2JlIGZhaWxzPyBEb2VzIGl0IGdyYWNlZnVsbHkgZmFsbGJhY2ssIG9yIGRvZXMgaXQgYnJpbmcgZG93biB0aGUgd2hvbGUgc3lzdGVtPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlIGlmIHRoaXMgcHJvYmUgZ29lcyBzaWRld2F5cy4gS25vd2luZyB0aGUgZGV0YWlscyB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIGludGVncmF0aW9uIGlzc3VlcyBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4gVGltZSB0byBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTkxLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTY6MTY6MjUuNTIzOTQxMjUxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcxNyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTc6XFx0c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIDcxODpcXHR7XFxuIDcxOTpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbiA3MjA6XFx0XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcXG4gNzIxOlxcdFxcdHN0cnVjdCByZXNvdXJjZSByZXM7XFxuIDcyMjpcXHRcXHR2b2lkIF9faW9tZW0gKmJhc2U7XFxuIDcyMzpcXHRcXHRpbnQgaSwgaXJxLCBlcnI7XFxuIDcyNDpcXHRcXHR1MzIgdmFsO1xcbiA3MjU6XFx0XFxuIDcyNjpcXHRcXHRiYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApO1xcbiA3Mjc6XFx0XFx0aWYgKElTX0VSUihiYXNlKSlcXG4gNzI4OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJhc2UpO1xcbiA3Mjk6XFx0XFxuIDczMDpcXHRcXHRucHUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm5wdSksIEdGUF9LRVJORUwpO1xcbiA3MzE6XFx0XFx0aWYgKCFucHUpXFxuIDczMjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNzMzOlxcdFxcbiA3MzQ6XFx0XFx0bnB1LVxcdTAwM2VkZXYgPSBkZXY7XFxuIDczNTpcXHRcXHRucHUtXFx1MDAzZW9wcy5wcGVfaW5pdCA9IGFpcm9oYV9ucHVfcHBlX2luaXQ7XFxuIDczNjpcXHRcXHRucHUtXFx1MDAzZW9wcy5wcGVfZGVpbml0ID0gYWlyb2hhX25wdV9wcGVfZGVpbml0O1xcbiA3Mzc6XFx0XFx0bnB1LVxcdTAwM2VvcHMucHBlX2luaXRfc3RhdHMgPSBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cDtcXG4gNzM4OlxcdFxcdG5wdS1cXHUwMDNlb3BzLnBwZV9mbHVzaF9zcmFtX2VudHJpZXMgPSBhaXJvaGFfbnB1X3BwZV9mbHVzaF9zcmFtX2VudHJpZXM7XFxuIDczOTpcXHRcXHRucHUtXFx1MDAzZW9wcy5wcGVfZm9lX2NvbW1pdF9lbnRyeSA9IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeTtcXG4gNzQwOlxcdFxcdG5wdS1cXHUwMDNlb3BzLndsYW5faW5pdF9yZXNlcnZlZF9tZW1vcnkgPSBhaXJvaGFfbnB1X3dsYW5faW5pdF9tZW1vcnk7XFxuIDc0MTpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX3NlbmRfbXNnID0gYWlyb2hhX25wdV93bGFuX21zZ19zZW5kO1xcbiA3NDI6XFx0XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9nZXRfbXNnID0gYWlyb2hhX25wdV93bGFuX21zZ19nZXQ7XFxuIDc0MzpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX2dldF9xdWV1ZV9hZGRyID0gYWlyb2hhX25wdV93bGFuX3F1ZXVlX2FkZHJfZ2V0O1xcbiA3NDQ6XFx0XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9zZXRfaXJxX3N0YXR1cyA9IGFpcm9oYV9ucHVfd2xhbl9pcnFfc3RhdHVzX3NldDtcXG4gNzQ1OlxcdFxcdG5wdS1cXHUwMDNlb3BzLndsYW5fZ2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19nZXQ7XFxuIDc0NjpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX2VuYWJsZV9pcnEgPSBhaXJvaGFfbnB1X3dsYW5faXJxX2VuYWJsZTtcXG4gNzQ3OlxcdFxcdG5wdS1cXHUwMDNlb3BzLndsYW5fZGlzYWJsZV9pcnEgPSBhaXJvaGFfbnB1X3dsYW5faXJxX2Rpc2FibGU7XFxuIDc0ODpcXHRcXG4gNzQ5OlxcdFxcdG5wdS1cXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKGRldiwgYmFzZSwgXFx1MDAyNnJlZ21hcF9jb25maWcpO1xcbiA3NTA6XFx0XFx0aWYgKElTX0VSUihucHUtXFx1MDAzZXJlZ21hcCkpXFxuIDc1MTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihucHUtXFx1MDAzZXJlZ21hcCk7XFxuIDc1MjpcXHRcXG4gNzUzOlxcdFxcdGVyciA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGV2LVxcdTAwM2VvZl9ub2RlLCAwLCBcXHUwMDI2cmVzKTtcXG4gNzU0OlxcdFxcdGlmIChlcnIpXFxuIDc1NTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3NTY6XFx0XFxuIDc1NzpcXHRcXHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApO1xcbiA3NTg6XFx0XFx0aWYgKGlycSBcXHUwMDNjIDApXFxuIDc1OTpcXHRcXHRcXHRyZXR1cm4gaXJxO1xcbiA3NjA6XFx0XFxuIDc2MTpcXHRcXHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBhaXJvaGFfbnB1X21ib3hfaGFuZGxlcixcXG4gNzYyOlxcdFxcdFxcdFxcdCAgICAgICBJUlFGX1NIQVJFRCwgXFxcImFpcm9oYS1ucHUtbWJveFxcXCIsIG5wdSk7XFxuIDc2MzpcXHRcXHRpZiAoZXJyKVxcbiA3NjQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzY1OlxcdFxcbiA3NjY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobnB1LVxcdTAwM2Vjb3Jlcyk7IGkrKykge1xcbiA3Njc6XFx0XFx0XFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFxcdTAwMjZucHUtXFx1MDAzZWNvcmVzW2ldO1xcbiA3Njg6XFx0XFxuIDc2OTpcXHRcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2Y29yZS1cXHUwMDNlbG9jayk7XFxuIDc3MDpcXHRcXHRcXHRjb3JlLVxcdTAwM2VucHUgPSBucHU7XFxuIDc3MTpcXHRcXG4gNzcyOlxcdFxcdFxcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSArIDEpO1xcbiA3NzM6XFx0XFx0XFx0aWYgKGlycSBcXHUwMDNjIDApXFxuIDc3NDpcXHRcXHRcXHRcXHRyZXR1cm4gaXJxO1xcbiA3NzU6XFx0XFxuIDc3NjpcXHRcXHRcXHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBhaXJvaGFfbnB1X3dkdF9oYW5kbGVyLFxcbiA3Nzc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIElSUUZfU0hBUkVELCBcXFwiYWlyb2hhLW5wdS13ZHRcXFwiLCBjb3JlKTtcXG4gNzc4OlxcdFxcdFxcdGlmIChlcnIpXFxuIDc3OTpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3ODA6XFx0XFxuIDc4MTpcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNmNvcmUtXFx1MDAzZXdkdF93b3JrLCBhaXJvaGFfbnB1X3dkdF93b3JrKTtcXG4gNzgyOlxcdFxcdH1cXG4gNzgzOlxcdFxcbiA3ODQ6XFx0XFx0Lyogd2xhbiBJUlEgbGluZXMgKi9cXG4gNzg1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cXHUwMDNlaXJxcyk7IGkrKykge1xcbiA3ODY6XFx0XFx0XFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpICsgQVJSQVlfU0laRShucHUtXFx1MDAzZWNvcmVzKSArIDEpO1xcbiA3ODc6XFx0XFx0XFx0aWYgKGlycSBcXHUwMDNjIDApXFxuIDc4ODpcXHRcXHRcXHRcXHRyZXR1cm4gaXJxO1xcbiA3ODk6XFx0XFxuIDc5MDpcXHRcXHRcXHRucHUtXFx1MDAzZWlycXNbaV0gPSBpcnE7XFxuIDc5MTpcXHRcXHR9XFxuIDc5MjpcXHRcXG4gNzkzOlxcdFxcdGVyciA9IGRtYV9zZXRfY29oZXJlbnRfbWFzayhkZXYsIERNQV9CSVRfTUFTSygzMikpO1xcbiA3OTQ6XFx0XFx0aWYgKGVycilcXG4gNzk1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDc5NjpcXHRcXG4gNzk3OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cXHUwMDNlY29yZXMpOyBpKyspIHtcXG4gNzk4OlxcdFxcdFxcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSBcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tpXTtcXG4gNzk5OlxcdFxcbiA4MDA6XFx0XFx0XFx0Y29yZS1cXHUwMDNlYnVmID0gZG1hbV9hbGxvY19jb2hlcmVudChkZXYsIEFJUk9IQV9OUFVfTUJPWF9TSVpFLFxcbiA4MDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNvcmUtXFx1MDAzZWFkZHIsIEdGUF9LRVJORUwpO1xcbiA4MDI6XFx0XFx0XFx0aWYgKCFjb3JlLVxcdTAwM2VidWYpXFxuIDgwMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODA0OlxcdFxcdH1cXG4gODA1OlxcdFxcbiA4MDY6XFx0XFx0ZXJyID0gYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoZGV2LCBiYXNlLCBcXHUwMDI2cmVzKTtcXG4gODA3OlxcdFxcdGlmIChlcnIpXFxuIDgwODpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXFxcImZhaWxlZCB0byBydW4gbnB1IGZpcm13YXJlXFxcXG5cXFwiKTtcXG4gODA5OlxcdFxcbiA4MTA6XFx0XFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMCksXFxuIDgxMTpcXHRcXHRcXHQgICAgIHJlcy5zdGFydCArIE5QVV9FTjc1ODFfRklSTVdBUkVfUlYzMl9NQVhfU0laRSk7XFxuIDgxMjpcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDExKSwgMHg0MDAwMCk7IC8qIFNSQU0gMjU2SyAqL1xcbiA4MTM6XFx0XFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMiksIDApO1xcbiA4MTQ6XFx0XFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigyMSksIDEpO1xcbiA4MTU6XFx0XFx0bXNsZWVwKDEwMCk7XFxuIDgxNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTY6MTY6MjUuNTI0MDU3MzQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5MzUzMDI4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgTlBVIERyaXZlciBhbmQgaXRzIEZlYXNpYmlsaXR5IGluIFFFTVUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgZHJpdmVyLCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgaXQncyBEZXZpY2UgVHJlZS1kZXBlbmRlbnQuIEl0J3MgdXNpbmcgYG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2VgIGFuZCBncmFiYmluZyBJUlFzIHdpdGggYHBsYXRmb3JtX2dldF9pcnFgLCB3aGljaCBtZWFucyB3ZSdyZSBmaXJtbHkgaW4gRFQgbGFuZC4gQW5kIGl0J3MgbG9hZGluZyBmaXJtd2FyZSB1c2luZyBgYWlyb2hhX25wdV9ydW5fZmlybXdhcmVgLCB3aGljaCwgSSdtIGFzc3VtaW5nLCBpcyB3cml0aW5nIGRpcmVjdGx5IHRvIHJlZ2lzdGVycyBhbmQgd2FpdGluZyBmb3IgdGhlIE5ldXJhbCBQcm9jZXNzaW5nIFVuaXQgdG8ga2ljayBvbi4gUmlnaHQsIHNvIHRoZSBxdWVzdGlvbiBpcywgY2FuIEkgZXZlbiAqdG91Y2gqIHRoaXMgdGhpbmcgaW4gUUVNVT9cblxuQmFzZWQgb24gdGhlIGluaXRpYWwgaW5mb3JtYXRpb24sIHByb2JhYmx5IG5vdCwgaXQgbG9va3MgbGlrZSBpdCBpcyBhIHZlcnkgc3BlY2lmaWMgU29DIGRyaXZlciwgdGhlIEFpcm9oYSBFTjc1ODEuIFFFTVUgZGVmaW5pdGVseSB3b3VsZG4ndCBoYXZlIGJ1aWx0LWluIGVtdWxhdGlvbiBmb3IgdGhhdCBwYXJ0aWN1bGFyIE5QVSBhcmNoaXRlY3R1cmUuXG5cbkJ1dCB0aGVuIGFnYWluLCBzeXprYWxsZXIgKmNvdWxkKiBwb3RlbnRpYWxseSBnZXQgdXMgdGhlcmUuIElmIHdlIGNvdWxkIGluamVjdCBhIHBsYXRmb3JtIGRldmljZSB1c2luZyBgc3l6X2Rldl9jcmVhdGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBtYXliZSB3ZSBjb3VsZCB0cmljayBpdC4gVGhlIGNhdGNoLCBvZiBjb3Vyc2UsIGlzIHRoYXQgd2UnZCBoYXZlIHRvIG1vY2sgdGhlIG1lbW9yeS1tYXBwZWQgSS9PLCB3aGljaCBpcyByYXJlbHkgZG9uZSBmb3IgcmFuZG9tIFNvQ3MgdW5sZXNzIHRoZXJlJ3MgYSBkZWRpY2F0ZWQgc3l6a2FsbGVyIGRlc2NyaXB0aW9uLiBcblxuU28gdGhlIG5leHQgc3RlcCBpcyBwcmV0dHkgb2J2aW91czogbGV0IG1lIGNoZWNrIGlmIHRoZXJlJ3MgKmFueSogc3l6a2FsbGVyIGRlc2NyaXB0aW9uLCBhIGRlZGljYXRlZCBvbmUsIGZvciB0aGlzIGRyaXZlci4gVGhhdCB3b3VsZCBiZSB0aGUgc2lsdmVyIGJ1bGxldCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzQ4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTY6MTY6MzEuNDU5MzYyMzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODIzNzYxNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlyb2hhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInN5cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDE2OjE2OjMxLjkzNzYwNjkzNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzk4OTUwMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFpcm9oYSBOUFUgRHJpdmVyIC0gTm90IEZ1enphYmxlIHdpdGggQ3VycmVudCBSZXNvdXJjZXMqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIE5vIGV4aXN0aW5nIHN5emthbGxlciBkZXNjcmlwdGlvbiBmb3IgQWlyb2hhLCB3aGljaCBpc24ndCBhIGdyZWF0IHNpZ24gdG8gYmVnaW4gd2l0aC4gVGhlbiwgSSByZW1lbWJlciB0aGUgaW5zdHJ1Y3Rpb246IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIlxuXG5BaCwgcmlnaHQuIFRoaXMgQWlyb2hhIE5QVSBkcml2ZXIgKmRlZmluaXRlbHkqIGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gSXTigJlzIGEgdmVuZG9yLXNwZWNpZmljIE5QVSBkcml2ZXIsIGFuZCB0aG9zZSB0aGluZ3MgYWx3YXlzIG5lZWQgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBvciB2ZXJ5IHNwZWNpZmljIFNvQyBlbXVsYXRpb24sIHdoaWNoIHdlICpkb24ndCogaGF2ZSBpbiBhIHR5cGljYWwgUUVNVSBzZXR1cCwgb3IsIEknbSBhc3N1bWluZywgc29tZXRoaW5nIGxpa2UgR0NFLiBUaHVzLCBpdCBpcyBub3QgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gXG5cblRoZXJlZm9yZSwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCBpdCdzIGEgbm8tZ28gZm9yIGZ1enppbmcgcmlnaHQgbm93LiBJ4oCZbSBtYXJraW5nIHRoaXMgYXMgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyODUsIk91dHB1dFRva2VucyI6OTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTY6MTY6MzkuMzM2NTU5NjAzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBOUFUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgTlBVIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYyksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxNjoxNjozOS4zMzY1ODIyMTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowstdg7[1] Phase: Running StartedAt: 2026-08-09 16:16:50 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowstdg7[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-09 16:16:50 +0000 UTC FinishedAt: 2026-08-09 16:16:54 +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,}