Name: series-workflowblt4p Phase: Failed StartedAt: 2026-08-20 17:59:01 +0000 UTC FinishedAt: 2026-08-20 18:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblt4p[0] Phase: Succeeded StartedAt: 2026-08-20 17:59:01 +0000 UTC FinishedAt: 2026-08-20 18:20:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblt4p[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 17:59:01 +0000 UTC FinishedAt: 2026-08-20 18:20:44 +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+CgkJCTx0ZD4yMDI2LzA4LzIwIDE4OjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8gYnkgbWlncmF0aW5nIGFuIGV4aXN0aW5nIHRlc3QgdG8gdGhlIHRlc3RfcHJvZ3MgZnJhbWV3b3JrLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTg6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MDgwNDI3MTliMTU1OWUyNTk5YWQ0OGNiNDgyMDc5MTI0ZThiM2M5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTg6MjA6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5pbmRleCAyYjJmOTNkZWM0NzRiLi5mOGVjMGY1NzQ1NTlhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbkBAIC0xMjMsNyAmIzQzOzEyMyw2IEBAIFRFU1RfRklMRVMgPSB4c2tfcHJlcmVxcy5zaCAkKHdpbGRjYXJkIHByb2dzL2J0Zl9kdW1wX3Rlc3RfY2FzZV8qLmMpXG4gXG4gIyBPcmRlciBjb3JyZXNwb25kIHRvICYjMzk7bWFrZSBydW5fdGVzdHMmIzM5OyBvcmRlclxuIFRFU1RfUFJPR1MgOj0gdGVzdF9rbW9kLnNoIFxcXG4tXHR0ZXN0X2xpcmNfbW9kZTIuc2ggXFxcbiBcdHRlc3RfYnBmdG9vbF9idWlsZC5zaCBcXFxuIFx0dGVzdF9kb2NfYnVpbGQuc2ggXFxcbiBcdHRlc3RfeHNrLnNoIFxcXG5AQCAtMTQxLDcgJiM0MzsxNDAsNiBAQCBURVNUX0dFTl9QUk9HU19FWFRFTkRFRCA9IFxcXG4gXHRiZW5jaCBcXFxuIFx0Zmxvd19kaXNzZWN0b3JfbG9hZCBcXFxuIFx0dGVzdF9jcHAgXFxcbi1cdHRlc3RfbGlyY19tb2RlMl91c2VyIFxcXG4gXHR2ZXJpc3RhdCBcXFxuIFx0eGRwX2ZlYXR1cmVzIFxcXG4gXHR4ZHBfaHdfbWV0YWRhdGEgXFxcbkBAIC0zMzgsNyAmIzQzOzMzNiw2IEBAICQoT1VUUFVUKS90ZXN0X3NvY2ttYXA6ICQoQ0dST1VQX0hFTFBFUlMpICQoVEVTVElOR19IRUxQRVJTKVxuICQoT1VUUFVUKS90ZXN0X3RjcG5vdGlmeV91c2VyOiAkKENHUk9VUF9IRUxQRVJTKSAkKFRFU1RJTkdfSEVMUEVSUykgJChUUkFDRV9IRUxQRVJTKVxuICQoT1VUUFVUKS90ZXN0X3NvY2tfZmllbGRzOiAkKENHUk9VUF9IRUxQRVJTKSAkKFRFU1RJTkdfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF90YWc6ICQoVEVTVElOR19IRUxQRVJTKVxuLSQoT1VUUFVUKS90ZXN0X2xpcmNfbW9kZTJfdXNlcjogJChURVNUSU5HX0hFTFBFUlMpXG4gJChPVVRQVVQpL2Zsb3dfZGlzc2VjdG9yX2xvYWQ6ICQoVEVTVElOR19IRUxQRVJTKVxuICQoT1VUUFVUKS90ZXN0X21hcHM6ICQoVEVTVElOR19IRUxQRVJTKVxuICQoT1VUUFVUKS90ZXN0X3ZlcmlmaWVyOiAkKFRFU1RJTkdfSEVMUEVSUykgJChDQVBfSEVMUEVSUykgJChVTlBSSVZfSEVMUEVSUylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saXJjX21vZGUyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saXJjX21vZGUyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xN2EzOGNkMDM4NDVjXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saXJjX21vZGUyLmNcbkBAIC0wLDAgJiM0MzsxLDMyOCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvLyB0ZXN0IGlyIGRlY29kZXJcbiYjNDM7Ly9cbiYjNDM7Ly8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgXHUwMDNjc2VhbkBtZXNzLm9yZ1x1MDAzZVxuJiM0MztcbiYjNDM7Ly8gQSBsaXJjIGNoYXJkZXYgaXMgYSBkZXZpY2UgcmVwcmVzZW50aW5nIGEgY29uc3VtZXIgSVIgKGNpcikgZGV2aWNlIHdoaWNoXG4mIzQzOy8vIGNhbiByZWNlaXZlIGluZnJhcmVkIHNpZ25hbHMgZnJvbSByZW1vdGUgY29udHJvbCBhbmQvb3IgdHJhbnNtaXQgSVIuXG4mIzQzOy8vXG4mIzQzOy8vIElSIGlzIHNlbnQgYXMgYSBzZXJpZXMgb2YgcHVsc2VzIGFuZCBzcGFjZSBzb21ld2hhdCBsaWtlIG1vcnNlIGNvZGUuIFRoZVxuJiM0MzsvLyBCUEYgcHJvZ3JhbSBjYW4gZGVjb2RlIHRoaXMgaW50byBzY2FuY29kZXMgc28gdGhhdCByYy1jb3JlIGNhbiB0cmFuc2xhdGVcbiYjNDM7Ly8gdGhpcyBpbnRvIGlucHV0IGtleSBjb2RlcyB1c2luZyB0aGUgcmMga2V5bWFwLlxuJiM0MzsvL1xuJiM0MzsvLyBUaGlzIHRlc3Qgd29ya3MgYnkgc2VuZGluZyBJUiBvdmVyIHJjLWxvb3BiYWNrLCBzbyB0aGUgSVIgaXMgcHJvY2Vzc2VkIGJ5XG4mIzQzOy8vIEJQRiBhbmQgdGhlbiBkZWNvZGVkIGludG8gc2NhbmNvZGVzLiBUaGUgbGlyYyBjaGFyZGV2IG11c3QgYmUgdGhlIG9uZVxuJiM0MzsvLyBhc3NvY2lhdGVkIHdpdGggcmMtbG9vcGJhY2ssIHNlZSB0aGUgb3V0cHV0IG9mIGlyLWtleXRhYmxlKDEpLlxuJiM0MzsvL1xuJiM0MzsvLyBUaGUgZm9sbG93aW5nIENPTkZJRyBvcHRpb25zIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhlIHRlc3QgdG8gc3VjY2VlZDpcbiYjNDM7Ly8gQ09ORklHX1JDX0NPUkU9eVxuJiM0MzsvLyBDT05GSUdfQlBGX1JBV0lSX0VWRU5UPXlcbiYjNDM7Ly8gQ09ORklHX1JDX0xPT1BCQUNLPXlcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lucHV0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGlyYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2dsb2IuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2xpcmNfbW9kZTIuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiBSZWFkIHRoZSBERVZOQU1FPSBsaW5lIG91dCBvZiB0aGUgZmlyc3QgdWV2ZW50IGZpbGUgdGhhdCBtYXRjaGVzXG4mIzQzOyAqIHBhdHRlcm4sIGFuZCB0dXJuIGl0IGludG8gYSAvZGV2L1x1MDAzY25hbWVcdTAwM2UgcGF0aC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGZpbmRfZGV2bmFtZShjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9zeilcbiYjNDM7e1xuJiM0MztcdGdsb2JfdCBnbCA9IHt9O1xuJiM0MztcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiYjNDM7XHRGSUxFICpmO1xuJiM0MztcbiYjNDM7XHRpZiAoZ2xvYihwYXR0ZXJuLCAwLCBOVUxMLCBcdTAwMjZnbCkgfHwgZ2wuZ2xfcGF0aGMgPT0gMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRmID0gZm9wZW4oZ2wuZ2xfcGF0aHZbMF0sIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRjaGFyIGxpbmVbMjU2XTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHtcbiYjNDM7XHRcdGNoYXIgKnZhbDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RybmNtcChsaW5lLCBcJiMzNDtERVZOQU1FPVwmIzM0OywgOCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHZhbCA9IGxpbmUgJiM0MzsgODtcbiYjNDM7XHRcdHZhbFtzdHJjc3BuKHZhbCwgXCYjMzQ7XFxuXCYjMzQ7KV0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdFx0c25wcmludGYocGF0aCwgcGF0aF9zeiwgXCYjMzQ7L2Rldi8lc1wmIzM0OywgdmFsKTtcbiYjNDM7XHRcdGZvdW5kID0gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZmNsb3NlKGYpO1xuJiM0MztvdXQ6XG4mIzQzO1x0Z2xvYmZyZWUoXHUwMDI2Z2wpO1xuJiM0MztcdHJldHVybiBmb3VuZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTG9hZCByYy1sb29wYmFjayBhbmQgZmluZCB0aGUgbGlyYyBhbmQgaW5wdXQgY2hhcmRldnMgaXQgY3JlYXRlZC4gKi9cbiYjNDM7c3RhdGljIGJvb2wgZmluZF9sb29wYmFja19kZXZpY2VzKGNoYXIgKmxpcmNfcGF0aCwgY2hhciAqaW5wdXRfcGF0aCxcbiYjNDM7XHRcdFx0XHQgIHNpemVfdCBwYXRoX3N6KVxuJiM0Mzt7XG4mIzQzO1x0Z2xvYl90IGdsID0ge307XG4mIzQzO1x0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBJZ25vcmUgZmFpbHVyZSwgd2UgY2hlY2sgZm9yIHRoZSByZXN1bHRpbmcgZGV2aWNlcyBiZWxvdy4gKi9cbiYjNDM7XHRzeXN0ZW0oXCYjMzQ7bW9kcHJvYmUgcmMtbG9vcGJhY2sgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChnbG9iKFwmIzM0Oy9zeXMvY2xhc3MvcmMvcmMqXCYjMzQ7LCAwLCBOVUxMLCBcdTAwMjZnbCkpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtObyByYyBkZXZpY2VzIGZvdW5kLCBpcyBDT05GSUdfUkNfTE9PUEJBQ0sgZW5hYmxlZD9cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIGdsLmdsX3BhdGhjOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqcmNkaXIgPSBnbC5nbF9wYXRodltpXTtcbiYjNDM7XHRcdGNoYXIgdWV2ZW50X3BhdGhbUEFUSF9NQVhdO1xuJiM0MztcdFx0Y2hhciB1ZXZlbnRbNDA5Nl07XG4mIzQzO1x0XHRjaGFyIHBhdHRlcm5bUEFUSF9NQVhdO1xuJiM0MztcdFx0RklMRSAqZjtcbiYjNDM7XHRcdHNpemVfdCBuO1xuJiM0MztcbiYjNDM7XHRcdHNucHJpbnRmKHVldmVudF9wYXRoLCBzaXplb2YodWV2ZW50X3BhdGgpLCBcJiMzNDslcy91ZXZlbnRcJiMzNDssIHJjZGlyKTtcbiYjNDM7XHRcdGYgPSBmb3Blbih1ZXZlbnRfcGF0aCwgXCYjMzQ7clwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoIWYpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0biA9IGZyZWFkKHVldmVudCwgMSwgc2l6ZW9mKHVldmVudCkgLSAxLCBmKTtcbiYjNDM7XHRcdGZjbG9zZShmKTtcbiYjNDM7XHRcdHVldmVudFtuXSA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzdHJzdHIodWV2ZW50LCBcJiMzNDtEUlZfTkFNRT1yYy1sb29wYmFja1wmIzM0OykpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNucHJpbnRmKHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSwgXCYjMzQ7JXMvbGlyYyovdWV2ZW50XCYjMzQ7LCByY2Rpcik7XG4mIzQzO1x0XHRpZiAoIWZpbmRfZGV2bmFtZShwYXR0ZXJuLCBsaXJjX3BhdGgsIHBhdGhfc3opKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzbnByaW50ZihwYXR0ZXJuLCBzaXplb2YocGF0dGVybiksIFwmIzM0OyVzL2lucHV0Ki9ldmVudCovdWV2ZW50XCYjMzQ7LCByY2Rpcik7XG4mIzQzO1x0XHRpZiAoIWZpbmRfZGV2bmFtZShwYXR0ZXJuLCBpbnB1dF9wYXRoLCBwYXRoX3N6KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Zm91bmQgPSB0cnVlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRnbG9iZnJlZShcdTAwMjZnbCk7XG4mIzQzO1x0cmV0dXJuIGZvdW5kO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3RfbGlyY19tb2RlMih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBsaXJjX3BhdGhbUEFUSF9NQVhdLCBpbnB1dF9wYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHRpbnQgbGlyY2ZkID0gLTEsIGlucHV0ZmQgPSAtMSwgcHJvZ2ZkLCBwcm9nZmQyID0gLTE7XG4mIzQzO1x0c3RydWN0IGxpcmNfbW9kZTIgKnNrZWwgPSBOVUxMLCAqc2tlbDIgPSBOVUxMO1xuJiM0MztcdF9fdTMyIHByb2dfaWRzWzEwXSwgcHJvZ19mbGFnc1sxMF0sIHByb2dfY250O1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm87XG4mIzQzO1x0X191MzIgaW5mb19sZW4sIHByb2dfaWQsIHByb2dfaWQyO1xuJiM0MztcdGludCB0ZXN0aXIxID0gMHg4ZWFkO1x0Lyoga2V5ZG93biBmbGFnICgweDgwMDApIHwgc2NhbmNvZGUgMHhlYWQgKi9cbiYjNDM7XHRpbnQgdGVzdGlyMiA9IDB4NDA4MTtcdC8qIHBvaW50ZXJfcmVsIGZsYWcgKDB4NDAwMCkgfCByZWxfeD0xIHwgcmVsX3k9MSAqL1xuJiM0MztcdHN0cnVjdCBpbnB1dF9ldmVudCBldmVudDtcbiYjNDM7XHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHt9O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChnZXR1aWQoKSAhPSAwKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWZpbmRfbG9vcGJhY2tfZGV2aWNlcyhsaXJjX3BhdGgsIGlucHV0X3BhdGgsIHNpemVvZihsaXJjX3BhdGgpKSkge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7bGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHByb2dmZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmJwZl9kZWNvZGVyKTtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG4mIzQzO1x0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQocHJvZ2ZkLCBcdTAwMjZpbmZvLCBcdTAwMjZpbmZvX2xlbik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtnZXQgZmlyc3QgcHJvZ3JhbSYjMzk7cyBpbmZvXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdHByb2dfaWQgPSBpbmZvLmlkO1xuJiM0MztcbiYjNDM7XHRsaXJjZmQgPSBvcGVuKGxpcmNfcGF0aCwgT19SRFdSIHwgT19OT05CTE9DSyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UobGlyY2ZkLCAwLCBcJiMzNDtvcGVuIGxpcmMgZGV2aWNlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBUcnkgdG8gZGV0YWNoIGl0IGJlZm9yZSBpdCB3YXMgZXZlciBhdHRhY2hlZCwgc2hvdWxkIGZhaWwuICovXG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHJldCwgLUVOT0VOVCwgXCYjMzQ7ZGV0YWNoIHVuYXR0YWNoZWQgcHJvZ3JhbVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aW5wdXRmZCA9IG9wZW4oaW5wdXRfcGF0aCwgT19SRE9OTFkgfCBPX05PTkJMT0NLKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShpbnB1dGZkLCAwLCBcJiMzNDtvcGVuIGlucHV0IGRldmljZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtxdWVyeSBwcm9ncmFtcyBiZWZvcmUgYXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAwLCBcJiMzNDtubyBwcm9ncmFtcyBzaG91bGQgYmUgYXR0YWNoZWQgeWV0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBJbnZhbGlkIGF0dGFjaCBmbGFncyBtdXN0IGJlIHJlamVjdGVkLCBhbmQgbXVzdCBub3QgYXR0YWNoLiAqL1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX2F0dGFjaChwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDEpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHJldCwgLUVJTlZBTCwgXCYjMzQ7YXR0YWNoIHdpdGggaW52YWxpZCBmbGFnc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtxdWVyeSBwcm9ncmFtcyBhZnRlciByZWplY3RlZCBhdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDAsIFwmIzM0O3JlamVjdGVkIGF0dGFjaCBzaG91bGQgbm90IGF0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDthdHRhY2ggcHJvZ3JhbSB0byBsaXJjIGRldmljZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogSW52YWxpZCBxdWVyeSBmbGFncyBtdXN0IGJlIHJlamVjdGVkIHRvbywgd2l0aG91dCB1cHNldHRpbmcgc3RhdGUuICovXG4mIzQzO1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAxLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgLUVJTlZBTCwgXCYjMzQ7cXVlcnkgd2l0aCBpbnZhbGlkIGZsYWdzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtxdWVyeSBwcm9ncmFtcyBhZnRlciBhdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAxLCBcJiMzNDtvbmUgcHJvZ3JhbSBzaG91bGQgYmUgYXR0YWNoZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcdEFTU0VSVF9FUShwcm9nX2lkc1swXSwgcHJvZ19pZCwgXCYjMzQ7cXVlcmllZCBpZCBzaG91bGQgbWF0Y2ggYXR0YWNoZWQgcHJvZ3JhbVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFdyaXRlIHJhdyBJUiAqL1xuJiM0MztcdHJldCA9IHdyaXRlKGxpcmNmZCwgXHUwMDI2dGVzdGlyMSwgc2l6ZW9mKHRlc3RpcjEpKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZih0ZXN0aXIxKSwgXCYjMzQ7c2VuZCB0ZXN0IElSIG1lc3NhZ2UgMVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1xuJiM0MztcdHBmZC5mZCA9IGlucHV0ZmQ7XG4mIzQzO1x0cGZkLmV2ZW50cyA9IFBPTExJTjtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0cG9sbChcdTAwMjZwZmQsIDEsIDEwMCk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVhZCBkZWNvZGVkIElSICovXG4mIzQzO1x0XHRyZXQgPSByZWFkKGlucHV0ZmQsIFx1MDAyNmV2ZW50LCBzaXplb2YoZXZlbnQpKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKGV2ZW50KSwgXCYjMzQ7cmVhZCBkZWNvZGVkIElSIDFcJiMzNDspKVxuJiM0MztcdFx0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfTVNDIFx1MDAyNlx1MDAyNiBldmVudC5jb2RlID09IE1TQ19TQ0FOIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGV2ZW50LnZhbHVlID09IDB4ZWFkKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFdyaXRlIHJhdyBJUiAqL1xuJiM0MztcdHJldCA9IHdyaXRlKGxpcmNmZCwgXHUwMDI2dGVzdGlyMiwgc2l6ZW9mKHRlc3RpcjIpKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZih0ZXN0aXIyKSwgXCYjMzQ7c2VuZCB0ZXN0IElSIG1lc3NhZ2UgMlwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1xuJiM0MztcdGZvciAoOzspIHtcbiYjNDM7XHRcdHBvbGwoXHUwMDI2cGZkLCAxLCAxMDApO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJlYWQgZGVjb2RlZCBJUiAqL1xuJiM0MztcdFx0cmV0ID0gcmVhZChpbnB1dGZkLCBcdTAwMjZldmVudCwgc2l6ZW9mKGV2ZW50KSk7XG4mIzQzO1x0XHRpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZihldmVudCksIFwmIzM0O3JlYWQgZGVjb2RlZCBJUiAyXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcbiYjNDM7XHRcdGlmIChldmVudC50eXBlID09IEVWX1JFTCBcdTAwMjZcdTAwMjYgZXZlbnQuY29kZSA9PSBSRUxfWSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBldmVudC52YWx1ZSA9PSAxKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4mIzQzO1x0XHRcdCAgICAgXHUwMDI2cHJvZ19jbnQpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHJldCwgXCYjMzQ7cXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgSVIgd2FzIGRlY29kZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAxLCBcJiMzNDtvbmUgcHJvZ3JhbSBzaG91bGQgc3RpbGwgYmUgYXR0YWNoZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBsaXJjIGNoYXJkZXYgY2FuIGhvbGQgbW9yZSB0aGFuIG9uZSBhdHRhY2hlZCBwcm9ncmFtIGF0IG9uY2UuXG4mIzQzO1x0ICogTG9hZCBhIHNlY29uZCwgaW5kZXBlbmRlbnQgaW5zdGFuY2UgYW5kIGNoZWNrIGl0IGNhbiBiZSBhdHRhY2hlZFxuJiM0MztcdCAqIGFsb25nc2lkZSB0aGUgZmlyc3QsIHF1ZXJpZWQsIGFuZCB0aGVuIGRldGFjaGVkIG9uIGl0cyBvd25cbiYjNDM7XHQgKiB3aXRob3V0IGRpc3R1cmJpbmcgdGhlIGZpcnN0IHByb2dyYW0mIzM5O3MgYXR0YWNobWVudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRza2VsMiA9IGxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbDIsIFwmIzM0O2xpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQgKDJuZClcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcbiYjNDM7XHRwcm9nZmQyID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwyLVx1MDAzZXByb2dzLmJwZl9kZWNvZGVyKTtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG4mIzQzO1x0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQocHJvZ2ZkMiwgXHUwMDI2aW5mbywgXHUwMDI2aW5mb19sZW4pO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHJldCwgXCYjMzQ7Z2V0IHNlY29uZCBwcm9ncmFtJiMzOTtzIGluZm9cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcdHByb2dfaWQyID0gaW5mby5pZDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHJldCwgXCYjMzQ7YXR0YWNoIHNlY29uZCBwcm9ncmFtIHRvIGxpcmMgZGV2aWNlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2RldGFjaDtcbiYjNDM7XG4mIzQzO1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtxdWVyeSBwcm9ncmFtcyBhZnRlciBzZWNvbmQgYXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2RldGFjaDI7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDIsIFwmIzM0O3R3byBwcm9ncmFtcyBzaG91bGQgYmUgYXR0YWNoZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoMjtcbiYjNDM7XHRBU1NFUlRfVFJVRSgocHJvZ19pZHNbMF0gPT0gcHJvZ19pZCBcdTAwMjZcdTAwMjYgcHJvZ19pZHNbMV0gPT0gcHJvZ19pZDIpIHx8XG4mIzQzO1x0XHQgICAgKHByb2dfaWRzWzBdID09IHByb2dfaWQyIFx1MDAyNlx1MDAyNiBwcm9nX2lkc1sxXSA9PSBwcm9nX2lkKSxcbiYjNDM7XHRcdCAgICBcJiMzNDtxdWVyaWVkIGlkcyBzaG91bGQgYmUgdGhlIHR3byBhdHRhY2hlZCBwcm9ncmFtc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIERldGFjaCB0aGUgc2Vjb25kIHByb2dyYW07IHRoZSBmaXJzdCBzaG91bGQgcmVtYWluIGF0dGFjaGVkLiAqL1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtkZXRhY2ggc2Vjb25kIHByb2dyYW1cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoMjtcbiYjNDM7XG4mIzQzO1x0LyogRGV0YWNoaW5nIGFuIGFscmVhZHktZGV0YWNoZWQgcHJvZ3JhbSBzaG91bGQgbm93IGZhaWwuICovXG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCBcJiMzNDtkZXRhY2ggc2Vjb25kIHByb2dyYW0gYWdhaW5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O3F1ZXJ5IHByb2dyYW1zIGFmdGVyIHNlY29uZCBkZXRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAxLCBcJiMzNDtvbmUgcHJvZ3JhbSBzaG91bGQgcmVtYWluIGF0dGFjaGVkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2RldGFjaDtcbiYjNDM7XHRBU1NFUlRfRVEocHJvZ19pZHNbMF0sIHByb2dfaWQsIFwmIzM0O3JlbWFpbmluZyBwcm9ncmFtIHNob3VsZCBiZSB0aGUgZmlyc3Qgb25lXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dF9kZXRhY2g6XG4mIzQzO1x0LyogTGV0JiMzOTtzIHRyeSBkZXRhY2hpbmcgaXQgbm93IGl0IGlzIGFjdHVhbGx5IGF0dGFjaGVkLiAqL1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcbiYjNDM7XHRBU1NFUlRfT0socmV0LCBcJiMzNDtkZXRhY2ggcHJvZ3JhbSBmcm9tIGxpcmMgZGV2aWNlXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogRGV0YWNoaW5nIGl0IGFnYWluIHNob3VsZCBub3cgZmFpbCB0aGUgc2FtZSB3YXkuICovXG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIC1FTk9FTlQsIFwmIzM0O2RldGFjaCBwcm9ncmFtIGZyb20gbGlyYyBkZXZpY2UgYWdhaW5cJiMzNDspO1xuJiM0MztcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7b3V0X2RldGFjaDI6XG4mIzQzO1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cCBvZiB0aGUgc2Vjb25kIHByb2dyYW0gYmVmb3JlIGJhaWxpbmcgb3V0LiAqL1xuJiM0MztcdGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4mIzQzO1x0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChpbnB1dGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGlucHV0ZmQpO1xuJiM0MztcdGlmIChsaXJjZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UobGlyY2ZkKTtcbiYjNDM7XHRsaXJjX21vZGUyX19kZXN0cm95KHNrZWwyKTtcbiYjNDM7XHRsaXJjX21vZGUyX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45ODEzN2YzYzVjMDNkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbGlyY19tb2RlMi5jXG5AQCAtMCwwICYjNDM7MSwzMiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvLyB0ZXN0IGlyIGRlY29kZXJcbiYjNDM7Ly9cbiYjNDM7Ly8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgXHUwMDNjc2VhbkBtZXNzLm9yZ1x1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGlyYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bGlyY19tb2RlMlwmIzM0OylcbiYjNDM7aW50IGJwZl9kZWNvZGVyKHVuc2lnbmVkIGludCAqc2FtcGxlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKExJUkNfSVNfUFVMU0UoKnNhbXBsZSkpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBkdXJhdGlvbiA9IExJUkNfVkFMVUUoKnNhbXBsZSk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEZsYWcgYml0cyBwaWNrZWQgZGVsaWJlcmF0ZWx5IGxvdzogcmMtbG9vcGJhY2sgc2ltdWxhdGVzXG4mIzQzO1x0XHQgKiBhIHJlY2VpdmVyIG92ZXJmbG93IGZvciBhbnkgcHVsc2Ugb3ZlciBNU19UT19VUyg1MCkgKHNlZVxuJiM0MztcdFx0ICogbG9vcF90eF9pcigpIGluIHJjLWxvb3BiYWNrLmMpLCB3aGljaCB3b3VsZCBzaWxlbnRseVxuJiM0MztcdFx0ICogc3dhbGxvdyB0aGUgc2FtcGxlIGJlZm9yZSBpdCBldmVyIHJlYWNoZXMgdGhpcyBkZWNvZGVyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoZHVyYXRpb24gXHUwMDI2IDB4ODAwMClcbiYjNDM7XHRcdFx0YnBmX3JjX2tleWRvd24oc2FtcGxlLCAweDQwLCBkdXJhdGlvbiBcdTAwMjYgMHgzZmZmLCAwKTtcbiYjNDM7XHRcdGlmIChkdXJhdGlvbiBcdTAwMjYgMHg0MDAwKVxuJiM0MztcdFx0XHRicGZfcmNfcG9pbnRlcl9yZWwoc2FtcGxlLCAoZHVyYXRpb24gXHUwMDNlXHUwMDNlIDcpIFx1MDAyNiAweDdmLFxuJiM0MztcdFx0XHRcdFx0ICAgZHVyYXRpb24gXHUwMDI2IDB4N2YpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbGlyY19tb2RlMl9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uY1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBjYmU0Mjg0YzAzMmZlLi4wMDAwMDAwMDAwMDAwXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uY1xuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsMjYgJiM0MzswLDAgQEBcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuLS8vIHRlc3QgaXIgZGVjb2RlclxuLS8vXG4tLy8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgXHUwMDNjc2VhbkBtZXNzLm9yZ1x1MDAzZVxuLVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbGlyYy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2Vcbi1cbi1TRUMoXCYjMzQ7bGlyY19tb2RlMlwmIzM0Oylcbi1pbnQgYnBmX2RlY29kZXIodW5zaWduZWQgaW50ICpzYW1wbGUpXG4te1xuLVx0aWYgKExJUkNfSVNfUFVMU0UoKnNhbXBsZSkpIHtcbi1cdFx0dW5zaWduZWQgaW50IGR1cmF0aW9uID0gTElSQ19WQUxVRSgqc2FtcGxlKTtcbi1cbi1cdFx0aWYgKGR1cmF0aW9uIFx1MDAyNiAweDEwMDApXG4tXHRcdFx0YnBmX3JjX2tleWRvd24oc2FtcGxlLCAweDQwLCBkdXJhdGlvbiBcdTAwMjYgMHhmZmZmLCAwKTtcbi1cdFx0aWYgKGR1cmF0aW9uIFx1MDAyNiAweDIwMDApXG4tXHRcdFx0YnBmX3JjX3BvaW50ZXJfcmVsKHNhbXBsZSwgKGR1cmF0aW9uIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZixcbi1cdFx0XHRcdFx0ICAgZHVyYXRpb24gXHUwMDI2IDB4ZmYpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLWNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTIuc2hcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggNTI1MmI5MWY0OGExOC4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMi5zaFxuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsNDEgJiM0MzswLDAgQEBcbi0jIS9iaW4vYmFzaFxuLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbi1cbi0jIEtzZWxmdGVzdCBmcmFtZXdvcmsgcmVxdWlyZW1lbnQgLSBTS0lQIGNvZGUgaXMgNC5cbi1rc2Z0X3NraXA9NFxuLXJldD0ka3NmdF9za2lwXG4tXG4tbXNnPVwmIzM0O3NraXAgYWxsIHRlc3RzOlwmIzM0O1xuLWlmIFsgJFVJRCAhPSAwIF07IHRoZW5cbi1cdGVjaG8gJG1zZyBwbGVhc2UgcnVuIHRoaXMgYXMgcm9vdCBcdTAwM2VcdTAwMjYyXG4tXHRleGl0ICRrc2Z0X3NraXBcbi1maVxuLVxuLUdSRUVOPSYjMzk7XFwwMzNbMDs5Mm0mIzM5O1xuLVJFRD0mIzM5O1xcMDMzWzA7MzFtJiMzOTtcbi1OQz0mIzM5O1xcMDMzWzBtJiMzOTsgIyBObyBDb2xvclxuLVxuLW1vZHByb2JlIHJjLWxvb3BiYWNrXG4tXG4tZm9yIGkgaW4gL3N5cy9jbGFzcy9yYy9yYypcbi1kb1xuLVx0aWYgZ3JlcCAtcSBEUlZfTkFNRT1yYy1sb29wYmFjayAkaS91ZXZlbnRcbi1cdHRoZW5cbi1cdFx0TElSQ0RFVj0kKGdyZXAgREVWTkFNRT0gJGkvbGlyYyovdWV2ZW50IHwgc2VkIHNRREVWTkFNRT1RL2Rldi9RKVxuLVx0XHRJTlBVVERFVj0kKGdyZXAgREVWTkFNRT0gJGkvaW5wdXQqL2V2ZW50Ki91ZXZlbnQgfCBzZWQgc1FERVZOQU1FPVEvZGV2L1EpXG4tXHRmaVxuLWRvbmVcbi1cbi1pZiBbIC1uIFwmIzM0OyRMSVJDREVWXCYjMzQ7IF07XG4tdGhlblxuLVx0VFlQRT1saXJjX21vZGUyXG4tXHQuL3Rlc3RfbGlyY19tb2RlMl91c2VyICRMSVJDREVWICRJTlBVVERFVlxuLVx0cmV0PSQ/XG4tXHRpZiBbICRyZXQgLW5lIDAgXTsgdGhlblxuLVx0XHRlY2hvIC1lICR7UkVEfVwmIzM0O0ZBSUw6ICRUWVBFXCYjMzQ7JHtOQ31cbi1cdGVsc2Vcbi1cdFx0ZWNobyAtZSAke0dSRUVOfVwmIzM0O1BBU1M6ICRUWVBFXCYjMzQ7JHtOQ31cbi1cdGZpXG4tZmlcbi1cbi1leGl0ICRyZXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxODoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8gYnkgbWlncmF0aW5nIGFuIGV4aXN0aW5nIHRlc3QgdG8gdGhlIHRlc3RfcHJvZ3MgZnJhbWV3b3JrLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MDgwNDI3MTliMTU1OWUyNTk5YWQ0OGNiNDgyMDc5MTI0ZThiM2M5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMTg6MjA6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKaW5kZXggMmIyZjkzZGVjNDc0Yi4uZjhlYzBmNTc0NTU5YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQpAQCAtMTIzLDcgJiM0MzsxMjMsNiBAQCBURVNUX0ZJTEVTID0geHNrX3ByZXJlcXMuc2ggJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKQogCiAjIE9yZGVyIGNvcnJlc3BvbmQgdG8gJiMzOTttYWtlIHJ1bl90ZXN0cyYjMzk7IG9yZGVyCiBURVNUX1BST0dTIDo9IHRlc3Rfa21vZC5zaCBcCi0JdGVzdF9saXJjX21vZGUyLnNoIFwKIAl0ZXN0X2JwZnRvb2xfYnVpbGQuc2ggXAogCXRlc3RfZG9jX2J1aWxkLnNoIFwKIAl0ZXN0X3hzay5zaCBcCkBAIC0xNDEsNyAmIzQzOzE0MCw2IEBAIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEID0gXAogCWJlbmNoIFwKIAlmbG93X2Rpc3NlY3Rvcl9sb2FkIFwKIAl0ZXN0X2NwcCBcCi0JdGVzdF9saXJjX21vZGUyX3VzZXIgXAogCXZlcmlzdGF0IFwKIAl4ZHBfZmVhdHVyZXMgXAogCXhkcF9od19tZXRhZGF0YSBcCkBAIC0zMzgsNyAmIzQzOzMzNiw2IEBAICQoT1VUUFVUKS90ZXN0X3NvY2ttYXA6ICQoQ0dST1VQX0hFTFBFUlMpICQoVEVTVElOR19IRUxQRVJTKQogJChPVVRQVVQpL3Rlc3RfdGNwbm90aWZ5X3VzZXI6ICQoQ0dST1VQX0hFTFBFUlMpICQoVEVTVElOR19IRUxQRVJTKSAkKFRSQUNFX0hFTFBFUlMpCiAkKE9VVFBVVCkvdGVzdF9zb2NrX2ZpZWxkczogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpCiAkKE9VVFBVVCkvdGVzdF90YWc6ICQoVEVTVElOR19IRUxQRVJTKQotJChPVVRQVVQpL3Rlc3RfbGlyY19tb2RlMl91c2VyOiAkKFRFU1RJTkdfSEVMUEVSUykKICQoT1VUUFVUKS9mbG93X2Rpc3NlY3Rvcl9sb2FkOiAkKFRFU1RJTkdfSEVMUEVSUykKICQoT1VUUFVUKS90ZXN0X21hcHM6ICQoVEVTVElOR19IRUxQRVJTKQogJChPVVRQVVQpL3Rlc3RfdmVyaWZpZXI6ICQoVEVTVElOR19IRUxQRVJTKSAkKENBUF9IRUxQRVJTKSAkKFVOUFJJVl9IRUxQRVJTKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjE3YTM4Y2QwMzg0NWMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saXJjX21vZGUyLmMKQEAgLTAsMCAmIzQzOzEsMzI4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvLyB0ZXN0IGlyIGRlY29kZXIKJiM0MzsvLwomIzQzOy8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nICZsdDtzZWFuQG1lc3Mub3JnJmd0OwomIzQzOwomIzQzOy8vIEEgbGlyYyBjaGFyZGV2IGlzIGEgZGV2aWNlIHJlcHJlc2VudGluZyBhIGNvbnN1bWVyIElSIChjaXIpIGRldmljZSB3aGljaAomIzQzOy8vIGNhbiByZWNlaXZlIGluZnJhcmVkIHNpZ25hbHMgZnJvbSByZW1vdGUgY29udHJvbCBhbmQvb3IgdHJhbnNtaXQgSVIuCiYjNDM7Ly8KJiM0MzsvLyBJUiBpcyBzZW50IGFzIGEgc2VyaWVzIG9mIHB1bHNlcyBhbmQgc3BhY2Ugc29tZXdoYXQgbGlrZSBtb3JzZSBjb2RlLiBUaGUKJiM0MzsvLyBCUEYgcHJvZ3JhbSBjYW4gZGVjb2RlIHRoaXMgaW50byBzY2FuY29kZXMgc28gdGhhdCByYy1jb3JlIGNhbiB0cmFuc2xhdGUKJiM0MzsvLyB0aGlzIGludG8gaW5wdXQga2V5IGNvZGVzIHVzaW5nIHRoZSByYyBrZXltYXAuCiYjNDM7Ly8KJiM0MzsvLyBUaGlzIHRlc3Qgd29ya3MgYnkgc2VuZGluZyBJUiBvdmVyIHJjLWxvb3BiYWNrLCBzbyB0aGUgSVIgaXMgcHJvY2Vzc2VkIGJ5CiYjNDM7Ly8gQlBGIGFuZCB0aGVuIGRlY29kZWQgaW50byBzY2FuY29kZXMuIFRoZSBsaXJjIGNoYXJkZXYgbXVzdCBiZSB0aGUgb25lCiYjNDM7Ly8gYXNzb2NpYXRlZCB3aXRoIHJjLWxvb3BiYWNrLCBzZWUgdGhlIG91dHB1dCBvZiBpci1rZXl0YWJsZSgxKS4KJiM0MzsvLwomIzQzOy8vIFRoZSBmb2xsb3dpbmcgQ09ORklHIG9wdGlvbnMgbXVzdCBiZSBlbmFibGVkIGZvciB0aGUgdGVzdCB0byBzdWNjZWVkOgomIzQzOy8vIENPTkZJR19SQ19DT1JFPXkKJiM0MzsvLyBDT05GSUdfQlBGX1JBV0lSX0VWRU5UPXkKJiM0MzsvLyBDT05GSUdfUkNfTE9PUEJBQ0s9eQomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbnB1dC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXJjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2dsb2IuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGltaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7bGlyY19tb2RlMi5za2VsLmgmIzM0OwomIzQzOwomIzQzOy8qIFJlYWQgdGhlIERFVk5BTUU9IGxpbmUgb3V0IG9mIHRoZSBmaXJzdCB1ZXZlbnQgZmlsZSB0aGF0IG1hdGNoZXMKJiM0MzsgKiBwYXR0ZXJuLCBhbmQgdHVybiBpdCBpbnRvIGEgL2Rldi8mbHQ7bmFtZSZndDsgcGF0aC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBmaW5kX2Rldm5hbWUoY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfc3opCiYjNDM7ewomIzQzOwlnbG9iX3QgZ2wgPSB7fTsKJiM0MzsJYm9vbCBmb3VuZCA9IGZhbHNlOwomIzQzOwlGSUxFICpmOwomIzQzOwomIzQzOwlpZiAoZ2xvYihwYXR0ZXJuLCAwLCBOVUxMLCAmYW1wO2dsKSB8fCBnbC5nbF9wYXRoYyA9PSAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWYgPSBmb3BlbihnbC5nbF9wYXRodlswXSwgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIWYpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJY2hhciBsaW5lWzI1Nl07CiYjNDM7CiYjNDM7CXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7CiYjNDM7CQljaGFyICp2YWw7CiYjNDM7CiYjNDM7CQlpZiAoc3RybmNtcChsaW5lLCAmIzM0O0RFVk5BTUU9JiMzNDssIDgpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJdmFsID0gbGluZSAmIzQzOyA4OwomIzQzOwkJdmFsW3N0cmNzcG4odmFsLCAmIzM0O1xuJiMzNDspXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXNucHJpbnRmKHBhdGgsIHBhdGhfc3osICYjMzQ7L2Rldi8lcyYjMzQ7LCB2YWwpOwomIzQzOwkJZm91bmQgPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZmNsb3NlKGYpOwomIzQzO291dDoKJiM0MzsJZ2xvYmZyZWUoJmFtcDtnbCk7CiYjNDM7CXJldHVybiBmb3VuZDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTG9hZCByYy1sb29wYmFjayBhbmQgZmluZCB0aGUgbGlyYyBhbmQgaW5wdXQgY2hhcmRldnMgaXQgY3JlYXRlZC4gKi8KJiM0MztzdGF0aWMgYm9vbCBmaW5kX2xvb3BiYWNrX2RldmljZXMoY2hhciAqbGlyY19wYXRoLCBjaGFyICppbnB1dF9wYXRoLAomIzQzOwkJCQkgIHNpemVfdCBwYXRoX3N6KQomIzQzO3sKJiM0MzsJZ2xvYl90IGdsID0ge307CiYjNDM7CWJvb2wgZm91bmQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJLyogSWdub3JlIGZhaWx1cmUsIHdlIGNoZWNrIGZvciB0aGUgcmVzdWx0aW5nIGRldmljZXMgYmVsb3cuICovCiYjNDM7CXN5c3RlbSgmIzM0O21vZHByb2JlIHJjLWxvb3BiYWNrICZndDsgL2Rldi9udWxsIDImZ3Q7JmFtcDsxJiMzNDspOwomIzQzOwomIzQzOwlpZiAoZ2xvYigmIzM0Oy9zeXMvY2xhc3MvcmMvcmMqJiMzNDssIDAsIE5VTEwsICZhbXA7Z2wpKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtObyByYyBkZXZpY2VzIGZvdW5kLCBpcyBDT05GSUdfUkNfTE9PUEJBQ0sgZW5hYmxlZD9cbiYjMzQ7KTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHNpemVfdCBpID0gMDsgaSAmbHQ7IGdsLmdsX3BhdGhjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3QgY2hhciAqcmNkaXIgPSBnbC5nbF9wYXRodltpXTsKJiM0MzsJCWNoYXIgdWV2ZW50X3BhdGhbUEFUSF9NQVhdOwomIzQzOwkJY2hhciB1ZXZlbnRbNDA5Nl07CiYjNDM7CQljaGFyIHBhdHRlcm5bUEFUSF9NQVhdOwomIzQzOwkJRklMRSAqZjsKJiM0MzsJCXNpemVfdCBuOwomIzQzOwomIzQzOwkJc25wcmludGYodWV2ZW50X3BhdGgsIHNpemVvZih1ZXZlbnRfcGF0aCksICYjMzQ7JXMvdWV2ZW50JiMzNDssIHJjZGlyKTsKJiM0MzsJCWYgPSBmb3Blbih1ZXZlbnRfcGF0aCwgJiMzNDtyJiMzNDspOwomIzQzOwkJaWYgKCFmKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJbiA9IGZyZWFkKHVldmVudCwgMSwgc2l6ZW9mKHVldmVudCkgLSAxLCBmKTsKJiM0MzsJCWZjbG9zZShmKTsKJiM0MzsJCXVldmVudFtuXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsKJiM0MzsJCWlmICghc3Ryc3RyKHVldmVudCwgJiMzNDtEUlZfTkFNRT1yYy1sb29wYmFjayYjMzQ7KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXNucHJpbnRmKHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSwgJiMzNDslcy9saXJjKi91ZXZlbnQmIzM0OywgcmNkaXIpOwomIzQzOwkJaWYgKCFmaW5kX2Rldm5hbWUocGF0dGVybiwgbGlyY19wYXRoLCBwYXRoX3N6KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXNucHJpbnRmKHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSwgJiMzNDslcy9pbnB1dCovZXZlbnQqL3VldmVudCYjMzQ7LCByY2Rpcik7CiYjNDM7CQlpZiAoIWZpbmRfZGV2bmFtZShwYXR0ZXJuLCBpbnB1dF9wYXRoLCBwYXRoX3N6KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWdsb2JmcmVlKCZhbXA7Z2wpOwomIzQzOwlyZXR1cm4gZm91bmQ7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9saXJjX21vZGUyKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIGxpcmNfcGF0aFtQQVRIX01BWF0sIGlucHV0X3BhdGhbUEFUSF9NQVhdOwomIzQzOwlpbnQgbGlyY2ZkID0gLTEsIGlucHV0ZmQgPSAtMSwgcHJvZ2ZkLCBwcm9nZmQyID0gLTE7CiYjNDM7CXN0cnVjdCBsaXJjX21vZGUyICpza2VsID0gTlVMTCwgKnNrZWwyID0gTlVMTDsKJiM0MzsJX191MzIgcHJvZ19pZHNbMTBdLCBwcm9nX2ZsYWdzWzEwXSwgcHJvZ19jbnQ7CiYjNDM7CXN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm87CiYjNDM7CV9fdTMyIGluZm9fbGVuLCBwcm9nX2lkLCBwcm9nX2lkMjsKJiM0MzsJaW50IHRlc3RpcjEgPSAweDhlYWQ7CS8qIGtleWRvd24gZmxhZyAoMHg4MDAwKSB8IHNjYW5jb2RlIDB4ZWFkICovCiYjNDM7CWludCB0ZXN0aXIyID0gMHg0MDgxOwkvKiBwb2ludGVyX3JlbCBmbGFnICgweDQwMDApIHwgcmVsX3g9MSB8IHJlbF95PTEgKi8KJiM0MzsJc3RydWN0IGlucHV0X2V2ZW50IGV2ZW50OwomIzQzOwlzdHJ1Y3QgcG9sbGZkIHBmZCA9IHt9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoZ2V0dWlkKCkgIT0gMCkgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZmluZF9sb29wYmFja19kZXZpY2VzKGxpcmNfcGF0aCwgaW5wdXRfcGF0aCwgc2l6ZW9mKGxpcmNfcGF0aCkpKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tlbCA9IGxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7bGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcHJvZ2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmJwZl9kZWNvZGVyKTsKJiM0MzsKJiM0MzsJbWVtc2V0KCZhbXA7aW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKJiM0MzsJaW5mb19sZW4gPSBzaXplb2YoaW5mbyk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHByb2dmZCwgJmFtcDtpbmZvLCAmYW1wO2luZm9fbGVuKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2dldCBmaXJzdCBwcm9ncmFtJiMzOTtzIGluZm8mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJcHJvZ19pZCA9IGluZm8uaWQ7CiYjNDM7CiYjNDM7CWxpcmNmZCA9IG9wZW4obGlyY19wYXRoLCBPX1JEV1IgfCBPX05PTkJMT0NLKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UobGlyY2ZkLCAwLCAmIzM0O29wZW4gbGlyYyBkZXZpY2UmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogVHJ5IHRvIGRldGFjaCBpdCBiZWZvcmUgaXQgd2FzIGV2ZXIgYXR0YWNoZWQsIHNob3VsZCBmYWlsLiAqLwomIzQzOwlyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7CiYjNDM7CWlmICghQVNTRVJUX0VRKHJldCwgLUVOT0VOVCwgJiMzNDtkZXRhY2ggdW5hdHRhY2hlZCBwcm9ncmFtJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlucHV0ZmQgPSBvcGVuKGlucHV0X3BhdGgsIE9fUkRPTkxZIHwgT19OT05CTE9DSyk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGlucHV0ZmQsIDAsICYjMzQ7b3BlbiBpbnB1dCBkZXZpY2UmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsCiYjNDM7CQkJICAgICAmYW1wO3Byb2dfY250KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O3F1ZXJ5IHByb2dyYW1zIGJlZm9yZSBhdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDAsICYjMzQ7bm8gcHJvZ3JhbXMgc2hvdWxkIGJlIGF0dGFjaGVkIHlldCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBJbnZhbGlkIGF0dGFjaCBmbGFncyBtdXN0IGJlIHJlamVjdGVkLCBhbmQgbXVzdCBub3QgYXR0YWNoLiAqLwomIzQzOwlyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAxKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEocmV0LCAtRUlOVkFMLCAmIzM0O2F0dGFjaCB3aXRoIGludmFsaWQgZmxhZ3MmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsCiYjNDM7CQkJICAgICAmYW1wO3Byb2dfY250KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O3F1ZXJ5IHByb2dyYW1zIGFmdGVyIHJlamVjdGVkIGF0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMCwgJiMzNDtyZWplY3RlZCBhdHRhY2ggc2hvdWxkIG5vdCBhdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCk7CiYjNDM7CWlmICghQVNTRVJUX09LKHJldCwgJiMzNDthdHRhY2ggcHJvZ3JhbSB0byBsaXJjIGRldmljZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBJbnZhbGlkIHF1ZXJ5IGZsYWdzIG11c3QgYmUgcmVqZWN0ZWQgdG9vLCB3aXRob3V0IHVwc2V0dGluZyBzdGF0ZS4gKi8KJiM0MzsJcHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMSwgcHJvZ19mbGFncywgcHJvZ19pZHMsCiYjNDM7CQkJICAgICAmYW1wO3Byb2dfY250KTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgLUVJTlZBTCwgJiMzNDtxdWVyeSB3aXRoIGludmFsaWQgZmxhZ3MmIzM0Oyk7CiYjNDM7CiYjNDM7CXByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLAomIzQzOwkJCSAgICAgJmFtcDtwcm9nX2NudCk7CiYjNDM7CWlmICghQVNTRVJUX09LKHJldCwgJiMzNDtxdWVyeSBwcm9ncmFtcyBhZnRlciBhdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CWlmICghQVNTRVJUX0VRKHByb2dfY250LCAxLCAmIzM0O29uZSBwcm9ncmFtIHNob3VsZCBiZSBhdHRhY2hlZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDsKJiM0MzsJQVNTRVJUX0VRKHByb2dfaWRzWzBdLCBwcm9nX2lkLCAmIzM0O3F1ZXJpZWQgaWQgc2hvdWxkIG1hdGNoIGF0dGFjaGVkIHByb2dyYW0mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFdyaXRlIHJhdyBJUiAqLwomIzQzOwlyZXQgPSB3cml0ZShsaXJjZmQsICZhbXA7dGVzdGlyMSwgc2l6ZW9mKHRlc3RpcjEpKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEocmV0LCBzaXplb2YodGVzdGlyMSksICYjMzQ7c2VuZCB0ZXN0IElSIG1lc3NhZ2UgMSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDsKJiM0MzsKJiM0MzsJcGZkLmZkID0gaW5wdXRmZDsKJiM0MzsJcGZkLmV2ZW50cyA9IFBPTExJTjsKJiM0MzsKJiM0MzsJZm9yICg7OykgewomIzQzOwkJcG9sbCgmYW1wO3BmZCwgMSwgMTAwKTsKJiM0MzsKJiM0MzsJCS8qIFJlYWQgZGVjb2RlZCBJUiAqLwomIzQzOwkJcmV0ID0gcmVhZChpbnB1dGZkLCAmYW1wO2V2ZW50LCBzaXplb2YoZXZlbnQpKTsKJiM0MzsJCWlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKGV2ZW50KSwgJiMzNDtyZWFkIGRlY29kZWQgSVIgMSYjMzQ7KSkKJiM0MzsJCQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CiYjNDM7CQlpZiAoZXZlbnQudHlwZSA9PSBFVl9NU0MgJmFtcDsmYW1wOyBldmVudC5jb2RlID09IE1TQ19TQ0FOICZhbXA7JmFtcDsKJiM0MzsJCSAgICBldmVudC52YWx1ZSA9PSAweGVhZCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBXcml0ZSByYXcgSVIgKi8KJiM0MzsJcmV0ID0gd3JpdGUobGlyY2ZkLCAmYW1wO3Rlc3RpcjIsIHNpemVvZih0ZXN0aXIyKSk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKHRlc3RpcjIpLCAmIzM0O3NlbmQgdGVzdCBJUiBtZXNzYWdlIDImIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCXBvbGwoJmFtcDtwZmQsIDEsIDEwMCk7CiYjNDM7CiYjNDM7CQkvKiBSZWFkIGRlY29kZWQgSVIgKi8KJiM0MzsJCXJldCA9IHJlYWQoaW5wdXRmZCwgJmFtcDtldmVudCwgc2l6ZW9mKGV2ZW50KSk7CiYjNDM7CQlpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZihldmVudCksICYjMzQ7cmVhZCBkZWNvZGVkIElSIDImIzM0OykpCiYjNDM7CQkJZ290byBvdXRfZGV0YWNoOwomIzQzOwomIzQzOwkJaWYgKGV2ZW50LnR5cGUgPT0gRVZfUkVMICZhbXA7JmFtcDsgZXZlbnQuY29kZSA9PSBSRUxfWSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZXZlbnQudmFsdWUgPT0gMSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpOwomIzQzOwlyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcywKJiM0MzsJCQkgICAgICZhbXA7cHJvZ19jbnQpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7cXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgSVIgd2FzIGRlY29kZWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CWlmICghQVNTRVJUX0VRKHByb2dfY250LCAxLCAmIzM0O29uZSBwcm9ncmFtIHNob3VsZCBzdGlsbCBiZSBhdHRhY2hlZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGxpcmMgY2hhcmRldiBjYW4gaG9sZCBtb3JlIHRoYW4gb25lIGF0dGFjaGVkIHByb2dyYW0gYXQgb25jZS4KJiM0MzsJICogTG9hZCBhIHNlY29uZCwgaW5kZXBlbmRlbnQgaW5zdGFuY2UgYW5kIGNoZWNrIGl0IGNhbiBiZSBhdHRhY2hlZAomIzQzOwkgKiBhbG9uZ3NpZGUgdGhlIGZpcnN0LCBxdWVyaWVkLCBhbmQgdGhlbiBkZXRhY2hlZCBvbiBpdHMgb3duCiYjNDM7CSAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgZmlyc3QgcHJvZ3JhbSYjMzk7cyBhdHRhY2htZW50LgomIzQzOwkgKi8KJiM0MzsJc2tlbDIgPSBsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsMiwgJiMzNDtsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkICgybmQpJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGV0YWNoOwomIzQzOwomIzQzOwlwcm9nZmQyID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwyLSZndDtwcm9ncy5icGZfZGVjb2Rlcik7CiYjNDM7CiYjNDM7CW1lbXNldCgmYW1wO2luZm8sIDAsIHNpemVvZihpbmZvKSk7CiYjNDM7CWluZm9fbGVuID0gc2l6ZW9mKGluZm8pOwomIzQzOwlyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nZmQyLCAmYW1wO2luZm8sICZhbXA7aW5mb19sZW4pOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7Z2V0IHNlY29uZCBwcm9ncmFtJiMzOTtzIGluZm8mIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CXByb2dfaWQyID0gaW5mby5pZDsKJiM0MzsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7YXR0YWNoIHNlY29uZCBwcm9ncmFtIHRvIGxpcmMgZGV2aWNlJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGV0YWNoOwomIzQzOwomIzQzOwlwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpOwomIzQzOwlyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcywKJiM0MzsJCQkgICAgICZhbXA7cHJvZ19jbnQpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7cXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgc2Vjb25kIGF0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDI7CiYjNDM7CWlmICghQVNTRVJUX0VRKHByb2dfY250LCAyLCAmIzM0O3R3byBwcm9ncmFtcyBzaG91bGQgYmUgYXR0YWNoZWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2gyOwomIzQzOwlBU1NFUlRfVFJVRSgocHJvZ19pZHNbMF0gPT0gcHJvZ19pZCAmYW1wOyZhbXA7IHByb2dfaWRzWzFdID09IHByb2dfaWQyKSB8fAomIzQzOwkJICAgIChwcm9nX2lkc1swXSA9PSBwcm9nX2lkMiAmYW1wOyZhbXA7IHByb2dfaWRzWzFdID09IHByb2dfaWQpLAomIzQzOwkJICAgICYjMzQ7cXVlcmllZCBpZHMgc2hvdWxkIGJlIHRoZSB0d28gYXR0YWNoZWQgcHJvZ3JhbXMmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIERldGFjaCB0aGUgc2Vjb25kIHByb2dyYW07IHRoZSBmaXJzdCBzaG91bGQgcmVtYWluIGF0dGFjaGVkLiAqLwomIzQzOwlyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7ZGV0YWNoIHNlY29uZCBwcm9ncmFtJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGV0YWNoMjsKJiM0MzsKJiM0MzsJLyogRGV0YWNoaW5nIGFuIGFscmVhZHktZGV0YWNoZWQgcHJvZ3JhbSBzaG91bGQgbm93IGZhaWwuICovCiYjNDM7CXJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7CiYjNDM7CUFTU0VSVF9FUShyZXQsIC1FTk9FTlQsICYjMzQ7ZGV0YWNoIHNlY29uZCBwcm9ncmFtIGFnYWluJiMzNDspOwomIzQzOwomIzQzOwlwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpOwomIzQzOwlyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcywKJiM0MzsJCQkgICAgICZhbXA7cHJvZ19jbnQpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7cXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgc2Vjb25kIGRldGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsICYjMzQ7b25lIHByb2dyYW0gc2hvdWxkIHJlbWFpbiBhdHRhY2hlZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDsKJiM0MzsJQVNTRVJUX0VRKHByb2dfaWRzWzBdLCBwcm9nX2lkLCAmIzM0O3JlbWFpbmluZyBwcm9ncmFtIHNob3VsZCBiZSB0aGUgZmlyc3Qgb25lJiMzNDspOwomIzQzOwomIzQzO291dF9kZXRhY2g6CiYjNDM7CS8qIExldCYjMzk7cyB0cnkgZGV0YWNoaW5nIGl0IG5vdyBpdCBpcyBhY3R1YWxseSBhdHRhY2hlZC4gKi8KJiM0MzsJcmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O2RldGFjaCBwcm9ncmFtIGZyb20gbGlyYyBkZXZpY2UmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIERldGFjaGluZyBpdCBhZ2FpbiBzaG91bGQgbm93IGZhaWwgdGhlIHNhbWUgd2F5LiAqLwomIzQzOwlyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7CiYjNDM7CUFTU0VSVF9FUShyZXQsIC1FTk9FTlQsICYjMzQ7ZGV0YWNoIHByb2dyYW0gZnJvbSBsaXJjIGRldmljZSBhZ2FpbiYjMzQ7KTsKJiM0MzsJZ290byBvdXQ7CiYjNDM7CiYjNDM7b3V0X2RldGFjaDI6CiYjNDM7CS8qIEJlc3QtZWZmb3J0IGNsZWFudXAgb2YgdGhlIHNlY29uZCBwcm9ncmFtIGJlZm9yZSBiYWlsaW5nIG91dC4gKi8KJiM0MzsJYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTsKJiM0MzsJZ290byBvdXRfZGV0YWNoOwomIzQzOwomIzQzO291dDoKJiM0MzsJaWYgKGlucHV0ZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGlucHV0ZmQpOwomIzQzOwlpZiAobGlyY2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShsaXJjZmQpOwomIzQzOwlsaXJjX21vZGUyX19kZXN0cm95KHNrZWwyKTsKJiM0MzsJbGlyY19tb2RlMl9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45ODEzN2YzYzVjMDNkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuYwpAQCAtMCwwICYjNDM7MSwzMiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7Ly8gdGVzdCBpciBkZWNvZGVyCiYjNDM7Ly8KJiM0MzsvLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyAmbHQ7c2VhbkBtZXNzLm9yZyZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpcmMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bGlyY19tb2RlMiYjMzQ7KQomIzQzO2ludCBicGZfZGVjb2Rlcih1bnNpZ25lZCBpbnQgKnNhbXBsZSkKJiM0Mzt7CiYjNDM7CWlmIChMSVJDX0lTX1BVTFNFKCpzYW1wbGUpKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgZHVyYXRpb24gPSBMSVJDX1ZBTFVFKCpzYW1wbGUpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEZsYWcgYml0cyBwaWNrZWQgZGVsaWJlcmF0ZWx5IGxvdzogcmMtbG9vcGJhY2sgc2ltdWxhdGVzCiYjNDM7CQkgKiBhIHJlY2VpdmVyIG92ZXJmbG93IGZvciBhbnkgcHVsc2Ugb3ZlciBNU19UT19VUyg1MCkgKHNlZQomIzQzOwkJICogbG9vcF90eF9pcigpIGluIHJjLWxvb3BiYWNrLmMpLCB3aGljaCB3b3VsZCBzaWxlbnRseQomIzQzOwkJICogc3dhbGxvdyB0aGUgc2FtcGxlIGJlZm9yZSBpdCBldmVyIHJlYWNoZXMgdGhpcyBkZWNvZGVyLgomIzQzOwkJICovCiYjNDM7CQlpZiAoZHVyYXRpb24gJmFtcDsgMHg4MDAwKQomIzQzOwkJCWJwZl9yY19rZXlkb3duKHNhbXBsZSwgMHg0MCwgZHVyYXRpb24gJmFtcDsgMHgzZmZmLCAwKTsKJiM0MzsJCWlmIChkdXJhdGlvbiAmYW1wOyAweDQwMDApCiYjNDM7CQkJYnBmX3JjX3BvaW50ZXJfcmVsKHNhbXBsZSwgKGR1cmF0aW9uICZndDsmZ3Q7IDcpICZhbXA7IDB4N2YsCiYjNDM7CQkJCQkgICBkdXJhdGlvbiAmYW1wOyAweDdmKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbGlyY19tb2RlMl9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JlNDI4NGMwMzJmZS4uMDAwMDAwMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uYwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDI2ICYjNDM7MCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotLy8gdGVzdCBpciBkZWNvZGVyCi0vLwotLy8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgJmx0O3NlYW5AbWVzcy5vcmcmZ3Q7Ci0KLSNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9saXJjLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7Ci0KLVNFQygmIzM0O2xpcmNfbW9kZTImIzM0OykKLWludCBicGZfZGVjb2Rlcih1bnNpZ25lZCBpbnQgKnNhbXBsZSkKLXsKLQlpZiAoTElSQ19JU19QVUxTRSgqc2FtcGxlKSkgewotCQl1bnNpZ25lZCBpbnQgZHVyYXRpb24gPSBMSVJDX1ZBTFVFKCpzYW1wbGUpOwotCi0JCWlmIChkdXJhdGlvbiAmYW1wOyAweDEwMDApCi0JCQlicGZfcmNfa2V5ZG93bihzYW1wbGUsIDB4NDAsIGR1cmF0aW9uICZhbXA7IDB4ZmZmZiwgMCk7Ci0JCWlmIChkdXJhdGlvbiAmYW1wOyAweDIwMDApCi0JCQlicGZfcmNfcG9pbnRlcl9yZWwoc2FtcGxlLCAoZHVyYXRpb24gJmd0OyZndDsgOCkgJmFtcDsgMHhmZiwKLQkJCQkJICAgZHVyYXRpb24gJmFtcDsgMHhmZik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTIuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1MjUyYjkxZjQ4YTE4Li4wMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTIuc2gKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSw0MSAmIzQzOzAsMCBAQAotIyEvYmluL2Jhc2gKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLQotIyBLc2VsZnRlc3QgZnJhbWV3b3JrIHJlcXVpcmVtZW50IC0gU0tJUCBjb2RlIGlzIDQuCi1rc2Z0X3NraXA9NAotcmV0PSRrc2Z0X3NraXAKLQotbXNnPSYjMzQ7c2tpcCBhbGwgdGVzdHM6JiMzNDsKLWlmIFsgJFVJRCAhPSAwIF07IHRoZW4KLQllY2hvICRtc2cgcGxlYXNlIHJ1biB0aGlzIGFzIHJvb3QgJmd0OyZhbXA7MgotCWV4aXQgJGtzZnRfc2tpcAotZmkKLQotR1JFRU49JiMzOTtcMDMzWzA7OTJtJiMzOTsKLVJFRD0mIzM5O1wwMzNbMDszMW0mIzM5OwotTkM9JiMzOTtcMDMzWzBtJiMzOTsgIyBObyBDb2xvcgotCi1tb2Rwcm9iZSByYy1sb29wYmFjawotCi1mb3IgaSBpbiAvc3lzL2NsYXNzL3JjL3JjKgotZG8KLQlpZiBncmVwIC1xIERSVl9OQU1FPXJjLWxvb3BiYWNrICRpL3VldmVudAotCXRoZW4KLQkJTElSQ0RFVj0kKGdyZXAgREVWTkFNRT0gJGkvbGlyYyovdWV2ZW50IHwgc2VkIHNRREVWTkFNRT1RL2Rldi9RKQotCQlJTlBVVERFVj0kKGdyZXAgREVWTkFNRT0gJGkvaW5wdXQqL2V2ZW50Ki91ZXZlbnQgfCBzZWQgc1FERVZOQU1FPVEvZGV2L1EpCi0JZmkKLWRvbmUKLQotaWYgWyAtbiAmIzM0OyRMSVJDREVWJiMzNDsgXTsKLXRoZW4KLQlUWVBFPWxpcmNfbW9kZTIKLQkuL3Rlc3RfbGlyY19tb2RlMl91c2VyICRMSVJDREVWICRJTlBVVERFVgotCXJldD0kPwotCWlmIFsgJHJldCAtbmUgMCBdOyB0aGVuCi0JCWVjaG8gLWUgJHtSRUR9JiMzNDtGQUlMOiAkVFlQRSYjMzQ7JHtOQ30KLQllbHNlCi0JCWVjaG8gLWUgJHtHUkVFTn0mIzM0O1BBU1M6ICRUWVBFJiMzNDske05DfQotCWZpCi1maQotCi1leGl0ICRyZXQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg4OAoJCQkJCQkJb3V0cHV0OiA3OAoJCQkJCQkJdGhvdWdodHM6IDUyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBTZWxmdGVzdCBNaWdyYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIGEgcmVmYWN0b3JpbmcsIHNwZWNpZmljYWxseSByZW1vdmluZyB0aGUgb2xkIGB0ZXN0X2xpcmNfbW9kZTIuc2hgLCBgdGVzdF9saXJjX21vZGUyX2tlcm4uY2AsIGFuZCBgdGVzdF9saXJjX21vZGUyX3VzZXIuY2AgKG9oLCBpdCBhbHNvIHJlbW92ZXMgYHRlc3RfbGlyY19tb2RlMl91c2VyYCBmcm9tIHRoZSBgTWFrZWZpbGVgKSwgYW5kIHJlcGxhY2luZyBpdCB3aXRoIGBwcm9nX3Rlc3RzL2xpcmNfbW9kZTIuY2AgYW5kIGBwcm9ncy9saXJjX21vZGUyLmNgLiBTZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIG1pZ3JhdGlvbiBmcm9tIHRoZSBvbGRlciBiYXNoL3VzZXIgZm9ybWF0IHRvIHRoZSBuZXdlciBgdGVzdF9wcm9nc2AgZnJhbWV3b3JrIHdpdGhpbiB0aGUgQlBGIHNlbGZ0ZXN0cy4KClNpbmNlIHRoZSBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBzZWxmdGVzdHMgZGlyZWN0b3J5LCBteSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgKnNob3VsZG4mIzM5O3QqIGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGUgZGlmZiBkb2VzbiYjMzk7dCB0b3VjaCBhbnl0aGluZyBvdXRzaWRlIG9mIHRoYXQgZGlyZWN0b3J5LiBZZXAsIGNvbmZpcm1pbmcgdGhhdCB0aGUgY2hhbmdlIGlzIGNvbnRhaW5lZCBzb2xlbHkgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKSSBxdWlja2x5IHdlbnQgdGhyb3VnaCB0aGUgcnVsZXMgYWdhaW4gdG8gY29uZmlybSBteSBqdWRnZW1lbnQuIFRoZSBydWxlcyBzZWVtIHRvIGNvbmZpcm0gdGhlIGNob2ljZS4gU2VsZnRlc3RzIGFyZSB1c2Vyc3BhY2UgdGVzdHMgYW5kIGFyZSBub3Qga2VybmVsIGNvZGU7IHRoZXkgZG9uJiMzOTt0IGludHJvZHVjZSBrZXJuZWwgY29kZSB0aGF0IHdhcnJhbnRzIGZ1enppbmcuIFRoZXJlZm9yZSBJIHdpbGwgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvIGJ5IG1pZ3JhdGluZyBhbiBleGlzdGluZyB0ZXN0IHRvIHRoZSB0ZXN0X3Byb2dzIGZyYW1ld29yay4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLyBieSBtaWdyYXRpbmcgYW4gZXhpc3RpbmcgdGVzdCB0byB0aGUgdGVzdF9wcm9ncyBmcmFtZXdvcmsuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxODoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTg6MjA6MjEuNjM4MDMyODU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5Nzk2MTMzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLyBieSBtaWdyYXRpbmcgYW4gZXhpc3RpbmcgdGVzdCB0byB0aGUgdGVzdF9wcm9ncyBmcmFtZXdvcmsuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTg6MjA6MjEuNjM4MDM5ODA4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTkxODU3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MDgwNDI3MTliMTU1OWUyNTk5YWQ0OGNiNDgyMDc5MTI0ZThiM2M5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDE4OjIwOjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxcbmluZGV4IDJiMmY5M2RlYzQ3NGIuLmY4ZWMwZjU3NDU1OWEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuQEAgLTEyMyw3ICsxMjMsNiBAQCBURVNUX0ZJTEVTID0geHNrX3ByZXJlcXMuc2ggJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKVxcbiBcXG4gIyBPcmRlciBjb3JyZXNwb25kIHRvICdtYWtlIHJ1bl90ZXN0cycgb3JkZXJcXG4gVEVTVF9QUk9HUyA6PSB0ZXN0X2ttb2Quc2ggXFxcXFxcbi1cXHR0ZXN0X2xpcmNfbW9kZTIuc2ggXFxcXFxcbiBcXHR0ZXN0X2JwZnRvb2xfYnVpbGQuc2ggXFxcXFxcbiBcXHR0ZXN0X2RvY19idWlsZC5zaCBcXFxcXFxuIFxcdHRlc3RfeHNrLnNoIFxcXFxcXG5AQCAtMTQxLDcgKzE0MCw2IEBAIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEID0gXFxcXFxcbiBcXHRiZW5jaCBcXFxcXFxuIFxcdGZsb3dfZGlzc2VjdG9yX2xvYWQgXFxcXFxcbiBcXHR0ZXN0X2NwcCBcXFxcXFxuLVxcdHRlc3RfbGlyY19tb2RlMl91c2VyIFxcXFxcXG4gXFx0dmVyaXN0YXQgXFxcXFxcbiBcXHR4ZHBfZmVhdHVyZXMgXFxcXFxcbiBcXHR4ZHBfaHdfbWV0YWRhdGEgXFxcXFxcbkBAIC0zMzgsNyArMzM2LDYgQEAgJChPVVRQVVQpL3Rlc3Rfc29ja21hcDogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpXFxuICQoT1VUUFVUKS90ZXN0X3RjcG5vdGlmeV91c2VyOiAkKENHUk9VUF9IRUxQRVJTKSAkKFRFU1RJTkdfSEVMUEVSUykgJChUUkFDRV9IRUxQRVJTKVxcbiAkKE9VVFBVVCkvdGVzdF9zb2NrX2ZpZWxkczogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpXFxuICQoT1VUUFVUKS90ZXN0X3RhZzogJChURVNUSU5HX0hFTFBFUlMpXFxuLSQoT1VUUFVUKS90ZXN0X2xpcmNfbW9kZTJfdXNlcjogJChURVNUSU5HX0hFTFBFUlMpXFxuICQoT1VUUFVUKS9mbG93X2Rpc3NlY3Rvcl9sb2FkOiAkKFRFU1RJTkdfSEVMUEVSUylcXG4gJChPVVRQVVQpL3Rlc3RfbWFwczogJChURVNUSU5HX0hFTFBFUlMpXFxuICQoT1VUUFVUKS90ZXN0X3ZlcmlmaWVyOiAkKFRFU1RJTkdfSEVMUEVSUykgJChDQVBfSEVMUEVSUykgJChVTlBSSVZfSEVMUEVSUylcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xN2EzOGNkMDM4NDVjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpcmNfbW9kZTIuY1xcbkBAIC0wLDAgKzEsMzI4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8vIHRlc3QgaXIgZGVjb2RlclxcbisvL1xcbisvLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyBcXHUwMDNjc2VhbkBtZXNzLm9yZ1xcdTAwM2VcXG4rXFxuKy8vIEEgbGlyYyBjaGFyZGV2IGlzIGEgZGV2aWNlIHJlcHJlc2VudGluZyBhIGNvbnN1bWVyIElSIChjaXIpIGRldmljZSB3aGljaFxcbisvLyBjYW4gcmVjZWl2ZSBpbmZyYXJlZCBzaWduYWxzIGZyb20gcmVtb3RlIGNvbnRyb2wgYW5kL29yIHRyYW5zbWl0IElSLlxcbisvL1xcbisvLyBJUiBpcyBzZW50IGFzIGEgc2VyaWVzIG9mIHB1bHNlcyBhbmQgc3BhY2Ugc29tZXdoYXQgbGlrZSBtb3JzZSBjb2RlLiBUaGVcXG4rLy8gQlBGIHByb2dyYW0gY2FuIGRlY29kZSB0aGlzIGludG8gc2NhbmNvZGVzIHNvIHRoYXQgcmMtY29yZSBjYW4gdHJhbnNsYXRlXFxuKy8vIHRoaXMgaW50byBpbnB1dCBrZXkgY29kZXMgdXNpbmcgdGhlIHJjIGtleW1hcC5cXG4rLy9cXG4rLy8gVGhpcyB0ZXN0IHdvcmtzIGJ5IHNlbmRpbmcgSVIgb3ZlciByYy1sb29wYmFjaywgc28gdGhlIElSIGlzIHByb2Nlc3NlZCBieVxcbisvLyBCUEYgYW5kIHRoZW4gZGVjb2RlZCBpbnRvIHNjYW5jb2Rlcy4gVGhlIGxpcmMgY2hhcmRldiBtdXN0IGJlIHRoZSBvbmVcXG4rLy8gYXNzb2NpYXRlZCB3aXRoIHJjLWxvb3BiYWNrLCBzZWUgdGhlIG91dHB1dCBvZiBpci1rZXl0YWJsZSgxKS5cXG4rLy9cXG4rLy8gVGhlIGZvbGxvd2luZyBDT05GSUcgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoZSB0ZXN0IHRvIHN1Y2NlZWQ6XFxuKy8vIENPTkZJR19SQ19DT1JFPXlcXG4rLy8gQ09ORklHX0JQRl9SQVdJUl9FVkVOVD15XFxuKy8vIENPTkZJR19SQ19MT09QQkFDSz15XFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5wdXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpcmMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2dsb2IuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjcG9sbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwibGlyY19tb2RlMi5za2VsLmhcXFwiXFxuK1xcbisvKiBSZWFkIHRoZSBERVZOQU1FPSBsaW5lIG91dCBvZiB0aGUgZmlyc3QgdWV2ZW50IGZpbGUgdGhhdCBtYXRjaGVzXFxuKyAqIHBhdHRlcm4sIGFuZCB0dXJuIGl0IGludG8gYSAvZGV2L1xcdTAwM2NuYW1lXFx1MDAzZSBwYXRoLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgZmluZF9kZXZuYW1lKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKnBhdGgsIHNpemVfdCBwYXRoX3N6KVxcbit7XFxuK1xcdGdsb2JfdCBnbCA9IHt9O1xcbitcXHRib29sIGZvdW5kID0gZmFsc2U7XFxuK1xcdEZJTEUgKmY7XFxuK1xcbitcXHRpZiAoZ2xvYihwYXR0ZXJuLCAwLCBOVUxMLCBcXHUwMDI2Z2wpIHx8IGdsLmdsX3BhdGhjID09IDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0ZiA9IGZvcGVuKGdsLmdsX3BhdGh2WzBdLCBcXFwiclxcXCIpO1xcbitcXHRpZiAoIWYpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0Y2hhciBsaW5lWzI1Nl07XFxuK1xcbitcXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkge1xcbitcXHRcXHRjaGFyICp2YWw7XFxuK1xcbitcXHRcXHRpZiAoc3RybmNtcChsaW5lLCBcXFwiREVWTkFNRT1cXFwiLCA4KSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHR2YWwgPSBsaW5lICsgODtcXG4rXFx0XFx0dmFsW3N0cmNzcG4odmFsLCBcXFwiXFxcXG5cXFwiKV0gPSAnXFxcXDAnO1xcbitcXHRcXHRzbnByaW50ZihwYXRoLCBwYXRoX3N6LCBcXFwiL2Rldi8lc1xcXCIsIHZhbCk7XFxuK1xcdFxcdGZvdW5kID0gdHJ1ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdGZjbG9zZShmKTtcXG4rb3V0OlxcbitcXHRnbG9iZnJlZShcXHUwMDI2Z2wpO1xcbitcXHRyZXR1cm4gZm91bmQ7XFxuK31cXG4rXFxuKy8qIExvYWQgcmMtbG9vcGJhY2sgYW5kIGZpbmQgdGhlIGxpcmMgYW5kIGlucHV0IGNoYXJkZXZzIGl0IGNyZWF0ZWQuICovXFxuK3N0YXRpYyBib29sIGZpbmRfbG9vcGJhY2tfZGV2aWNlcyhjaGFyICpsaXJjX3BhdGgsIGNoYXIgKmlucHV0X3BhdGgsXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZV90IHBhdGhfc3opXFxuK3tcXG4rXFx0Z2xvYl90IGdsID0ge307XFxuK1xcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG4rXFxuK1xcdC8qIElnbm9yZSBmYWlsdXJlLCB3ZSBjaGVjayBmb3IgdGhlIHJlc3VsdGluZyBkZXZpY2VzIGJlbG93LiAqL1xcbitcXHRzeXN0ZW0oXFxcIm1vZHByb2JlIHJjLWxvb3BiYWNrIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXFwiKTtcXG4rXFxuK1xcdGlmIChnbG9iKFxcXCIvc3lzL2NsYXNzL3JjL3JjKlxcXCIsIDAsIE5VTEwsIFxcdTAwMjZnbCkpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJObyByYyBkZXZpY2VzIGZvdW5kLCBpcyBDT05GSUdfUkNfTE9PUEJBQ0sgZW5hYmxlZD9cXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFxcdTAwM2MgZ2wuZ2xfcGF0aGM7IGkrKykge1xcbitcXHRcXHRjb25zdCBjaGFyICpyY2RpciA9IGdsLmdsX3BhdGh2W2ldO1xcbitcXHRcXHRjaGFyIHVldmVudF9wYXRoW1BBVEhfTUFYXTtcXG4rXFx0XFx0Y2hhciB1ZXZlbnRbNDA5Nl07XFxuK1xcdFxcdGNoYXIgcGF0dGVybltQQVRIX01BWF07XFxuK1xcdFxcdEZJTEUgKmY7XFxuK1xcdFxcdHNpemVfdCBuO1xcbitcXG4rXFx0XFx0c25wcmludGYodWV2ZW50X3BhdGgsIHNpemVvZih1ZXZlbnRfcGF0aCksIFxcXCIlcy91ZXZlbnRcXFwiLCByY2Rpcik7XFxuK1xcdFxcdGYgPSBmb3Blbih1ZXZlbnRfcGF0aCwgXFxcInJcXFwiKTtcXG4rXFx0XFx0aWYgKCFmKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0biA9IGZyZWFkKHVldmVudCwgMSwgc2l6ZW9mKHVldmVudCkgLSAxLCBmKTtcXG4rXFx0XFx0ZmNsb3NlKGYpO1xcbitcXHRcXHR1ZXZlbnRbbl0gPSAnXFxcXDAnO1xcbitcXG4rXFx0XFx0aWYgKCFzdHJzdHIodWV2ZW50LCBcXFwiRFJWX05BTUU9cmMtbG9vcGJhY2tcXFwiKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzbnByaW50ZihwYXR0ZXJuLCBzaXplb2YocGF0dGVybiksIFxcXCIlcy9saXJjKi91ZXZlbnRcXFwiLCByY2Rpcik7XFxuK1xcdFxcdGlmICghZmluZF9kZXZuYW1lKHBhdHRlcm4sIGxpcmNfcGF0aCwgcGF0aF9zeikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0c25wcmludGYocGF0dGVybiwgc2l6ZW9mKHBhdHRlcm4pLCBcXFwiJXMvaW5wdXQqL2V2ZW50Ki91ZXZlbnRcXFwiLCByY2Rpcik7XFxuK1xcdFxcdGlmICghZmluZF9kZXZuYW1lKHBhdHRlcm4sIGlucHV0X3BhdGgsIHBhdGhfc3opKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGZvdW5kID0gdHJ1ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdGdsb2JmcmVlKFxcdTAwMjZnbCk7XFxuK1xcdHJldHVybiBmb3VuZDtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2xpcmNfbW9kZTIodm9pZClcXG4re1xcbitcXHRjaGFyIGxpcmNfcGF0aFtQQVRIX01BWF0sIGlucHV0X3BhdGhbUEFUSF9NQVhdO1xcbitcXHRpbnQgbGlyY2ZkID0gLTEsIGlucHV0ZmQgPSAtMSwgcHJvZ2ZkLCBwcm9nZmQyID0gLTE7XFxuK1xcdHN0cnVjdCBsaXJjX21vZGUyICpza2VsID0gTlVMTCwgKnNrZWwyID0gTlVMTDtcXG4rXFx0X191MzIgcHJvZ19pZHNbMTBdLCBwcm9nX2ZsYWdzWzEwXSwgcHJvZ19jbnQ7XFxuK1xcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm87XFxuK1xcdF9fdTMyIGluZm9fbGVuLCBwcm9nX2lkLCBwcm9nX2lkMjtcXG4rXFx0aW50IHRlc3RpcjEgPSAweDhlYWQ7XFx0Lyoga2V5ZG93biBmbGFnICgweDgwMDApIHwgc2NhbmNvZGUgMHhlYWQgKi9cXG4rXFx0aW50IHRlc3RpcjIgPSAweDQwODE7XFx0LyogcG9pbnRlcl9yZWwgZmxhZyAoMHg0MDAwKSB8IHJlbF94PTEgfCByZWxfeT0xICovXFxuK1xcdHN0cnVjdCBpbnB1dF9ldmVudCBldmVudDtcXG4rXFx0c3RydWN0IHBvbGxmZCBwZmQgPSB7fTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChnZXR1aWQoKSAhPSAwKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWZpbmRfbG9vcGJhY2tfZGV2aWNlcyhsaXJjX3BhdGgsIGlucHV0X3BhdGgsIHNpemVvZihsaXJjX3BhdGgpKSkge1xcbitcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0c2tlbCA9IGxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHByb2dmZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5icGZfZGVjb2Rlcik7XFxuK1xcbitcXHRtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XFxuK1xcdGluZm9fbGVuID0gc2l6ZW9mKGluZm8pO1xcbitcXHRyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nZmQsIFxcdTAwMjZpbmZvLCBcXHUwMDI2aW5mb19sZW4pO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJnZXQgZmlyc3QgcHJvZ3JhbSdzIGluZm9cXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdHByb2dfaWQgPSBpbmZvLmlkO1xcbitcXG4rXFx0bGlyY2ZkID0gb3BlbihsaXJjX3BhdGgsIE9fUkRXUiB8IE9fTk9OQkxPQ0spO1xcbitcXHRpZiAoIUFTU0VSVF9HRShsaXJjZmQsIDAsIFxcXCJvcGVuIGxpcmMgZGV2aWNlXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogVHJ5IHRvIGRldGFjaCBpdCBiZWZvcmUgaXQgd2FzIGV2ZXIgYXR0YWNoZWQsIHNob3VsZCBmYWlsLiAqL1xcbitcXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XFxuK1xcdGlmICghQVNTRVJUX0VRKHJldCwgLUVOT0VOVCwgXFxcImRldGFjaCB1bmF0dGFjaGVkIHByb2dyYW1cXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpbnB1dGZkID0gb3BlbihpbnB1dF9wYXRoLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spO1xcbitcXHRpZiAoIUFTU0VSVF9HRShpbnB1dGZkLCAwLCBcXFwib3BlbiBpbnB1dCBkZXZpY2VcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xcbitcXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcXG4rXFx0XFx0XFx0ICAgICBcXHUwMDI2cHJvZ19jbnQpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJxdWVyeSBwcm9ncmFtcyBiZWZvcmUgYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMCwgXFxcIm5vIHByb2dyYW1zIHNob3VsZCBiZSBhdHRhY2hlZCB5ZXRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBJbnZhbGlkIGF0dGFjaCBmbGFncyBtdXN0IGJlIHJlamVjdGVkLCBhbmQgbXVzdCBub3QgYXR0YWNoLiAqL1xcbitcXHRyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAxKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocmV0LCAtRUlOVkFMLCBcXFwiYXR0YWNoIHdpdGggaW52YWxpZCBmbGFnc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XFxuK1xcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZwcm9nX2NudCk7XFxuK1xcdGlmICghQVNTRVJUX09LKHJldCwgXFxcInF1ZXJ5IHByb2dyYW1zIGFmdGVyIHJlamVjdGVkIGF0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDAsIFxcXCJyZWplY3RlZCBhdHRhY2ggc2hvdWxkIG5vdCBhdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwiYXR0YWNoIHByb2dyYW0gdG8gbGlyYyBkZXZpY2VcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBJbnZhbGlkIHF1ZXJ5IGZsYWdzIG11c3QgYmUgcmVqZWN0ZWQgdG9vLCB3aXRob3V0IHVwc2V0dGluZyBzdGF0ZS4gKi9cXG4rXFx0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcXG4rXFx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMSwgcHJvZ19mbGFncywgcHJvZ19pZHMsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnByb2dfY250KTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgLUVJTlZBTCwgXFxcInF1ZXJ5IHdpdGggaW52YWxpZCBmbGFnc1xcXCIpO1xcbitcXG4rXFx0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcXG4rXFx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnByb2dfY250KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFxcXCJvbmUgcHJvZ3JhbSBzaG91bGQgYmUgYXR0YWNoZWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoO1xcbitcXHRBU1NFUlRfRVEocHJvZ19pZHNbMF0sIHByb2dfaWQsIFxcXCJxdWVyaWVkIGlkIHNob3VsZCBtYXRjaCBhdHRhY2hlZCBwcm9ncmFtXFxcIik7XFxuK1xcbitcXHQvKiBXcml0ZSByYXcgSVIgKi9cXG4rXFx0cmV0ID0gd3JpdGUobGlyY2ZkLCBcXHUwMDI2dGVzdGlyMSwgc2l6ZW9mKHRlc3RpcjEpKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocmV0LCBzaXplb2YodGVzdGlyMSksIFxcXCJzZW5kIHRlc3QgSVIgbWVzc2FnZSAxXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFxuK1xcdHBmZC5mZCA9IGlucHV0ZmQ7XFxuK1xcdHBmZC5ldmVudHMgPSBQT0xMSU47XFxuK1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdHBvbGwoXFx1MDAyNnBmZCwgMSwgMTAwKTtcXG4rXFxuK1xcdFxcdC8qIFJlYWQgZGVjb2RlZCBJUiAqL1xcbitcXHRcXHRyZXQgPSByZWFkKGlucHV0ZmQsIFxcdTAwMjZldmVudCwgc2l6ZW9mKGV2ZW50KSk7XFxuK1xcdFxcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKGV2ZW50KSwgXFxcInJlYWQgZGVjb2RlZCBJUiAxXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFxuK1xcdFxcdGlmIChldmVudC50eXBlID09IEVWX01TQyBcXHUwMDI2XFx1MDAyNiBldmVudC5jb2RlID09IE1TQ19TQ0FOIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBldmVudC52YWx1ZSA9PSAweGVhZClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFdyaXRlIHJhdyBJUiAqL1xcbitcXHRyZXQgPSB3cml0ZShsaXJjZmQsIFxcdTAwMjZ0ZXN0aXIyLCBzaXplb2YodGVzdGlyMikpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZih0ZXN0aXIyKSwgXFxcInNlbmQgdGVzdCBJUiBtZXNzYWdlIDJcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoO1xcbitcXG4rXFx0Zm9yICg7Oykge1xcbitcXHRcXHRwb2xsKFxcdTAwMjZwZmQsIDEsIDEwMCk7XFxuK1xcbitcXHRcXHQvKiBSZWFkIGRlY29kZWQgSVIgKi9cXG4rXFx0XFx0cmV0ID0gcmVhZChpbnB1dGZkLCBcXHUwMDI2ZXZlbnQsIHNpemVvZihldmVudCkpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZihldmVudCksIFxcXCJyZWFkIGRlY29kZWQgSVIgMlxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcbitcXHRcXHRpZiAoZXZlbnQudHlwZSA9PSBFVl9SRUwgXFx1MDAyNlxcdTAwMjYgZXZlbnQuY29kZSA9PSBSRUxfWSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgZXZlbnQudmFsdWUgPT0gMSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XFxuK1xcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZwcm9nX2NudCk7XFxuK1xcdGlmICghQVNTRVJUX09LKHJldCwgXFxcInF1ZXJ5IHByb2dyYW1zIGFmdGVyIElSIHdhcyBkZWNvZGVkXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFxcXCJvbmUgcHJvZ3JhbSBzaG91bGQgc3RpbGwgYmUgYXR0YWNoZWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGxpcmMgY2hhcmRldiBjYW4gaG9sZCBtb3JlIHRoYW4gb25lIGF0dGFjaGVkIHByb2dyYW0gYXQgb25jZS5cXG4rXFx0ICogTG9hZCBhIHNlY29uZCwgaW5kZXBlbmRlbnQgaW5zdGFuY2UgYW5kIGNoZWNrIGl0IGNhbiBiZSBhdHRhY2hlZFxcbitcXHQgKiBhbG9uZ3NpZGUgdGhlIGZpcnN0LCBxdWVyaWVkLCBhbmQgdGhlbiBkZXRhY2hlZCBvbiBpdHMgb3duXFxuK1xcdCAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgZmlyc3QgcHJvZ3JhbSdzIGF0dGFjaG1lbnQuXFxuK1xcdCAqL1xcbitcXHRza2VsMiA9IGxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwyLCBcXFwibGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCAoMm5kKVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcbitcXHRwcm9nZmQyID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwyLVxcdTAwM2Vwcm9ncy5icGZfZGVjb2Rlcik7XFxuK1xcbitcXHRtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XFxuK1xcdGluZm9fbGVuID0gc2l6ZW9mKGluZm8pO1xcbitcXHRyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nZmQyLCBcXHUwMDI2aW5mbywgXFx1MDAyNmluZm9fbGVuKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwiZ2V0IHNlY29uZCBwcm9ncmFtJ3MgaW5mb1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcdHByb2dfaWQyID0gaW5mby5pZDtcXG4rXFxuK1xcdHJldCA9IGJwZl9wcm9nX2F0dGFjaChwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwiYXR0YWNoIHNlY29uZCBwcm9ncmFtIHRvIGxpcmMgZGV2aWNlXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFxuK1xcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XFxuK1xcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZwcm9nX2NudCk7XFxuK1xcdGlmICghQVNTRVJUX09LKHJldCwgXFxcInF1ZXJ5IHByb2dyYW1zIGFmdGVyIHNlY29uZCBhdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoMjtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDIsIFxcXCJ0d28gcHJvZ3JhbXMgc2hvdWxkIGJlIGF0dGFjaGVkXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDI7XFxuK1xcdEFTU0VSVF9UUlVFKChwcm9nX2lkc1swXSA9PSBwcm9nX2lkIFxcdTAwMjZcXHUwMDI2IHByb2dfaWRzWzFdID09IHByb2dfaWQyKSB8fFxcbitcXHRcXHQgICAgKHByb2dfaWRzWzBdID09IHByb2dfaWQyIFxcdTAwMjZcXHUwMDI2IHByb2dfaWRzWzFdID09IHByb2dfaWQpLFxcbitcXHRcXHQgICAgXFxcInF1ZXJpZWQgaWRzIHNob3VsZCBiZSB0aGUgdHdvIGF0dGFjaGVkIHByb2dyYW1zXFxcIik7XFxuK1xcbitcXHQvKiBEZXRhY2ggdGhlIHNlY29uZCBwcm9ncmFtOyB0aGUgZmlyc3Qgc2hvdWxkIHJlbWFpbiBhdHRhY2hlZC4gKi9cXG4rXFx0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwiZGV0YWNoIHNlY29uZCBwcm9ncmFtXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDI7XFxuK1xcbitcXHQvKiBEZXRhY2hpbmcgYW4gYWxyZWFkeS1kZXRhY2hlZCBwcm9ncmFtIHNob3VsZCBub3cgZmFpbC4gKi9cXG4rXFx0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgLUVOT0VOVCwgXFxcImRldGFjaCBzZWNvbmQgcHJvZ3JhbSBhZ2FpblxcXCIpO1xcbitcXG4rXFx0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcXG4rXFx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnByb2dfY250KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgc2Vjb25kIGRldGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAxLCBcXFwib25lIHByb2dyYW0gc2hvdWxkIHJlbWFpbiBhdHRhY2hlZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcdEFTU0VSVF9FUShwcm9nX2lkc1swXSwgcHJvZ19pZCwgXFxcInJlbWFpbmluZyBwcm9ncmFtIHNob3VsZCBiZSB0aGUgZmlyc3Qgb25lXFxcIik7XFxuK1xcbitvdXRfZGV0YWNoOlxcbitcXHQvKiBMZXQncyB0cnkgZGV0YWNoaW5nIGl0IG5vdyBpdCBpcyBhY3R1YWxseSBhdHRhY2hlZC4gKi9cXG4rXFx0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xcbitcXHRBU1NFUlRfT0socmV0LCBcXFwiZGV0YWNoIHByb2dyYW0gZnJvbSBsaXJjIGRldmljZVxcXCIpO1xcbitcXG4rXFx0LyogRGV0YWNoaW5nIGl0IGFnYWluIHNob3VsZCBub3cgZmFpbCB0aGUgc2FtZSB3YXkuICovXFxuK1xcdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgLUVOT0VOVCwgXFxcImRldGFjaCBwcm9ncmFtIGZyb20gbGlyYyBkZXZpY2UgYWdhaW5cXFwiKTtcXG4rXFx0Z290byBvdXQ7XFxuK1xcbitvdXRfZGV0YWNoMjpcXG4rXFx0LyogQmVzdC1lZmZvcnQgY2xlYW51cCBvZiB0aGUgc2Vjb25kIHByb2dyYW0gYmVmb3JlIGJhaWxpbmcgb3V0LiAqL1xcbitcXHRicGZfcHJvZ19kZXRhY2gyKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xcbitcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcbitvdXQ6XFxuK1xcdGlmIChpbnB1dGZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGlucHV0ZmQpO1xcbitcXHRpZiAobGlyY2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGxpcmNmZCk7XFxuK1xcdGxpcmNfbW9kZTJfX2Rlc3Ryb3koc2tlbDIpO1xcbitcXHRsaXJjX21vZGUyX19kZXN0cm95KHNrZWwpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbGlyY19tb2RlMi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45ODEzN2YzYzVjMDNkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmNcXG5AQCAtMCwwICsxLDMyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8vIHRlc3QgaXIgZGVjb2RlclxcbisvL1xcbisvLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyBcXHUwMDNjc2VhbkBtZXNzLm9yZ1xcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpcmMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbitcXG4rU0VDKFxcXCJsaXJjX21vZGUyXFxcIilcXG4raW50IGJwZl9kZWNvZGVyKHVuc2lnbmVkIGludCAqc2FtcGxlKVxcbit7XFxuK1xcdGlmIChMSVJDX0lTX1BVTFNFKCpzYW1wbGUpKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBkdXJhdGlvbiA9IExJUkNfVkFMVUUoKnNhbXBsZSk7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBGbGFnIGJpdHMgcGlja2VkIGRlbGliZXJhdGVseSBsb3c6IHJjLWxvb3BiYWNrIHNpbXVsYXRlc1xcbitcXHRcXHQgKiBhIHJlY2VpdmVyIG92ZXJmbG93IGZvciBhbnkgcHVsc2Ugb3ZlciBNU19UT19VUyg1MCkgKHNlZVxcbitcXHRcXHQgKiBsb29wX3R4X2lyKCkgaW4gcmMtbG9vcGJhY2suYyksIHdoaWNoIHdvdWxkIHNpbGVudGx5XFxuK1xcdFxcdCAqIHN3YWxsb3cgdGhlIHNhbXBsZSBiZWZvcmUgaXQgZXZlciByZWFjaGVzIHRoaXMgZGVjb2Rlci5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChkdXJhdGlvbiBcXHUwMDI2IDB4ODAwMClcXG4rXFx0XFx0XFx0YnBmX3JjX2tleWRvd24oc2FtcGxlLCAweDQwLCBkdXJhdGlvbiBcXHUwMDI2IDB4M2ZmZiwgMCk7XFxuK1xcdFxcdGlmIChkdXJhdGlvbiBcXHUwMDI2IDB4NDAwMClcXG4rXFx0XFx0XFx0YnBmX3JjX3BvaW50ZXJfcmVsKHNhbXBsZSwgKGR1cmF0aW9uIFxcdTAwM2VcXHUwMDNlIDcpIFxcdTAwMjYgMHg3ZixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgZHVyYXRpb24gXFx1MDAyNiAweDdmKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xpcmNfbW9kZTJfa2Vybi5jXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggY2JlNDI4NGMwMzJmZS4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xpcmNfbW9kZTJfa2Vybi5jXFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDI2ICswLDAgQEBcXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4tLy8gdGVzdCBpciBkZWNvZGVyXFxuLS8vXFxuLS8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nIFxcdTAwM2NzZWFuQG1lc3Mub3JnXFx1MDAzZVxcbi1cXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbGlyYy5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuLVxcbi1TRUMoXFxcImxpcmNfbW9kZTJcXFwiKVxcbi1pbnQgYnBmX2RlY29kZXIodW5zaWduZWQgaW50ICpzYW1wbGUpXFxuLXtcXG4tXFx0aWYgKExJUkNfSVNfUFVMU0UoKnNhbXBsZSkpIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IGR1cmF0aW9uID0gTElSQ19WQUxVRSgqc2FtcGxlKTtcXG4tXFxuLVxcdFxcdGlmIChkdXJhdGlvbiBcXHUwMDI2IDB4MTAwMClcXG4tXFx0XFx0XFx0YnBmX3JjX2tleWRvd24oc2FtcGxlLCAweDQwLCBkdXJhdGlvbiBcXHUwMDI2IDB4ZmZmZiwgMCk7XFxuLVxcdFxcdGlmIChkdXJhdGlvbiBcXHUwMDI2IDB4MjAwMClcXG4tXFx0XFx0XFx0YnBmX3JjX3BvaW50ZXJfcmVsKHNhbXBsZSwgKGR1cmF0aW9uIFxcdTAwM2VcXHUwMDNlIDgpIFxcdTAwMjYgMHhmZixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgZHVyYXRpb24gXFx1MDAyNiAweGZmKTtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLWNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMi5zaFxcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDUyNTJiOTFmNDhhMTguLjAwMDAwMDAwMDAwMDBcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoXFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDQxICswLDAgQEBcXG4tIyEvYmluL2Jhc2hcXG4tIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbi1cXG4tIyBLc2VsZnRlc3QgZnJhbWV3b3JrIHJlcXVpcmVtZW50IC0gU0tJUCBjb2RlIGlzIDQuXFxuLWtzZnRfc2tpcD00XFxuLXJldD0ka3NmdF9za2lwXFxuLVxcbi1tc2c9XFxcInNraXAgYWxsIHRlc3RzOlxcXCJcXG4taWYgWyAkVUlEICE9IDAgXTsgdGhlblxcbi1cXHRlY2hvICRtc2cgcGxlYXNlIHJ1biB0aGlzIGFzIHJvb3QgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdGV4aXQgJGtzZnRfc2tpcFxcbi1maVxcbi1cXG4tR1JFRU49J1xcXFwwMzNbMDs5Mm0nXFxuLVJFRD0nXFxcXDAzM1swOzMxbSdcXG4tTkM9J1xcXFwwMzNbMG0nICMgTm8gQ29sb3JcXG4tXFxuLW1vZHByb2JlIHJjLWxvb3BiYWNrXFxuLVxcbi1mb3IgaSBpbiAvc3lzL2NsYXNzL3JjL3JjKlxcbi1kb1xcbi1cXHRpZiBncmVwIC1xIERSVl9OQU1FPXJjLWxvb3BiYWNrICRpL3VldmVudFxcbi1cXHR0aGVuXFxuLVxcdFxcdExJUkNERVY9JChncmVwIERFVk5BTUU9ICRpL2xpcmMqL3VldmVudCB8IHNlZCBzUURFVk5BTUU9US9kZXYvUSlcXG4tXFx0XFx0SU5QVVRERVY9JChncmVwIERFVk5BTUU9ICRpL2lucHV0Ki9ldmVudCovdWV2ZW50IHwgc2VkIHNRREVWTkFNRT1RL2Rldi9RKVxcbi1cXHRmaVxcbi1kb25lXFxuLVxcbi1pZiBbIC1uIFxcXCIkTElSQ0RFVlxcXCIgXTtcXG4tdGhlblxcbi1cXHRUWVBFPWxpcmNfbW9kZTJcXG4tXFx0Li90ZXN0X2xpcmNfbW9kZTJfdXNlciAkTElSQ0RFViAkSU5QVVRERVZcXG4tXFx0cmV0PSQ/XFxuLVxcdGlmIFsgJHJldCAtbmUgMCBdOyB0aGVuXFxuLVxcdFxcdGVjaG8gLWUgJHtSRUR9XFxcIkZBSUw6ICRUWVBFXFxcIiR7TkN9XFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyAtZSAke0dSRUVOfVxcXCJQQVNTOiAkVFlQRVxcXCIke05DfVxcbi1cXHRmaVxcbi1maVxcbi1cXG4tZXhpdCAkcmV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE4OjIwOjIyLjMzODE2MzQ3OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMjc5NDQ3NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLyBieSBtaWdyYXRpbmcgYW4gZXhpc3RpbmcgdGVzdCB0byB0aGUgdGVzdF9wcm9ncyBmcmFtZXdvcmsuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzA4MDQyNzE5YjE1NTllMjU5OWFkNDhjYjQ4MjA3OTEyNGU4YjNjOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDE4OjIwOjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5pbmRleCAyYjJmOTNkZWM0NzRiLi5mOGVjMGY1NzQ1NTlhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbkBAIC0xMjMsNyArMTIzLDYgQEAgVEVTVF9GSUxFUyA9IHhza19wcmVyZXFzLnNoICQod2lsZGNhcmQgcHJvZ3MvYnRmX2R1bXBfdGVzdF9jYXNlXyouYylcbiBcbiAjIE9yZGVyIGNvcnJlc3BvbmQgdG8gJ21ha2UgcnVuX3Rlc3RzJyBvcmRlclxuIFRFU1RfUFJPR1MgOj0gdGVzdF9rbW9kLnNoIFxcXG4tXHR0ZXN0X2xpcmNfbW9kZTIuc2ggXFxcbiBcdHRlc3RfYnBmdG9vbF9idWlsZC5zaCBcXFxuIFx0dGVzdF9kb2NfYnVpbGQuc2ggXFxcbiBcdHRlc3RfeHNrLnNoIFxcXG5AQCAtMTQxLDcgKzE0MCw2IEBAIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEID0gXFxcbiBcdGJlbmNoIFxcXG4gXHRmbG93X2Rpc3NlY3Rvcl9sb2FkIFxcXG4gXHR0ZXN0X2NwcCBcXFxuLVx0dGVzdF9saXJjX21vZGUyX3VzZXIgXFxcbiBcdHZlcmlzdGF0IFxcXG4gXHR4ZHBfZmVhdHVyZXMgXFxcbiBcdHhkcF9od19tZXRhZGF0YSBcXFxuQEAgLTMzOCw3ICszMzYsNiBAQCAkKE9VVFBVVCkvdGVzdF9zb2NrbWFwOiAkKENHUk9VUF9IRUxQRVJTKSAkKFRFU1RJTkdfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF90Y3Bub3RpZnlfdXNlcjogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpICQoVFJBQ0VfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF9zb2NrX2ZpZWxkczogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpXG4gJChPVVRQVVQpL3Rlc3RfdGFnOiAkKFRFU1RJTkdfSEVMUEVSUylcbi0kKE9VVFBVVCkvdGVzdF9saXJjX21vZGUyX3VzZXI6ICQoVEVTVElOR19IRUxQRVJTKVxuICQoT1VUUFVUKS9mbG93X2Rpc3NlY3Rvcl9sb2FkOiAkKFRFU1RJTkdfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF9tYXBzOiAkKFRFU1RJTkdfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF92ZXJpZmllcjogJChURVNUSU5HX0hFTFBFUlMpICQoQ0FQX0hFTFBFUlMpICQoVU5QUklWX0hFTFBFUlMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTdhMzhjZDAzODQ1Y1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jXG5AQCAtMCwwICsxLDMyOCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLy8gdGVzdCBpciBkZWNvZGVyXG4rLy9cbisvLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyBcdTAwM2NzZWFuQG1lc3Mub3JnXHUwMDNlXG4rXG4rLy8gQSBsaXJjIGNoYXJkZXYgaXMgYSBkZXZpY2UgcmVwcmVzZW50aW5nIGEgY29uc3VtZXIgSVIgKGNpcikgZGV2aWNlIHdoaWNoXG4rLy8gY2FuIHJlY2VpdmUgaW5mcmFyZWQgc2lnbmFscyBmcm9tIHJlbW90ZSBjb250cm9sIGFuZC9vciB0cmFuc21pdCBJUi5cbisvL1xuKy8vIElSIGlzIHNlbnQgYXMgYSBzZXJpZXMgb2YgcHVsc2VzIGFuZCBzcGFjZSBzb21ld2hhdCBsaWtlIG1vcnNlIGNvZGUuIFRoZVxuKy8vIEJQRiBwcm9ncmFtIGNhbiBkZWNvZGUgdGhpcyBpbnRvIHNjYW5jb2RlcyBzbyB0aGF0IHJjLWNvcmUgY2FuIHRyYW5zbGF0ZVxuKy8vIHRoaXMgaW50byBpbnB1dCBrZXkgY29kZXMgdXNpbmcgdGhlIHJjIGtleW1hcC5cbisvL1xuKy8vIFRoaXMgdGVzdCB3b3JrcyBieSBzZW5kaW5nIElSIG92ZXIgcmMtbG9vcGJhY2ssIHNvIHRoZSBJUiBpcyBwcm9jZXNzZWQgYnlcbisvLyBCUEYgYW5kIHRoZW4gZGVjb2RlZCBpbnRvIHNjYW5jb2Rlcy4gVGhlIGxpcmMgY2hhcmRldiBtdXN0IGJlIHRoZSBvbmVcbisvLyBhc3NvY2lhdGVkIHdpdGggcmMtbG9vcGJhY2ssIHNlZSB0aGUgb3V0cHV0IG9mIGlyLWtleXRhYmxlKDEpLlxuKy8vXG4rLy8gVGhlIGZvbGxvd2luZyBDT05GSUcgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoZSB0ZXN0IHRvIHN1Y2NlZWQ6XG4rLy8gQ09ORklHX1JDX0NPUkU9eVxuKy8vIENPTkZJR19CUEZfUkFXSVJfRVZFTlQ9eVxuKy8vIENPTkZJR19SQ19MT09QQkFDSz15XG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5wdXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpcmMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2dsb2IuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJsaXJjX21vZGUyLnNrZWwuaFwiXG4rXG4rLyogUmVhZCB0aGUgREVWTkFNRT0gbGluZSBvdXQgb2YgdGhlIGZpcnN0IHVldmVudCBmaWxlIHRoYXQgbWF0Y2hlc1xuKyAqIHBhdHRlcm4sIGFuZCB0dXJuIGl0IGludG8gYSAvZGV2L1x1MDAzY25hbWVcdTAwM2UgcGF0aC5cbisgKi9cbitzdGF0aWMgYm9vbCBmaW5kX2Rldm5hbWUoY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfc3opXG4re1xuK1x0Z2xvYl90IGdsID0ge307XG4rXHRib29sIGZvdW5kID0gZmFsc2U7XG4rXHRGSUxFICpmO1xuK1xuK1x0aWYgKGdsb2IocGF0dGVybiwgMCwgTlVMTCwgXHUwMDI2Z2wpIHx8IGdsLmdsX3BhdGhjID09IDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0ZiA9IGZvcGVuKGdsLmdsX3BhdGh2WzBdLCBcInJcIik7XG4rXHRpZiAoIWYpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0Y2hhciBsaW5lWzI1Nl07XG4rXG4rXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkge1xuK1x0XHRjaGFyICp2YWw7XG4rXG4rXHRcdGlmIChzdHJuY21wKGxpbmUsIFwiREVWTkFNRT1cIiwgOCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHZhbCA9IGxpbmUgKyA4O1xuK1x0XHR2YWxbc3RyY3Nwbih2YWwsIFwiXFxuXCIpXSA9ICdcXDAnO1xuK1x0XHRzbnByaW50ZihwYXRoLCBwYXRoX3N6LCBcIi9kZXYvJXNcIiwgdmFsKTtcbitcdFx0Zm91bmQgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdGZjbG9zZShmKTtcbitvdXQ6XG4rXHRnbG9iZnJlZShcdTAwMjZnbCk7XG4rXHRyZXR1cm4gZm91bmQ7XG4rfVxuK1xuKy8qIExvYWQgcmMtbG9vcGJhY2sgYW5kIGZpbmQgdGhlIGxpcmMgYW5kIGlucHV0IGNoYXJkZXZzIGl0IGNyZWF0ZWQuICovXG4rc3RhdGljIGJvb2wgZmluZF9sb29wYmFja19kZXZpY2VzKGNoYXIgKmxpcmNfcGF0aCwgY2hhciAqaW5wdXRfcGF0aCxcbitcdFx0XHRcdCAgc2l6ZV90IHBhdGhfc3opXG4re1xuK1x0Z2xvYl90IGdsID0ge307XG4rXHRib29sIGZvdW5kID0gZmFsc2U7XG4rXG4rXHQvKiBJZ25vcmUgZmFpbHVyZSwgd2UgY2hlY2sgZm9yIHRoZSByZXN1bHRpbmcgZGV2aWNlcyBiZWxvdy4gKi9cbitcdHN5c3RlbShcIm1vZHByb2JlIHJjLWxvb3BiYWNrIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcIik7XG4rXG4rXHRpZiAoZ2xvYihcIi9zeXMvY2xhc3MvcmMvcmMqXCIsIDAsIE5VTEwsIFx1MDAyNmdsKSkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJObyByYyBkZXZpY2VzIGZvdW5kLCBpcyBDT05GSUdfUkNfTE9PUEJBQ0sgZW5hYmxlZD9cXG5cIik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBnbC5nbF9wYXRoYzsgaSsrKSB7XG4rXHRcdGNvbnN0IGNoYXIgKnJjZGlyID0gZ2wuZ2xfcGF0aHZbaV07XG4rXHRcdGNoYXIgdWV2ZW50X3BhdGhbUEFUSF9NQVhdO1xuK1x0XHRjaGFyIHVldmVudFs0MDk2XTtcbitcdFx0Y2hhciBwYXR0ZXJuW1BBVEhfTUFYXTtcbitcdFx0RklMRSAqZjtcbitcdFx0c2l6ZV90IG47XG4rXG4rXHRcdHNucHJpbnRmKHVldmVudF9wYXRoLCBzaXplb2YodWV2ZW50X3BhdGgpLCBcIiVzL3VldmVudFwiLCByY2Rpcik7XG4rXHRcdGYgPSBmb3Blbih1ZXZlbnRfcGF0aCwgXCJyXCIpO1xuK1x0XHRpZiAoIWYpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdG4gPSBmcmVhZCh1ZXZlbnQsIDEsIHNpemVvZih1ZXZlbnQpIC0gMSwgZik7XG4rXHRcdGZjbG9zZShmKTtcbitcdFx0dWV2ZW50W25dID0gJ1xcMCc7XG4rXG4rXHRcdGlmICghc3Ryc3RyKHVldmVudCwgXCJEUlZfTkFNRT1yYy1sb29wYmFja1wiKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c25wcmludGYocGF0dGVybiwgc2l6ZW9mKHBhdHRlcm4pLCBcIiVzL2xpcmMqL3VldmVudFwiLCByY2Rpcik7XG4rXHRcdGlmICghZmluZF9kZXZuYW1lKHBhdHRlcm4sIGxpcmNfcGF0aCwgcGF0aF9zeikpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHNucHJpbnRmKHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSwgXCIlcy9pbnB1dCovZXZlbnQqL3VldmVudFwiLCByY2Rpcik7XG4rXHRcdGlmICghZmluZF9kZXZuYW1lKHBhdHRlcm4sIGlucHV0X3BhdGgsIHBhdGhfc3opKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRmb3VuZCA9IHRydWU7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0Z2xvYmZyZWUoXHUwMDI2Z2wpO1xuK1x0cmV0dXJuIGZvdW5kO1xuK31cbitcbit2b2lkIHRlc3RfbGlyY19tb2RlMih2b2lkKVxuK3tcbitcdGNoYXIgbGlyY19wYXRoW1BBVEhfTUFYXSwgaW5wdXRfcGF0aFtQQVRIX01BWF07XG4rXHRpbnQgbGlyY2ZkID0gLTEsIGlucHV0ZmQgPSAtMSwgcHJvZ2ZkLCBwcm9nZmQyID0gLTE7XG4rXHRzdHJ1Y3QgbGlyY19tb2RlMiAqc2tlbCA9IE5VTEwsICpza2VsMiA9IE5VTEw7XG4rXHRfX3UzMiBwcm9nX2lkc1sxMF0sIHByb2dfZmxhZ3NbMTBdLCBwcm9nX2NudDtcbitcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm87XG4rXHRfX3UzMiBpbmZvX2xlbiwgcHJvZ19pZCwgcHJvZ19pZDI7XG4rXHRpbnQgdGVzdGlyMSA9IDB4OGVhZDtcdC8qIGtleWRvd24gZmxhZyAoMHg4MDAwKSB8IHNjYW5jb2RlIDB4ZWFkICovXG4rXHRpbnQgdGVzdGlyMiA9IDB4NDA4MTtcdC8qIHBvaW50ZXJfcmVsIGZsYWcgKDB4NDAwMCkgfCByZWxfeD0xIHwgcmVsX3k9MSAqL1xuK1x0c3RydWN0IGlucHV0X2V2ZW50IGV2ZW50O1xuK1x0c3RydWN0IHBvbGxmZCBwZmQgPSB7fTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoZ2V0dWlkKCkgIT0gMCkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmICghZmluZF9sb29wYmFja19kZXZpY2VzKGxpcmNfcGF0aCwgaW5wdXRfcGF0aCwgc2l6ZW9mKGxpcmNfcGF0aCkpKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c2tlbCA9IGxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHByb2dmZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmJwZl9kZWNvZGVyKTtcbitcbitcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuK1x0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4rXHRyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nZmQsIFx1MDAyNmluZm8sIFx1MDAyNmluZm9fbGVuKTtcbitcdGlmICghQVNTRVJUX09LKHJldCwgXCJnZXQgZmlyc3QgcHJvZ3JhbSdzIGluZm9cIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0cHJvZ19pZCA9IGluZm8uaWQ7XG4rXG4rXHRsaXJjZmQgPSBvcGVuKGxpcmNfcGF0aCwgT19SRFdSIHwgT19OT05CTE9DSyk7XG4rXHRpZiAoIUFTU0VSVF9HRShsaXJjZmQsIDAsIFwib3BlbiBsaXJjIGRldmljZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBUcnkgdG8gZGV0YWNoIGl0IGJlZm9yZSBpdCB3YXMgZXZlciBhdHRhY2hlZCwgc2hvdWxkIGZhaWwuICovXG4rXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIC1FTk9FTlQsIFwiZGV0YWNoIHVuYXR0YWNoZWQgcHJvZ3JhbVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpbnB1dGZkID0gb3BlbihpbnB1dF9wYXRoLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spO1xuK1x0aWYgKCFBU1NFUlRfR0UoaW5wdXRmZCwgMCwgXCJvcGVuIGlucHV0IGRldmljZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuK1x0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4rXHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwicXVlcnkgcHJvZ3JhbXMgYmVmb3JlIGF0dGFjaFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMCwgXCJubyBwcm9ncmFtcyBzaG91bGQgYmUgYXR0YWNoZWQgeWV0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEludmFsaWQgYXR0YWNoIGZsYWdzIG11c3QgYmUgcmVqZWN0ZWQsIGFuZCBtdXN0IG5vdCBhdHRhY2guICovXG4rXHRyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAxKTtcbitcdGlmICghQVNTRVJUX0VRKHJldCwgLUVJTlZBTCwgXCJhdHRhY2ggd2l0aCBpbnZhbGlkIGZsYWdzXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XG4rXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbitcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbitcdGlmICghQVNTRVJUX09LKHJldCwgXCJxdWVyeSBwcm9ncmFtcyBhZnRlciByZWplY3RlZCBhdHRhY2hcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDAsIFwicmVqZWN0ZWQgYXR0YWNoIHNob3VsZCBub3QgYXR0YWNoXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IGJwZl9wcm9nX2F0dGFjaChwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDApO1xuK1x0aWYgKCFBU1NFUlRfT0socmV0LCBcImF0dGFjaCBwcm9ncmFtIHRvIGxpcmMgZGV2aWNlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEludmFsaWQgcXVlcnkgZmxhZ3MgbXVzdCBiZSByZWplY3RlZCB0b28sIHdpdGhvdXQgdXBzZXR0aW5nIHN0YXRlLiAqL1xuK1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbitcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDEsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuK1x0XHRcdCAgICAgXHUwMDI2cHJvZ19jbnQpO1xuK1x0QVNTRVJUX0VRKHJldCwgLUVJTlZBTCwgXCJxdWVyeSB3aXRoIGludmFsaWQgZmxhZ3NcIik7XG4rXG4rXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuK1x0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4rXHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgYXR0YWNoXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMSwgXCJvbmUgcHJvZ3JhbSBzaG91bGQgYmUgYXR0YWNoZWRcIikpXG4rXHRcdGdvdG8gb3V0X2RldGFjaDtcbitcdEFTU0VSVF9FUShwcm9nX2lkc1swXSwgcHJvZ19pZCwgXCJxdWVyaWVkIGlkIHNob3VsZCBtYXRjaCBhdHRhY2hlZCBwcm9ncmFtXCIpO1xuK1xuK1x0LyogV3JpdGUgcmF3IElSICovXG4rXHRyZXQgPSB3cml0ZShsaXJjZmQsIFx1MDAyNnRlc3RpcjEsIHNpemVvZih0ZXN0aXIxKSk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZih0ZXN0aXIxKSwgXCJzZW5kIHRlc3QgSVIgbWVzc2FnZSAxXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXG4rXHRwZmQuZmQgPSBpbnB1dGZkO1xuK1x0cGZkLmV2ZW50cyA9IFBPTExJTjtcbitcbitcdGZvciAoOzspIHtcbitcdFx0cG9sbChcdTAwMjZwZmQsIDEsIDEwMCk7XG4rXG4rXHRcdC8qIFJlYWQgZGVjb2RlZCBJUiAqL1xuK1x0XHRyZXQgPSByZWFkKGlucHV0ZmQsIFx1MDAyNmV2ZW50LCBzaXplb2YoZXZlbnQpKTtcbitcdFx0aWYgKCFBU1NFUlRfRVEocmV0LCBzaXplb2YoZXZlbnQpLCBcInJlYWQgZGVjb2RlZCBJUiAxXCIpKVxuK1x0XHRcdGdvdG8gb3V0X2RldGFjaDtcbitcbitcdFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfTVNDIFx1MDAyNlx1MDAyNiBldmVudC5jb2RlID09IE1TQ19TQ0FOIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZXZlbnQudmFsdWUgPT0gMHhlYWQpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHQvKiBXcml0ZSByYXcgSVIgKi9cbitcdHJldCA9IHdyaXRlKGxpcmNmZCwgXHUwMDI2dGVzdGlyMiwgc2l6ZW9mKHRlc3RpcjIpKTtcbitcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKHRlc3RpcjIpLCBcInNlbmQgdGVzdCBJUiBtZXNzYWdlIDJcIikpXG4rXHRcdGdvdG8gb3V0X2RldGFjaDtcbitcbitcdGZvciAoOzspIHtcbitcdFx0cG9sbChcdTAwMjZwZmQsIDEsIDEwMCk7XG4rXG4rXHRcdC8qIFJlYWQgZGVjb2RlZCBJUiAqL1xuK1x0XHRyZXQgPSByZWFkKGlucHV0ZmQsIFx1MDAyNmV2ZW50LCBzaXplb2YoZXZlbnQpKTtcbitcdFx0aWYgKCFBU1NFUlRfRVEocmV0LCBzaXplb2YoZXZlbnQpLCBcInJlYWQgZGVjb2RlZCBJUiAyXCIpKVxuK1x0XHRcdGdvdG8gb3V0X2RldGFjaDtcbitcbitcdFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfUkVMIFx1MDAyNlx1MDAyNiBldmVudC5jb2RlID09IFJFTF9ZIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZXZlbnQudmFsdWUgPT0gMSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XG4rXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbitcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbitcdGlmICghQVNTRVJUX09LKHJldCwgXCJxdWVyeSBwcm9ncmFtcyBhZnRlciBJUiB3YXMgZGVjb2RlZFwiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoO1xuK1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFwib25lIHByb2dyYW0gc2hvdWxkIHN0aWxsIGJlIGF0dGFjaGVkXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXG4rXHQvKlxuK1x0ICogVGhlIGxpcmMgY2hhcmRldiBjYW4gaG9sZCBtb3JlIHRoYW4gb25lIGF0dGFjaGVkIHByb2dyYW0gYXQgb25jZS5cbitcdCAqIExvYWQgYSBzZWNvbmQsIGluZGVwZW5kZW50IGluc3RhbmNlIGFuZCBjaGVjayBpdCBjYW4gYmUgYXR0YWNoZWRcbitcdCAqIGFsb25nc2lkZSB0aGUgZmlyc3QsIHF1ZXJpZWQsIGFuZCB0aGVuIGRldGFjaGVkIG9uIGl0cyBvd25cbitcdCAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgZmlyc3QgcHJvZ3JhbSdzIGF0dGFjaG1lbnQuXG4rXHQgKi9cbitcdHNrZWwyID0gbGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwyLCBcImxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQgKDJuZClcIikpXG4rXHRcdGdvdG8gb3V0X2RldGFjaDtcbitcbitcdHByb2dmZDIgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbDItXHUwMDNlcHJvZ3MuYnBmX2RlY29kZXIpO1xuK1xuK1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG4rXHRpbmZvX2xlbiA9IHNpemVvZihpbmZvKTtcbitcdHJldCA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHByb2dmZDIsIFx1MDAyNmluZm8sIFx1MDAyNmluZm9fbGVuKTtcbitcdGlmICghQVNTRVJUX09LKHJldCwgXCJnZXQgc2Vjb25kIHByb2dyYW0ncyBpbmZvXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXHRwcm9nX2lkMiA9IGluZm8uaWQ7XG4rXG4rXHRyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwiYXR0YWNoIHNlY29uZCBwcm9ncmFtIHRvIGxpcmMgZGV2aWNlXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXG4rXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuK1x0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4rXHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgc2Vjb25kIGF0dGFjaFwiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoMjtcbitcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAyLCBcInR3byBwcm9ncmFtcyBzaG91bGQgYmUgYXR0YWNoZWRcIikpXG4rXHRcdGdvdG8gb3V0X2RldGFjaDI7XG4rXHRBU1NFUlRfVFJVRSgocHJvZ19pZHNbMF0gPT0gcHJvZ19pZCBcdTAwMjZcdTAwMjYgcHJvZ19pZHNbMV0gPT0gcHJvZ19pZDIpIHx8XG4rXHRcdCAgICAocHJvZ19pZHNbMF0gPT0gcHJvZ19pZDIgXHUwMDI2XHUwMDI2IHByb2dfaWRzWzFdID09IHByb2dfaWQpLFxuK1x0XHQgICAgXCJxdWVyaWVkIGlkcyBzaG91bGQgYmUgdGhlIHR3byBhdHRhY2hlZCBwcm9ncmFtc1wiKTtcbitcbitcdC8qIERldGFjaCB0aGUgc2Vjb25kIHByb2dyYW07IHRoZSBmaXJzdCBzaG91bGQgcmVtYWluIGF0dGFjaGVkLiAqL1xuK1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcbitcdGlmICghQVNTRVJUX09LKHJldCwgXCJkZXRhY2ggc2Vjb25kIHByb2dyYW1cIikpXG4rXHRcdGdvdG8gb3V0X2RldGFjaDI7XG4rXG4rXHQvKiBEZXRhY2hpbmcgYW4gYWxyZWFkeS1kZXRhY2hlZCBwcm9ncmFtIHNob3VsZCBub3cgZmFpbC4gKi9cbitcdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4rXHRBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCBcImRldGFjaCBzZWNvbmQgcHJvZ3JhbSBhZ2FpblwiKTtcbitcbitcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XG4rXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbitcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbitcdGlmICghQVNTRVJUX09LKHJldCwgXCJxdWVyeSBwcm9ncmFtcyBhZnRlciBzZWNvbmQgZGV0YWNoXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMSwgXCJvbmUgcHJvZ3JhbSBzaG91bGQgcmVtYWluIGF0dGFjaGVkXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXHRBU1NFUlRfRVEocHJvZ19pZHNbMF0sIHByb2dfaWQsIFwicmVtYWluaW5nIHByb2dyYW0gc2hvdWxkIGJlIHRoZSBmaXJzdCBvbmVcIik7XG4rXG4rb3V0X2RldGFjaDpcbitcdC8qIExldCdzIHRyeSBkZXRhY2hpbmcgaXQgbm93IGl0IGlzIGFjdHVhbGx5IGF0dGFjaGVkLiAqL1xuK1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuK1x0QVNTRVJUX09LKHJldCwgXCJkZXRhY2ggcHJvZ3JhbSBmcm9tIGxpcmMgZGV2aWNlXCIpO1xuK1xuK1x0LyogRGV0YWNoaW5nIGl0IGFnYWluIHNob3VsZCBub3cgZmFpbCB0aGUgc2FtZSB3YXkuICovXG4rXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4rXHRBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCBcImRldGFjaCBwcm9ncmFtIGZyb20gbGlyYyBkZXZpY2UgYWdhaW5cIik7XG4rXHRnb3RvIG91dDtcbitcbitvdXRfZGV0YWNoMjpcbitcdC8qIEJlc3QtZWZmb3J0IGNsZWFudXAgb2YgdGhlIHNlY29uZCBwcm9ncmFtIGJlZm9yZSBiYWlsaW5nIG91dC4gKi9cbitcdGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4rXHRnb3RvIG91dF9kZXRhY2g7XG4rXG4rb3V0OlxuK1x0aWYgKGlucHV0ZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShpbnB1dGZkKTtcbitcdGlmIChsaXJjZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShsaXJjZmQpO1xuK1x0bGlyY19tb2RlMl9fZGVzdHJveShza2VsMik7XG4rXHRsaXJjX21vZGUyX19kZXN0cm95KHNrZWwpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4MTM3ZjNjNWMwM2Rcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmNcbkBAIC0wLDAgKzEsMzIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8vIHRlc3QgaXIgZGVjb2RlclxuKy8vXG4rLy8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgXHUwMDNjc2VhbkBtZXNzLm9yZ1x1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGlyYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbitcbitTRUMoXCJsaXJjX21vZGUyXCIpXG4raW50IGJwZl9kZWNvZGVyKHVuc2lnbmVkIGludCAqc2FtcGxlKVxuK3tcbitcdGlmIChMSVJDX0lTX1BVTFNFKCpzYW1wbGUpKSB7XG4rXHRcdHVuc2lnbmVkIGludCBkdXJhdGlvbiA9IExJUkNfVkFMVUUoKnNhbXBsZSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEZsYWcgYml0cyBwaWNrZWQgZGVsaWJlcmF0ZWx5IGxvdzogcmMtbG9vcGJhY2sgc2ltdWxhdGVzXG4rXHRcdCAqIGEgcmVjZWl2ZXIgb3ZlcmZsb3cgZm9yIGFueSBwdWxzZSBvdmVyIE1TX1RPX1VTKDUwKSAoc2VlXG4rXHRcdCAqIGxvb3BfdHhfaXIoKSBpbiByYy1sb29wYmFjay5jKSwgd2hpY2ggd291bGQgc2lsZW50bHlcbitcdFx0ICogc3dhbGxvdyB0aGUgc2FtcGxlIGJlZm9yZSBpdCBldmVyIHJlYWNoZXMgdGhpcyBkZWNvZGVyLlxuK1x0XHQgKi9cbitcdFx0aWYgKGR1cmF0aW9uIFx1MDAyNiAweDgwMDApXG4rXHRcdFx0YnBmX3JjX2tleWRvd24oc2FtcGxlLCAweDQwLCBkdXJhdGlvbiBcdTAwMjYgMHgzZmZmLCAwKTtcbitcdFx0aWYgKGR1cmF0aW9uIFx1MDAyNiAweDQwMDApXG4rXHRcdFx0YnBmX3JjX3BvaW50ZXJfcmVsKHNhbXBsZSwgKGR1cmF0aW9uIFx1MDAzZVx1MDAzZSA3KSBcdTAwMjYgMHg3ZixcbitcdFx0XHRcdFx0ICAgZHVyYXRpb24gXHUwMDI2IDB4N2YpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xpcmNfbW9kZTJfa2Vybi5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGNiZTQyODRjMDMyZmUuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xpcmNfbW9kZTJfa2Vybi5jXG4rKysgL2Rldi9udWxsXG5AQCAtMSwyNiArMCwwIEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbi0vLyB0ZXN0IGlyIGRlY29kZXJcbi0vL1xuLS8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nIFx1MDAzY3NlYW5AbWVzcy5vcmdcdTAwM2Vcbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpcmMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4tXG4tU0VDKFwibGlyY19tb2RlMlwiKVxuLWludCBicGZfZGVjb2Rlcih1bnNpZ25lZCBpbnQgKnNhbXBsZSlcbi17XG4tXHRpZiAoTElSQ19JU19QVUxTRSgqc2FtcGxlKSkge1xuLVx0XHR1bnNpZ25lZCBpbnQgZHVyYXRpb24gPSBMSVJDX1ZBTFVFKCpzYW1wbGUpO1xuLVxuLVx0XHRpZiAoZHVyYXRpb24gXHUwMDI2IDB4MTAwMClcbi1cdFx0XHRicGZfcmNfa2V5ZG93bihzYW1wbGUsIDB4NDAsIGR1cmF0aW9uIFx1MDAyNiAweGZmZmYsIDApO1xuLVx0XHRpZiAoZHVyYXRpb24gXHUwMDI2IDB4MjAwMClcbi1cdFx0XHRicGZfcmNfcG9pbnRlcl9yZWwoc2FtcGxlLCAoZHVyYXRpb24gXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweGZmLFxuLVx0XHRcdFx0XHQgICBkdXJhdGlvbiBcdTAwMjYgMHhmZik7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTIuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDUyNTJiOTFmNDhhMTguLjAwMDAwMDAwMDAwMDBcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTIuc2hcbisrKyAvZGV2L251bGxcbkBAIC0xLDQxICswLDAgQEBcbi0jIS9iaW4vYmFzaFxuLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbi1cbi0jIEtzZWxmdGVzdCBmcmFtZXdvcmsgcmVxdWlyZW1lbnQgLSBTS0lQIGNvZGUgaXMgNC5cbi1rc2Z0X3NraXA9NFxuLXJldD0ka3NmdF9za2lwXG4tXG4tbXNnPVwic2tpcCBhbGwgdGVzdHM6XCJcbi1pZiBbICRVSUQgIT0gMCBdOyB0aGVuXG4tXHRlY2hvICRtc2cgcGxlYXNlIHJ1biB0aGlzIGFzIHJvb3QgXHUwMDNlXHUwMDI2MlxuLVx0ZXhpdCAka3NmdF9za2lwXG4tZmlcbi1cbi1HUkVFTj0nXFwwMzNbMDs5Mm0nXG4tUkVEPSdcXDAzM1swOzMxbSdcbi1OQz0nXFwwMzNbMG0nICMgTm8gQ29sb3Jcbi1cbi1tb2Rwcm9iZSByYy1sb29wYmFja1xuLVxuLWZvciBpIGluIC9zeXMvY2xhc3MvcmMvcmMqXG4tZG9cbi1cdGlmIGdyZXAgLXEgRFJWX05BTUU9cmMtbG9vcGJhY2sgJGkvdWV2ZW50XG4tXHR0aGVuXG4tXHRcdExJUkNERVY9JChncmVwIERFVk5BTUU9ICRpL2xpcmMqL3VldmVudCB8IHNlZCBzUURFVk5BTUU9US9kZXYvUSlcbi1cdFx0SU5QVVRERVY9JChncmVwIERFVk5BTUU9ICRpL2lucHV0Ki9ldmVudCovdWV2ZW50IHwgc2VkIHNRREVWTkFNRT1RL2Rldi9RKVxuLVx0Zmlcbi1kb25lXG4tXG4taWYgWyAtbiBcIiRMSVJDREVWXCIgXTtcbi10aGVuXG4tXHRUWVBFPWxpcmNfbW9kZTJcbi1cdC4vdGVzdF9saXJjX21vZGUyX3VzZXIgJExJUkNERVYgJElOUFVUREVWXG4tXHRyZXQ9JD9cbi1cdGlmIFsgJHJldCAtbmUgMCBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgJHtSRUR9XCJGQUlMOiAkVFlQRVwiJHtOQ31cbi1cdGVsc2Vcbi1cdFx0ZWNobyAtZSAke0dSRUVOfVwiUEFTUzogJFRZUEVcIiR7TkN9XG4tXHRmaVxuLWZpXG4tXG4tZXhpdCAkcmV0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxODoyMDoyMi4zMzgxNjU3OTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI3OTM5MjUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBTZWxmdGVzdCBNaWdyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBhIHJlZmFjdG9yaW5nLCBzcGVjaWZpY2FsbHkgcmVtb3ZpbmcgdGhlIG9sZCBgdGVzdF9saXJjX21vZGUyLnNoYCwgYHRlc3RfbGlyY19tb2RlMl9rZXJuLmNgLCBhbmQgYHRlc3RfbGlyY19tb2RlMl91c2VyLmNgIChvaCwgaXQgYWxzbyByZW1vdmVzIGB0ZXN0X2xpcmNfbW9kZTJfdXNlcmAgZnJvbSB0aGUgYE1ha2VmaWxlYCksIGFuZCByZXBsYWNpbmcgaXQgd2l0aCBgcHJvZ190ZXN0cy9saXJjX21vZGUyLmNgIGFuZCBgcHJvZ3MvbGlyY19tb2RlMi5jYC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBtaWdyYXRpb24gZnJvbSB0aGUgb2xkZXIgYmFzaC91c2VyIGZvcm1hdCB0byB0aGUgbmV3ZXIgYHRlc3RfcHJvZ3NgIGZyYW1ld29yayB3aXRoaW4gdGhlIEJQRiBzZWxmdGVzdHMuXG5cblNpbmNlIHRoZSBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBzZWxmdGVzdHMgZGlyZWN0b3J5LCBteSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgKnNob3VsZG4ndCogaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlIGRpZmYgZG9lc24ndCB0b3VjaCBhbnl0aGluZyBvdXRzaWRlIG9mIHRoYXQgZGlyZWN0b3J5LiBZZXAsIGNvbmZpcm1pbmcgdGhhdCB0aGUgY2hhbmdlIGlzIGNvbnRhaW5lZCBzb2xlbHkgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkkgcXVpY2tseSB3ZW50IHRocm91Z2ggdGhlIHJ1bGVzIGFnYWluIHRvIGNvbmZpcm0gbXkganVkZ2VtZW50LiBUaGUgcnVsZXMgc2VlbSB0byBjb25maXJtIHRoZSBjaG9pY2UuIFNlbGZ0ZXN0cyBhcmUgdXNlcnNwYWNlIHRlc3RzIGFuZCBhcmUgbm90IGtlcm5lbCBjb2RlOyB0aGV5IGRvbid0IGludHJvZHVjZSBrZXJuZWwgY29kZSB0aGF0IHdhcnJhbnRzIGZ1enppbmcuIFRoZXJlZm9yZSBJIHdpbGwgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg4OCwiT3V0cHV0VG9rZW5zIjo3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE4OjIwOjMyLjYxNzU2MjkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLyBieSBtaWdyYXRpbmcgYW4gZXhpc3RpbmcgdGVzdCB0byB0aGUgdGVzdF9wcm9ncyBmcmFtZXdvcmsuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8gYnkgbWlncmF0aW5nIGFuIGV4aXN0aW5nIHRlc3QgdG8gdGhlIHRlc3RfcHJvZ3MgZnJhbWV3b3JrLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE4OjIwOjMyLjYxNzYyNDMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowblt4p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 17:59:01 +0000 UTC FinishedAt: 2026-08-20 18:20:34 +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+CgkJCTx0ZD4yMDI2LzA4LzIwIDE4OjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8gYnkgbWlncmF0aW5nIGFuIGV4aXN0aW5nIHRlc3QgdG8gdGhlIHRlc3RfcHJvZ3MgZnJhbWV3b3JrLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTg6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MDgwNDI3MTliMTU1OWUyNTk5YWQ0OGNiNDgyMDc5MTI0ZThiM2M5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTg6MjA6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5pbmRleCAyYjJmOTNkZWM0NzRiLi5mOGVjMGY1NzQ1NTlhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbkBAIC0xMjMsNyAmIzQzOzEyMyw2IEBAIFRFU1RfRklMRVMgPSB4c2tfcHJlcmVxcy5zaCAkKHdpbGRjYXJkIHByb2dzL2J0Zl9kdW1wX3Rlc3RfY2FzZV8qLmMpXG4gXG4gIyBPcmRlciBjb3JyZXNwb25kIHRvICYjMzk7bWFrZSBydW5fdGVzdHMmIzM5OyBvcmRlclxuIFRFU1RfUFJPR1MgOj0gdGVzdF9rbW9kLnNoIFxcXG4tXHR0ZXN0X2xpcmNfbW9kZTIuc2ggXFxcbiBcdHRlc3RfYnBmdG9vbF9idWlsZC5zaCBcXFxuIFx0dGVzdF9kb2NfYnVpbGQuc2ggXFxcbiBcdHRlc3RfeHNrLnNoIFxcXG5AQCAtMTQxLDcgJiM0MzsxNDAsNiBAQCBURVNUX0dFTl9QUk9HU19FWFRFTkRFRCA9IFxcXG4gXHRiZW5jaCBcXFxuIFx0Zmxvd19kaXNzZWN0b3JfbG9hZCBcXFxuIFx0dGVzdF9jcHAgXFxcbi1cdHRlc3RfbGlyY19tb2RlMl91c2VyIFxcXG4gXHR2ZXJpc3RhdCBcXFxuIFx0eGRwX2ZlYXR1cmVzIFxcXG4gXHR4ZHBfaHdfbWV0YWRhdGEgXFxcbkBAIC0zMzgsNyAmIzQzOzMzNiw2IEBAICQoT1VUUFVUKS90ZXN0X3NvY2ttYXA6ICQoQ0dST1VQX0hFTFBFUlMpICQoVEVTVElOR19IRUxQRVJTKVxuICQoT1VUUFVUKS90ZXN0X3RjcG5vdGlmeV91c2VyOiAkKENHUk9VUF9IRUxQRVJTKSAkKFRFU1RJTkdfSEVMUEVSUykgJChUUkFDRV9IRUxQRVJTKVxuICQoT1VUUFVUKS90ZXN0X3NvY2tfZmllbGRzOiAkKENHUk9VUF9IRUxQRVJTKSAkKFRFU1RJTkdfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF90YWc6ICQoVEVTVElOR19IRUxQRVJTKVxuLSQoT1VUUFVUKS90ZXN0X2xpcmNfbW9kZTJfdXNlcjogJChURVNUSU5HX0hFTFBFUlMpXG4gJChPVVRQVVQpL2Zsb3dfZGlzc2VjdG9yX2xvYWQ6ICQoVEVTVElOR19IRUxQRVJTKVxuICQoT1VUUFVUKS90ZXN0X21hcHM6ICQoVEVTVElOR19IRUxQRVJTKVxuICQoT1VUUFVUKS90ZXN0X3ZlcmlmaWVyOiAkKFRFU1RJTkdfSEVMUEVSUykgJChDQVBfSEVMUEVSUykgJChVTlBSSVZfSEVMUEVSUylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saXJjX21vZGUyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saXJjX21vZGUyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xN2EzOGNkMDM4NDVjXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saXJjX21vZGUyLmNcbkBAIC0wLDAgJiM0MzsxLDMyOCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvLyB0ZXN0IGlyIGRlY29kZXJcbiYjNDM7Ly9cbiYjNDM7Ly8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgXHUwMDNjc2VhbkBtZXNzLm9yZ1x1MDAzZVxuJiM0MztcbiYjNDM7Ly8gQSBsaXJjIGNoYXJkZXYgaXMgYSBkZXZpY2UgcmVwcmVzZW50aW5nIGEgY29uc3VtZXIgSVIgKGNpcikgZGV2aWNlIHdoaWNoXG4mIzQzOy8vIGNhbiByZWNlaXZlIGluZnJhcmVkIHNpZ25hbHMgZnJvbSByZW1vdGUgY29udHJvbCBhbmQvb3IgdHJhbnNtaXQgSVIuXG4mIzQzOy8vXG4mIzQzOy8vIElSIGlzIHNlbnQgYXMgYSBzZXJpZXMgb2YgcHVsc2VzIGFuZCBzcGFjZSBzb21ld2hhdCBsaWtlIG1vcnNlIGNvZGUuIFRoZVxuJiM0MzsvLyBCUEYgcHJvZ3JhbSBjYW4gZGVjb2RlIHRoaXMgaW50byBzY2FuY29kZXMgc28gdGhhdCByYy1jb3JlIGNhbiB0cmFuc2xhdGVcbiYjNDM7Ly8gdGhpcyBpbnRvIGlucHV0IGtleSBjb2RlcyB1c2luZyB0aGUgcmMga2V5bWFwLlxuJiM0MzsvL1xuJiM0MzsvLyBUaGlzIHRlc3Qgd29ya3MgYnkgc2VuZGluZyBJUiBvdmVyIHJjLWxvb3BiYWNrLCBzbyB0aGUgSVIgaXMgcHJvY2Vzc2VkIGJ5XG4mIzQzOy8vIEJQRiBhbmQgdGhlbiBkZWNvZGVkIGludG8gc2NhbmNvZGVzLiBUaGUgbGlyYyBjaGFyZGV2IG11c3QgYmUgdGhlIG9uZVxuJiM0MzsvLyBhc3NvY2lhdGVkIHdpdGggcmMtbG9vcGJhY2ssIHNlZSB0aGUgb3V0cHV0IG9mIGlyLWtleXRhYmxlKDEpLlxuJiM0MzsvL1xuJiM0MzsvLyBUaGUgZm9sbG93aW5nIENPTkZJRyBvcHRpb25zIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhlIHRlc3QgdG8gc3VjY2VlZDpcbiYjNDM7Ly8gQ09ORklHX1JDX0NPUkU9eVxuJiM0MzsvLyBDT05GSUdfQlBGX1JBV0lSX0VWRU5UPXlcbiYjNDM7Ly8gQ09ORklHX1JDX0xPT1BCQUNLPXlcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lucHV0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGlyYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2dsb2IuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2xpcmNfbW9kZTIuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiBSZWFkIHRoZSBERVZOQU1FPSBsaW5lIG91dCBvZiB0aGUgZmlyc3QgdWV2ZW50IGZpbGUgdGhhdCBtYXRjaGVzXG4mIzQzOyAqIHBhdHRlcm4sIGFuZCB0dXJuIGl0IGludG8gYSAvZGV2L1x1MDAzY25hbWVcdTAwM2UgcGF0aC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGZpbmRfZGV2bmFtZShjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9zeilcbiYjNDM7e1xuJiM0MztcdGdsb2JfdCBnbCA9IHt9O1xuJiM0MztcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiYjNDM7XHRGSUxFICpmO1xuJiM0MztcbiYjNDM7XHRpZiAoZ2xvYihwYXR0ZXJuLCAwLCBOVUxMLCBcdTAwMjZnbCkgfHwgZ2wuZ2xfcGF0aGMgPT0gMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRmID0gZm9wZW4oZ2wuZ2xfcGF0aHZbMF0sIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRjaGFyIGxpbmVbMjU2XTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHtcbiYjNDM7XHRcdGNoYXIgKnZhbDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RybmNtcChsaW5lLCBcJiMzNDtERVZOQU1FPVwmIzM0OywgOCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHZhbCA9IGxpbmUgJiM0MzsgODtcbiYjNDM7XHRcdHZhbFtzdHJjc3BuKHZhbCwgXCYjMzQ7XFxuXCYjMzQ7KV0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdFx0c25wcmludGYocGF0aCwgcGF0aF9zeiwgXCYjMzQ7L2Rldi8lc1wmIzM0OywgdmFsKTtcbiYjNDM7XHRcdGZvdW5kID0gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZmNsb3NlKGYpO1xuJiM0MztvdXQ6XG4mIzQzO1x0Z2xvYmZyZWUoXHUwMDI2Z2wpO1xuJiM0MztcdHJldHVybiBmb3VuZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTG9hZCByYy1sb29wYmFjayBhbmQgZmluZCB0aGUgbGlyYyBhbmQgaW5wdXQgY2hhcmRldnMgaXQgY3JlYXRlZC4gKi9cbiYjNDM7c3RhdGljIGJvb2wgZmluZF9sb29wYmFja19kZXZpY2VzKGNoYXIgKmxpcmNfcGF0aCwgY2hhciAqaW5wdXRfcGF0aCxcbiYjNDM7XHRcdFx0XHQgIHNpemVfdCBwYXRoX3N6KVxuJiM0Mzt7XG4mIzQzO1x0Z2xvYl90IGdsID0ge307XG4mIzQzO1x0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBJZ25vcmUgZmFpbHVyZSwgd2UgY2hlY2sgZm9yIHRoZSByZXN1bHRpbmcgZGV2aWNlcyBiZWxvdy4gKi9cbiYjNDM7XHRzeXN0ZW0oXCYjMzQ7bW9kcHJvYmUgcmMtbG9vcGJhY2sgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChnbG9iKFwmIzM0Oy9zeXMvY2xhc3MvcmMvcmMqXCYjMzQ7LCAwLCBOVUxMLCBcdTAwMjZnbCkpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtObyByYyBkZXZpY2VzIGZvdW5kLCBpcyBDT05GSUdfUkNfTE9PUEJBQ0sgZW5hYmxlZD9cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIGdsLmdsX3BhdGhjOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqcmNkaXIgPSBnbC5nbF9wYXRodltpXTtcbiYjNDM7XHRcdGNoYXIgdWV2ZW50X3BhdGhbUEFUSF9NQVhdO1xuJiM0MztcdFx0Y2hhciB1ZXZlbnRbNDA5Nl07XG4mIzQzO1x0XHRjaGFyIHBhdHRlcm5bUEFUSF9NQVhdO1xuJiM0MztcdFx0RklMRSAqZjtcbiYjNDM7XHRcdHNpemVfdCBuO1xuJiM0MztcbiYjNDM7XHRcdHNucHJpbnRmKHVldmVudF9wYXRoLCBzaXplb2YodWV2ZW50X3BhdGgpLCBcJiMzNDslcy91ZXZlbnRcJiMzNDssIHJjZGlyKTtcbiYjNDM7XHRcdGYgPSBmb3Blbih1ZXZlbnRfcGF0aCwgXCYjMzQ7clwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoIWYpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0biA9IGZyZWFkKHVldmVudCwgMSwgc2l6ZW9mKHVldmVudCkgLSAxLCBmKTtcbiYjNDM7XHRcdGZjbG9zZShmKTtcbiYjNDM7XHRcdHVldmVudFtuXSA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzdHJzdHIodWV2ZW50LCBcJiMzNDtEUlZfTkFNRT1yYy1sb29wYmFja1wmIzM0OykpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNucHJpbnRmKHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSwgXCYjMzQ7JXMvbGlyYyovdWV2ZW50XCYjMzQ7LCByY2Rpcik7XG4mIzQzO1x0XHRpZiAoIWZpbmRfZGV2bmFtZShwYXR0ZXJuLCBsaXJjX3BhdGgsIHBhdGhfc3opKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzbnByaW50ZihwYXR0ZXJuLCBzaXplb2YocGF0dGVybiksIFwmIzM0OyVzL2lucHV0Ki9ldmVudCovdWV2ZW50XCYjMzQ7LCByY2Rpcik7XG4mIzQzO1x0XHRpZiAoIWZpbmRfZGV2bmFtZShwYXR0ZXJuLCBpbnB1dF9wYXRoLCBwYXRoX3N6KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Zm91bmQgPSB0cnVlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRnbG9iZnJlZShcdTAwMjZnbCk7XG4mIzQzO1x0cmV0dXJuIGZvdW5kO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3RfbGlyY19tb2RlMih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBsaXJjX3BhdGhbUEFUSF9NQVhdLCBpbnB1dF9wYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHRpbnQgbGlyY2ZkID0gLTEsIGlucHV0ZmQgPSAtMSwgcHJvZ2ZkLCBwcm9nZmQyID0gLTE7XG4mIzQzO1x0c3RydWN0IGxpcmNfbW9kZTIgKnNrZWwgPSBOVUxMLCAqc2tlbDIgPSBOVUxMO1xuJiM0MztcdF9fdTMyIHByb2dfaWRzWzEwXSwgcHJvZ19mbGFnc1sxMF0sIHByb2dfY250O1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm87XG4mIzQzO1x0X191MzIgaW5mb19sZW4sIHByb2dfaWQsIHByb2dfaWQyO1xuJiM0MztcdGludCB0ZXN0aXIxID0gMHg4ZWFkO1x0Lyoga2V5ZG93biBmbGFnICgweDgwMDApIHwgc2NhbmNvZGUgMHhlYWQgKi9cbiYjNDM7XHRpbnQgdGVzdGlyMiA9IDB4NDA4MTtcdC8qIHBvaW50ZXJfcmVsIGZsYWcgKDB4NDAwMCkgfCByZWxfeD0xIHwgcmVsX3k9MSAqL1xuJiM0MztcdHN0cnVjdCBpbnB1dF9ldmVudCBldmVudDtcbiYjNDM7XHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHt9O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChnZXR1aWQoKSAhPSAwKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWZpbmRfbG9vcGJhY2tfZGV2aWNlcyhsaXJjX3BhdGgsIGlucHV0X3BhdGgsIHNpemVvZihsaXJjX3BhdGgpKSkge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7bGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHByb2dmZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmJwZl9kZWNvZGVyKTtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG4mIzQzO1x0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQocHJvZ2ZkLCBcdTAwMjZpbmZvLCBcdTAwMjZpbmZvX2xlbik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtnZXQgZmlyc3QgcHJvZ3JhbSYjMzk7cyBpbmZvXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdHByb2dfaWQgPSBpbmZvLmlkO1xuJiM0MztcbiYjNDM7XHRsaXJjZmQgPSBvcGVuKGxpcmNfcGF0aCwgT19SRFdSIHwgT19OT05CTE9DSyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UobGlyY2ZkLCAwLCBcJiMzNDtvcGVuIGxpcmMgZGV2aWNlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBUcnkgdG8gZGV0YWNoIGl0IGJlZm9yZSBpdCB3YXMgZXZlciBhdHRhY2hlZCwgc2hvdWxkIGZhaWwuICovXG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHJldCwgLUVOT0VOVCwgXCYjMzQ7ZGV0YWNoIHVuYXR0YWNoZWQgcHJvZ3JhbVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aW5wdXRmZCA9IG9wZW4oaW5wdXRfcGF0aCwgT19SRE9OTFkgfCBPX05PTkJMT0NLKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShpbnB1dGZkLCAwLCBcJiMzNDtvcGVuIGlucHV0IGRldmljZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtxdWVyeSBwcm9ncmFtcyBiZWZvcmUgYXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAwLCBcJiMzNDtubyBwcm9ncmFtcyBzaG91bGQgYmUgYXR0YWNoZWQgeWV0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBJbnZhbGlkIGF0dGFjaCBmbGFncyBtdXN0IGJlIHJlamVjdGVkLCBhbmQgbXVzdCBub3QgYXR0YWNoLiAqL1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX2F0dGFjaChwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDEpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHJldCwgLUVJTlZBTCwgXCYjMzQ7YXR0YWNoIHdpdGggaW52YWxpZCBmbGFnc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtxdWVyeSBwcm9ncmFtcyBhZnRlciByZWplY3RlZCBhdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDAsIFwmIzM0O3JlamVjdGVkIGF0dGFjaCBzaG91bGQgbm90IGF0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDthdHRhY2ggcHJvZ3JhbSB0byBsaXJjIGRldmljZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogSW52YWxpZCBxdWVyeSBmbGFncyBtdXN0IGJlIHJlamVjdGVkIHRvbywgd2l0aG91dCB1cHNldHRpbmcgc3RhdGUuICovXG4mIzQzO1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAxLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgLUVJTlZBTCwgXCYjMzQ7cXVlcnkgd2l0aCBpbnZhbGlkIGZsYWdzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtxdWVyeSBwcm9ncmFtcyBhZnRlciBhdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAxLCBcJiMzNDtvbmUgcHJvZ3JhbSBzaG91bGQgYmUgYXR0YWNoZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcdEFTU0VSVF9FUShwcm9nX2lkc1swXSwgcHJvZ19pZCwgXCYjMzQ7cXVlcmllZCBpZCBzaG91bGQgbWF0Y2ggYXR0YWNoZWQgcHJvZ3JhbVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFdyaXRlIHJhdyBJUiAqL1xuJiM0MztcdHJldCA9IHdyaXRlKGxpcmNmZCwgXHUwMDI2dGVzdGlyMSwgc2l6ZW9mKHRlc3RpcjEpKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZih0ZXN0aXIxKSwgXCYjMzQ7c2VuZCB0ZXN0IElSIG1lc3NhZ2UgMVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1xuJiM0MztcdHBmZC5mZCA9IGlucHV0ZmQ7XG4mIzQzO1x0cGZkLmV2ZW50cyA9IFBPTExJTjtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0cG9sbChcdTAwMjZwZmQsIDEsIDEwMCk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVhZCBkZWNvZGVkIElSICovXG4mIzQzO1x0XHRyZXQgPSByZWFkKGlucHV0ZmQsIFx1MDAyNmV2ZW50LCBzaXplb2YoZXZlbnQpKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKGV2ZW50KSwgXCYjMzQ7cmVhZCBkZWNvZGVkIElSIDFcJiMzNDspKVxuJiM0MztcdFx0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfTVNDIFx1MDAyNlx1MDAyNiBldmVudC5jb2RlID09IE1TQ19TQ0FOIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGV2ZW50LnZhbHVlID09IDB4ZWFkKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFdyaXRlIHJhdyBJUiAqL1xuJiM0MztcdHJldCA9IHdyaXRlKGxpcmNmZCwgXHUwMDI2dGVzdGlyMiwgc2l6ZW9mKHRlc3RpcjIpKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZih0ZXN0aXIyKSwgXCYjMzQ7c2VuZCB0ZXN0IElSIG1lc3NhZ2UgMlwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1xuJiM0MztcdGZvciAoOzspIHtcbiYjNDM7XHRcdHBvbGwoXHUwMDI2cGZkLCAxLCAxMDApO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJlYWQgZGVjb2RlZCBJUiAqL1xuJiM0MztcdFx0cmV0ID0gcmVhZChpbnB1dGZkLCBcdTAwMjZldmVudCwgc2l6ZW9mKGV2ZW50KSk7XG4mIzQzO1x0XHRpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZihldmVudCksIFwmIzM0O3JlYWQgZGVjb2RlZCBJUiAyXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcbiYjNDM7XHRcdGlmIChldmVudC50eXBlID09IEVWX1JFTCBcdTAwMjZcdTAwMjYgZXZlbnQuY29kZSA9PSBSRUxfWSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBldmVudC52YWx1ZSA9PSAxKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4mIzQzO1x0XHRcdCAgICAgXHUwMDI2cHJvZ19jbnQpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHJldCwgXCYjMzQ7cXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgSVIgd2FzIGRlY29kZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAxLCBcJiMzNDtvbmUgcHJvZ3JhbSBzaG91bGQgc3RpbGwgYmUgYXR0YWNoZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBsaXJjIGNoYXJkZXYgY2FuIGhvbGQgbW9yZSB0aGFuIG9uZSBhdHRhY2hlZCBwcm9ncmFtIGF0IG9uY2UuXG4mIzQzO1x0ICogTG9hZCBhIHNlY29uZCwgaW5kZXBlbmRlbnQgaW5zdGFuY2UgYW5kIGNoZWNrIGl0IGNhbiBiZSBhdHRhY2hlZFxuJiM0MztcdCAqIGFsb25nc2lkZSB0aGUgZmlyc3QsIHF1ZXJpZWQsIGFuZCB0aGVuIGRldGFjaGVkIG9uIGl0cyBvd25cbiYjNDM7XHQgKiB3aXRob3V0IGRpc3R1cmJpbmcgdGhlIGZpcnN0IHByb2dyYW0mIzM5O3MgYXR0YWNobWVudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRza2VsMiA9IGxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbDIsIFwmIzM0O2xpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQgKDJuZClcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcbiYjNDM7XHRwcm9nZmQyID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwyLVx1MDAzZXByb2dzLmJwZl9kZWNvZGVyKTtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG4mIzQzO1x0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQocHJvZ2ZkMiwgXHUwMDI2aW5mbywgXHUwMDI2aW5mb19sZW4pO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHJldCwgXCYjMzQ7Z2V0IHNlY29uZCBwcm9ncmFtJiMzOTtzIGluZm9cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcdHByb2dfaWQyID0gaW5mby5pZDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHJldCwgXCYjMzQ7YXR0YWNoIHNlY29uZCBwcm9ncmFtIHRvIGxpcmMgZGV2aWNlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2RldGFjaDtcbiYjNDM7XG4mIzQzO1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtxdWVyeSBwcm9ncmFtcyBhZnRlciBzZWNvbmQgYXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2RldGFjaDI7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDIsIFwmIzM0O3R3byBwcm9ncmFtcyBzaG91bGQgYmUgYXR0YWNoZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoMjtcbiYjNDM7XHRBU1NFUlRfVFJVRSgocHJvZ19pZHNbMF0gPT0gcHJvZ19pZCBcdTAwMjZcdTAwMjYgcHJvZ19pZHNbMV0gPT0gcHJvZ19pZDIpIHx8XG4mIzQzO1x0XHQgICAgKHByb2dfaWRzWzBdID09IHByb2dfaWQyIFx1MDAyNlx1MDAyNiBwcm9nX2lkc1sxXSA9PSBwcm9nX2lkKSxcbiYjNDM7XHRcdCAgICBcJiMzNDtxdWVyaWVkIGlkcyBzaG91bGQgYmUgdGhlIHR3byBhdHRhY2hlZCBwcm9ncmFtc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIERldGFjaCB0aGUgc2Vjb25kIHByb2dyYW07IHRoZSBmaXJzdCBzaG91bGQgcmVtYWluIGF0dGFjaGVkLiAqL1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtkZXRhY2ggc2Vjb25kIHByb2dyYW1cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoMjtcbiYjNDM7XG4mIzQzO1x0LyogRGV0YWNoaW5nIGFuIGFscmVhZHktZGV0YWNoZWQgcHJvZ3JhbSBzaG91bGQgbm93IGZhaWwuICovXG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCBcJiMzNDtkZXRhY2ggc2Vjb25kIHByb2dyYW0gYWdhaW5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O3F1ZXJ5IHByb2dyYW1zIGFmdGVyIHNlY29uZCBkZXRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAxLCBcJiMzNDtvbmUgcHJvZ3JhbSBzaG91bGQgcmVtYWluIGF0dGFjaGVkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2RldGFjaDtcbiYjNDM7XHRBU1NFUlRfRVEocHJvZ19pZHNbMF0sIHByb2dfaWQsIFwmIzM0O3JlbWFpbmluZyBwcm9ncmFtIHNob3VsZCBiZSB0aGUgZmlyc3Qgb25lXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dF9kZXRhY2g6XG4mIzQzO1x0LyogTGV0JiMzOTtzIHRyeSBkZXRhY2hpbmcgaXQgbm93IGl0IGlzIGFjdHVhbGx5IGF0dGFjaGVkLiAqL1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcbiYjNDM7XHRBU1NFUlRfT0socmV0LCBcJiMzNDtkZXRhY2ggcHJvZ3JhbSBmcm9tIGxpcmMgZGV2aWNlXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogRGV0YWNoaW5nIGl0IGFnYWluIHNob3VsZCBub3cgZmFpbCB0aGUgc2FtZSB3YXkuICovXG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIC1FTk9FTlQsIFwmIzM0O2RldGFjaCBwcm9ncmFtIGZyb20gbGlyYyBkZXZpY2UgYWdhaW5cJiMzNDspO1xuJiM0MztcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7b3V0X2RldGFjaDI6XG4mIzQzO1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cCBvZiB0aGUgc2Vjb25kIHByb2dyYW0gYmVmb3JlIGJhaWxpbmcgb3V0LiAqL1xuJiM0MztcdGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4mIzQzO1x0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChpbnB1dGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGlucHV0ZmQpO1xuJiM0MztcdGlmIChsaXJjZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UobGlyY2ZkKTtcbiYjNDM7XHRsaXJjX21vZGUyX19kZXN0cm95KHNrZWwyKTtcbiYjNDM7XHRsaXJjX21vZGUyX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45ODEzN2YzYzVjMDNkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbGlyY19tb2RlMi5jXG5AQCAtMCwwICYjNDM7MSwzMiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvLyB0ZXN0IGlyIGRlY29kZXJcbiYjNDM7Ly9cbiYjNDM7Ly8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgXHUwMDNjc2VhbkBtZXNzLm9yZ1x1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGlyYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bGlyY19tb2RlMlwmIzM0OylcbiYjNDM7aW50IGJwZl9kZWNvZGVyKHVuc2lnbmVkIGludCAqc2FtcGxlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKExJUkNfSVNfUFVMU0UoKnNhbXBsZSkpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBkdXJhdGlvbiA9IExJUkNfVkFMVUUoKnNhbXBsZSk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEZsYWcgYml0cyBwaWNrZWQgZGVsaWJlcmF0ZWx5IGxvdzogcmMtbG9vcGJhY2sgc2ltdWxhdGVzXG4mIzQzO1x0XHQgKiBhIHJlY2VpdmVyIG92ZXJmbG93IGZvciBhbnkgcHVsc2Ugb3ZlciBNU19UT19VUyg1MCkgKHNlZVxuJiM0MztcdFx0ICogbG9vcF90eF9pcigpIGluIHJjLWxvb3BiYWNrLmMpLCB3aGljaCB3b3VsZCBzaWxlbnRseVxuJiM0MztcdFx0ICogc3dhbGxvdyB0aGUgc2FtcGxlIGJlZm9yZSBpdCBldmVyIHJlYWNoZXMgdGhpcyBkZWNvZGVyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoZHVyYXRpb24gXHUwMDI2IDB4ODAwMClcbiYjNDM7XHRcdFx0YnBmX3JjX2tleWRvd24oc2FtcGxlLCAweDQwLCBkdXJhdGlvbiBcdTAwMjYgMHgzZmZmLCAwKTtcbiYjNDM7XHRcdGlmIChkdXJhdGlvbiBcdTAwMjYgMHg0MDAwKVxuJiM0MztcdFx0XHRicGZfcmNfcG9pbnRlcl9yZWwoc2FtcGxlLCAoZHVyYXRpb24gXHUwMDNlXHUwMDNlIDcpIFx1MDAyNiAweDdmLFxuJiM0MztcdFx0XHRcdFx0ICAgZHVyYXRpb24gXHUwMDI2IDB4N2YpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbGlyY19tb2RlMl9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uY1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBjYmU0Mjg0YzAzMmZlLi4wMDAwMDAwMDAwMDAwXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uY1xuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsMjYgJiM0MzswLDAgQEBcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuLS8vIHRlc3QgaXIgZGVjb2RlclxuLS8vXG4tLy8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgXHUwMDNjc2VhbkBtZXNzLm9yZ1x1MDAzZVxuLVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbGlyYy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2Vcbi1cbi1TRUMoXCYjMzQ7bGlyY19tb2RlMlwmIzM0Oylcbi1pbnQgYnBmX2RlY29kZXIodW5zaWduZWQgaW50ICpzYW1wbGUpXG4te1xuLVx0aWYgKExJUkNfSVNfUFVMU0UoKnNhbXBsZSkpIHtcbi1cdFx0dW5zaWduZWQgaW50IGR1cmF0aW9uID0gTElSQ19WQUxVRSgqc2FtcGxlKTtcbi1cbi1cdFx0aWYgKGR1cmF0aW9uIFx1MDAyNiAweDEwMDApXG4tXHRcdFx0YnBmX3JjX2tleWRvd24oc2FtcGxlLCAweDQwLCBkdXJhdGlvbiBcdTAwMjYgMHhmZmZmLCAwKTtcbi1cdFx0aWYgKGR1cmF0aW9uIFx1MDAyNiAweDIwMDApXG4tXHRcdFx0YnBmX3JjX3BvaW50ZXJfcmVsKHNhbXBsZSwgKGR1cmF0aW9uIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZixcbi1cdFx0XHRcdFx0ICAgZHVyYXRpb24gXHUwMDI2IDB4ZmYpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLWNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTIuc2hcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggNTI1MmI5MWY0OGExOC4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMi5zaFxuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsNDEgJiM0MzswLDAgQEBcbi0jIS9iaW4vYmFzaFxuLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbi1cbi0jIEtzZWxmdGVzdCBmcmFtZXdvcmsgcmVxdWlyZW1lbnQgLSBTS0lQIGNvZGUgaXMgNC5cbi1rc2Z0X3NraXA9NFxuLXJldD0ka3NmdF9za2lwXG4tXG4tbXNnPVwmIzM0O3NraXAgYWxsIHRlc3RzOlwmIzM0O1xuLWlmIFsgJFVJRCAhPSAwIF07IHRoZW5cbi1cdGVjaG8gJG1zZyBwbGVhc2UgcnVuIHRoaXMgYXMgcm9vdCBcdTAwM2VcdTAwMjYyXG4tXHRleGl0ICRrc2Z0X3NraXBcbi1maVxuLVxuLUdSRUVOPSYjMzk7XFwwMzNbMDs5Mm0mIzM5O1xuLVJFRD0mIzM5O1xcMDMzWzA7MzFtJiMzOTtcbi1OQz0mIzM5O1xcMDMzWzBtJiMzOTsgIyBObyBDb2xvclxuLVxuLW1vZHByb2JlIHJjLWxvb3BiYWNrXG4tXG4tZm9yIGkgaW4gL3N5cy9jbGFzcy9yYy9yYypcbi1kb1xuLVx0aWYgZ3JlcCAtcSBEUlZfTkFNRT1yYy1sb29wYmFjayAkaS91ZXZlbnRcbi1cdHRoZW5cbi1cdFx0TElSQ0RFVj0kKGdyZXAgREVWTkFNRT0gJGkvbGlyYyovdWV2ZW50IHwgc2VkIHNRREVWTkFNRT1RL2Rldi9RKVxuLVx0XHRJTlBVVERFVj0kKGdyZXAgREVWTkFNRT0gJGkvaW5wdXQqL2V2ZW50Ki91ZXZlbnQgfCBzZWQgc1FERVZOQU1FPVEvZGV2L1EpXG4tXHRmaVxuLWRvbmVcbi1cbi1pZiBbIC1uIFwmIzM0OyRMSVJDREVWXCYjMzQ7IF07XG4tdGhlblxuLVx0VFlQRT1saXJjX21vZGUyXG4tXHQuL3Rlc3RfbGlyY19tb2RlMl91c2VyICRMSVJDREVWICRJTlBVVERFVlxuLVx0cmV0PSQ/XG4tXHRpZiBbICRyZXQgLW5lIDAgXTsgdGhlblxuLVx0XHRlY2hvIC1lICR7UkVEfVwmIzM0O0ZBSUw6ICRUWVBFXCYjMzQ7JHtOQ31cbi1cdGVsc2Vcbi1cdFx0ZWNobyAtZSAke0dSRUVOfVwmIzM0O1BBU1M6ICRUWVBFXCYjMzQ7JHtOQ31cbi1cdGZpXG4tZmlcbi1cbi1leGl0ICRyZXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxODoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8gYnkgbWlncmF0aW5nIGFuIGV4aXN0aW5nIHRlc3QgdG8gdGhlIHRlc3RfcHJvZ3MgZnJhbWV3b3JrLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MDgwNDI3MTliMTU1OWUyNTk5YWQ0OGNiNDgyMDc5MTI0ZThiM2M5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMTg6MjA6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKaW5kZXggMmIyZjkzZGVjNDc0Yi4uZjhlYzBmNTc0NTU5YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQpAQCAtMTIzLDcgJiM0MzsxMjMsNiBAQCBURVNUX0ZJTEVTID0geHNrX3ByZXJlcXMuc2ggJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKQogCiAjIE9yZGVyIGNvcnJlc3BvbmQgdG8gJiMzOTttYWtlIHJ1bl90ZXN0cyYjMzk7IG9yZGVyCiBURVNUX1BST0dTIDo9IHRlc3Rfa21vZC5zaCBcCi0JdGVzdF9saXJjX21vZGUyLnNoIFwKIAl0ZXN0X2JwZnRvb2xfYnVpbGQuc2ggXAogCXRlc3RfZG9jX2J1aWxkLnNoIFwKIAl0ZXN0X3hzay5zaCBcCkBAIC0xNDEsNyAmIzQzOzE0MCw2IEBAIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEID0gXAogCWJlbmNoIFwKIAlmbG93X2Rpc3NlY3Rvcl9sb2FkIFwKIAl0ZXN0X2NwcCBcCi0JdGVzdF9saXJjX21vZGUyX3VzZXIgXAogCXZlcmlzdGF0IFwKIAl4ZHBfZmVhdHVyZXMgXAogCXhkcF9od19tZXRhZGF0YSBcCkBAIC0zMzgsNyAmIzQzOzMzNiw2IEBAICQoT1VUUFVUKS90ZXN0X3NvY2ttYXA6ICQoQ0dST1VQX0hFTFBFUlMpICQoVEVTVElOR19IRUxQRVJTKQogJChPVVRQVVQpL3Rlc3RfdGNwbm90aWZ5X3VzZXI6ICQoQ0dST1VQX0hFTFBFUlMpICQoVEVTVElOR19IRUxQRVJTKSAkKFRSQUNFX0hFTFBFUlMpCiAkKE9VVFBVVCkvdGVzdF9zb2NrX2ZpZWxkczogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpCiAkKE9VVFBVVCkvdGVzdF90YWc6ICQoVEVTVElOR19IRUxQRVJTKQotJChPVVRQVVQpL3Rlc3RfbGlyY19tb2RlMl91c2VyOiAkKFRFU1RJTkdfSEVMUEVSUykKICQoT1VUUFVUKS9mbG93X2Rpc3NlY3Rvcl9sb2FkOiAkKFRFU1RJTkdfSEVMUEVSUykKICQoT1VUUFVUKS90ZXN0X21hcHM6ICQoVEVTVElOR19IRUxQRVJTKQogJChPVVRQVVQpL3Rlc3RfdmVyaWZpZXI6ICQoVEVTVElOR19IRUxQRVJTKSAkKENBUF9IRUxQRVJTKSAkKFVOUFJJVl9IRUxQRVJTKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjE3YTM4Y2QwMzg0NWMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saXJjX21vZGUyLmMKQEAgLTAsMCAmIzQzOzEsMzI4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvLyB0ZXN0IGlyIGRlY29kZXIKJiM0MzsvLwomIzQzOy8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nICZsdDtzZWFuQG1lc3Mub3JnJmd0OwomIzQzOwomIzQzOy8vIEEgbGlyYyBjaGFyZGV2IGlzIGEgZGV2aWNlIHJlcHJlc2VudGluZyBhIGNvbnN1bWVyIElSIChjaXIpIGRldmljZSB3aGljaAomIzQzOy8vIGNhbiByZWNlaXZlIGluZnJhcmVkIHNpZ25hbHMgZnJvbSByZW1vdGUgY29udHJvbCBhbmQvb3IgdHJhbnNtaXQgSVIuCiYjNDM7Ly8KJiM0MzsvLyBJUiBpcyBzZW50IGFzIGEgc2VyaWVzIG9mIHB1bHNlcyBhbmQgc3BhY2Ugc29tZXdoYXQgbGlrZSBtb3JzZSBjb2RlLiBUaGUKJiM0MzsvLyBCUEYgcHJvZ3JhbSBjYW4gZGVjb2RlIHRoaXMgaW50byBzY2FuY29kZXMgc28gdGhhdCByYy1jb3JlIGNhbiB0cmFuc2xhdGUKJiM0MzsvLyB0aGlzIGludG8gaW5wdXQga2V5IGNvZGVzIHVzaW5nIHRoZSByYyBrZXltYXAuCiYjNDM7Ly8KJiM0MzsvLyBUaGlzIHRlc3Qgd29ya3MgYnkgc2VuZGluZyBJUiBvdmVyIHJjLWxvb3BiYWNrLCBzbyB0aGUgSVIgaXMgcHJvY2Vzc2VkIGJ5CiYjNDM7Ly8gQlBGIGFuZCB0aGVuIGRlY29kZWQgaW50byBzY2FuY29kZXMuIFRoZSBsaXJjIGNoYXJkZXYgbXVzdCBiZSB0aGUgb25lCiYjNDM7Ly8gYXNzb2NpYXRlZCB3aXRoIHJjLWxvb3BiYWNrLCBzZWUgdGhlIG91dHB1dCBvZiBpci1rZXl0YWJsZSgxKS4KJiM0MzsvLwomIzQzOy8vIFRoZSBmb2xsb3dpbmcgQ09ORklHIG9wdGlvbnMgbXVzdCBiZSBlbmFibGVkIGZvciB0aGUgdGVzdCB0byBzdWNjZWVkOgomIzQzOy8vIENPTkZJR19SQ19DT1JFPXkKJiM0MzsvLyBDT05GSUdfQlBGX1JBV0lSX0VWRU5UPXkKJiM0MzsvLyBDT05GSUdfUkNfTE9PUEJBQ0s9eQomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbnB1dC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXJjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2dsb2IuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGltaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7bGlyY19tb2RlMi5za2VsLmgmIzM0OwomIzQzOwomIzQzOy8qIFJlYWQgdGhlIERFVk5BTUU9IGxpbmUgb3V0IG9mIHRoZSBmaXJzdCB1ZXZlbnQgZmlsZSB0aGF0IG1hdGNoZXMKJiM0MzsgKiBwYXR0ZXJuLCBhbmQgdHVybiBpdCBpbnRvIGEgL2Rldi8mbHQ7bmFtZSZndDsgcGF0aC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBmaW5kX2Rldm5hbWUoY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfc3opCiYjNDM7ewomIzQzOwlnbG9iX3QgZ2wgPSB7fTsKJiM0MzsJYm9vbCBmb3VuZCA9IGZhbHNlOwomIzQzOwlGSUxFICpmOwomIzQzOwomIzQzOwlpZiAoZ2xvYihwYXR0ZXJuLCAwLCBOVUxMLCAmYW1wO2dsKSB8fCBnbC5nbF9wYXRoYyA9PSAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWYgPSBmb3BlbihnbC5nbF9wYXRodlswXSwgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIWYpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJY2hhciBsaW5lWzI1Nl07CiYjNDM7CiYjNDM7CXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7CiYjNDM7CQljaGFyICp2YWw7CiYjNDM7CiYjNDM7CQlpZiAoc3RybmNtcChsaW5lLCAmIzM0O0RFVk5BTUU9JiMzNDssIDgpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJdmFsID0gbGluZSAmIzQzOyA4OwomIzQzOwkJdmFsW3N0cmNzcG4odmFsLCAmIzM0O1xuJiMzNDspXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXNucHJpbnRmKHBhdGgsIHBhdGhfc3osICYjMzQ7L2Rldi8lcyYjMzQ7LCB2YWwpOwomIzQzOwkJZm91bmQgPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZmNsb3NlKGYpOwomIzQzO291dDoKJiM0MzsJZ2xvYmZyZWUoJmFtcDtnbCk7CiYjNDM7CXJldHVybiBmb3VuZDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTG9hZCByYy1sb29wYmFjayBhbmQgZmluZCB0aGUgbGlyYyBhbmQgaW5wdXQgY2hhcmRldnMgaXQgY3JlYXRlZC4gKi8KJiM0MztzdGF0aWMgYm9vbCBmaW5kX2xvb3BiYWNrX2RldmljZXMoY2hhciAqbGlyY19wYXRoLCBjaGFyICppbnB1dF9wYXRoLAomIzQzOwkJCQkgIHNpemVfdCBwYXRoX3N6KQomIzQzO3sKJiM0MzsJZ2xvYl90IGdsID0ge307CiYjNDM7CWJvb2wgZm91bmQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJLyogSWdub3JlIGZhaWx1cmUsIHdlIGNoZWNrIGZvciB0aGUgcmVzdWx0aW5nIGRldmljZXMgYmVsb3cuICovCiYjNDM7CXN5c3RlbSgmIzM0O21vZHByb2JlIHJjLWxvb3BiYWNrICZndDsgL2Rldi9udWxsIDImZ3Q7JmFtcDsxJiMzNDspOwomIzQzOwomIzQzOwlpZiAoZ2xvYigmIzM0Oy9zeXMvY2xhc3MvcmMvcmMqJiMzNDssIDAsIE5VTEwsICZhbXA7Z2wpKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtObyByYyBkZXZpY2VzIGZvdW5kLCBpcyBDT05GSUdfUkNfTE9PUEJBQ0sgZW5hYmxlZD9cbiYjMzQ7KTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHNpemVfdCBpID0gMDsgaSAmbHQ7IGdsLmdsX3BhdGhjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3QgY2hhciAqcmNkaXIgPSBnbC5nbF9wYXRodltpXTsKJiM0MzsJCWNoYXIgdWV2ZW50X3BhdGhbUEFUSF9NQVhdOwomIzQzOwkJY2hhciB1ZXZlbnRbNDA5Nl07CiYjNDM7CQljaGFyIHBhdHRlcm5bUEFUSF9NQVhdOwomIzQzOwkJRklMRSAqZjsKJiM0MzsJCXNpemVfdCBuOwomIzQzOwomIzQzOwkJc25wcmludGYodWV2ZW50X3BhdGgsIHNpemVvZih1ZXZlbnRfcGF0aCksICYjMzQ7JXMvdWV2ZW50JiMzNDssIHJjZGlyKTsKJiM0MzsJCWYgPSBmb3Blbih1ZXZlbnRfcGF0aCwgJiMzNDtyJiMzNDspOwomIzQzOwkJaWYgKCFmKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJbiA9IGZyZWFkKHVldmVudCwgMSwgc2l6ZW9mKHVldmVudCkgLSAxLCBmKTsKJiM0MzsJCWZjbG9zZShmKTsKJiM0MzsJCXVldmVudFtuXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsKJiM0MzsJCWlmICghc3Ryc3RyKHVldmVudCwgJiMzNDtEUlZfTkFNRT1yYy1sb29wYmFjayYjMzQ7KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXNucHJpbnRmKHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSwgJiMzNDslcy9saXJjKi91ZXZlbnQmIzM0OywgcmNkaXIpOwomIzQzOwkJaWYgKCFmaW5kX2Rldm5hbWUocGF0dGVybiwgbGlyY19wYXRoLCBwYXRoX3N6KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXNucHJpbnRmKHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSwgJiMzNDslcy9pbnB1dCovZXZlbnQqL3VldmVudCYjMzQ7LCByY2Rpcik7CiYjNDM7CQlpZiAoIWZpbmRfZGV2bmFtZShwYXR0ZXJuLCBpbnB1dF9wYXRoLCBwYXRoX3N6KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWdsb2JmcmVlKCZhbXA7Z2wpOwomIzQzOwlyZXR1cm4gZm91bmQ7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9saXJjX21vZGUyKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIGxpcmNfcGF0aFtQQVRIX01BWF0sIGlucHV0X3BhdGhbUEFUSF9NQVhdOwomIzQzOwlpbnQgbGlyY2ZkID0gLTEsIGlucHV0ZmQgPSAtMSwgcHJvZ2ZkLCBwcm9nZmQyID0gLTE7CiYjNDM7CXN0cnVjdCBsaXJjX21vZGUyICpza2VsID0gTlVMTCwgKnNrZWwyID0gTlVMTDsKJiM0MzsJX191MzIgcHJvZ19pZHNbMTBdLCBwcm9nX2ZsYWdzWzEwXSwgcHJvZ19jbnQ7CiYjNDM7CXN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm87CiYjNDM7CV9fdTMyIGluZm9fbGVuLCBwcm9nX2lkLCBwcm9nX2lkMjsKJiM0MzsJaW50IHRlc3RpcjEgPSAweDhlYWQ7CS8qIGtleWRvd24gZmxhZyAoMHg4MDAwKSB8IHNjYW5jb2RlIDB4ZWFkICovCiYjNDM7CWludCB0ZXN0aXIyID0gMHg0MDgxOwkvKiBwb2ludGVyX3JlbCBmbGFnICgweDQwMDApIHwgcmVsX3g9MSB8IHJlbF95PTEgKi8KJiM0MzsJc3RydWN0IGlucHV0X2V2ZW50IGV2ZW50OwomIzQzOwlzdHJ1Y3QgcG9sbGZkIHBmZCA9IHt9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoZ2V0dWlkKCkgIT0gMCkgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZmluZF9sb29wYmFja19kZXZpY2VzKGxpcmNfcGF0aCwgaW5wdXRfcGF0aCwgc2l6ZW9mKGxpcmNfcGF0aCkpKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tlbCA9IGxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7bGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcHJvZ2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmJwZl9kZWNvZGVyKTsKJiM0MzsKJiM0MzsJbWVtc2V0KCZhbXA7aW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKJiM0MzsJaW5mb19sZW4gPSBzaXplb2YoaW5mbyk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHByb2dmZCwgJmFtcDtpbmZvLCAmYW1wO2luZm9fbGVuKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2dldCBmaXJzdCBwcm9ncmFtJiMzOTtzIGluZm8mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJcHJvZ19pZCA9IGluZm8uaWQ7CiYjNDM7CiYjNDM7CWxpcmNmZCA9IG9wZW4obGlyY19wYXRoLCBPX1JEV1IgfCBPX05PTkJMT0NLKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UobGlyY2ZkLCAwLCAmIzM0O29wZW4gbGlyYyBkZXZpY2UmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogVHJ5IHRvIGRldGFjaCBpdCBiZWZvcmUgaXQgd2FzIGV2ZXIgYXR0YWNoZWQsIHNob3VsZCBmYWlsLiAqLwomIzQzOwlyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7CiYjNDM7CWlmICghQVNTRVJUX0VRKHJldCwgLUVOT0VOVCwgJiMzNDtkZXRhY2ggdW5hdHRhY2hlZCBwcm9ncmFtJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlucHV0ZmQgPSBvcGVuKGlucHV0X3BhdGgsIE9fUkRPTkxZIHwgT19OT05CTE9DSyk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGlucHV0ZmQsIDAsICYjMzQ7b3BlbiBpbnB1dCBkZXZpY2UmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsCiYjNDM7CQkJICAgICAmYW1wO3Byb2dfY250KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O3F1ZXJ5IHByb2dyYW1zIGJlZm9yZSBhdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDAsICYjMzQ7bm8gcHJvZ3JhbXMgc2hvdWxkIGJlIGF0dGFjaGVkIHlldCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBJbnZhbGlkIGF0dGFjaCBmbGFncyBtdXN0IGJlIHJlamVjdGVkLCBhbmQgbXVzdCBub3QgYXR0YWNoLiAqLwomIzQzOwlyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAxKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEocmV0LCAtRUlOVkFMLCAmIzM0O2F0dGFjaCB3aXRoIGludmFsaWQgZmxhZ3MmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsCiYjNDM7CQkJICAgICAmYW1wO3Byb2dfY250KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O3F1ZXJ5IHByb2dyYW1zIGFmdGVyIHJlamVjdGVkIGF0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMCwgJiMzNDtyZWplY3RlZCBhdHRhY2ggc2hvdWxkIG5vdCBhdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCk7CiYjNDM7CWlmICghQVNTRVJUX09LKHJldCwgJiMzNDthdHRhY2ggcHJvZ3JhbSB0byBsaXJjIGRldmljZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBJbnZhbGlkIHF1ZXJ5IGZsYWdzIG11c3QgYmUgcmVqZWN0ZWQgdG9vLCB3aXRob3V0IHVwc2V0dGluZyBzdGF0ZS4gKi8KJiM0MzsJcHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMSwgcHJvZ19mbGFncywgcHJvZ19pZHMsCiYjNDM7CQkJICAgICAmYW1wO3Byb2dfY250KTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgLUVJTlZBTCwgJiMzNDtxdWVyeSB3aXRoIGludmFsaWQgZmxhZ3MmIzM0Oyk7CiYjNDM7CiYjNDM7CXByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLAomIzQzOwkJCSAgICAgJmFtcDtwcm9nX2NudCk7CiYjNDM7CWlmICghQVNTRVJUX09LKHJldCwgJiMzNDtxdWVyeSBwcm9ncmFtcyBhZnRlciBhdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CWlmICghQVNTRVJUX0VRKHByb2dfY250LCAxLCAmIzM0O29uZSBwcm9ncmFtIHNob3VsZCBiZSBhdHRhY2hlZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDsKJiM0MzsJQVNTRVJUX0VRKHByb2dfaWRzWzBdLCBwcm9nX2lkLCAmIzM0O3F1ZXJpZWQgaWQgc2hvdWxkIG1hdGNoIGF0dGFjaGVkIHByb2dyYW0mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFdyaXRlIHJhdyBJUiAqLwomIzQzOwlyZXQgPSB3cml0ZShsaXJjZmQsICZhbXA7dGVzdGlyMSwgc2l6ZW9mKHRlc3RpcjEpKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEocmV0LCBzaXplb2YodGVzdGlyMSksICYjMzQ7c2VuZCB0ZXN0IElSIG1lc3NhZ2UgMSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDsKJiM0MzsKJiM0MzsJcGZkLmZkID0gaW5wdXRmZDsKJiM0MzsJcGZkLmV2ZW50cyA9IFBPTExJTjsKJiM0MzsKJiM0MzsJZm9yICg7OykgewomIzQzOwkJcG9sbCgmYW1wO3BmZCwgMSwgMTAwKTsKJiM0MzsKJiM0MzsJCS8qIFJlYWQgZGVjb2RlZCBJUiAqLwomIzQzOwkJcmV0ID0gcmVhZChpbnB1dGZkLCAmYW1wO2V2ZW50LCBzaXplb2YoZXZlbnQpKTsKJiM0MzsJCWlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKGV2ZW50KSwgJiMzNDtyZWFkIGRlY29kZWQgSVIgMSYjMzQ7KSkKJiM0MzsJCQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CiYjNDM7CQlpZiAoZXZlbnQudHlwZSA9PSBFVl9NU0MgJmFtcDsmYW1wOyBldmVudC5jb2RlID09IE1TQ19TQ0FOICZhbXA7JmFtcDsKJiM0MzsJCSAgICBldmVudC52YWx1ZSA9PSAweGVhZCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBXcml0ZSByYXcgSVIgKi8KJiM0MzsJcmV0ID0gd3JpdGUobGlyY2ZkLCAmYW1wO3Rlc3RpcjIsIHNpemVvZih0ZXN0aXIyKSk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKHRlc3RpcjIpLCAmIzM0O3NlbmQgdGVzdCBJUiBtZXNzYWdlIDImIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCXBvbGwoJmFtcDtwZmQsIDEsIDEwMCk7CiYjNDM7CiYjNDM7CQkvKiBSZWFkIGRlY29kZWQgSVIgKi8KJiM0MzsJCXJldCA9IHJlYWQoaW5wdXRmZCwgJmFtcDtldmVudCwgc2l6ZW9mKGV2ZW50KSk7CiYjNDM7CQlpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZihldmVudCksICYjMzQ7cmVhZCBkZWNvZGVkIElSIDImIzM0OykpCiYjNDM7CQkJZ290byBvdXRfZGV0YWNoOwomIzQzOwomIzQzOwkJaWYgKGV2ZW50LnR5cGUgPT0gRVZfUkVMICZhbXA7JmFtcDsgZXZlbnQuY29kZSA9PSBSRUxfWSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZXZlbnQudmFsdWUgPT0gMSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpOwomIzQzOwlyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcywKJiM0MzsJCQkgICAgICZhbXA7cHJvZ19jbnQpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7cXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgSVIgd2FzIGRlY29kZWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CWlmICghQVNTRVJUX0VRKHByb2dfY250LCAxLCAmIzM0O29uZSBwcm9ncmFtIHNob3VsZCBzdGlsbCBiZSBhdHRhY2hlZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGxpcmMgY2hhcmRldiBjYW4gaG9sZCBtb3JlIHRoYW4gb25lIGF0dGFjaGVkIHByb2dyYW0gYXQgb25jZS4KJiM0MzsJICogTG9hZCBhIHNlY29uZCwgaW5kZXBlbmRlbnQgaW5zdGFuY2UgYW5kIGNoZWNrIGl0IGNhbiBiZSBhdHRhY2hlZAomIzQzOwkgKiBhbG9uZ3NpZGUgdGhlIGZpcnN0LCBxdWVyaWVkLCBhbmQgdGhlbiBkZXRhY2hlZCBvbiBpdHMgb3duCiYjNDM7CSAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgZmlyc3QgcHJvZ3JhbSYjMzk7cyBhdHRhY2htZW50LgomIzQzOwkgKi8KJiM0MzsJc2tlbDIgPSBsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsMiwgJiMzNDtsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkICgybmQpJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGV0YWNoOwomIzQzOwomIzQzOwlwcm9nZmQyID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwyLSZndDtwcm9ncy5icGZfZGVjb2Rlcik7CiYjNDM7CiYjNDM7CW1lbXNldCgmYW1wO2luZm8sIDAsIHNpemVvZihpbmZvKSk7CiYjNDM7CWluZm9fbGVuID0gc2l6ZW9mKGluZm8pOwomIzQzOwlyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nZmQyLCAmYW1wO2luZm8sICZhbXA7aW5mb19sZW4pOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7Z2V0IHNlY29uZCBwcm9ncmFtJiMzOTtzIGluZm8mIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CXByb2dfaWQyID0gaW5mby5pZDsKJiM0MzsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7YXR0YWNoIHNlY29uZCBwcm9ncmFtIHRvIGxpcmMgZGV2aWNlJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGV0YWNoOwomIzQzOwomIzQzOwlwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpOwomIzQzOwlyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcywKJiM0MzsJCQkgICAgICZhbXA7cHJvZ19jbnQpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7cXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgc2Vjb25kIGF0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDI7CiYjNDM7CWlmICghQVNTRVJUX0VRKHByb2dfY250LCAyLCAmIzM0O3R3byBwcm9ncmFtcyBzaG91bGQgYmUgYXR0YWNoZWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2gyOwomIzQzOwlBU1NFUlRfVFJVRSgocHJvZ19pZHNbMF0gPT0gcHJvZ19pZCAmYW1wOyZhbXA7IHByb2dfaWRzWzFdID09IHByb2dfaWQyKSB8fAomIzQzOwkJICAgIChwcm9nX2lkc1swXSA9PSBwcm9nX2lkMiAmYW1wOyZhbXA7IHByb2dfaWRzWzFdID09IHByb2dfaWQpLAomIzQzOwkJICAgICYjMzQ7cXVlcmllZCBpZHMgc2hvdWxkIGJlIHRoZSB0d28gYXR0YWNoZWQgcHJvZ3JhbXMmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIERldGFjaCB0aGUgc2Vjb25kIHByb2dyYW07IHRoZSBmaXJzdCBzaG91bGQgcmVtYWluIGF0dGFjaGVkLiAqLwomIzQzOwlyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7ZGV0YWNoIHNlY29uZCBwcm9ncmFtJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGV0YWNoMjsKJiM0MzsKJiM0MzsJLyogRGV0YWNoaW5nIGFuIGFscmVhZHktZGV0YWNoZWQgcHJvZ3JhbSBzaG91bGQgbm93IGZhaWwuICovCiYjNDM7CXJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7CiYjNDM7CUFTU0VSVF9FUShyZXQsIC1FTk9FTlQsICYjMzQ7ZGV0YWNoIHNlY29uZCBwcm9ncmFtIGFnYWluJiMzNDspOwomIzQzOwomIzQzOwlwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpOwomIzQzOwlyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcywKJiM0MzsJCQkgICAgICZhbXA7cHJvZ19jbnQpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7cXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgc2Vjb25kIGRldGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsICYjMzQ7b25lIHByb2dyYW0gc2hvdWxkIHJlbWFpbiBhdHRhY2hlZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDsKJiM0MzsJQVNTRVJUX0VRKHByb2dfaWRzWzBdLCBwcm9nX2lkLCAmIzM0O3JlbWFpbmluZyBwcm9ncmFtIHNob3VsZCBiZSB0aGUgZmlyc3Qgb25lJiMzNDspOwomIzQzOwomIzQzO291dF9kZXRhY2g6CiYjNDM7CS8qIExldCYjMzk7cyB0cnkgZGV0YWNoaW5nIGl0IG5vdyBpdCBpcyBhY3R1YWxseSBhdHRhY2hlZC4gKi8KJiM0MzsJcmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O2RldGFjaCBwcm9ncmFtIGZyb20gbGlyYyBkZXZpY2UmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIERldGFjaGluZyBpdCBhZ2FpbiBzaG91bGQgbm93IGZhaWwgdGhlIHNhbWUgd2F5LiAqLwomIzQzOwlyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7CiYjNDM7CUFTU0VSVF9FUShyZXQsIC1FTk9FTlQsICYjMzQ7ZGV0YWNoIHByb2dyYW0gZnJvbSBsaXJjIGRldmljZSBhZ2FpbiYjMzQ7KTsKJiM0MzsJZ290byBvdXQ7CiYjNDM7CiYjNDM7b3V0X2RldGFjaDI6CiYjNDM7CS8qIEJlc3QtZWZmb3J0IGNsZWFudXAgb2YgdGhlIHNlY29uZCBwcm9ncmFtIGJlZm9yZSBiYWlsaW5nIG91dC4gKi8KJiM0MzsJYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTsKJiM0MzsJZ290byBvdXRfZGV0YWNoOwomIzQzOwomIzQzO291dDoKJiM0MzsJaWYgKGlucHV0ZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGlucHV0ZmQpOwomIzQzOwlpZiAobGlyY2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShsaXJjZmQpOwomIzQzOwlsaXJjX21vZGUyX19kZXN0cm95KHNrZWwyKTsKJiM0MzsJbGlyY19tb2RlMl9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45ODEzN2YzYzVjMDNkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuYwpAQCAtMCwwICYjNDM7MSwzMiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7Ly8gdGVzdCBpciBkZWNvZGVyCiYjNDM7Ly8KJiM0MzsvLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyAmbHQ7c2VhbkBtZXNzLm9yZyZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpcmMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bGlyY19tb2RlMiYjMzQ7KQomIzQzO2ludCBicGZfZGVjb2Rlcih1bnNpZ25lZCBpbnQgKnNhbXBsZSkKJiM0Mzt7CiYjNDM7CWlmIChMSVJDX0lTX1BVTFNFKCpzYW1wbGUpKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgZHVyYXRpb24gPSBMSVJDX1ZBTFVFKCpzYW1wbGUpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEZsYWcgYml0cyBwaWNrZWQgZGVsaWJlcmF0ZWx5IGxvdzogcmMtbG9vcGJhY2sgc2ltdWxhdGVzCiYjNDM7CQkgKiBhIHJlY2VpdmVyIG92ZXJmbG93IGZvciBhbnkgcHVsc2Ugb3ZlciBNU19UT19VUyg1MCkgKHNlZQomIzQzOwkJICogbG9vcF90eF9pcigpIGluIHJjLWxvb3BiYWNrLmMpLCB3aGljaCB3b3VsZCBzaWxlbnRseQomIzQzOwkJICogc3dhbGxvdyB0aGUgc2FtcGxlIGJlZm9yZSBpdCBldmVyIHJlYWNoZXMgdGhpcyBkZWNvZGVyLgomIzQzOwkJICovCiYjNDM7CQlpZiAoZHVyYXRpb24gJmFtcDsgMHg4MDAwKQomIzQzOwkJCWJwZl9yY19rZXlkb3duKHNhbXBsZSwgMHg0MCwgZHVyYXRpb24gJmFtcDsgMHgzZmZmLCAwKTsKJiM0MzsJCWlmIChkdXJhdGlvbiAmYW1wOyAweDQwMDApCiYjNDM7CQkJYnBmX3JjX3BvaW50ZXJfcmVsKHNhbXBsZSwgKGR1cmF0aW9uICZndDsmZ3Q7IDcpICZhbXA7IDB4N2YsCiYjNDM7CQkJCQkgICBkdXJhdGlvbiAmYW1wOyAweDdmKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbGlyY19tb2RlMl9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JlNDI4NGMwMzJmZS4uMDAwMDAwMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uYwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDI2ICYjNDM7MCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotLy8gdGVzdCBpciBkZWNvZGVyCi0vLwotLy8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgJmx0O3NlYW5AbWVzcy5vcmcmZ3Q7Ci0KLSNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9saXJjLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7Ci0KLVNFQygmIzM0O2xpcmNfbW9kZTImIzM0OykKLWludCBicGZfZGVjb2Rlcih1bnNpZ25lZCBpbnQgKnNhbXBsZSkKLXsKLQlpZiAoTElSQ19JU19QVUxTRSgqc2FtcGxlKSkgewotCQl1bnNpZ25lZCBpbnQgZHVyYXRpb24gPSBMSVJDX1ZBTFVFKCpzYW1wbGUpOwotCi0JCWlmIChkdXJhdGlvbiAmYW1wOyAweDEwMDApCi0JCQlicGZfcmNfa2V5ZG93bihzYW1wbGUsIDB4NDAsIGR1cmF0aW9uICZhbXA7IDB4ZmZmZiwgMCk7Ci0JCWlmIChkdXJhdGlvbiAmYW1wOyAweDIwMDApCi0JCQlicGZfcmNfcG9pbnRlcl9yZWwoc2FtcGxlLCAoZHVyYXRpb24gJmd0OyZndDsgOCkgJmFtcDsgMHhmZiwKLQkJCQkJICAgZHVyYXRpb24gJmFtcDsgMHhmZik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTIuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1MjUyYjkxZjQ4YTE4Li4wMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTIuc2gKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSw0MSAmIzQzOzAsMCBAQAotIyEvYmluL2Jhc2gKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLQotIyBLc2VsZnRlc3QgZnJhbWV3b3JrIHJlcXVpcmVtZW50IC0gU0tJUCBjb2RlIGlzIDQuCi1rc2Z0X3NraXA9NAotcmV0PSRrc2Z0X3NraXAKLQotbXNnPSYjMzQ7c2tpcCBhbGwgdGVzdHM6JiMzNDsKLWlmIFsgJFVJRCAhPSAwIF07IHRoZW4KLQllY2hvICRtc2cgcGxlYXNlIHJ1biB0aGlzIGFzIHJvb3QgJmd0OyZhbXA7MgotCWV4aXQgJGtzZnRfc2tpcAotZmkKLQotR1JFRU49JiMzOTtcMDMzWzA7OTJtJiMzOTsKLVJFRD0mIzM5O1wwMzNbMDszMW0mIzM5OwotTkM9JiMzOTtcMDMzWzBtJiMzOTsgIyBObyBDb2xvcgotCi1tb2Rwcm9iZSByYy1sb29wYmFjawotCi1mb3IgaSBpbiAvc3lzL2NsYXNzL3JjL3JjKgotZG8KLQlpZiBncmVwIC1xIERSVl9OQU1FPXJjLWxvb3BiYWNrICRpL3VldmVudAotCXRoZW4KLQkJTElSQ0RFVj0kKGdyZXAgREVWTkFNRT0gJGkvbGlyYyovdWV2ZW50IHwgc2VkIHNRREVWTkFNRT1RL2Rldi9RKQotCQlJTlBVVERFVj0kKGdyZXAgREVWTkFNRT0gJGkvaW5wdXQqL2V2ZW50Ki91ZXZlbnQgfCBzZWQgc1FERVZOQU1FPVEvZGV2L1EpCi0JZmkKLWRvbmUKLQotaWYgWyAtbiAmIzM0OyRMSVJDREVWJiMzNDsgXTsKLXRoZW4KLQlUWVBFPWxpcmNfbW9kZTIKLQkuL3Rlc3RfbGlyY19tb2RlMl91c2VyICRMSVJDREVWICRJTlBVVERFVgotCXJldD0kPwotCWlmIFsgJHJldCAtbmUgMCBdOyB0aGVuCi0JCWVjaG8gLWUgJHtSRUR9JiMzNDtGQUlMOiAkVFlQRSYjMzQ7JHtOQ30KLQllbHNlCi0JCWVjaG8gLWUgJHtHUkVFTn0mIzM0O1BBU1M6ICRUWVBFJiMzNDske05DfQotCWZpCi1maQotCi1leGl0ICRyZXQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg4OAoJCQkJCQkJb3V0cHV0OiA3OAoJCQkJCQkJdGhvdWdodHM6IDUyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBTZWxmdGVzdCBNaWdyYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIGEgcmVmYWN0b3JpbmcsIHNwZWNpZmljYWxseSByZW1vdmluZyB0aGUgb2xkIGB0ZXN0X2xpcmNfbW9kZTIuc2hgLCBgdGVzdF9saXJjX21vZGUyX2tlcm4uY2AsIGFuZCBgdGVzdF9saXJjX21vZGUyX3VzZXIuY2AgKG9oLCBpdCBhbHNvIHJlbW92ZXMgYHRlc3RfbGlyY19tb2RlMl91c2VyYCBmcm9tIHRoZSBgTWFrZWZpbGVgKSwgYW5kIHJlcGxhY2luZyBpdCB3aXRoIGBwcm9nX3Rlc3RzL2xpcmNfbW9kZTIuY2AgYW5kIGBwcm9ncy9saXJjX21vZGUyLmNgLiBTZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIG1pZ3JhdGlvbiBmcm9tIHRoZSBvbGRlciBiYXNoL3VzZXIgZm9ybWF0IHRvIHRoZSBuZXdlciBgdGVzdF9wcm9nc2AgZnJhbWV3b3JrIHdpdGhpbiB0aGUgQlBGIHNlbGZ0ZXN0cy4KClNpbmNlIHRoZSBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBzZWxmdGVzdHMgZGlyZWN0b3J5LCBteSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgKnNob3VsZG4mIzM5O3QqIGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGUgZGlmZiBkb2VzbiYjMzk7dCB0b3VjaCBhbnl0aGluZyBvdXRzaWRlIG9mIHRoYXQgZGlyZWN0b3J5LiBZZXAsIGNvbmZpcm1pbmcgdGhhdCB0aGUgY2hhbmdlIGlzIGNvbnRhaW5lZCBzb2xlbHkgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKSSBxdWlja2x5IHdlbnQgdGhyb3VnaCB0aGUgcnVsZXMgYWdhaW4gdG8gY29uZmlybSBteSBqdWRnZW1lbnQuIFRoZSBydWxlcyBzZWVtIHRvIGNvbmZpcm0gdGhlIGNob2ljZS4gU2VsZnRlc3RzIGFyZSB1c2Vyc3BhY2UgdGVzdHMgYW5kIGFyZSBub3Qga2VybmVsIGNvZGU7IHRoZXkgZG9uJiMzOTt0IGludHJvZHVjZSBrZXJuZWwgY29kZSB0aGF0IHdhcnJhbnRzIGZ1enppbmcuIFRoZXJlZm9yZSBJIHdpbGwgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvIGJ5IG1pZ3JhdGluZyBhbiBleGlzdGluZyB0ZXN0IHRvIHRoZSB0ZXN0X3Byb2dzIGZyYW1ld29yay4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLyBieSBtaWdyYXRpbmcgYW4gZXhpc3RpbmcgdGVzdCB0byB0aGUgdGVzdF9wcm9ncyBmcmFtZXdvcmsuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxODoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTg6MjA6MjEuNjM4MDMyODU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5Nzk2MTMzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLyBieSBtaWdyYXRpbmcgYW4gZXhpc3RpbmcgdGVzdCB0byB0aGUgdGVzdF9wcm9ncyBmcmFtZXdvcmsuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTg6MjA6MjEuNjM4MDM5ODA4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTkxODU3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MDgwNDI3MTliMTU1OWUyNTk5YWQ0OGNiNDgyMDc5MTI0ZThiM2M5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDE4OjIwOjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxcbmluZGV4IDJiMmY5M2RlYzQ3NGIuLmY4ZWMwZjU3NDU1OWEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuQEAgLTEyMyw3ICsxMjMsNiBAQCBURVNUX0ZJTEVTID0geHNrX3ByZXJlcXMuc2ggJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKVxcbiBcXG4gIyBPcmRlciBjb3JyZXNwb25kIHRvICdtYWtlIHJ1bl90ZXN0cycgb3JkZXJcXG4gVEVTVF9QUk9HUyA6PSB0ZXN0X2ttb2Quc2ggXFxcXFxcbi1cXHR0ZXN0X2xpcmNfbW9kZTIuc2ggXFxcXFxcbiBcXHR0ZXN0X2JwZnRvb2xfYnVpbGQuc2ggXFxcXFxcbiBcXHR0ZXN0X2RvY19idWlsZC5zaCBcXFxcXFxuIFxcdHRlc3RfeHNrLnNoIFxcXFxcXG5AQCAtMTQxLDcgKzE0MCw2IEBAIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEID0gXFxcXFxcbiBcXHRiZW5jaCBcXFxcXFxuIFxcdGZsb3dfZGlzc2VjdG9yX2xvYWQgXFxcXFxcbiBcXHR0ZXN0X2NwcCBcXFxcXFxuLVxcdHRlc3RfbGlyY19tb2RlMl91c2VyIFxcXFxcXG4gXFx0dmVyaXN0YXQgXFxcXFxcbiBcXHR4ZHBfZmVhdHVyZXMgXFxcXFxcbiBcXHR4ZHBfaHdfbWV0YWRhdGEgXFxcXFxcbkBAIC0zMzgsNyArMzM2LDYgQEAgJChPVVRQVVQpL3Rlc3Rfc29ja21hcDogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpXFxuICQoT1VUUFVUKS90ZXN0X3RjcG5vdGlmeV91c2VyOiAkKENHUk9VUF9IRUxQRVJTKSAkKFRFU1RJTkdfSEVMUEVSUykgJChUUkFDRV9IRUxQRVJTKVxcbiAkKE9VVFBVVCkvdGVzdF9zb2NrX2ZpZWxkczogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpXFxuICQoT1VUUFVUKS90ZXN0X3RhZzogJChURVNUSU5HX0hFTFBFUlMpXFxuLSQoT1VUUFVUKS90ZXN0X2xpcmNfbW9kZTJfdXNlcjogJChURVNUSU5HX0hFTFBFUlMpXFxuICQoT1VUUFVUKS9mbG93X2Rpc3NlY3Rvcl9sb2FkOiAkKFRFU1RJTkdfSEVMUEVSUylcXG4gJChPVVRQVVQpL3Rlc3RfbWFwczogJChURVNUSU5HX0hFTFBFUlMpXFxuICQoT1VUUFVUKS90ZXN0X3ZlcmlmaWVyOiAkKFRFU1RJTkdfSEVMUEVSUykgJChDQVBfSEVMUEVSUykgJChVTlBSSVZfSEVMUEVSUylcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xN2EzOGNkMDM4NDVjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpcmNfbW9kZTIuY1xcbkBAIC0wLDAgKzEsMzI4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8vIHRlc3QgaXIgZGVjb2RlclxcbisvL1xcbisvLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyBcXHUwMDNjc2VhbkBtZXNzLm9yZ1xcdTAwM2VcXG4rXFxuKy8vIEEgbGlyYyBjaGFyZGV2IGlzIGEgZGV2aWNlIHJlcHJlc2VudGluZyBhIGNvbnN1bWVyIElSIChjaXIpIGRldmljZSB3aGljaFxcbisvLyBjYW4gcmVjZWl2ZSBpbmZyYXJlZCBzaWduYWxzIGZyb20gcmVtb3RlIGNvbnRyb2wgYW5kL29yIHRyYW5zbWl0IElSLlxcbisvL1xcbisvLyBJUiBpcyBzZW50IGFzIGEgc2VyaWVzIG9mIHB1bHNlcyBhbmQgc3BhY2Ugc29tZXdoYXQgbGlrZSBtb3JzZSBjb2RlLiBUaGVcXG4rLy8gQlBGIHByb2dyYW0gY2FuIGRlY29kZSB0aGlzIGludG8gc2NhbmNvZGVzIHNvIHRoYXQgcmMtY29yZSBjYW4gdHJhbnNsYXRlXFxuKy8vIHRoaXMgaW50byBpbnB1dCBrZXkgY29kZXMgdXNpbmcgdGhlIHJjIGtleW1hcC5cXG4rLy9cXG4rLy8gVGhpcyB0ZXN0IHdvcmtzIGJ5IHNlbmRpbmcgSVIgb3ZlciByYy1sb29wYmFjaywgc28gdGhlIElSIGlzIHByb2Nlc3NlZCBieVxcbisvLyBCUEYgYW5kIHRoZW4gZGVjb2RlZCBpbnRvIHNjYW5jb2Rlcy4gVGhlIGxpcmMgY2hhcmRldiBtdXN0IGJlIHRoZSBvbmVcXG4rLy8gYXNzb2NpYXRlZCB3aXRoIHJjLWxvb3BiYWNrLCBzZWUgdGhlIG91dHB1dCBvZiBpci1rZXl0YWJsZSgxKS5cXG4rLy9cXG4rLy8gVGhlIGZvbGxvd2luZyBDT05GSUcgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoZSB0ZXN0IHRvIHN1Y2NlZWQ6XFxuKy8vIENPTkZJR19SQ19DT1JFPXlcXG4rLy8gQ09ORklHX0JQRl9SQVdJUl9FVkVOVD15XFxuKy8vIENPTkZJR19SQ19MT09QQkFDSz15XFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5wdXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpcmMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2dsb2IuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjcG9sbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwibGlyY19tb2RlMi5za2VsLmhcXFwiXFxuK1xcbisvKiBSZWFkIHRoZSBERVZOQU1FPSBsaW5lIG91dCBvZiB0aGUgZmlyc3QgdWV2ZW50IGZpbGUgdGhhdCBtYXRjaGVzXFxuKyAqIHBhdHRlcm4sIGFuZCB0dXJuIGl0IGludG8gYSAvZGV2L1xcdTAwM2NuYW1lXFx1MDAzZSBwYXRoLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgZmluZF9kZXZuYW1lKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKnBhdGgsIHNpemVfdCBwYXRoX3N6KVxcbit7XFxuK1xcdGdsb2JfdCBnbCA9IHt9O1xcbitcXHRib29sIGZvdW5kID0gZmFsc2U7XFxuK1xcdEZJTEUgKmY7XFxuK1xcbitcXHRpZiAoZ2xvYihwYXR0ZXJuLCAwLCBOVUxMLCBcXHUwMDI2Z2wpIHx8IGdsLmdsX3BhdGhjID09IDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0ZiA9IGZvcGVuKGdsLmdsX3BhdGh2WzBdLCBcXFwiclxcXCIpO1xcbitcXHRpZiAoIWYpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0Y2hhciBsaW5lWzI1Nl07XFxuK1xcbitcXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkge1xcbitcXHRcXHRjaGFyICp2YWw7XFxuK1xcbitcXHRcXHRpZiAoc3RybmNtcChsaW5lLCBcXFwiREVWTkFNRT1cXFwiLCA4KSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHR2YWwgPSBsaW5lICsgODtcXG4rXFx0XFx0dmFsW3N0cmNzcG4odmFsLCBcXFwiXFxcXG5cXFwiKV0gPSAnXFxcXDAnO1xcbitcXHRcXHRzbnByaW50ZihwYXRoLCBwYXRoX3N6LCBcXFwiL2Rldi8lc1xcXCIsIHZhbCk7XFxuK1xcdFxcdGZvdW5kID0gdHJ1ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdGZjbG9zZShmKTtcXG4rb3V0OlxcbitcXHRnbG9iZnJlZShcXHUwMDI2Z2wpO1xcbitcXHRyZXR1cm4gZm91bmQ7XFxuK31cXG4rXFxuKy8qIExvYWQgcmMtbG9vcGJhY2sgYW5kIGZpbmQgdGhlIGxpcmMgYW5kIGlucHV0IGNoYXJkZXZzIGl0IGNyZWF0ZWQuICovXFxuK3N0YXRpYyBib29sIGZpbmRfbG9vcGJhY2tfZGV2aWNlcyhjaGFyICpsaXJjX3BhdGgsIGNoYXIgKmlucHV0X3BhdGgsXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZV90IHBhdGhfc3opXFxuK3tcXG4rXFx0Z2xvYl90IGdsID0ge307XFxuK1xcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG4rXFxuK1xcdC8qIElnbm9yZSBmYWlsdXJlLCB3ZSBjaGVjayBmb3IgdGhlIHJlc3VsdGluZyBkZXZpY2VzIGJlbG93LiAqL1xcbitcXHRzeXN0ZW0oXFxcIm1vZHByb2JlIHJjLWxvb3BiYWNrIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXFwiKTtcXG4rXFxuK1xcdGlmIChnbG9iKFxcXCIvc3lzL2NsYXNzL3JjL3JjKlxcXCIsIDAsIE5VTEwsIFxcdTAwMjZnbCkpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJObyByYyBkZXZpY2VzIGZvdW5kLCBpcyBDT05GSUdfUkNfTE9PUEJBQ0sgZW5hYmxlZD9cXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFxcdTAwM2MgZ2wuZ2xfcGF0aGM7IGkrKykge1xcbitcXHRcXHRjb25zdCBjaGFyICpyY2RpciA9IGdsLmdsX3BhdGh2W2ldO1xcbitcXHRcXHRjaGFyIHVldmVudF9wYXRoW1BBVEhfTUFYXTtcXG4rXFx0XFx0Y2hhciB1ZXZlbnRbNDA5Nl07XFxuK1xcdFxcdGNoYXIgcGF0dGVybltQQVRIX01BWF07XFxuK1xcdFxcdEZJTEUgKmY7XFxuK1xcdFxcdHNpemVfdCBuO1xcbitcXG4rXFx0XFx0c25wcmludGYodWV2ZW50X3BhdGgsIHNpemVvZih1ZXZlbnRfcGF0aCksIFxcXCIlcy91ZXZlbnRcXFwiLCByY2Rpcik7XFxuK1xcdFxcdGYgPSBmb3Blbih1ZXZlbnRfcGF0aCwgXFxcInJcXFwiKTtcXG4rXFx0XFx0aWYgKCFmKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0biA9IGZyZWFkKHVldmVudCwgMSwgc2l6ZW9mKHVldmVudCkgLSAxLCBmKTtcXG4rXFx0XFx0ZmNsb3NlKGYpO1xcbitcXHRcXHR1ZXZlbnRbbl0gPSAnXFxcXDAnO1xcbitcXG4rXFx0XFx0aWYgKCFzdHJzdHIodWV2ZW50LCBcXFwiRFJWX05BTUU9cmMtbG9vcGJhY2tcXFwiKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzbnByaW50ZihwYXR0ZXJuLCBzaXplb2YocGF0dGVybiksIFxcXCIlcy9saXJjKi91ZXZlbnRcXFwiLCByY2Rpcik7XFxuK1xcdFxcdGlmICghZmluZF9kZXZuYW1lKHBhdHRlcm4sIGxpcmNfcGF0aCwgcGF0aF9zeikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0c25wcmludGYocGF0dGVybiwgc2l6ZW9mKHBhdHRlcm4pLCBcXFwiJXMvaW5wdXQqL2V2ZW50Ki91ZXZlbnRcXFwiLCByY2Rpcik7XFxuK1xcdFxcdGlmICghZmluZF9kZXZuYW1lKHBhdHRlcm4sIGlucHV0X3BhdGgsIHBhdGhfc3opKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGZvdW5kID0gdHJ1ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdGdsb2JmcmVlKFxcdTAwMjZnbCk7XFxuK1xcdHJldHVybiBmb3VuZDtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2xpcmNfbW9kZTIodm9pZClcXG4re1xcbitcXHRjaGFyIGxpcmNfcGF0aFtQQVRIX01BWF0sIGlucHV0X3BhdGhbUEFUSF9NQVhdO1xcbitcXHRpbnQgbGlyY2ZkID0gLTEsIGlucHV0ZmQgPSAtMSwgcHJvZ2ZkLCBwcm9nZmQyID0gLTE7XFxuK1xcdHN0cnVjdCBsaXJjX21vZGUyICpza2VsID0gTlVMTCwgKnNrZWwyID0gTlVMTDtcXG4rXFx0X191MzIgcHJvZ19pZHNbMTBdLCBwcm9nX2ZsYWdzWzEwXSwgcHJvZ19jbnQ7XFxuK1xcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm87XFxuK1xcdF9fdTMyIGluZm9fbGVuLCBwcm9nX2lkLCBwcm9nX2lkMjtcXG4rXFx0aW50IHRlc3RpcjEgPSAweDhlYWQ7XFx0Lyoga2V5ZG93biBmbGFnICgweDgwMDApIHwgc2NhbmNvZGUgMHhlYWQgKi9cXG4rXFx0aW50IHRlc3RpcjIgPSAweDQwODE7XFx0LyogcG9pbnRlcl9yZWwgZmxhZyAoMHg0MDAwKSB8IHJlbF94PTEgfCByZWxfeT0xICovXFxuK1xcdHN0cnVjdCBpbnB1dF9ldmVudCBldmVudDtcXG4rXFx0c3RydWN0IHBvbGxmZCBwZmQgPSB7fTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChnZXR1aWQoKSAhPSAwKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWZpbmRfbG9vcGJhY2tfZGV2aWNlcyhsaXJjX3BhdGgsIGlucHV0X3BhdGgsIHNpemVvZihsaXJjX3BhdGgpKSkge1xcbitcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0c2tlbCA9IGxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHByb2dmZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5icGZfZGVjb2Rlcik7XFxuK1xcbitcXHRtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XFxuK1xcdGluZm9fbGVuID0gc2l6ZW9mKGluZm8pO1xcbitcXHRyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nZmQsIFxcdTAwMjZpbmZvLCBcXHUwMDI2aW5mb19sZW4pO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJnZXQgZmlyc3QgcHJvZ3JhbSdzIGluZm9cXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdHByb2dfaWQgPSBpbmZvLmlkO1xcbitcXG4rXFx0bGlyY2ZkID0gb3BlbihsaXJjX3BhdGgsIE9fUkRXUiB8IE9fTk9OQkxPQ0spO1xcbitcXHRpZiAoIUFTU0VSVF9HRShsaXJjZmQsIDAsIFxcXCJvcGVuIGxpcmMgZGV2aWNlXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogVHJ5IHRvIGRldGFjaCBpdCBiZWZvcmUgaXQgd2FzIGV2ZXIgYXR0YWNoZWQsIHNob3VsZCBmYWlsLiAqL1xcbitcXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XFxuK1xcdGlmICghQVNTRVJUX0VRKHJldCwgLUVOT0VOVCwgXFxcImRldGFjaCB1bmF0dGFjaGVkIHByb2dyYW1cXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpbnB1dGZkID0gb3BlbihpbnB1dF9wYXRoLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spO1xcbitcXHRpZiAoIUFTU0VSVF9HRShpbnB1dGZkLCAwLCBcXFwib3BlbiBpbnB1dCBkZXZpY2VcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xcbitcXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcXG4rXFx0XFx0XFx0ICAgICBcXHUwMDI2cHJvZ19jbnQpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJxdWVyeSBwcm9ncmFtcyBiZWZvcmUgYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMCwgXFxcIm5vIHByb2dyYW1zIHNob3VsZCBiZSBhdHRhY2hlZCB5ZXRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBJbnZhbGlkIGF0dGFjaCBmbGFncyBtdXN0IGJlIHJlamVjdGVkLCBhbmQgbXVzdCBub3QgYXR0YWNoLiAqL1xcbitcXHRyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAxKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocmV0LCAtRUlOVkFMLCBcXFwiYXR0YWNoIHdpdGggaW52YWxpZCBmbGFnc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XFxuK1xcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZwcm9nX2NudCk7XFxuK1xcdGlmICghQVNTRVJUX09LKHJldCwgXFxcInF1ZXJ5IHByb2dyYW1zIGFmdGVyIHJlamVjdGVkIGF0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDAsIFxcXCJyZWplY3RlZCBhdHRhY2ggc2hvdWxkIG5vdCBhdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwiYXR0YWNoIHByb2dyYW0gdG8gbGlyYyBkZXZpY2VcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBJbnZhbGlkIHF1ZXJ5IGZsYWdzIG11c3QgYmUgcmVqZWN0ZWQgdG9vLCB3aXRob3V0IHVwc2V0dGluZyBzdGF0ZS4gKi9cXG4rXFx0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcXG4rXFx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMSwgcHJvZ19mbGFncywgcHJvZ19pZHMsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnByb2dfY250KTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgLUVJTlZBTCwgXFxcInF1ZXJ5IHdpdGggaW52YWxpZCBmbGFnc1xcXCIpO1xcbitcXG4rXFx0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcXG4rXFx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnByb2dfY250KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFxcXCJvbmUgcHJvZ3JhbSBzaG91bGQgYmUgYXR0YWNoZWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoO1xcbitcXHRBU1NFUlRfRVEocHJvZ19pZHNbMF0sIHByb2dfaWQsIFxcXCJxdWVyaWVkIGlkIHNob3VsZCBtYXRjaCBhdHRhY2hlZCBwcm9ncmFtXFxcIik7XFxuK1xcbitcXHQvKiBXcml0ZSByYXcgSVIgKi9cXG4rXFx0cmV0ID0gd3JpdGUobGlyY2ZkLCBcXHUwMDI2dGVzdGlyMSwgc2l6ZW9mKHRlc3RpcjEpKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocmV0LCBzaXplb2YodGVzdGlyMSksIFxcXCJzZW5kIHRlc3QgSVIgbWVzc2FnZSAxXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFxuK1xcdHBmZC5mZCA9IGlucHV0ZmQ7XFxuK1xcdHBmZC5ldmVudHMgPSBQT0xMSU47XFxuK1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdHBvbGwoXFx1MDAyNnBmZCwgMSwgMTAwKTtcXG4rXFxuK1xcdFxcdC8qIFJlYWQgZGVjb2RlZCBJUiAqL1xcbitcXHRcXHRyZXQgPSByZWFkKGlucHV0ZmQsIFxcdTAwMjZldmVudCwgc2l6ZW9mKGV2ZW50KSk7XFxuK1xcdFxcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKGV2ZW50KSwgXFxcInJlYWQgZGVjb2RlZCBJUiAxXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFxuK1xcdFxcdGlmIChldmVudC50eXBlID09IEVWX01TQyBcXHUwMDI2XFx1MDAyNiBldmVudC5jb2RlID09IE1TQ19TQ0FOIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBldmVudC52YWx1ZSA9PSAweGVhZClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFdyaXRlIHJhdyBJUiAqL1xcbitcXHRyZXQgPSB3cml0ZShsaXJjZmQsIFxcdTAwMjZ0ZXN0aXIyLCBzaXplb2YodGVzdGlyMikpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZih0ZXN0aXIyKSwgXFxcInNlbmQgdGVzdCBJUiBtZXNzYWdlIDJcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoO1xcbitcXG4rXFx0Zm9yICg7Oykge1xcbitcXHRcXHRwb2xsKFxcdTAwMjZwZmQsIDEsIDEwMCk7XFxuK1xcbitcXHRcXHQvKiBSZWFkIGRlY29kZWQgSVIgKi9cXG4rXFx0XFx0cmV0ID0gcmVhZChpbnB1dGZkLCBcXHUwMDI2ZXZlbnQsIHNpemVvZihldmVudCkpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZihldmVudCksIFxcXCJyZWFkIGRlY29kZWQgSVIgMlxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcbitcXHRcXHRpZiAoZXZlbnQudHlwZSA9PSBFVl9SRUwgXFx1MDAyNlxcdTAwMjYgZXZlbnQuY29kZSA9PSBSRUxfWSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgZXZlbnQudmFsdWUgPT0gMSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XFxuK1xcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZwcm9nX2NudCk7XFxuK1xcdGlmICghQVNTRVJUX09LKHJldCwgXFxcInF1ZXJ5IHByb2dyYW1zIGFmdGVyIElSIHdhcyBkZWNvZGVkXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFxcXCJvbmUgcHJvZ3JhbSBzaG91bGQgc3RpbGwgYmUgYXR0YWNoZWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGxpcmMgY2hhcmRldiBjYW4gaG9sZCBtb3JlIHRoYW4gb25lIGF0dGFjaGVkIHByb2dyYW0gYXQgb25jZS5cXG4rXFx0ICogTG9hZCBhIHNlY29uZCwgaW5kZXBlbmRlbnQgaW5zdGFuY2UgYW5kIGNoZWNrIGl0IGNhbiBiZSBhdHRhY2hlZFxcbitcXHQgKiBhbG9uZ3NpZGUgdGhlIGZpcnN0LCBxdWVyaWVkLCBhbmQgdGhlbiBkZXRhY2hlZCBvbiBpdHMgb3duXFxuK1xcdCAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgZmlyc3QgcHJvZ3JhbSdzIGF0dGFjaG1lbnQuXFxuK1xcdCAqL1xcbitcXHRza2VsMiA9IGxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwyLCBcXFwibGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCAoMm5kKVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcbitcXHRwcm9nZmQyID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwyLVxcdTAwM2Vwcm9ncy5icGZfZGVjb2Rlcik7XFxuK1xcbitcXHRtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XFxuK1xcdGluZm9fbGVuID0gc2l6ZW9mKGluZm8pO1xcbitcXHRyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nZmQyLCBcXHUwMDI2aW5mbywgXFx1MDAyNmluZm9fbGVuKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwiZ2V0IHNlY29uZCBwcm9ncmFtJ3MgaW5mb1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcdHByb2dfaWQyID0gaW5mby5pZDtcXG4rXFxuK1xcdHJldCA9IGJwZl9wcm9nX2F0dGFjaChwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwiYXR0YWNoIHNlY29uZCBwcm9ncmFtIHRvIGxpcmMgZGV2aWNlXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFxuK1xcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XFxuK1xcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZwcm9nX2NudCk7XFxuK1xcdGlmICghQVNTRVJUX09LKHJldCwgXFxcInF1ZXJ5IHByb2dyYW1zIGFmdGVyIHNlY29uZCBhdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoMjtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDIsIFxcXCJ0d28gcHJvZ3JhbXMgc2hvdWxkIGJlIGF0dGFjaGVkXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDI7XFxuK1xcdEFTU0VSVF9UUlVFKChwcm9nX2lkc1swXSA9PSBwcm9nX2lkIFxcdTAwMjZcXHUwMDI2IHByb2dfaWRzWzFdID09IHByb2dfaWQyKSB8fFxcbitcXHRcXHQgICAgKHByb2dfaWRzWzBdID09IHByb2dfaWQyIFxcdTAwMjZcXHUwMDI2IHByb2dfaWRzWzFdID09IHByb2dfaWQpLFxcbitcXHRcXHQgICAgXFxcInF1ZXJpZWQgaWRzIHNob3VsZCBiZSB0aGUgdHdvIGF0dGFjaGVkIHByb2dyYW1zXFxcIik7XFxuK1xcbitcXHQvKiBEZXRhY2ggdGhlIHNlY29uZCBwcm9ncmFtOyB0aGUgZmlyc3Qgc2hvdWxkIHJlbWFpbiBhdHRhY2hlZC4gKi9cXG4rXFx0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwiZGV0YWNoIHNlY29uZCBwcm9ncmFtXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDI7XFxuK1xcbitcXHQvKiBEZXRhY2hpbmcgYW4gYWxyZWFkeS1kZXRhY2hlZCBwcm9ncmFtIHNob3VsZCBub3cgZmFpbC4gKi9cXG4rXFx0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgLUVOT0VOVCwgXFxcImRldGFjaCBzZWNvbmQgcHJvZ3JhbSBhZ2FpblxcXCIpO1xcbitcXG4rXFx0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcXG4rXFx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnByb2dfY250KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgc2Vjb25kIGRldGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAxLCBcXFwib25lIHByb2dyYW0gc2hvdWxkIHJlbWFpbiBhdHRhY2hlZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcdEFTU0VSVF9FUShwcm9nX2lkc1swXSwgcHJvZ19pZCwgXFxcInJlbWFpbmluZyBwcm9ncmFtIHNob3VsZCBiZSB0aGUgZmlyc3Qgb25lXFxcIik7XFxuK1xcbitvdXRfZGV0YWNoOlxcbitcXHQvKiBMZXQncyB0cnkgZGV0YWNoaW5nIGl0IG5vdyBpdCBpcyBhY3R1YWxseSBhdHRhY2hlZC4gKi9cXG4rXFx0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xcbitcXHRBU1NFUlRfT0socmV0LCBcXFwiZGV0YWNoIHByb2dyYW0gZnJvbSBsaXJjIGRldmljZVxcXCIpO1xcbitcXG4rXFx0LyogRGV0YWNoaW5nIGl0IGFnYWluIHNob3VsZCBub3cgZmFpbCB0aGUgc2FtZSB3YXkuICovXFxuK1xcdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgLUVOT0VOVCwgXFxcImRldGFjaCBwcm9ncmFtIGZyb20gbGlyYyBkZXZpY2UgYWdhaW5cXFwiKTtcXG4rXFx0Z290byBvdXQ7XFxuK1xcbitvdXRfZGV0YWNoMjpcXG4rXFx0LyogQmVzdC1lZmZvcnQgY2xlYW51cCBvZiB0aGUgc2Vjb25kIHByb2dyYW0gYmVmb3JlIGJhaWxpbmcgb3V0LiAqL1xcbitcXHRicGZfcHJvZ19kZXRhY2gyKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xcbitcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcbitvdXQ6XFxuK1xcdGlmIChpbnB1dGZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGlucHV0ZmQpO1xcbitcXHRpZiAobGlyY2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGxpcmNmZCk7XFxuK1xcdGxpcmNfbW9kZTJfX2Rlc3Ryb3koc2tlbDIpO1xcbitcXHRsaXJjX21vZGUyX19kZXN0cm95KHNrZWwpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbGlyY19tb2RlMi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45ODEzN2YzYzVjMDNkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmNcXG5AQCAtMCwwICsxLDMyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8vIHRlc3QgaXIgZGVjb2RlclxcbisvL1xcbisvLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyBcXHUwMDNjc2VhbkBtZXNzLm9yZ1xcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpcmMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbitcXG4rU0VDKFxcXCJsaXJjX21vZGUyXFxcIilcXG4raW50IGJwZl9kZWNvZGVyKHVuc2lnbmVkIGludCAqc2FtcGxlKVxcbit7XFxuK1xcdGlmIChMSVJDX0lTX1BVTFNFKCpzYW1wbGUpKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBkdXJhdGlvbiA9IExJUkNfVkFMVUUoKnNhbXBsZSk7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBGbGFnIGJpdHMgcGlja2VkIGRlbGliZXJhdGVseSBsb3c6IHJjLWxvb3BiYWNrIHNpbXVsYXRlc1xcbitcXHRcXHQgKiBhIHJlY2VpdmVyIG92ZXJmbG93IGZvciBhbnkgcHVsc2Ugb3ZlciBNU19UT19VUyg1MCkgKHNlZVxcbitcXHRcXHQgKiBsb29wX3R4X2lyKCkgaW4gcmMtbG9vcGJhY2suYyksIHdoaWNoIHdvdWxkIHNpbGVudGx5XFxuK1xcdFxcdCAqIHN3YWxsb3cgdGhlIHNhbXBsZSBiZWZvcmUgaXQgZXZlciByZWFjaGVzIHRoaXMgZGVjb2Rlci5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChkdXJhdGlvbiBcXHUwMDI2IDB4ODAwMClcXG4rXFx0XFx0XFx0YnBmX3JjX2tleWRvd24oc2FtcGxlLCAweDQwLCBkdXJhdGlvbiBcXHUwMDI2IDB4M2ZmZiwgMCk7XFxuK1xcdFxcdGlmIChkdXJhdGlvbiBcXHUwMDI2IDB4NDAwMClcXG4rXFx0XFx0XFx0YnBmX3JjX3BvaW50ZXJfcmVsKHNhbXBsZSwgKGR1cmF0aW9uIFxcdTAwM2VcXHUwMDNlIDcpIFxcdTAwMjYgMHg3ZixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgZHVyYXRpb24gXFx1MDAyNiAweDdmKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xpcmNfbW9kZTJfa2Vybi5jXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggY2JlNDI4NGMwMzJmZS4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xpcmNfbW9kZTJfa2Vybi5jXFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDI2ICswLDAgQEBcXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4tLy8gdGVzdCBpciBkZWNvZGVyXFxuLS8vXFxuLS8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nIFxcdTAwM2NzZWFuQG1lc3Mub3JnXFx1MDAzZVxcbi1cXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbGlyYy5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuLVxcbi1TRUMoXFxcImxpcmNfbW9kZTJcXFwiKVxcbi1pbnQgYnBmX2RlY29kZXIodW5zaWduZWQgaW50ICpzYW1wbGUpXFxuLXtcXG4tXFx0aWYgKExJUkNfSVNfUFVMU0UoKnNhbXBsZSkpIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IGR1cmF0aW9uID0gTElSQ19WQUxVRSgqc2FtcGxlKTtcXG4tXFxuLVxcdFxcdGlmIChkdXJhdGlvbiBcXHUwMDI2IDB4MTAwMClcXG4tXFx0XFx0XFx0YnBmX3JjX2tleWRvd24oc2FtcGxlLCAweDQwLCBkdXJhdGlvbiBcXHUwMDI2IDB4ZmZmZiwgMCk7XFxuLVxcdFxcdGlmIChkdXJhdGlvbiBcXHUwMDI2IDB4MjAwMClcXG4tXFx0XFx0XFx0YnBmX3JjX3BvaW50ZXJfcmVsKHNhbXBsZSwgKGR1cmF0aW9uIFxcdTAwM2VcXHUwMDNlIDgpIFxcdTAwMjYgMHhmZixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgZHVyYXRpb24gXFx1MDAyNiAweGZmKTtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLWNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMi5zaFxcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDUyNTJiOTFmNDhhMTguLjAwMDAwMDAwMDAwMDBcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoXFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDQxICswLDAgQEBcXG4tIyEvYmluL2Jhc2hcXG4tIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbi1cXG4tIyBLc2VsZnRlc3QgZnJhbWV3b3JrIHJlcXVpcmVtZW50IC0gU0tJUCBjb2RlIGlzIDQuXFxuLWtzZnRfc2tpcD00XFxuLXJldD0ka3NmdF9za2lwXFxuLVxcbi1tc2c9XFxcInNraXAgYWxsIHRlc3RzOlxcXCJcXG4taWYgWyAkVUlEICE9IDAgXTsgdGhlblxcbi1cXHRlY2hvICRtc2cgcGxlYXNlIHJ1biB0aGlzIGFzIHJvb3QgXFx1MDAzZVxcdTAwMjYyXFxuLVxcdGV4aXQgJGtzZnRfc2tpcFxcbi1maVxcbi1cXG4tR1JFRU49J1xcXFwwMzNbMDs5Mm0nXFxuLVJFRD0nXFxcXDAzM1swOzMxbSdcXG4tTkM9J1xcXFwwMzNbMG0nICMgTm8gQ29sb3JcXG4tXFxuLW1vZHByb2JlIHJjLWxvb3BiYWNrXFxuLVxcbi1mb3IgaSBpbiAvc3lzL2NsYXNzL3JjL3JjKlxcbi1kb1xcbi1cXHRpZiBncmVwIC1xIERSVl9OQU1FPXJjLWxvb3BiYWNrICRpL3VldmVudFxcbi1cXHR0aGVuXFxuLVxcdFxcdExJUkNERVY9JChncmVwIERFVk5BTUU9ICRpL2xpcmMqL3VldmVudCB8IHNlZCBzUURFVk5BTUU9US9kZXYvUSlcXG4tXFx0XFx0SU5QVVRERVY9JChncmVwIERFVk5BTUU9ICRpL2lucHV0Ki9ldmVudCovdWV2ZW50IHwgc2VkIHNRREVWTkFNRT1RL2Rldi9RKVxcbi1cXHRmaVxcbi1kb25lXFxuLVxcbi1pZiBbIC1uIFxcXCIkTElSQ0RFVlxcXCIgXTtcXG4tdGhlblxcbi1cXHRUWVBFPWxpcmNfbW9kZTJcXG4tXFx0Li90ZXN0X2xpcmNfbW9kZTJfdXNlciAkTElSQ0RFViAkSU5QVVRERVZcXG4tXFx0cmV0PSQ/XFxuLVxcdGlmIFsgJHJldCAtbmUgMCBdOyB0aGVuXFxuLVxcdFxcdGVjaG8gLWUgJHtSRUR9XFxcIkZBSUw6ICRUWVBFXFxcIiR7TkN9XFxuLVxcdGVsc2VcXG4tXFx0XFx0ZWNobyAtZSAke0dSRUVOfVxcXCJQQVNTOiAkVFlQRVxcXCIke05DfVxcbi1cXHRmaVxcbi1maVxcbi1cXG4tZXhpdCAkcmV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE4OjIwOjIyLjMzODE2MzQ3OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMjc5NDQ3NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLyBieSBtaWdyYXRpbmcgYW4gZXhpc3RpbmcgdGVzdCB0byB0aGUgdGVzdF9wcm9ncyBmcmFtZXdvcmsuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzA4MDQyNzE5YjE1NTllMjU5OWFkNDhjYjQ4MjA3OTEyNGU4YjNjOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDE4OjIwOjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5pbmRleCAyYjJmOTNkZWM0NzRiLi5mOGVjMGY1NzQ1NTlhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbkBAIC0xMjMsNyArMTIzLDYgQEAgVEVTVF9GSUxFUyA9IHhza19wcmVyZXFzLnNoICQod2lsZGNhcmQgcHJvZ3MvYnRmX2R1bXBfdGVzdF9jYXNlXyouYylcbiBcbiAjIE9yZGVyIGNvcnJlc3BvbmQgdG8gJ21ha2UgcnVuX3Rlc3RzJyBvcmRlclxuIFRFU1RfUFJPR1MgOj0gdGVzdF9rbW9kLnNoIFxcXG4tXHR0ZXN0X2xpcmNfbW9kZTIuc2ggXFxcbiBcdHRlc3RfYnBmdG9vbF9idWlsZC5zaCBcXFxuIFx0dGVzdF9kb2NfYnVpbGQuc2ggXFxcbiBcdHRlc3RfeHNrLnNoIFxcXG5AQCAtMTQxLDcgKzE0MCw2IEBAIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEID0gXFxcbiBcdGJlbmNoIFxcXG4gXHRmbG93X2Rpc3NlY3Rvcl9sb2FkIFxcXG4gXHR0ZXN0X2NwcCBcXFxuLVx0dGVzdF9saXJjX21vZGUyX3VzZXIgXFxcbiBcdHZlcmlzdGF0IFxcXG4gXHR4ZHBfZmVhdHVyZXMgXFxcbiBcdHhkcF9od19tZXRhZGF0YSBcXFxuQEAgLTMzOCw3ICszMzYsNiBAQCAkKE9VVFBVVCkvdGVzdF9zb2NrbWFwOiAkKENHUk9VUF9IRUxQRVJTKSAkKFRFU1RJTkdfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF90Y3Bub3RpZnlfdXNlcjogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpICQoVFJBQ0VfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF9zb2NrX2ZpZWxkczogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpXG4gJChPVVRQVVQpL3Rlc3RfdGFnOiAkKFRFU1RJTkdfSEVMUEVSUylcbi0kKE9VVFBVVCkvdGVzdF9saXJjX21vZGUyX3VzZXI6ICQoVEVTVElOR19IRUxQRVJTKVxuICQoT1VUUFVUKS9mbG93X2Rpc3NlY3Rvcl9sb2FkOiAkKFRFU1RJTkdfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF9tYXBzOiAkKFRFU1RJTkdfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF92ZXJpZmllcjogJChURVNUSU5HX0hFTFBFUlMpICQoQ0FQX0hFTFBFUlMpICQoVU5QUklWX0hFTFBFUlMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTdhMzhjZDAzODQ1Y1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jXG5AQCAtMCwwICsxLDMyOCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLy8gdGVzdCBpciBkZWNvZGVyXG4rLy9cbisvLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyBcdTAwM2NzZWFuQG1lc3Mub3JnXHUwMDNlXG4rXG4rLy8gQSBsaXJjIGNoYXJkZXYgaXMgYSBkZXZpY2UgcmVwcmVzZW50aW5nIGEgY29uc3VtZXIgSVIgKGNpcikgZGV2aWNlIHdoaWNoXG4rLy8gY2FuIHJlY2VpdmUgaW5mcmFyZWQgc2lnbmFscyBmcm9tIHJlbW90ZSBjb250cm9sIGFuZC9vciB0cmFuc21pdCBJUi5cbisvL1xuKy8vIElSIGlzIHNlbnQgYXMgYSBzZXJpZXMgb2YgcHVsc2VzIGFuZCBzcGFjZSBzb21ld2hhdCBsaWtlIG1vcnNlIGNvZGUuIFRoZVxuKy8vIEJQRiBwcm9ncmFtIGNhbiBkZWNvZGUgdGhpcyBpbnRvIHNjYW5jb2RlcyBzbyB0aGF0IHJjLWNvcmUgY2FuIHRyYW5zbGF0ZVxuKy8vIHRoaXMgaW50byBpbnB1dCBrZXkgY29kZXMgdXNpbmcgdGhlIHJjIGtleW1hcC5cbisvL1xuKy8vIFRoaXMgdGVzdCB3b3JrcyBieSBzZW5kaW5nIElSIG92ZXIgcmMtbG9vcGJhY2ssIHNvIHRoZSBJUiBpcyBwcm9jZXNzZWQgYnlcbisvLyBCUEYgYW5kIHRoZW4gZGVjb2RlZCBpbnRvIHNjYW5jb2Rlcy4gVGhlIGxpcmMgY2hhcmRldiBtdXN0IGJlIHRoZSBvbmVcbisvLyBhc3NvY2lhdGVkIHdpdGggcmMtbG9vcGJhY2ssIHNlZSB0aGUgb3V0cHV0IG9mIGlyLWtleXRhYmxlKDEpLlxuKy8vXG4rLy8gVGhlIGZvbGxvd2luZyBDT05GSUcgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoZSB0ZXN0IHRvIHN1Y2NlZWQ6XG4rLy8gQ09ORklHX1JDX0NPUkU9eVxuKy8vIENPTkZJR19CUEZfUkFXSVJfRVZFTlQ9eVxuKy8vIENPTkZJR19SQ19MT09QQkFDSz15XG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5wdXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpcmMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2dsb2IuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJsaXJjX21vZGUyLnNrZWwuaFwiXG4rXG4rLyogUmVhZCB0aGUgREVWTkFNRT0gbGluZSBvdXQgb2YgdGhlIGZpcnN0IHVldmVudCBmaWxlIHRoYXQgbWF0Y2hlc1xuKyAqIHBhdHRlcm4sIGFuZCB0dXJuIGl0IGludG8gYSAvZGV2L1x1MDAzY25hbWVcdTAwM2UgcGF0aC5cbisgKi9cbitzdGF0aWMgYm9vbCBmaW5kX2Rldm5hbWUoY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfc3opXG4re1xuK1x0Z2xvYl90IGdsID0ge307XG4rXHRib29sIGZvdW5kID0gZmFsc2U7XG4rXHRGSUxFICpmO1xuK1xuK1x0aWYgKGdsb2IocGF0dGVybiwgMCwgTlVMTCwgXHUwMDI2Z2wpIHx8IGdsLmdsX3BhdGhjID09IDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0ZiA9IGZvcGVuKGdsLmdsX3BhdGh2WzBdLCBcInJcIik7XG4rXHRpZiAoIWYpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0Y2hhciBsaW5lWzI1Nl07XG4rXG4rXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkge1xuK1x0XHRjaGFyICp2YWw7XG4rXG4rXHRcdGlmIChzdHJuY21wKGxpbmUsIFwiREVWTkFNRT1cIiwgOCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHZhbCA9IGxpbmUgKyA4O1xuK1x0XHR2YWxbc3RyY3Nwbih2YWwsIFwiXFxuXCIpXSA9ICdcXDAnO1xuK1x0XHRzbnByaW50ZihwYXRoLCBwYXRoX3N6LCBcIi9kZXYvJXNcIiwgdmFsKTtcbitcdFx0Zm91bmQgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdGZjbG9zZShmKTtcbitvdXQ6XG4rXHRnbG9iZnJlZShcdTAwMjZnbCk7XG4rXHRyZXR1cm4gZm91bmQ7XG4rfVxuK1xuKy8qIExvYWQgcmMtbG9vcGJhY2sgYW5kIGZpbmQgdGhlIGxpcmMgYW5kIGlucHV0IGNoYXJkZXZzIGl0IGNyZWF0ZWQuICovXG4rc3RhdGljIGJvb2wgZmluZF9sb29wYmFja19kZXZpY2VzKGNoYXIgKmxpcmNfcGF0aCwgY2hhciAqaW5wdXRfcGF0aCxcbitcdFx0XHRcdCAgc2l6ZV90IHBhdGhfc3opXG4re1xuK1x0Z2xvYl90IGdsID0ge307XG4rXHRib29sIGZvdW5kID0gZmFsc2U7XG4rXG4rXHQvKiBJZ25vcmUgZmFpbHVyZSwgd2UgY2hlY2sgZm9yIHRoZSByZXN1bHRpbmcgZGV2aWNlcyBiZWxvdy4gKi9cbitcdHN5c3RlbShcIm1vZHByb2JlIHJjLWxvb3BiYWNrIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcIik7XG4rXG4rXHRpZiAoZ2xvYihcIi9zeXMvY2xhc3MvcmMvcmMqXCIsIDAsIE5VTEwsIFx1MDAyNmdsKSkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJObyByYyBkZXZpY2VzIGZvdW5kLCBpcyBDT05GSUdfUkNfTE9PUEJBQ0sgZW5hYmxlZD9cXG5cIik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBnbC5nbF9wYXRoYzsgaSsrKSB7XG4rXHRcdGNvbnN0IGNoYXIgKnJjZGlyID0gZ2wuZ2xfcGF0aHZbaV07XG4rXHRcdGNoYXIgdWV2ZW50X3BhdGhbUEFUSF9NQVhdO1xuK1x0XHRjaGFyIHVldmVudFs0MDk2XTtcbitcdFx0Y2hhciBwYXR0ZXJuW1BBVEhfTUFYXTtcbitcdFx0RklMRSAqZjtcbitcdFx0c2l6ZV90IG47XG4rXG4rXHRcdHNucHJpbnRmKHVldmVudF9wYXRoLCBzaXplb2YodWV2ZW50X3BhdGgpLCBcIiVzL3VldmVudFwiLCByY2Rpcik7XG4rXHRcdGYgPSBmb3Blbih1ZXZlbnRfcGF0aCwgXCJyXCIpO1xuK1x0XHRpZiAoIWYpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdG4gPSBmcmVhZCh1ZXZlbnQsIDEsIHNpemVvZih1ZXZlbnQpIC0gMSwgZik7XG4rXHRcdGZjbG9zZShmKTtcbitcdFx0dWV2ZW50W25dID0gJ1xcMCc7XG4rXG4rXHRcdGlmICghc3Ryc3RyKHVldmVudCwgXCJEUlZfTkFNRT1yYy1sb29wYmFja1wiKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c25wcmludGYocGF0dGVybiwgc2l6ZW9mKHBhdHRlcm4pLCBcIiVzL2xpcmMqL3VldmVudFwiLCByY2Rpcik7XG4rXHRcdGlmICghZmluZF9kZXZuYW1lKHBhdHRlcm4sIGxpcmNfcGF0aCwgcGF0aF9zeikpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHNucHJpbnRmKHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSwgXCIlcy9pbnB1dCovZXZlbnQqL3VldmVudFwiLCByY2Rpcik7XG4rXHRcdGlmICghZmluZF9kZXZuYW1lKHBhdHRlcm4sIGlucHV0X3BhdGgsIHBhdGhfc3opKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRmb3VuZCA9IHRydWU7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0Z2xvYmZyZWUoXHUwMDI2Z2wpO1xuK1x0cmV0dXJuIGZvdW5kO1xuK31cbitcbit2b2lkIHRlc3RfbGlyY19tb2RlMih2b2lkKVxuK3tcbitcdGNoYXIgbGlyY19wYXRoW1BBVEhfTUFYXSwgaW5wdXRfcGF0aFtQQVRIX01BWF07XG4rXHRpbnQgbGlyY2ZkID0gLTEsIGlucHV0ZmQgPSAtMSwgcHJvZ2ZkLCBwcm9nZmQyID0gLTE7XG4rXHRzdHJ1Y3QgbGlyY19tb2RlMiAqc2tlbCA9IE5VTEwsICpza2VsMiA9IE5VTEw7XG4rXHRfX3UzMiBwcm9nX2lkc1sxMF0sIHByb2dfZmxhZ3NbMTBdLCBwcm9nX2NudDtcbitcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm87XG4rXHRfX3UzMiBpbmZvX2xlbiwgcHJvZ19pZCwgcHJvZ19pZDI7XG4rXHRpbnQgdGVzdGlyMSA9IDB4OGVhZDtcdC8qIGtleWRvd24gZmxhZyAoMHg4MDAwKSB8IHNjYW5jb2RlIDB4ZWFkICovXG4rXHRpbnQgdGVzdGlyMiA9IDB4NDA4MTtcdC8qIHBvaW50ZXJfcmVsIGZsYWcgKDB4NDAwMCkgfCByZWxfeD0xIHwgcmVsX3k9MSAqL1xuK1x0c3RydWN0IGlucHV0X2V2ZW50IGV2ZW50O1xuK1x0c3RydWN0IHBvbGxmZCBwZmQgPSB7fTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoZ2V0dWlkKCkgIT0gMCkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmICghZmluZF9sb29wYmFja19kZXZpY2VzKGxpcmNfcGF0aCwgaW5wdXRfcGF0aCwgc2l6ZW9mKGxpcmNfcGF0aCkpKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c2tlbCA9IGxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHByb2dmZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmJwZl9kZWNvZGVyKTtcbitcbitcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuK1x0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4rXHRyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nZmQsIFx1MDAyNmluZm8sIFx1MDAyNmluZm9fbGVuKTtcbitcdGlmICghQVNTRVJUX09LKHJldCwgXCJnZXQgZmlyc3QgcHJvZ3JhbSdzIGluZm9cIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0cHJvZ19pZCA9IGluZm8uaWQ7XG4rXG4rXHRsaXJjZmQgPSBvcGVuKGxpcmNfcGF0aCwgT19SRFdSIHwgT19OT05CTE9DSyk7XG4rXHRpZiAoIUFTU0VSVF9HRShsaXJjZmQsIDAsIFwib3BlbiBsaXJjIGRldmljZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBUcnkgdG8gZGV0YWNoIGl0IGJlZm9yZSBpdCB3YXMgZXZlciBhdHRhY2hlZCwgc2hvdWxkIGZhaWwuICovXG4rXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIC1FTk9FTlQsIFwiZGV0YWNoIHVuYXR0YWNoZWQgcHJvZ3JhbVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpbnB1dGZkID0gb3BlbihpbnB1dF9wYXRoLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spO1xuK1x0aWYgKCFBU1NFUlRfR0UoaW5wdXRmZCwgMCwgXCJvcGVuIGlucHV0IGRldmljZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuK1x0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4rXHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwicXVlcnkgcHJvZ3JhbXMgYmVmb3JlIGF0dGFjaFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMCwgXCJubyBwcm9ncmFtcyBzaG91bGQgYmUgYXR0YWNoZWQgeWV0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEludmFsaWQgYXR0YWNoIGZsYWdzIG11c3QgYmUgcmVqZWN0ZWQsIGFuZCBtdXN0IG5vdCBhdHRhY2guICovXG4rXHRyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAxKTtcbitcdGlmICghQVNTRVJUX0VRKHJldCwgLUVJTlZBTCwgXCJhdHRhY2ggd2l0aCBpbnZhbGlkIGZsYWdzXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XG4rXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbitcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbitcdGlmICghQVNTRVJUX09LKHJldCwgXCJxdWVyeSBwcm9ncmFtcyBhZnRlciByZWplY3RlZCBhdHRhY2hcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDAsIFwicmVqZWN0ZWQgYXR0YWNoIHNob3VsZCBub3QgYXR0YWNoXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IGJwZl9wcm9nX2F0dGFjaChwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDApO1xuK1x0aWYgKCFBU1NFUlRfT0socmV0LCBcImF0dGFjaCBwcm9ncmFtIHRvIGxpcmMgZGV2aWNlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEludmFsaWQgcXVlcnkgZmxhZ3MgbXVzdCBiZSByZWplY3RlZCB0b28sIHdpdGhvdXQgdXBzZXR0aW5nIHN0YXRlLiAqL1xuK1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbitcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDEsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuK1x0XHRcdCAgICAgXHUwMDI2cHJvZ19jbnQpO1xuK1x0QVNTRVJUX0VRKHJldCwgLUVJTlZBTCwgXCJxdWVyeSB3aXRoIGludmFsaWQgZmxhZ3NcIik7XG4rXG4rXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuK1x0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4rXHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgYXR0YWNoXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMSwgXCJvbmUgcHJvZ3JhbSBzaG91bGQgYmUgYXR0YWNoZWRcIikpXG4rXHRcdGdvdG8gb3V0X2RldGFjaDtcbitcdEFTU0VSVF9FUShwcm9nX2lkc1swXSwgcHJvZ19pZCwgXCJxdWVyaWVkIGlkIHNob3VsZCBtYXRjaCBhdHRhY2hlZCBwcm9ncmFtXCIpO1xuK1xuK1x0LyogV3JpdGUgcmF3IElSICovXG4rXHRyZXQgPSB3cml0ZShsaXJjZmQsIFx1MDAyNnRlc3RpcjEsIHNpemVvZih0ZXN0aXIxKSk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZih0ZXN0aXIxKSwgXCJzZW5kIHRlc3QgSVIgbWVzc2FnZSAxXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXG4rXHRwZmQuZmQgPSBpbnB1dGZkO1xuK1x0cGZkLmV2ZW50cyA9IFBPTExJTjtcbitcbitcdGZvciAoOzspIHtcbitcdFx0cG9sbChcdTAwMjZwZmQsIDEsIDEwMCk7XG4rXG4rXHRcdC8qIFJlYWQgZGVjb2RlZCBJUiAqL1xuK1x0XHRyZXQgPSByZWFkKGlucHV0ZmQsIFx1MDAyNmV2ZW50LCBzaXplb2YoZXZlbnQpKTtcbitcdFx0aWYgKCFBU1NFUlRfRVEocmV0LCBzaXplb2YoZXZlbnQpLCBcInJlYWQgZGVjb2RlZCBJUiAxXCIpKVxuK1x0XHRcdGdvdG8gb3V0X2RldGFjaDtcbitcbitcdFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfTVNDIFx1MDAyNlx1MDAyNiBldmVudC5jb2RlID09IE1TQ19TQ0FOIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZXZlbnQudmFsdWUgPT0gMHhlYWQpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHQvKiBXcml0ZSByYXcgSVIgKi9cbitcdHJldCA9IHdyaXRlKGxpcmNmZCwgXHUwMDI2dGVzdGlyMiwgc2l6ZW9mKHRlc3RpcjIpKTtcbitcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKHRlc3RpcjIpLCBcInNlbmQgdGVzdCBJUiBtZXNzYWdlIDJcIikpXG4rXHRcdGdvdG8gb3V0X2RldGFjaDtcbitcbitcdGZvciAoOzspIHtcbitcdFx0cG9sbChcdTAwMjZwZmQsIDEsIDEwMCk7XG4rXG4rXHRcdC8qIFJlYWQgZGVjb2RlZCBJUiAqL1xuK1x0XHRyZXQgPSByZWFkKGlucHV0ZmQsIFx1MDAyNmV2ZW50LCBzaXplb2YoZXZlbnQpKTtcbitcdFx0aWYgKCFBU1NFUlRfRVEocmV0LCBzaXplb2YoZXZlbnQpLCBcInJlYWQgZGVjb2RlZCBJUiAyXCIpKVxuK1x0XHRcdGdvdG8gb3V0X2RldGFjaDtcbitcbitcdFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfUkVMIFx1MDAyNlx1MDAyNiBldmVudC5jb2RlID09IFJFTF9ZIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZXZlbnQudmFsdWUgPT0gMSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XG4rXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbitcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbitcdGlmICghQVNTRVJUX09LKHJldCwgXCJxdWVyeSBwcm9ncmFtcyBhZnRlciBJUiB3YXMgZGVjb2RlZFwiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoO1xuK1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFwib25lIHByb2dyYW0gc2hvdWxkIHN0aWxsIGJlIGF0dGFjaGVkXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXG4rXHQvKlxuK1x0ICogVGhlIGxpcmMgY2hhcmRldiBjYW4gaG9sZCBtb3JlIHRoYW4gb25lIGF0dGFjaGVkIHByb2dyYW0gYXQgb25jZS5cbitcdCAqIExvYWQgYSBzZWNvbmQsIGluZGVwZW5kZW50IGluc3RhbmNlIGFuZCBjaGVjayBpdCBjYW4gYmUgYXR0YWNoZWRcbitcdCAqIGFsb25nc2lkZSB0aGUgZmlyc3QsIHF1ZXJpZWQsIGFuZCB0aGVuIGRldGFjaGVkIG9uIGl0cyBvd25cbitcdCAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgZmlyc3QgcHJvZ3JhbSdzIGF0dGFjaG1lbnQuXG4rXHQgKi9cbitcdHNrZWwyID0gbGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwyLCBcImxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQgKDJuZClcIikpXG4rXHRcdGdvdG8gb3V0X2RldGFjaDtcbitcbitcdHByb2dmZDIgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbDItXHUwMDNlcHJvZ3MuYnBmX2RlY29kZXIpO1xuK1xuK1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG4rXHRpbmZvX2xlbiA9IHNpemVvZihpbmZvKTtcbitcdHJldCA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHByb2dmZDIsIFx1MDAyNmluZm8sIFx1MDAyNmluZm9fbGVuKTtcbitcdGlmICghQVNTRVJUX09LKHJldCwgXCJnZXQgc2Vjb25kIHByb2dyYW0ncyBpbmZvXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXHRwcm9nX2lkMiA9IGluZm8uaWQ7XG4rXG4rXHRyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwiYXR0YWNoIHNlY29uZCBwcm9ncmFtIHRvIGxpcmMgZGV2aWNlXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXG4rXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuK1x0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4rXHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgc2Vjb25kIGF0dGFjaFwiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoMjtcbitcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAyLCBcInR3byBwcm9ncmFtcyBzaG91bGQgYmUgYXR0YWNoZWRcIikpXG4rXHRcdGdvdG8gb3V0X2RldGFjaDI7XG4rXHRBU1NFUlRfVFJVRSgocHJvZ19pZHNbMF0gPT0gcHJvZ19pZCBcdTAwMjZcdTAwMjYgcHJvZ19pZHNbMV0gPT0gcHJvZ19pZDIpIHx8XG4rXHRcdCAgICAocHJvZ19pZHNbMF0gPT0gcHJvZ19pZDIgXHUwMDI2XHUwMDI2IHByb2dfaWRzWzFdID09IHByb2dfaWQpLFxuK1x0XHQgICAgXCJxdWVyaWVkIGlkcyBzaG91bGQgYmUgdGhlIHR3byBhdHRhY2hlZCBwcm9ncmFtc1wiKTtcbitcbitcdC8qIERldGFjaCB0aGUgc2Vjb25kIHByb2dyYW07IHRoZSBmaXJzdCBzaG91bGQgcmVtYWluIGF0dGFjaGVkLiAqL1xuK1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcbitcdGlmICghQVNTRVJUX09LKHJldCwgXCJkZXRhY2ggc2Vjb25kIHByb2dyYW1cIikpXG4rXHRcdGdvdG8gb3V0X2RldGFjaDI7XG4rXG4rXHQvKiBEZXRhY2hpbmcgYW4gYWxyZWFkeS1kZXRhY2hlZCBwcm9ncmFtIHNob3VsZCBub3cgZmFpbC4gKi9cbitcdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4rXHRBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCBcImRldGFjaCBzZWNvbmQgcHJvZ3JhbSBhZ2FpblwiKTtcbitcbitcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XG4rXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbitcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbitcdGlmICghQVNTRVJUX09LKHJldCwgXCJxdWVyeSBwcm9ncmFtcyBhZnRlciBzZWNvbmQgZGV0YWNoXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMSwgXCJvbmUgcHJvZ3JhbSBzaG91bGQgcmVtYWluIGF0dGFjaGVkXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXHRBU1NFUlRfRVEocHJvZ19pZHNbMF0sIHByb2dfaWQsIFwicmVtYWluaW5nIHByb2dyYW0gc2hvdWxkIGJlIHRoZSBmaXJzdCBvbmVcIik7XG4rXG4rb3V0X2RldGFjaDpcbitcdC8qIExldCdzIHRyeSBkZXRhY2hpbmcgaXQgbm93IGl0IGlzIGFjdHVhbGx5IGF0dGFjaGVkLiAqL1xuK1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuK1x0QVNTRVJUX09LKHJldCwgXCJkZXRhY2ggcHJvZ3JhbSBmcm9tIGxpcmMgZGV2aWNlXCIpO1xuK1xuK1x0LyogRGV0YWNoaW5nIGl0IGFnYWluIHNob3VsZCBub3cgZmFpbCB0aGUgc2FtZSB3YXkuICovXG4rXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4rXHRBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCBcImRldGFjaCBwcm9ncmFtIGZyb20gbGlyYyBkZXZpY2UgYWdhaW5cIik7XG4rXHRnb3RvIG91dDtcbitcbitvdXRfZGV0YWNoMjpcbitcdC8qIEJlc3QtZWZmb3J0IGNsZWFudXAgb2YgdGhlIHNlY29uZCBwcm9ncmFtIGJlZm9yZSBiYWlsaW5nIG91dC4gKi9cbitcdGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4rXHRnb3RvIG91dF9kZXRhY2g7XG4rXG4rb3V0OlxuK1x0aWYgKGlucHV0ZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShpbnB1dGZkKTtcbitcdGlmIChsaXJjZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShsaXJjZmQpO1xuK1x0bGlyY19tb2RlMl9fZGVzdHJveShza2VsMik7XG4rXHRsaXJjX21vZGUyX19kZXN0cm95KHNrZWwpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4MTM3ZjNjNWMwM2Rcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmNcbkBAIC0wLDAgKzEsMzIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8vIHRlc3QgaXIgZGVjb2RlclxuKy8vXG4rLy8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgXHUwMDNjc2VhbkBtZXNzLm9yZ1x1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGlyYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbitcbitTRUMoXCJsaXJjX21vZGUyXCIpXG4raW50IGJwZl9kZWNvZGVyKHVuc2lnbmVkIGludCAqc2FtcGxlKVxuK3tcbitcdGlmIChMSVJDX0lTX1BVTFNFKCpzYW1wbGUpKSB7XG4rXHRcdHVuc2lnbmVkIGludCBkdXJhdGlvbiA9IExJUkNfVkFMVUUoKnNhbXBsZSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEZsYWcgYml0cyBwaWNrZWQgZGVsaWJlcmF0ZWx5IGxvdzogcmMtbG9vcGJhY2sgc2ltdWxhdGVzXG4rXHRcdCAqIGEgcmVjZWl2ZXIgb3ZlcmZsb3cgZm9yIGFueSBwdWxzZSBvdmVyIE1TX1RPX1VTKDUwKSAoc2VlXG4rXHRcdCAqIGxvb3BfdHhfaXIoKSBpbiByYy1sb29wYmFjay5jKSwgd2hpY2ggd291bGQgc2lsZW50bHlcbitcdFx0ICogc3dhbGxvdyB0aGUgc2FtcGxlIGJlZm9yZSBpdCBldmVyIHJlYWNoZXMgdGhpcyBkZWNvZGVyLlxuK1x0XHQgKi9cbitcdFx0aWYgKGR1cmF0aW9uIFx1MDAyNiAweDgwMDApXG4rXHRcdFx0YnBmX3JjX2tleWRvd24oc2FtcGxlLCAweDQwLCBkdXJhdGlvbiBcdTAwMjYgMHgzZmZmLCAwKTtcbitcdFx0aWYgKGR1cmF0aW9uIFx1MDAyNiAweDQwMDApXG4rXHRcdFx0YnBmX3JjX3BvaW50ZXJfcmVsKHNhbXBsZSwgKGR1cmF0aW9uIFx1MDAzZVx1MDAzZSA3KSBcdTAwMjYgMHg3ZixcbitcdFx0XHRcdFx0ICAgZHVyYXRpb24gXHUwMDI2IDB4N2YpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xpcmNfbW9kZTJfa2Vybi5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGNiZTQyODRjMDMyZmUuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xpcmNfbW9kZTJfa2Vybi5jXG4rKysgL2Rldi9udWxsXG5AQCAtMSwyNiArMCwwIEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbi0vLyB0ZXN0IGlyIGRlY29kZXJcbi0vL1xuLS8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nIFx1MDAzY3NlYW5AbWVzcy5vcmdcdTAwM2Vcbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpcmMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4tXG4tU0VDKFwibGlyY19tb2RlMlwiKVxuLWludCBicGZfZGVjb2Rlcih1bnNpZ25lZCBpbnQgKnNhbXBsZSlcbi17XG4tXHRpZiAoTElSQ19JU19QVUxTRSgqc2FtcGxlKSkge1xuLVx0XHR1bnNpZ25lZCBpbnQgZHVyYXRpb24gPSBMSVJDX1ZBTFVFKCpzYW1wbGUpO1xuLVxuLVx0XHRpZiAoZHVyYXRpb24gXHUwMDI2IDB4MTAwMClcbi1cdFx0XHRicGZfcmNfa2V5ZG93bihzYW1wbGUsIDB4NDAsIGR1cmF0aW9uIFx1MDAyNiAweGZmZmYsIDApO1xuLVx0XHRpZiAoZHVyYXRpb24gXHUwMDI2IDB4MjAwMClcbi1cdFx0XHRicGZfcmNfcG9pbnRlcl9yZWwoc2FtcGxlLCAoZHVyYXRpb24gXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweGZmLFxuLVx0XHRcdFx0XHQgICBkdXJhdGlvbiBcdTAwMjYgMHhmZik7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTIuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDUyNTJiOTFmNDhhMTguLjAwMDAwMDAwMDAwMDBcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTIuc2hcbisrKyAvZGV2L251bGxcbkBAIC0xLDQxICswLDAgQEBcbi0jIS9iaW4vYmFzaFxuLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbi1cbi0jIEtzZWxmdGVzdCBmcmFtZXdvcmsgcmVxdWlyZW1lbnQgLSBTS0lQIGNvZGUgaXMgNC5cbi1rc2Z0X3NraXA9NFxuLXJldD0ka3NmdF9za2lwXG4tXG4tbXNnPVwic2tpcCBhbGwgdGVzdHM6XCJcbi1pZiBbICRVSUQgIT0gMCBdOyB0aGVuXG4tXHRlY2hvICRtc2cgcGxlYXNlIHJ1biB0aGlzIGFzIHJvb3QgXHUwMDNlXHUwMDI2MlxuLVx0ZXhpdCAka3NmdF9za2lwXG4tZmlcbi1cbi1HUkVFTj0nXFwwMzNbMDs5Mm0nXG4tUkVEPSdcXDAzM1swOzMxbSdcbi1OQz0nXFwwMzNbMG0nICMgTm8gQ29sb3Jcbi1cbi1tb2Rwcm9iZSByYy1sb29wYmFja1xuLVxuLWZvciBpIGluIC9zeXMvY2xhc3MvcmMvcmMqXG4tZG9cbi1cdGlmIGdyZXAgLXEgRFJWX05BTUU9cmMtbG9vcGJhY2sgJGkvdWV2ZW50XG4tXHR0aGVuXG4tXHRcdExJUkNERVY9JChncmVwIERFVk5BTUU9ICRpL2xpcmMqL3VldmVudCB8IHNlZCBzUURFVk5BTUU9US9kZXYvUSlcbi1cdFx0SU5QVVRERVY9JChncmVwIERFVk5BTUU9ICRpL2lucHV0Ki9ldmVudCovdWV2ZW50IHwgc2VkIHNRREVWTkFNRT1RL2Rldi9RKVxuLVx0Zmlcbi1kb25lXG4tXG4taWYgWyAtbiBcIiRMSVJDREVWXCIgXTtcbi10aGVuXG4tXHRUWVBFPWxpcmNfbW9kZTJcbi1cdC4vdGVzdF9saXJjX21vZGUyX3VzZXIgJExJUkNERVYgJElOUFVUREVWXG4tXHRyZXQ9JD9cbi1cdGlmIFsgJHJldCAtbmUgMCBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgJHtSRUR9XCJGQUlMOiAkVFlQRVwiJHtOQ31cbi1cdGVsc2Vcbi1cdFx0ZWNobyAtZSAke0dSRUVOfVwiUEFTUzogJFRZUEVcIiR7TkN9XG4tXHRmaVxuLWZpXG4tXG4tZXhpdCAkcmV0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxODoyMDoyMi4zMzgxNjU3OTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI3OTM5MjUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBTZWxmdGVzdCBNaWdyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBhIHJlZmFjdG9yaW5nLCBzcGVjaWZpY2FsbHkgcmVtb3ZpbmcgdGhlIG9sZCBgdGVzdF9saXJjX21vZGUyLnNoYCwgYHRlc3RfbGlyY19tb2RlMl9rZXJuLmNgLCBhbmQgYHRlc3RfbGlyY19tb2RlMl91c2VyLmNgIChvaCwgaXQgYWxzbyByZW1vdmVzIGB0ZXN0X2xpcmNfbW9kZTJfdXNlcmAgZnJvbSB0aGUgYE1ha2VmaWxlYCksIGFuZCByZXBsYWNpbmcgaXQgd2l0aCBgcHJvZ190ZXN0cy9saXJjX21vZGUyLmNgIGFuZCBgcHJvZ3MvbGlyY19tb2RlMi5jYC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBtaWdyYXRpb24gZnJvbSB0aGUgb2xkZXIgYmFzaC91c2VyIGZvcm1hdCB0byB0aGUgbmV3ZXIgYHRlc3RfcHJvZ3NgIGZyYW1ld29yayB3aXRoaW4gdGhlIEJQRiBzZWxmdGVzdHMuXG5cblNpbmNlIHRoZSBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBzZWxmdGVzdHMgZGlyZWN0b3J5LCBteSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgKnNob3VsZG4ndCogaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlIGRpZmYgZG9lc24ndCB0b3VjaCBhbnl0aGluZyBvdXRzaWRlIG9mIHRoYXQgZGlyZWN0b3J5LiBZZXAsIGNvbmZpcm1pbmcgdGhhdCB0aGUgY2hhbmdlIGlzIGNvbnRhaW5lZCBzb2xlbHkgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkkgcXVpY2tseSB3ZW50IHRocm91Z2ggdGhlIHJ1bGVzIGFnYWluIHRvIGNvbmZpcm0gbXkganVkZ2VtZW50LiBUaGUgcnVsZXMgc2VlbSB0byBjb25maXJtIHRoZSBjaG9pY2UuIFNlbGZ0ZXN0cyBhcmUgdXNlcnNwYWNlIHRlc3RzIGFuZCBhcmUgbm90IGtlcm5lbCBjb2RlOyB0aGV5IGRvbid0IGludHJvZHVjZSBrZXJuZWwgY29kZSB0aGF0IHdhcnJhbnRzIGZ1enppbmcuIFRoZXJlZm9yZSBJIHdpbGwgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg4OCwiT3V0cHV0VG9rZW5zIjo3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE4OjIwOjMyLjYxNzU2MjkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLyBieSBtaWdyYXRpbmcgYW4gZXhpc3RpbmcgdGVzdCB0byB0aGUgdGVzdF9wcm9ncyBmcmFtZXdvcmsuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8gYnkgbWlncmF0aW5nIGFuIGV4aXN0aW5nIHRlc3QgdG8gdGhlIHRlc3RfcHJvZ3MgZnJhbWV3b3JrLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE4OjIwOjMyLjYxNzYyNDMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowblt4p[1] Phase: Running StartedAt: 2026-08-20 18:20:44 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblt4p[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-20 18:20:44 +0000 UTC FinishedAt: 2026-08-20 18:21:18 +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,}