Name: series-workflowlp5z8 Phase: Failed StartedAt: 2026-06-26 13:17:53 +0000 UTC FinishedAt: 2026-06-26 13:48:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlp5z8[0] Phase: Succeeded StartedAt: 2026-06-26 13:17:53 +0000 UTC FinishedAt: 2026-06-26 13:47:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlp5z8[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 13:17:53 +0000 UTC FinishedAt: 2026-06-26 13:47:57 +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+CgkJCTx0ZD4yMDI2LzA2LzI2IDEzOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgb3B0aW1pemF0aW9uIGluIHRoZSBTTFVCIGFsbG9jYXRvci4gSXQgZXh0cmFjdHMgdGhlIHN0cmljdCBOVU1BIHBvbGljeSBldmFsdWF0aW9uIGludG8gYSBuZXcgaW5saW5lIGZ1bmN0aW9uIGFwcGx5X3N0cmljdF9udW1hX3BvbGljeSgpIGFuZCBjYWxscyBpdCBvbmNlIGluIHRoZSBhbGxvY2F0aW9uIHBhdGhzIChzbGFiX2FsbG9jX25vZGUgYW5kIF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKSBpbnN0ZWFkIG9mIHJlZHVuZGFudGx5IGV2YWx1YXRpbmcgaXQgaW4gYm90aCBhbGxvY19mcm9tX3BjcygpIGFuZCBfX3NsYWJfYWxsb2Nfbm9kZSgpLiBUaGVyZSBpcyBubyBjaGFuZ2UgdG8gdGhlIGZ1bmN0aW9uYWwgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cgdGhhdCB3YXJyYW50cyBkZWRpY2F0ZWQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NDYwMDFiY2Q3YjQ2M2VmNzI4NDEyY2M4MWQ1Mjk3MzljZTY5NjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTM6NDU6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCA5ZWM3NzRkYzcwMDk2OS4uOWY3NTRjZjFjMTg3NGMgMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsdWIuY1xuQEAgLTQ1MjYsMTEgJiM0Mzs0NTI2LDggQEAgc3RhdGljIHZvaWQgKl9fX3NsYWJfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSxcbiBcdHJldHVybiBvYmplY3Q7XG4gfVxuIFxuLXN0YXRpYyB2b2lkICpfX3NsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLFxuLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0ICphYylcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KGludCBub2RlKVxuIHtcbi1cdHZvaWQgKm9iamVjdDtcbi1cbiAjaWZkZWYgQ09ORklHX05VTUFcbiBcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnN0cmljdF9udW1hKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRub2RlID09IE5VTUFfTk9fTk9ERSkge1xuQEAgLTQ1NTEsMTAgJiM0Mzs0NTQ4LDcgQEAgc3RhdGljIHZvaWQgKl9fc2xhYl9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsXG4gXHRcdH1cbiBcdH1cbiAjZW5kaWZcbi1cbi1cdG9iamVjdCA9IF9fX3NsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIG5vZGUsIGFjKTtcbi1cbi1cdHJldHVybiBvYmplY3Q7XG4mIzQzO1x0cmV0dXJuIG5vZGU7XG4gfVxuIFxuIHN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxuQEAgLTQ3NTksMjggJiM0Mzs0NzUzLDYgQEAgdm9pZCAqYWxsb2NfZnJvbV9wY3Moc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLFxuIFx0Ym9vbCBub2RlX3JlcXVlc3RlZDtcbiBcdHZvaWQgKm9iamVjdDtcbiBcbi0jaWZkZWYgQ09ORklHX05VTUFcbi1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnN0cmljdF9udW1hKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgbm9kZSA9PSBOVU1BX05PX05PREUpIHtcbi1cbi1cdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCA9IGN1cnJlbnQtXHUwMDNlbWVtcG9saWN5O1xuLVxuLVx0XHRpZiAobXBvbCkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogU3BlY2lhbCBCSU5EIHJ1bGUgc3VwcG9ydC4gSWYgdGhlIGxvY2FsIG5vZGVcbi1cdFx0XHQgKiBpcyBpbiBwZXJtaXR0ZWQgc2V0IHRoZW4gZG8gbm90IHJlZGlyZWN0XG4tXHRcdFx0ICogdG8gYSBwYXJ0aWN1bGFyIG5vZGUuXG4tXHRcdFx0ICogT3RoZXJ3aXNlIHdlIGFwcGx5IHRoZSBtZW1vcnkgcG9saWN5IHRvIGdldFxuLVx0XHRcdCAqIHRoZSBub2RlIHdlIG5lZWQgdG8gYWxsb2NhdGUgb24uXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKG1wb2wtXHUwMDNlbW9kZSAhPSBNUE9MX0JJTkQgfHxcbi1cdFx0XHRcdFx0IW5vZGVfaXNzZXQobnVtYV9tZW1faWQoKSwgbXBvbC1cdTAwM2Vub2RlcykpXG4tXG4tXHRcdFx0XHRub2RlID0gbWVtcG9saWN5X3NsYWJfbm9kZSgpO1xuLVx0XHR9XG4tXHR9XG4tI2VuZGlmXG4tXG4gXHRub2RlX3JlcXVlc3RlZCA9IElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBub2RlICE9IE5VTUFfTk9fTk9ERTtcbiBcbiBcdC8qXG5AQCAtNDkzMCwxMCAmIzQzOzQ5MDIsMTIgQEAgc3RhdGljIF9fZmFzdHBhdGhfaW5saW5lIHZvaWQgKnNsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdGlmICh1bmxpa2VseShvYmplY3QpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRub2RlID0gYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KG5vZGUpO1xuJiM0MztcbiBcdG9iamVjdCA9IGFsbG9jX2Zyb21fcGNzKHMsIGdmcGZsYWdzLCBhYy1cdTAwM2VhbGxvY19mbGFncywgbm9kZSk7XG4gXG4gXHRpZiAodW5saWtlbHkoIW9iamVjdCkpXG4tXHRcdG9iamVjdCA9IF9fc2xhYl9hbGxvY19ub2RlKHMsIGdmcGZsYWdzLCBub2RlLCBhYyk7XG4mIzQzO1x0XHRvYmplY3QgPSBfX19zbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBub2RlLCBhYyk7XG4gXG4gXHRtYXliZV93aXBlX29ial9mcmVlcHRyKHMsIG9iamVjdCk7XG4gXG5AQCAtNTQxNiw2ICYjNDM7NTM5MCw4IEBAIHN0YXRpYyB2b2lkICpfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mXG4gXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1NNUCkgXHUwMDI2XHUwMDI2IGluX25taSgpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiYjNDM7XHRub2RlID0gYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KG5vZGUpO1xuJiM0MztcbiByZXRyeTpcbiBcdGlmICh1bmxpa2VseShzaXplIFx1MDAzZSBLTUFMTE9DX01BWF9DQUNIRV9TSVpFKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtNTQ0MCwxMCAmIzQzOzU0MTYsMTAgQEAgc3RhdGljIHZvaWQgKl9fa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZcbiBcdC8qXG4gXHQgKiBEbyBub3QgY2FsbCBzbGFiX2FsbG9jX25vZGUoKSwgc2luY2UgdHJ5bG9jayBtb2RlIGlzbiYjMzk7dFxuIFx0ICogY29tcGF0aWJsZSB3aXRoIHNsYWJfcHJlX2FsbG9jX2hvb2svc2hvdWxkX2ZhaWxzbGFiIGFuZFxuLVx0ICoga2ZlbmNlX2FsbG9jLiBIZW5jZSBjYWxsIF9fc2xhYl9hbGxvY19ub2RlKCkgKGF0IG1vc3QgdHdpY2UpXG4mIzQzO1x0ICoga2ZlbmNlX2FsbG9jLiBIZW5jZSBjYWxsIF9fX3NsYWJfYWxsb2MoKSAoYXQgbW9zdCB0d2ljZSlcbiBcdCAqIGFuZCBzbGFiX3Bvc3RfYWxsb2NfaG9vaygpIGRpcmVjdGx5LlxuIFx0ICovXG4tXHRyZXQgPSBfX3NsYWJfYWxsb2Nfbm9kZShzLCBnZnBfZmxhZ3MsIG5vZGUsIGFjKTtcbiYjNDM7XHRyZXQgPSBfX19zbGFiX2FsbG9jKHMsIGdmcF9mbGFncywgbm9kZSwgYWMpO1xuIFxuIFx0LypcbiBcdCAqIEl0JiMzOTtzIHBvc3NpYmxlIHdlIGZhaWxlZCBkdWUgdG8gdHJ5bG9jayBhcyB3ZSBwcmVlbXB0ZWQgc29tZW9uZSB3aXRoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIGFuZCBvcHRpbWl6YXRpb24gaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBJdCBleHRyYWN0cyB0aGUgc3RyaWN0IE5VTUEgcG9saWN5IGV2YWx1YXRpb24gaW50byBhIG5ldyBpbmxpbmUgZnVuY3Rpb24gYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KCkgYW5kIGNhbGxzIGl0IG9uY2UgaW4gdGhlIGFsbG9jYXRpb24gcGF0aHMgKHNsYWJfYWxsb2Nfbm9kZSBhbmQgX19rbWFsbG9jX25vbG9ja19ub3Byb2YpIGluc3RlYWQgb2YgcmVkdW5kYW50bHkgZXZhbHVhdGluZyBpdCBpbiBib3RoIGFsbG9jX2Zyb21fcGNzKCkgYW5kIF9fc2xhYl9hbGxvY19ub2RlKCkuIFRoZXJlIGlzIG5vIGNoYW5nZSB0byB0aGUgZnVuY3Rpb25hbCBsb2dpYyBvciBleGVjdXRpb24gZmxvdyB0aGF0IHdhcnJhbnRzIGRlZGljYXRlZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDQ2MDAxYmNkN2I0NjNlZjcyODQxMmNjODFkNTI5NzM5Y2U2OTY4ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDI2IDEzOjQ1OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IDllYzc3NGRjNzAwOTY5Li45Zjc1NGNmMWMxODc0YyAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsdWIuYwpAQCAtNDUyNiwxMSAmIzQzOzQ1MjYsOCBAQCBzdGF0aWMgdm9pZCAqX19fc2xhYl9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLAogCXJldHVybiBvYmplY3Q7CiB9CiAKLXN0YXRpYyB2b2lkICpfX3NsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKQomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFwcGx5X3N0cmljdF9udW1hX3BvbGljeShpbnQgbm9kZSkKIHsKLQl2b2lkICpvYmplY3Q7Ci0KICNpZmRlZiBDT05GSUdfTlVNQQogCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7c3RyaWN0X251bWEpICZhbXA7JmFtcDsKIAkJCW5vZGUgPT0gTlVNQV9OT19OT0RFKSB7CkBAIC00NTUxLDEwICYjNDM7NDU0OCw3IEBAIHN0YXRpYyB2b2lkICpfX3NsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLAogCQl9CiAJfQogI2VuZGlmCi0KLQlvYmplY3QgPSBfX19zbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBub2RlLCBhYyk7Ci0KLQlyZXR1cm4gb2JqZWN0OwomIzQzOwlyZXR1cm4gbm9kZTsKIH0KIAogc3RhdGljIF9fZmFzdHBhdGhfaW5saW5lCkBAIC00NzU5LDI4ICYjNDM7NDc1Myw2IEBAIHZvaWQgKmFsbG9jX2Zyb21fcGNzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywKIAlib29sIG5vZGVfcmVxdWVzdGVkOwogCXZvaWQgKm9iamVjdDsKIAotI2lmZGVmIENPTkZJR19OVU1BCi0JaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtzdHJpY3RfbnVtYSkgJmFtcDsmYW1wOwotCQkJIG5vZGUgPT0gTlVNQV9OT19OT0RFKSB7Ci0KLQkJc3RydWN0IG1lbXBvbGljeSAqbXBvbCA9IGN1cnJlbnQtJmd0O21lbXBvbGljeTsKLQotCQlpZiAobXBvbCkgewotCQkJLyoKLQkJCSAqIFNwZWNpYWwgQklORCBydWxlIHN1cHBvcnQuIElmIHRoZSBsb2NhbCBub2RlCi0JCQkgKiBpcyBpbiBwZXJtaXR0ZWQgc2V0IHRoZW4gZG8gbm90IHJlZGlyZWN0Ci0JCQkgKiB0byBhIHBhcnRpY3VsYXIgbm9kZS4KLQkJCSAqIE90aGVyd2lzZSB3ZSBhcHBseSB0aGUgbWVtb3J5IHBvbGljeSB0byBnZXQKLQkJCSAqIHRoZSBub2RlIHdlIG5lZWQgdG8gYWxsb2NhdGUgb24uCi0JCQkgKi8KLQkJCWlmIChtcG9sLSZndDttb2RlICE9IE1QT0xfQklORCB8fAotCQkJCQkhbm9kZV9pc3NldChudW1hX21lbV9pZCgpLCBtcG9sLSZndDtub2RlcykpCi0KLQkJCQlub2RlID0gbWVtcG9saWN5X3NsYWJfbm9kZSgpOwotCQl9Ci0JfQotI2VuZGlmCi0KIAlub2RlX3JlcXVlc3RlZCA9IElTX0VOQUJMRUQoQ09ORklHX05VTUEpICZhbXA7JmFtcDsgbm9kZSAhPSBOVU1BX05PX05PREU7CiAKIAkvKgpAQCAtNDkzMCwxMCAmIzQzOzQ5MDIsMTIgQEAgc3RhdGljIF9fZmFzdHBhdGhfaW5saW5lIHZvaWQgKnNsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAlpZiAodW5saWtlbHkob2JqZWN0KSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJbm9kZSA9IGFwcGx5X3N0cmljdF9udW1hX3BvbGljeShub2RlKTsKJiM0MzsKIAlvYmplY3QgPSBhbGxvY19mcm9tX3BjcyhzLCBnZnBmbGFncywgYWMtJmd0O2FsbG9jX2ZsYWdzLCBub2RlKTsKIAogCWlmICh1bmxpa2VseSghb2JqZWN0KSkKLQkJb2JqZWN0ID0gX19zbGFiX2FsbG9jX25vZGUocywgZ2ZwZmxhZ3MsIG5vZGUsIGFjKTsKJiM0MzsJCW9iamVjdCA9IF9fX3NsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIG5vZGUsIGFjKTsKIAogCW1heWJlX3dpcGVfb2JqX2ZyZWVwdHIocywgb2JqZWN0KTsKIApAQCAtNTQxNiw2ICYjNDM7NTM5MCw4IEBAIHN0YXRpYyB2b2lkICpfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mCiAJaWYgKCFJU19FTkFCTEVEKENPTkZJR19TTVApICZhbXA7JmFtcDsgaW5fbm1pKCkpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CW5vZGUgPSBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3kobm9kZSk7CiYjNDM7CiByZXRyeToKIAlpZiAodW5saWtlbHkoc2l6ZSAmZ3Q7IEtNQUxMT0NfTUFYX0NBQ0hFX1NJWkUpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTU0NDAsMTAgJiM0Mzs1NDE2LDEwIEBAIHN0YXRpYyB2b2lkICpfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mCiAJLyoKIAkgKiBEbyBub3QgY2FsbCBzbGFiX2FsbG9jX25vZGUoKSwgc2luY2UgdHJ5bG9jayBtb2RlIGlzbiYjMzk7dAogCSAqIGNvbXBhdGlibGUgd2l0aCBzbGFiX3ByZV9hbGxvY19ob29rL3Nob3VsZF9mYWlsc2xhYiBhbmQKLQkgKiBrZmVuY2VfYWxsb2MuIEhlbmNlIGNhbGwgX19zbGFiX2FsbG9jX25vZGUoKSAoYXQgbW9zdCB0d2ljZSkKJiM0MzsJICoga2ZlbmNlX2FsbG9jLiBIZW5jZSBjYWxsIF9fX3NsYWJfYWxsb2MoKSAoYXQgbW9zdCB0d2ljZSkKIAkgKiBhbmQgc2xhYl9wb3N0X2FsbG9jX2hvb2soKSBkaXJlY3RseS4KIAkgKi8KLQlyZXQgPSBfX3NsYWJfYWxsb2Nfbm9kZShzLCBnZnBfZmxhZ3MsIG5vZGUsIGFjKTsKJiM0MzsJcmV0ID0gX19fc2xhYl9hbGxvYyhzLCBnZnBfZmxhZ3MsIG5vZGUsIGFjKTsKIAogCS8qCiAJICogSXQmIzM5O3MgcG9zc2libGUgd2UgZmFpbGVkIGR1ZSB0byB0cnlsb2NrIGFzIHdlIHByZWVtcHRlZCBzb21lb25lIHdpdGgKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc5MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNMVUIgTlVNQSBQb2xpY3kgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCByZWZhY3RvcnMgdGhlIHN0cmljdCBOVU1BIHBvbGljeSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgY2hhbmdlLCBhaW1lZCBhdCBpbXByb3ZpbmcgY29kZSBvcmdhbml6YXRpb24gYW5kIHBvdGVudGlhbGx5IHJlZHVjaW5nIGR1cGxpY2F0aW9uLiBUaGUgcGF0Y2ggdGFyZ2V0cyBgbW0vc2x1Yi5jYCwgd2hpY2ggaXMgdGhlIGhlYXJ0IG9mIHRoZSBTTFVCIG1lbW9yeSBhbGxvY2F0b3IuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGFwcGx5X3N0cmljdF9udW1hX3BvbGljeShpbnQgbm9kZSlgLiBUaGlzIGZ1bmN0aW9uIGNlbnRyYWxpemVzIHRoZSBsb2dpYyBmb3IgZW5mb3JjaW5nIHN0cmljdCBOVU1BIHBvbGljaWVzLCBwcmV2aW91c2x5IHNjYXR0ZXJlZCB3aXRoaW4gYF9fc2xhYl9hbGxvY19ub2RlKClgIGFuZCBgYWxsb2NfZnJvbV9wY3MoKWAuIEl0IHRoZW4gcmVwbGFjZXMgY2FsbHMgdG8gYF9fc2xhYl9hbGxvY19ub2RlKClgIHdpdGggYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gYmVmb3JlIGNhbGxpbmcgYGFsbG9jX2Zyb21fcGNzKClgIGFuZCBhIHJlbmFtZWQgZnVuY3Rpb24gYF9fX3NsYWJfYWxsb2MoKWAuIFRoZSBwYXRjaCBhbHNvIGluamVjdHMgdGhpcyBmdW5jdGlvbiBpbnRvIHRoZSBgX19rbWFsbG9jX25vbG9ja19ub3Byb2YoKWAgcGF0aC4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIG5ldyBmdW5jdGlvbi4gWWVzLCBsb29rcyBsaWtlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBzbGFiX2FsbG9jX25vZGVgIGFuZCBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgLCBzbyB0aGUgY2hhbmdlIGlzIHVzZWQuIEkmIzM5O20gbm90aW5nIHRoYXQgdGhlIHBvbGljeSBpdHNlbGYgaXMgcHJvYmFibHkgZW5hYmxlZCB0aHJvdWdoIGBDT05GSUdfTlVNQWAsIHdoaWxlIGBDT05GSUdfU0xVQmAgaWRlbnRpZmllcyB0aGUgYWxsb2NhdG9yLgoKTm93LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHBvaW50cyBvZiBpbnRlZ3JhdGlvbi4gUXVpY2tseSBsb29raW5nIGluIGBtbS9zbHViLmNgIGZvciB0aG9zZSBmdW5jdGlvbnMsIEkmIzM5O20gcmVtaW5kaW5nIG15c2VsZiB0aGF0IGBzbGFiX2FsbG9jX25vZGVgIGlzIGEgZmFzdHBhdGggaW5saW5lIGZ1bmN0aW9uLCBhbmQgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBpcyBzdGF0aWMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgcmVhbCBwb2ludHMgb2YgaW50ZXJlc3QgZm9yIGFuYWx5c2lzIGFyZSB0aGUgKmNhbGxlcnMqIG9mIGBzbGFiX2FsbG9jX25vZGVgIGFuZCBwb3RlbnRpYWwgYWx0ZXJuYXRpdmUgZW50cnkgcG9pbnRzLiBMZXQmIzM5O3Mgc2VlLi4uIGJlY2F1c2Ugb2YgdGhlIGlubGluaW5nIGFuZCB0aGUgc3RhdGljIGRlc2lnbmF0aW9uIG9mIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAsIGl0IG1heSBiZSB0aGF0IHRoZSBmdW5jdGlvbiBjYWxscyBJJiMzOTttIGludGVyZXN0ZWQgaW4gYXJlIGBrbWVtX2NhY2hlX2FsbG9jX25vZGVgLCBga21hbGxvY19ub2RlYCBvciBwb3NzaWJseSBvdGhlciBmdW5jdGlvbnMgdGhhdCB1c2UgdGhvc2UuIE5vdyB0aGF0IGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGlzIGBfX2Fsd2F5c19pbmxpbmVgLCBpdCYjMzk7cyBub3QgYSBmdW5jdGlvbiBjYWxsIGFueW1vcmUsIGl0JiMzOTtzIGp1c3QgY29kZSBiZWluZyBpbnNlcnRlZCBpbnRvIHRoZSBjYWxsZXIuCgpJJiMzOTttIG5vdyBnb2luZyB0byBmb2N1cyBvbiB0aGUgY2FsbGVycyBvZiBgc2xhYl9hbGxvY19ub2RlYCB3aXRoaW4gYG1tL3NsdWIuY2AgdG8gc2VlIHRoZSBmdWxsIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbGFiX2FsbG9jX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTQ4MDM9dW5zaWduZWQgaW50IGFsbG9jX2Zyb21fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbi0tXG5tbS9zbHViLmMtNDg5MS0gKi9cbm1tL3NsdWIuYzo0ODkyOnN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZSB2b2lkICpzbGFiX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtNDg5My1cdFx0Z2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLCBjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0ICphYylcbi0tXG5tbS9zbHViLmM9NDkyND12b2lkICprbWVtX2NhY2hlX2FsbG9jX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MpXG4tLVxubW0vc2x1Yi5jLTQ5MzItXG5tbS9zbHViLmM6NDkzMzpcdHJldCA9IHNsYWJfYWxsb2Nfbm9kZShzLCBnZnBmbGFncywgTlVNQV9OT19OT0RFLCBcdTAwMjZhYyk7XG5tbS9zbHViLmMtNDkzNC1cbi0tXG5tbS9zbHViLmM9NDk0MT12b2lkICprbWVtX2NhY2hlX2FsbG9jX2xydV9ub3Byb2Yoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuLS1cbm1tL3NsdWIuYy00OTUxLVxubW0vc2x1Yi5jOjQ5NTI6XHRyZXQgPSBzbGFiX2FsbG9jX25vZGUocywgZ2ZwZmxhZ3MsIE5VTUFfTk9fTk9ERSwgXHUwMDI2YWMpO1xubW0vc2x1Yi5jLTQ5NTMtXG4tLVxubW0vc2x1Yi5jPTQ5ODI9dm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlKVxuLS1cbm1tL3NsdWIuYy00OTkwLVxubW0vc2x1Yi5jOjQ5OTE6XHRyZXQgPSBzbGFiX2FsbG9jX25vZGUocywgZ2ZwZmxhZ3MsIG5vZGUsIFx1MDAyNmFjKTtcbm1tL3NsdWIuYy00OTkyLVxuLS1cbm1tL3NsdWIuYz01MzE2PXZvaWQgKl9fZG9fa21hbGxvY19ub2RlKGttZW1fYnVja2V0cyAqYiwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxuLS1cbm1tL3NsdWIuYy01MzM0LVxubW0vc2x1Yi5jOjUzMzU6XHRyZXQgPSBzbGFiX2FsbG9jX25vZGUocywgZmxhZ3MsIG5vZGUsIGFjKTtcbm1tL3NsdWIuYy01MzM2LVx0cmV0ID0ga2FzYW5fa21hbGxvYyhzLCByZXQsIHNpemUsIGZsYWdzKTtcbi0tXG5tbS9zbHViLmM9NTM2Nj1zdGF0aWMgdm9pZCAqX19rbWFsbG9jX25vbG9ja19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBnZnBfZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTU0MTYtXHQvKlxubW0vc2x1Yi5jOjU0MTc6XHQgKiBEbyBub3QgY2FsbCBzbGFiX2FsbG9jX25vZGUoKSwgc2luY2UgdHJ5bG9jayBtb2RlIGlzbiYjMzk7dFxubW0vc2x1Yi5jLTU0MTgtXHQgKiBjb21wYXRpYmxlIHdpdGggc2xhYl9wcmVfYWxsb2NfaG9vay9zaG91bGRfZmFpbHNsYWIgYW5kXG4tLVxubW0vc2x1Yi5jPTU0Nzg9dm9pZCAqX19rbWFsbG9jX2NhY2hlX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIHNpemVfdCBzaXplKVxuLS1cbm1tL3NsdWIuYy01NDg2LVxubW0vc2x1Yi5jOjU0ODc6XHRyZXQgPSBzbGFiX2FsbG9jX25vZGUocywgZ2ZwZmxhZ3MsIE5VTUFfTk9fTk9ERSwgXHUwMDI2YWMpO1xubW0vc2x1Yi5jLTU0ODgtXG4tLVxubW0vc2x1Yi5jPTU0OTY9dm9pZCAqX19rbWFsbG9jX2NhY2hlX25vZGVfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncyxcbi0tXG5tbS9zbHViLmMtNTUwNS1cbm1tL3NsdWIuYzo1NTA2Olx0cmV0ID0gc2xhYl9hbGxvY19ub2RlKHMsIGdmcGZsYWdzLCBub2RlLCBcdTAwMjZhYyk7XG5tbS9zbHViLmMtNTUwNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzA1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgRGVlcCBpbnRvIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmbG93IGhlcmUsIHNwZWNpZmljYWxseSBmb3Igbm9uLXByb2ZpbGVkIGFsbG9jYXRpb25zLiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zOiBga21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZmAsIGBfX2RvX2ttYWxsb2Nfbm9kZWAsIGBfX2ttYWxsb2NfY2FjaGVfbm9kZV9ub3Byb2ZgLCBhbmQgdGhhdCBzdGF0aWMgZnVuY3Rpb24sIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAuIFRoZSBzdGF0aWMga2V5d29yZCBpcyBhIHJlZCBmbGFnLCB0aG91Z2guIEl0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQsIHNvIGl0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSByZWFsIHdvcmsgaGFwcGVucy4gSXQgYWxzbyBpbmRpY2F0ZXMgSSYjMzk7bGwgbmVlZCB0byBjaGFzZSBkb3duIGl0cyBjYWxsZXJzIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSB3aGF0IGNhbGxzIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAgYW5kIHVucmF2ZWwgdGhlIGNhbGxpbmcgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgaW50ZXJuYWxseSB0byBzZWUgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19rbWFsbG9jX25vbG9ja19ub3Byb2YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTUzNjQ9RVhQT1JUX1NZTUJPTChfX2ttYWxsb2Nfbm9wcm9mKTtcbm1tL3NsdWIuYy01MzY1LVxubW0vc2x1Yi5jOjUzNjY6c3RhdGljIHZvaWQgKl9fa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxubW0vc2x1Yi5jLTUzNjctXHRcdFx0XHQgICAgIGludCBub2RlLCBjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0ICphYylcbi0tXG5tbS9zbHViLmM9NTQ1MT12b2lkICpfa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSlcbi0tXG5tbS9zbHViLmMtNTQ1OC1cbm1tL3NsdWIuYzo1NDU5Olx0cmV0dXJuIF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKFBBU1NfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSxcbm1tL3NsdWIuYy01NDYwLVx0XHRcdFx0ICAgICAgIGdmcF9mbGFncywgbm9kZSwgXHUwMDI2YWMpO1xuLS1cbm1tL3NsdWIuYz01NTIwPXZvaWQgKl9fa21hbGxvY19mbGFnc19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNTUzMi1cdH0gZWxzZSB7XG5tbS9zbHViLmM6NTUzMzpcdFx0cmV0dXJuIF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKFBBU1NfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSxcbm1tL3NsdWIuYy01NTM0LVx0XHRcdFx0XHQgICAgICAgZmxhZ3MsIG5vZGUsIFx1MDAyNmFjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDA4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0xVQiBBbGxvY2F0b3IgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBTTFVCIGFsbG9jYXRvci4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGZ1bmN0aW9ucyBsaWtlIGBfa21hbGxvY19ub2xvY2tfbm9wcm9mYCBhbmQgYF9fa21hbGxvY19mbGFnc19ub3Byb2ZgIGFyZSBjYWxsaW5nIGl0LCB3aGljaCBzdWdnZXN0cyBpdCB0YXJnZXRzIHNvbWUgY29yZSBhbGxvY2F0aW9uIHBhdGhzLgoKVGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnIOKAkyBhIE5VTUEgcG9saWN5IG1vZGlmaWNhdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uIFRoZSBwYXRjaCBkZXNjcmlwdGlvbiBpbW1lZGlhdGVseSBzdGF0ZXMgdGhhdCB0aGlzIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiBgQ09ORklHX05VTUFgIGlzIGVuYWJsZWQsIGFuZCBnaXZlbiB0aGUgcmVtb3ZhbCBvZiBTTEFCIGFuZCBTTE9CLCBhbmQgdGhlIGZhY3QgdGhhdCBTTFVCIGlzIHRoZSBkZWZhdWx0LCBOVU1BIGlzIGxpa2VseSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZS4KCkZ1bmN0aW9uYWxseSwgdGhpcyBwYXRjaCBsb29rcyBzb2xpZC4gSXQmIzM5O3MgZm9jdXNlZCBvbiB0aGUgU0xVQiBhbGxvY2F0b3IgYW5kIHNlZW1zIHRvIGVuc3VyZSB0aGF0IHN0cmljdCBOVU1BIHBvbGljaWVzIGFyZSBhcHBsaWVkIGNvcnJlY3RseSBpbiBtb3JlIGxvY2F0aW9ucy4gVGhpcyBjb2RlIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LCB3aGljaCBpcyBhbHdheXMgbmljZSB0byBzZWUgaW4gdGhlc2UgbG93LWxldmVsIGFyZWFzLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgSSYjMzk7ZCBsaWtlIHRvIHF1aWNrbHkgbG9vayBhdCB0aGVzZSBzeW1ib2xzLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZToKKiAgIGBrbWVtX2NhY2hlX2FsbG9jX25vZGVfbm9wcm9mYAoqICAgYF9fZG9fa21hbGxvY19ub2RlYAoqICAgYF9fa21hbGxvY19jYWNoZV9ub2RlX25vcHJvZmAKKiAgIGBfa21hbGxvY19ub2xvY2tfbm9wcm9mYAoqICAgYF9fa21hbGxvY19mbGFnc19ub3Byb2ZgCgpPbmUgcXVpY2sgdGhpbmcgSSBzaG91bGQgY2hlY2sgaXMgd2hldGhlciBga21lbV9jYWNoZV9hbGxvY19ub2RlYCBpcyBhIG1hY3JvIG9yIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgZ29vZCBmaXJzdCB0aGluZyB0byBkbyBiZWZvcmUgSSBsb29rIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21lbV9jYWNoZV9hbGxvY19ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zbGFiLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zbGFiLmg9Mjg1PXN0cnVjdCBrbWVtX2NhY2hlX2FyZ3Mge1xuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTM2Mi1cdCAqIFRoZSBzaGVhdmVzIGRvIG5vdCBlbmZvcmNlIE5VTUEgcGxhY2VtZW50IG9mIG9iamVjdHMsIHNvIGFsbG9jYXRpb25zXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDozNjM6XHQgKiB2aWEga21lbV9jYWNoZV9hbGxvY19ub2RlKCkgd2l0aCBhIG5vZGUgc3BlY2lmaWVkIG90aGVyIHRoYW5cbmluY2x1ZGUvbGludXgvc2xhYi5oLTM2NC1cdCAqIE5VTUFfTk9fTk9ERSB3aWxsIGJ5cGFzcyB0aGVtLlxuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oPTg4OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga2ZyZWVfYnVsayhzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtODkzLVxuaW5jbHVkZS9saW51eC9zbGFiLmg6ODk0OnZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3Byb2Yoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuaW5jbHVkZS9saW51eC9zbGFiLmgtODk1LVx0XHRcdFx0ICAgaW50IG5vZGUpIF9fYXNzdW1lX3NsYWJfYWxpZ25tZW50IF9fbWFsbG9jO1xuaW5jbHVkZS9saW51eC9zbGFiLmg6ODk2OiNkZWZpbmUga21lbV9jYWNoZV9hbGxvY19ub2RlKC4uLilcdGFsbG9jX2hvb2tzKGttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9zbGFiLmgtODk3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiBjb2RlLiBUaGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSBzZWVtcyB0byBiZSBga21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZmAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgSSB0aGluay4gVGhlbiB0aGVyZSBpcyBgX19rbWFsbG9jX2NhY2hlX25vZGVfbm9wcm9mYCB3aGljaCwgYnkgdGhlIG5hbWluZyBjb252ZW50aW9uLCBsb29rcyBsaWtlIGFub3RoZXIgbGV2ZWwgZG93biB0aGUgY2FsbCBzdGFjay4gTGV0JiMzOTtzIG5vdCBmb3JnZXQgdGhlIGZ1bmN0aW9uIGBfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mYCBhcyBpdCBwbGF5cyBzb21lIHBhcnQgaW4gdGhlIHByb2Nlc3MuCgpOb3csIHdoZXJlIGRvIHRoZXkgYWxsIGxpbmsgdG9nZXRoZXI/IE15IGluc3RpbmN0cyB0ZWxsIG1lIHRvIGZvY3VzIG9uIGBfX2RvX2ttYWxsb2Nfbm9kZWAuIEl0IGhhcyB0byBiZSB3aGVyZSB0aGUgbWFpbiBsb2dpYyBpcyBleGVjdXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19kb19rbWFsbG9jX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTUzMTU9c3RhdGljIF9fYWx3YXlzX2lubGluZVxubW0vc2x1Yi5jOjUzMTY6dm9pZCAqX19kb19rbWFsbG9jX25vZGUoa21lbV9idWNrZXRzICpiLCBnZnBfdCBmbGFncywgaW50IG5vZGUsXG5tbS9zbHViLmMtNTMxNy1cdFx0XHRrbWFsbG9jX3Rva2VuX3QgdG9rZW4sIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKVxuLS1cbm1tL3NsdWIuYz01MzQwPXZvaWQgKl9fa21hbGxvY19ub2RlX25vcHJvZihERUNMX0tNQUxMT0NfUEFSQU1TKHNpemUsIGIsIHRva2VuKSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKVxuLS1cbm1tL3NsdWIuYy01MzQ3LVxubW0vc2x1Yi5jOjUzNDg6XHRyZXR1cm4gX19kb19rbWFsbG9jX25vZGUoUEFTU19CVUNLRVRfUEFSQU0oYiksIGZsYWdzLCBub2RlLFxubW0vc2x1Yi5jLTUzNDktXHRcdFx0XHQgUEFTU19UT0tFTl9QQVJBTSh0b2tlbiksIFx1MDAyNmFjKTtcbi0tXG5tbS9zbHViLmM9NTM1Mz12b2lkICpfX2ttYWxsb2Nfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZmxhZ3MpXG4tLVxubW0vc2x1Yi5jLTUzNjAtXG5tbS9zbHViLmM6NTM2MTpcdHJldHVybiBfX2RvX2ttYWxsb2Nfbm9kZShOVUxMLCBmbGFncywgIE5VTUFfTk9fTk9ERSxcbm1tL3NsdWIuYy01MzYyLVx0XHRcdFx0IFBBU1NfVE9LRU5fUEFSQU0odG9rZW4pLCBcdTAwMjZhYyk7XG4tLVxubW0vc2x1Yi5jPTU0NjQ9dm9pZCAqX19rbWFsbG9jX25vZGVfdHJhY2tfY2FsbGVyX25vcHJvZihERUNMX0tNQUxMT0NfUEFSQU1TKHNpemUsIGIsIHRva2VuKSwgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTU0NzItXG5tbS9zbHViLmM6NTQ3MzpcdHJldHVybiBfX2RvX2ttYWxsb2Nfbm9kZShQQVNTX0JVQ0tFVF9QQVJBTShiKSwgZmxhZ3MsIG5vZGUsXG5tbS9zbHViLmMtNTQ3NC1cdFx0XHRcdCBQQVNTX1RPS0VOX1BBUkFNKHRva2VuKSwgXHUwMDI2YWMpO1xuLS1cbm1tL3NsdWIuYz01NTIwPXZvaWQgKl9fa21hbGxvY19mbGFnc19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNTUyOS1cdGlmIChhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncykpIHtcbm1tL3NsdWIuYzo1NTMwOlx0XHRyZXR1cm4gX19kb19rbWFsbG9jX25vZGUoTlVMTCwgZmxhZ3MsIG5vZGUsXG5tbS9zbHViLmMtNTUzMS1cdFx0XHRcdFBBU1NfVE9LRU5fUEFSQU0odG9rZW4pLCBcdTAwMjZhYyk7XG4tLVxubW0vc2x1Yi5jPTY4OTQ9dm9pZCAqX19rdm1hbGxvY19ub2RlX25vcHJvZihERUNMX0tNQUxMT0NfUEFSQU1TKHNpemUsIGIsIHRva2VuKSwgdW5zaWduZWQgbG9uZyBhbGlnbixcbi0tXG5tbS9zbHViLmMtNjkwOC1cdCAqL1xubW0vc2x1Yi5jOjY5MDk6XHRyZXQgPSBfX2RvX2ttYWxsb2Nfbm9kZShQQVNTX0JVQ0tFVF9QQVJBTShiKSxcbm1tL3NsdWIuYy02OTEwLVx0XHRcdFx0a21hbGxvY19nZnBfYWRqdXN0KGZsYWdzLCBzaXplKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMyMwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDM0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBOVU1BIFBvbGljeSAmYW1wOyBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBgX19kb19rbWFsbG9jX25vZGVgIGlzIGlubGluZWQsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGNhbGxlZCAqYSBsb3QqLiBMb29raW5nIGF0IHRoZSBjYWxsZXJzLCBJIHNlZSBhIGJ1bmNoIG9mIGBfX2ttYWxsb2NfLi4uX25vcHJvZmAgZnVuY3Rpb25zOiBga21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZmAsIGBfX2ttYWxsb2Nfbm9kZV9ub3Byb2ZgLCBgX19rbWFsbG9jX25vZGVfdHJhY2tfY2FsbGVyX25vcHJvZmAsIGBfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mYCwgYF9fa3ZtYWxsb2Nfbm9kZV9ub3Byb2ZgLCBgX19rbWFsbG9jX2NhY2hlX25vZGVfbm9wcm9mYCwgYW5kIGBfa21hbGxvY19ub2xvY2tfbm9wcm9mYC4gUmlnaHQsIG1lbW9yeSBhbGxvY2F0aW9uLi4uIHRob3NlIGFyZSBhbGwgKnRleHRib29rKiBob3QgcGF0aHMuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHdhcm5zIGFnYWluc3QgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBUaGF0JiMzOTtzIGV4YWN0bHkgd2hhdCB0aGVzZSBmdW5jdGlvbnMgd291bGQgY2F1c2UhIFdlICpkb24mIzM5O3QqIHdhbnQgc3l6a2FsbGVyIHNwZW5kaW5nIGFsbCBpdHMgdGltZSBqdXN0IGhhbW1lcmluZyBtZW1vcnkgYWxsb2NhdGlvbi4gVGhhdCBkZWZlYXRzIHRoZSBwdXJwb3NlLgoKVGhlIHByb21wdCBpbmRpY2F0ZXMgYSBmb2N1cyBvbiBOVU1BIHBvbGljeS4gSG93IGRvIHdlIHRyaWdnZXIgdGhhdD8gQWgsIGBzZXRfbWVtcG9saWN5YCBhbmQgYG1iaW5kYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBBbmQgdGhlIHBhdGNoIGFkZHJlc3NlcyBgc3RyaWN0X251bWFgIHBvbGljeSBhcHBsaWNhdGlvbiAqaW4gU0xVQiouIGBzdHJpY3RfbnVtYWAgaXMgY29udHJvbGxlZCBieSBhIHN0YXRpYyBicmFuY2guIFNvLCB0aGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IHdoZXJlIGlzIHRoYXQgYHN0cmljdF9udW1hYCBicmFuY2ggYWN0dWFsbHkgZW5hYmxlZD8gV2UgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgcmVsYXRlZCB0byB0aGF0IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cmljdF9udW1hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0yMDg9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc2x1Yl9kZWJ1Z19lbmFibGVkKTtcbi0tXG5tbS9zbHViLmMtMjEyLSNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jOjIxMzpzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpO1xubW0vc2x1Yi5jLTIxNC0jZW5kaWZcbi0tXG5tbS9zbHViLmM9NDQ1Nj1zdGF0aWMgdm9pZCAqX19fc2xhYl9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLFxuLS1cbm1tL3NsdWIuYy00NTI4LVxubW0vc2x1Yi5jOjQ1Mjk6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KGludCBub2RlKVxubW0vc2x1Yi5jLTQ1MzAte1xubW0vc2x1Yi5jLTQ1MzEtI2lmZGVmIENPTkZJR19OVU1BXG5tbS9zbHViLmM6NDUzMjpcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnN0cmljdF9udW1hKSBcdTAwMjZcdTAwMjZcbm1tL3NsdWIuYy00NTMzLVx0XHRcdG5vZGUgPT0gTlVNQV9OT19OT0RFKSB7XG4tLVxubW0vc2x1Yi5jPTQ4OTI9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lIHZvaWQgKnNsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtNDkwNC1cbm1tL3NsdWIuYzo0OTA1Olx0bm9kZSA9IGFwcGx5X3N0cmljdF9udW1hX3BvbGljeShub2RlKTtcbm1tL3NsdWIuYy00OTA2LVxuLS1cbm1tL3NsdWIuYz01MzY2PXN0YXRpYyB2b2lkICpfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mbGFncyxcbi0tXG5tbS9zbHViLmMtNTM5Mi1cbm1tL3NsdWIuYzo1MzkzOlx0bm9kZSA9IGFwcGx5X3N0cmljdF9udW1hX3BvbGljeShub2RlKTtcbm1tL3NsdWIuYy01Mzk0LVxuLS1cbm1tL3NsdWIuYz04MTc1PWNvcmVfcGFyYW0oc2x1Yl9taW5fb2JqZWN0cywgc2x1Yl9taW5fb2JqZWN0cywgdWludCwgMCk7XG4tLVxubW0vc2x1Yi5jLTgxNzctI2lmZGVmIENPTkZJR19OVU1BXG5tbS9zbHViLmM6ODE3ODpzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9zbGFiX3N0cmljdF9udW1hKGNvbnN0IGNoYXIgKnN0ciwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG5tbS9zbHViLmMtODE3OS17XG5tbS9zbHViLmMtODE4MC1cdGlmIChucl9ub2RlX2lkcyBcdTAwM2UgMSkge1xubW0vc2x1Yi5jOjgxODE6XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNnN0cmljdF9udW1hKTtcbm1tL3NsdWIuYy04MTgyLVx0XHRwcl9pbmZvKFwmIzM0O1NMVUI6IFN0cmljdCBOVU1BIGVuYWJsZWQuXFxuXCYjMzQ7KTtcbm1tL3NsdWIuYy04MTgzLVx0fSBlbHNlIHtcbm1tL3NsdWIuYzo4MTg0Olx0XHRwcl93YXJuKFwmIzM0O3NsYWJfc3RyaWN0X251bWEgcGFyYW1ldGVyIHNldCBvbiBub24gTlVNQSBzeXN0ZW0uXFxuXCYjMzQ7KTtcbm1tL3NsdWIuYy04MTg1LVx0fVxuLS1cbm1tL3NsdWIuYy04MTg5LVxubW0vc2x1Yi5jOjgxOTA6c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHBhcmFtX29wc19zbGFiX3N0cmljdF9udW1hIF9faW5pdGNvbnN0ID0ge1xubW0vc2x1Yi5jLTgxOTEtXHQuZmxhZ3MgPSBLRVJORUxfUEFSQU1fT1BTX0ZMX05PQVJHLFxubW0vc2x1Yi5jOjgxOTI6XHQuc2V0ID0gc2V0dXBfc2xhYl9zdHJpY3RfbnVtYSxcbm1tL3NsdWIuYy04MTkzLX07XG5tbS9zbHViLmM6ODE5NDpfX2NvcmVfcGFyYW1fY2Ioc2xhYl9zdHJpY3RfbnVtYSwgXHUwMDI2cGFyYW1fb3BzX3NsYWJfc3RyaWN0X251bWEsIE5VTEwsIDApO1xubW0vc2x1Yi5jLTgxOTUtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHNsYWJfc3RyaWN0X251bWFgIEtlcm5lbCBQYXJhbWV0ZXIgYW5kIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBgc2xhYl9zdHJpY3RfbnVtYWAgaXMgYSBrZXJuZWwgcGFyYW1ldGVyLCBlbmFibGVkIHZpYSB0aGUgYm9vdCBwYXJhbWV0ZXIgYHNsYWJfc3RyaWN0X251bWFgLiBJZiBpdCYjMzk7cyBub3QgZW5hYmxlZCwgYHN0cmljdF9udW1hYCBpcyBmYWxzZSwgYW5kIHRoZSBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBmdW5jdGlvbiBpcyBuZXZlciBleGVjdXRlZC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgc3l6a2FsbGVyOyBpdCBtaWdodCBub3QgcGFzcyB0aGlzIHBhcmFtZXRlciBieSBkZWZhdWx0LCBhbmQgd2UgY2FuJiMzOTt0IGRpcmVjdGx5IHRlbGwgaXQgdG8gcGFzcyBrZXJuZWwgcGFyYW1ldGVycywgb25seSBlbmFibGUgY29uZmlndXJhdGlvbnMuCgpMb29raW5nIGF0IGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgLCBpdCYjMzk7cyBjbGVhciB0aGF0IGl0IG9ubHkgZG9lcyBhbnl0aGluZyBpZiBgc3RyaWN0X251bWFgIGlzIHRydWUgYW5kIHRoZSBub2RlIGlzIGBOVU1BX05PX05PREVgLiBUaGUgY29kZSB1c2VzIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5YCwgc28gaWYgYHN0cmljdF9udW1hYCBpcyBmYWxzZSwgdGhlIGVudGlyZSBibG9jayBpcyBvcHRpbWl6ZWQgYXdheS4gQW5kIGl0JiMzOTtzIHNldCB3aXRoIGBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzdHJpY3RfbnVtYSlgLCBtZWFuaW5nIGl0JiMzOTtzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFNvLCB1bmxlc3MgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgaGFzIGBzbGFiX3N0cmljdF9udW1hYCwgdGhlIGNvZGUgaW5zaWRlIHRoZSBgaWZgIHN0YXRlbWVudCBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4KClRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgbW92ZXMgdGhpcyBsb2dpYyBpbnRvIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGFuZCBjYWxscyBpdCBmcm9tIGBzbGFiX2FsbG9jX25vZGVgIGFuZCBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBhbGxvY19mcm9tX3Bjc2AgYW5kIGBfX3NsYWJfYWxsb2Nfbm9kZWAuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBOVU1BIGNoZWNrIHdhcyBpbiBgX19zbGFiX2FsbG9jX25vZGVgLCBidXQgbm93IGBfX3NsYWJfYWxsb2Nfbm9kZWAgaXMgcmVtb3ZlZCBhbmQgcmVwbGFjZWQgYnkgYGFwcGx5X3N0cmljdF9udW1hX3BvbGljeWAgcGx1cyBgX19fc2xhYl9hbGxvY2AuCgpOb3csIHRoZSBjb3JlIHF1ZXN0aW9uOiB3aGF0JiMzOTtzIHRoZSBmdW5jdGlvbmFsIGltcGFjdCBpZiBgc3RyaWN0X251bWFgIGlzIGZhbHNlPyBMb29raW5nIGF0IHRoZSBvbGQgYW5kIG5ldyBjb2RlLCB0aGUgcGF0Y2ggZWZmZWN0aXZlbHkganVzdCBmYWN0b3JlZCBvdXQgdGhlIGBzdHJpY3RfbnVtYWAgY2hlY2sgaW50byBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBhbmQgY2FsbHMgaXQgb25jZSBiZWZvcmUgYGFsbG9jX2Zyb21fcGNzYCBhbmQgYF9fX3NsYWJfYWxsb2NgLiBJdCBhbHNvIGFkZHMgYG5vZGUgPSBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3kobm9kZSk7YCB0byBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgLiBJZiBgc3RyaWN0X251bWFgIGlzIGZhbHNlLCBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBpcyBhIG5vLW9wLiBDb21wYXJpbmcgdGhlIG9sZCBhbmQgdGhlIG5ldyB2ZXJzaW9ucyBvZiBgX19zbGFiX2FsbG9jX25vZGVgLCBpdCBvbmx5IGNhbGxlZCBgX19fc2xhYl9hbGxvY2AgaWYgYHN0cmljdF9udW1hYCB3YXMgZmFsc2UuCgpUaGVyZWZvcmUsIGlmIGBzdHJpY3RfbnVtYWAgaXMgZmFsc2UsIHRoaXMgaXMgYSBwdXJlIHJlZmFjdG9yaW5nLiBUaGUgbG9naWMgaXMgaWRlbnRpY2FsOyB0aGUgcGF0Y2ggc2ltcGx5IHJlcGxhY2VzIGEgd3JhcHBlciBmdW5jdGlvbiAoYF9fc2xhYl9hbGxvY19ub2RlYCkgd2l0aCBhIGRpcmVjdCBjYWxsIHRvIHRoZSBjb3JlIGFsbG9jYXRpb24gZnVuY3Rpb24gKGBfX19zbGFiX2FsbG9jYCkuCgpMZXQmIzM5O3MgY2hlY2sgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBiZWNhdXNlIHRoZSBwYXRjaCBjaGFuZ2VkIHRoZSBjYWxsLiBJZiBgc3RyaWN0X251bWFgIGlzIGZhbHNlLCBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBkb2VzIG5vdGhpbmcuIEJlZm9yZSBpdCBjYWxsZWQgYF9fc2xhYl9hbGxvY19ub2RlYCBhbmQgbm93IGl0IGNhbGxzIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGFuZCB0aGVuIGBfX19zbGFiX2FsbG9jYCwgYnV0IGlmIHRoZSBzdHJpY3QgTlVNQSBpc24mIzM5O3QgYWN0aXZlLCB0aGVuIHRoaXMgZG9lcyBub3QgY2hhbmdlIGFueXRoaW5nLgoKKipJbiBzdW1tYXJ5OiBpZiBgc3RyaWN0X251bWFgIGlzIGZhbHNlLCB0aGVyZSBpcyBhYnNvbHV0ZWx5ICp6ZXJvKiBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MganVzdCBhIHJlZmFjdG9yaW5nLioqIEFueSBmdW5jdGlvbmFsIGNoYW5nZSBoYXBwZW5zIHdoZW4gc3RyaWN0IE5VTUEgaXMgdHJ1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19rbWFsbG9jX25vbG9ja19ub3Byb2YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTUzNjQ9RVhQT1JUX1NZTUJPTChfX2ttYWxsb2Nfbm9wcm9mKTtcbm1tL3NsdWIuYy01MzY1LVxubW0vc2x1Yi5jOjUzNjY6c3RhdGljIHZvaWQgKl9fa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxubW0vc2x1Yi5jLTUzNjctXHRcdFx0XHQgICAgIGludCBub2RlLCBjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0ICphYylcbi0tXG5tbS9zbHViLmM9NTQ1MT12b2lkICpfa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSlcbi0tXG5tbS9zbHViLmMtNTQ1OC1cbm1tL3NsdWIuYzo1NDU5Olx0cmV0dXJuIF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKFBBU1NfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSxcbm1tL3NsdWIuYy01NDYwLVx0XHRcdFx0ICAgICAgIGdmcF9mbGFncywgbm9kZSwgXHUwMDI2YWMpO1xuLS1cbm1tL3NsdWIuYz01NTIwPXZvaWQgKl9fa21hbGxvY19mbGFnc19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNTUzMi1cdH0gZWxzZSB7XG5tbS9zbHViLmM6NTUzMzpcdFx0cmV0dXJuIF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKFBBU1NfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSxcbm1tL3NsdWIuYy01NTM0LVx0XHRcdFx0XHQgICAgICAgZmxhZ3MsIG5vZGUsIFx1MDAyNmFjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1OTUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGlzc2VjdGluZyBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgIEJlZm9yZSBhIFBhdGNoKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAgYmVmb3JlIHdlIGV2ZW4gKnRoaW5rKiBhYm91dCB0aGF0IHBhdGNoLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmUtcGF0Y2ggc3RhdGUuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWw7IGl0JiMzOTtzIHRoZSBjb3JlIG9mIGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiB3aXRob3V0IGxvY2sgY29udGVudGlvbiBhbmQgd2l0aG91dCB0aGUgcGVyZm9ybWFuY2UgcHJvZmlsaW5nIG92ZXJoZWFkLiBTbywgSSBuZWVkIGEgcm9jay1zb2xpZCBncmFzcCBvZiBob3cgaXQgKmN1cnJlbnRseSogb3BlcmF0ZXMuIFRoaXMgbWVhbnMgbG9va2luZyBhdCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBzbGFiIGFsbG9jYXRvciwgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBhbnkgcmVsYXRlZCBjYWNoaW5nIG1lY2hhbmlzbXMuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGl0IHJlbGllcyBvbj8gSG93IGRvZXMgaXQgaGFuZGxlIGFsbG9jYXRpb24gZmFpbHVyZXM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbnRlbnRpb24gZXZlbiAqd2l0aG91dCogZXhwbGljaXQgbG9ja3MsIHBlcmhhcHMgcmVsYXRlZCB0byBhdG9taWMgb3BlcmF0aW9ucyBvciBjYWNoZSBsaW5lIGJvdW5jaW5nPyBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IGFzc3VtcHRpb25zIHRoZSBjb2RlIG1ha2VzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFRob3JvdWdobHkgcmV2aWV3aW5nIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAgbm93IGlzIHRoZSBrZXkuIFRoZSBkZXZpbCYjMzk7cyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIGFuZCB0aGlzIGtpbmQgb2Ygc2NydXRpbnkgaXMgd2hhdCBlbnN1cmVzIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3Igc3VidGxlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBPa2F5LCBsZXQmIzM5O3MgZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zbGFiX2FsbG9jX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkzMwoJCQkJCQkJb3V0cHV0OiAxMzMKCQkJCQkJCXRob3VnaHRzOiAyMjY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIGFuZCBPcHRpbWl6YXRpb24gb2YgU0xVQiBOVU1BIFBvbGljeSBBcHBsaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaGFzIGJlZW4gYXBwbGllZCwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQuIEhtbSwgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGNoYW5nZSBpcyB0aGF0IHRoZSBzdHJpY3QgTlVNQSBwb2xpY3kgYXBwbGljYXRpb24gaXMgYmVpbmcgbW92ZWQgYXJvdW5kIGluIHRoZSBTTFVCIGFsbG9jYXRvciBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBsb2dpYyBpcyBub3cgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAgYW5kIGBzbGFiX2FsbG9jX25vZGVgIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIGJlaW5nIHBlcmZvcm1lZCBpbnNpZGUgdGhlIGBfX3NsYWJfYWxsb2Nfbm9kZWAgYW5kIGBhbGxvY19mcm9tX3Bjc2AgZnVuY3Rpb25zLgoKQmVmb3JlIHRoZSBwYXRjaCwgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBjYWxsZWQgYF9fc2xhYl9hbGxvY19ub2RlYCwgd2hpY2ggd291bGQgYXBwbHkgdGhlIHN0cmljdCBOVU1BIHBvbGljeSBhbmQgdGhlbiBjYWxsIGBfX19zbGFiX2FsbG9jYC4gTm93LCBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgIGNhbGxzIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGZpcnN0LCBhbmQgdGhlbiBjYWxscyBgX19fc2xhYl9hbGxvY2AgZGlyZWN0bHkuIFRoZXJlJiMzOTtzIGEgYHJldHJ5YCBsYWJlbCBpbiBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgIHdoaWNoLCBpZiBpdCB3YXMgaGl0LCBjYXVzZWQgdGhlIGNvZGUgdG8gYXBwbHkgdGhlIHBvbGljeSBhZ2Fpbi4gTm93IGl0IG9ubHkgYXBwbGllcyBvbmNlIGJlZm9yZSB0aGUgYHJldHJ5YCBsYWJlbCwgYXMgaW50ZW5kZWQuCgpBbHNvLCBgc2xhYl9hbGxvY19ub2RlYCBvcmlnaW5hbGx5IGNhbGxlZCBgYWxsb2NfZnJvbV9wY3NgLCB3aGljaCBtaWdodCBoYXZlIGFwcGxpZWQgdGhlIHN0cmljdCBOVU1BIHBvbGljeSwgYW5kIGlmIHRoYXQgZmFpbGVkLCBpdCB3b3VsZCBjYWxsIGBfX3NsYWJfYWxsb2Nfbm9kZWAsIHdoaWNoICphbHNvKiBhcHBsaWVkIHRoZSBzdHJpY3QgTlVNQSBwb2xpY3kuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhlIGBub2RlYCBwYXJhbWV0ZXIsIHdoaWNoIGBhbGxvY19mcm9tX3Bjc2AgbWlnaHQgY2hhbmdlIGludGVybmFsbHkgd2hlbiBhcHBseWluZyB0aGUgc3RyaWN0IE5VTUEgcG9saWN5LCBidXQgdGhpcyBtb2RpZmllZCB2YWx1ZSB3YXMgKm5vdCogcGFzc2VkIGJhY2sgdG8gYHNsYWJfYWxsb2Nfbm9kZWAgc28gYF9fc2xhYl9hbGxvY19ub2RlYCB3b3VsZCByZXBlYXQgdGhlIG1lbXBvbGljeSBldmFsdWF0aW9uLgoKVGhpcyBwYXRjaCByZWZhY3RvcnMgdGhhdDogYHNsYWJfYWxsb2Nfbm9kZWAgbm93IGNhbGxzIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgICpmaXJzdCosIGFuZCAqdGhlbiogdGhlIGBub2RlYCB2YXJpYWJsZSB0aGF0IGlzIHBhc3NlZCB0byBgYWxsb2NfZnJvbV9wY3NgIGFuZCBgX19fc2xhYl9hbGxvY2AgaXMgdGhlIHVwZGF0ZWQgdmFsdWUsIGJhc2VkIG9uIHRoZSBzdHJpY3QgTlVNQSBwb2xpY3kuCgpTbywgdGhlIGVmZmVjdCBvZiB0aGUgcGF0Y2ggaXMganVzdCB0byBwZXJmb3JtIHRoZSBzYW1lIE5VTUEgcG9saWN5IGxvb2t1cCBvbmx5ICpvbmNlKiwgYXZvaWRpbmcgcmVkdW5kYW50IGNvbXB1dGF0aW9ucy4gQmVjYXVzZSBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBpcyBkZXRlcm1pbmlzdGljIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1lbXBvbGljeSwgdGhpcyBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC4gVGhlIHBhdGNoIHNpbXBseSBlbGltaW5hdGVzIHRoZSBkdXBsaWNhdGVkIGFwcGxpY2F0aW9uIG9mIHRoZSBOVU1BIHBvbGljeSBjaGVjay4KClRoZSBwYXRjaCBpdHNlbGYganVzdCBtb3ZlcyB0aGUgY2hlY2sgdG8gb3B0aW1pemUuCgpUaGlzIGFwcGVhcnMgdG8gYmUgYSBwdXJlIHJlZmFjdG9yaW5nIGFuZCBvcHRpbWl6YXRpb24uIEl0IGRvZXNuJiMzOTt0IG1vZGlmeSB0aGUgZnVuY3Rpb25hbCBiZWhhdmlvciBvZiB0aGUgYWxsb2NhdGlvbiBwYXRocywganVzdCBtYWtlcyBpdCBhIGxpdHRsZSBmYXN0ZXIgYnkgYXZvaWRpbmcgcmVkdW5kYW50IGNoZWNrcyBhbmQgcG9saWN5IGFwcGxpY2F0aW9uLCB3aGljaCBtZWFucyB0aGF0IHRoZSBleGVjdXRpb24gZmxvdyAqc2hvdWxkbiYjMzk7dCogY2hhbmdlIGluIGFueSB3YXkgdGhhdCB3b3VsZCByZXF1aXJlIG5ldyBmdXp6aW5nLiBUaGUgY29tbWl0IG1lc3NhZ2UgcHJvYmFibHkgc2F5cyBzb21ldGhpbmcgbGlrZSAmIzM0O2RlZHVwbGljYXRlIHN0cmljdF9udW1hIHBvbGljeSBhcHBsaWNhdGlvbiYjMzQ7LgoKR2l2ZW4gdGhpcywgSSB3b3VsZCBjb25jbHVkZSB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLiBJdCYjMzk7cyBhIHJlZmFjdG9yaW5nLCBub3QgYSBmdW5jdGlvbmFsIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgYW5kIG9wdGltaXphdGlvbiBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGV4dHJhY3RzIHRoZSBzdHJpY3QgTlVNQSBwb2xpY3kgZXZhbHVhdGlvbiBpbnRvIGEgbmV3IGlubGluZSBmdW5jdGlvbiBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3koKSBhbmQgY2FsbHMgaXQgb25jZSBpbiB0aGUgYWxsb2NhdGlvbiBwYXRocyAoc2xhYl9hbGxvY19ub2RlIGFuZCBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZikgaW5zdGVhZCBvZiByZWR1bmRhbnRseSBldmFsdWF0aW5nIGl0IGluIGJvdGggYWxsb2NfZnJvbV9wY3MoKSBhbmQgX19zbGFiX2FsbG9jX25vZGUoKS4gVGhlcmUgaXMgbm8gY2hhbmdlIHRvIHRoZSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IHRoYXQgd2FycmFudHMgZGVkaWNhdGVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgYW5kIG9wdGltaXphdGlvbiBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGV4dHJhY3RzIHRoZSBzdHJpY3QgTlVNQSBwb2xpY3kgZXZhbHVhdGlvbiBpbnRvIGEgbmV3IGlubGluZSBmdW5jdGlvbiBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3koKSBhbmQgY2FsbHMgaXQgb25jZSBpbiB0aGUgYWxsb2NhdGlvbiBwYXRocyAoc2xhYl9hbGxvY19ub2RlIGFuZCBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZikgaW5zdGVhZCBvZiByZWR1bmRhbnRseSBldmFsdWF0aW5nIGl0IGluIGJvdGggYWxsb2NfZnJvbV9wY3MoKSBhbmQgX19zbGFiX2FsbG9jX25vZGUoKS4gVGhlcmUgaXMgbm8gY2hhbmdlIHRvIHRoZSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IHRoYXQgd2FycmFudHMgZGVkaWNhdGVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTM6NDU6MjIuNTQyNzA3Nzg0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEyNzI5MzAyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgb3B0aW1pemF0aW9uIGluIHRoZSBTTFVCIGFsbG9jYXRvci4gSXQgZXh0cmFjdHMgdGhlIHN0cmljdCBOVU1BIHBvbGljeSBldmFsdWF0aW9uIGludG8gYSBuZXcgaW5saW5lIGZ1bmN0aW9uIGFwcGx5X3N0cmljdF9udW1hX3BvbGljeSgpIGFuZCBjYWxscyBpdCBvbmNlIGluIHRoZSBhbGxvY2F0aW9uIHBhdGhzIChzbGFiX2FsbG9jX25vZGUgYW5kIF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKSBpbnN0ZWFkIG9mIHJlZHVuZGFudGx5IGV2YWx1YXRpbmcgaXQgaW4gYm90aCBhbGxvY19mcm9tX3BjcygpIGFuZCBfX3NsYWJfYWxsb2Nfbm9kZSgpLiBUaGVyZSBpcyBubyBjaGFuZ2UgdG8gdGhlIGZ1bmN0aW9uYWwgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cgdGhhdCB3YXJyYW50cyBkZWRpY2F0ZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEzOjQ1OjIyLjU0MjcxMzI5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4NDIwNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDQ2MDAxYmNkN2I0NjNlZjcyODQxMmNjODFkNTI5NzM5Y2U2OTY4ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1biAyNiAxMzo0NToyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcXG5pbmRleCA5ZWM3NzRkYzcwMDk2OS4uOWY3NTRjZjFjMTg3NGMgMTAwNjQ0XFxuLS0tIGEvbW0vc2x1Yi5jXFxuKysrIGIvbW0vc2x1Yi5jXFxuQEAgLTQ1MjYsMTEgKzQ1MjYsOCBAQCBzdGF0aWMgdm9pZCAqX19fc2xhYl9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLFxcbiBcXHRyZXR1cm4gb2JqZWN0O1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCAqX19zbGFiX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSxcXG4tXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKVxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3koaW50IG5vZGUpXFxuIHtcXG4tXFx0dm9pZCAqb2JqZWN0O1xcbi1cXG4gI2lmZGVmIENPTkZJR19OVU1BXFxuIFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZzdHJpY3RfbnVtYSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0bm9kZSA9PSBOVU1BX05PX05PREUpIHtcXG5AQCAtNDU1MSwxMCArNDU0OCw3IEBAIHN0YXRpYyB2b2lkICpfX3NsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gI2VuZGlmXFxuLVxcbi1cXHRvYmplY3QgPSBfX19zbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBub2RlLCBhYyk7XFxuLVxcbi1cXHRyZXR1cm4gb2JqZWN0O1xcbitcXHRyZXR1cm4gbm9kZTtcXG4gfVxcbiBcXG4gc3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxuQEAgLTQ3NTksMjggKzQ3NTMsNiBAQCB2b2lkICphbGxvY19mcm9tX3BjcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsXFxuIFxcdGJvb2wgbm9kZV9yZXF1ZXN0ZWQ7XFxuIFxcdHZvaWQgKm9iamVjdDtcXG4gXFxuLSNpZmRlZiBDT05GSUdfTlVNQVxcbi1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2c3RyaWN0X251bWEpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCBub2RlID09IE5VTUFfTk9fTk9ERSkge1xcbi1cXG4tXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCA9IGN1cnJlbnQtXFx1MDAzZW1lbXBvbGljeTtcXG4tXFxuLVxcdFxcdGlmIChtcG9sKSB7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFNwZWNpYWwgQklORCBydWxlIHN1cHBvcnQuIElmIHRoZSBsb2NhbCBub2RlXFxuLVxcdFxcdFxcdCAqIGlzIGluIHBlcm1pdHRlZCBzZXQgdGhlbiBkbyBub3QgcmVkaXJlY3RcXG4tXFx0XFx0XFx0ICogdG8gYSBwYXJ0aWN1bGFyIG5vZGUuXFxuLVxcdFxcdFxcdCAqIE90aGVyd2lzZSB3ZSBhcHBseSB0aGUgbWVtb3J5IHBvbGljeSB0byBnZXRcXG4tXFx0XFx0XFx0ICogdGhlIG5vZGUgd2UgbmVlZCB0byBhbGxvY2F0ZSBvbi5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlmIChtcG9sLVxcdTAwM2Vtb2RlICE9IE1QT0xfQklORCB8fFxcbi1cXHRcXHRcXHRcXHRcXHQhbm9kZV9pc3NldChudW1hX21lbV9pZCgpLCBtcG9sLVxcdTAwM2Vub2RlcykpXFxuLVxcbi1cXHRcXHRcXHRcXHRub2RlID0gbWVtcG9saWN5X3NsYWJfbm9kZSgpO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tI2VuZGlmXFxuLVxcbiBcXHRub2RlX3JlcXVlc3RlZCA9IElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5vZGUgIT0gTlVNQV9OT19OT0RFO1xcbiBcXG4gXFx0LypcXG5AQCAtNDkzMCwxMCArNDkwMiwxMiBAQCBzdGF0aWMgX19mYXN0cGF0aF9pbmxpbmUgdm9pZCAqc2xhYl9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbiBcXHRpZiAodW5saWtlbHkob2JqZWN0KSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHRub2RlID0gYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KG5vZGUpO1xcbitcXG4gXFx0b2JqZWN0ID0gYWxsb2NfZnJvbV9wY3MocywgZ2ZwZmxhZ3MsIGFjLVxcdTAwM2VhbGxvY19mbGFncywgbm9kZSk7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIW9iamVjdCkpXFxuLVxcdFxcdG9iamVjdCA9IF9fc2xhYl9hbGxvY19ub2RlKHMsIGdmcGZsYWdzLCBub2RlLCBhYyk7XFxuK1xcdFxcdG9iamVjdCA9IF9fX3NsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIG5vZGUsIGFjKTtcXG4gXFxuIFxcdG1heWJlX3dpcGVfb2JqX2ZyZWVwdHIocywgb2JqZWN0KTtcXG4gXFxuQEAgLTU0MTYsNiArNTM5MCw4IEBAIHN0YXRpYyB2b2lkICpfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mXFxuIFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfU01QKSBcXHUwMDI2XFx1MDAyNiBpbl9ubWkoKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbitcXHRub2RlID0gYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KG5vZGUpO1xcbitcXG4gcmV0cnk6XFxuIFxcdGlmICh1bmxpa2VseShzaXplIFxcdTAwM2UgS01BTExPQ19NQVhfQ0FDSEVfU0laRSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbkBAIC01NDQwLDEwICs1NDE2LDEwIEBAIHN0YXRpYyB2b2lkICpfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mXFxuIFxcdC8qXFxuIFxcdCAqIERvIG5vdCBjYWxsIHNsYWJfYWxsb2Nfbm9kZSgpLCBzaW5jZSB0cnlsb2NrIG1vZGUgaXNuJ3RcXG4gXFx0ICogY29tcGF0aWJsZSB3aXRoIHNsYWJfcHJlX2FsbG9jX2hvb2svc2hvdWxkX2ZhaWxzbGFiIGFuZFxcbi1cXHQgKiBrZmVuY2VfYWxsb2MuIEhlbmNlIGNhbGwgX19zbGFiX2FsbG9jX25vZGUoKSAoYXQgbW9zdCB0d2ljZSlcXG4rXFx0ICoga2ZlbmNlX2FsbG9jLiBIZW5jZSBjYWxsIF9fX3NsYWJfYWxsb2MoKSAoYXQgbW9zdCB0d2ljZSlcXG4gXFx0ICogYW5kIHNsYWJfcG9zdF9hbGxvY19ob29rKCkgZGlyZWN0bHkuXFxuIFxcdCAqL1xcbi1cXHRyZXQgPSBfX3NsYWJfYWxsb2Nfbm9kZShzLCBnZnBfZmxhZ3MsIG5vZGUsIGFjKTtcXG4rXFx0cmV0ID0gX19fc2xhYl9hbGxvYyhzLCBnZnBfZmxhZ3MsIG5vZGUsIGFjKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEl0J3MgcG9zc2libGUgd2UgZmFpbGVkIGR1ZSB0byB0cnlsb2NrIGFzIHdlIHByZWVtcHRlZCBzb21lb25lIHdpdGhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTM6NDU6MjIuOTgxOTMxMTYzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDgzMzY5ODEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIGFuZCBvcHRpbWl6YXRpb24gaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBJdCBleHRyYWN0cyB0aGUgc3RyaWN0IE5VTUEgcG9saWN5IGV2YWx1YXRpb24gaW50byBhIG5ldyBpbmxpbmUgZnVuY3Rpb24gYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KCkgYW5kIGNhbGxzIGl0IG9uY2UgaW4gdGhlIGFsbG9jYXRpb24gcGF0aHMgKHNsYWJfYWxsb2Nfbm9kZSBhbmQgX19rbWFsbG9jX25vbG9ja19ub3Byb2YpIGluc3RlYWQgb2YgcmVkdW5kYW50bHkgZXZhbHVhdGluZyBpdCBpbiBib3RoIGFsbG9jX2Zyb21fcGNzKCkgYW5kIF9fc2xhYl9hbGxvY19ub2RlKCkuIFRoZXJlIGlzIG5vIGNoYW5nZSB0byB0aGUgZnVuY3Rpb25hbCBsb2dpYyBvciBleGVjdXRpb24gZmxvdyB0aGF0IHdhcnJhbnRzIGRlZGljYXRlZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NDYwMDFiY2Q3YjQ2M2VmNzI4NDEyY2M4MWQ1Mjk3MzljZTY5NjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTM6NDU6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcbmluZGV4IDllYzc3NGRjNzAwOTY5Li45Zjc1NGNmMWMxODc0YyAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuKysrIGIvbW0vc2x1Yi5jXG5AQCAtNDUyNiwxMSArNDUyNiw4IEBAIHN0YXRpYyB2b2lkICpfX19zbGFiX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsXG4gXHRyZXR1cm4gb2JqZWN0O1xuIH1cbiBcbi1zdGF0aWMgdm9pZCAqX19zbGFiX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSxcbi1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCAqYWMpXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KGludCBub2RlKVxuIHtcbi1cdHZvaWQgKm9iamVjdDtcbi1cbiAjaWZkZWYgQ09ORklHX05VTUFcbiBcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnN0cmljdF9udW1hKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRub2RlID09IE5VTUFfTk9fTk9ERSkge1xuQEAgLTQ1NTEsMTAgKzQ1NDgsNyBAQCBzdGF0aWMgdm9pZCAqX19zbGFiX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSxcbiBcdFx0fVxuIFx0fVxuICNlbmRpZlxuLVxuLVx0b2JqZWN0ID0gX19fc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgbm9kZSwgYWMpO1xuLVxuLVx0cmV0dXJuIG9iamVjdDtcbitcdHJldHVybiBub2RlO1xuIH1cbiBcbiBzdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbkBAIC00NzU5LDI4ICs0NzUzLDYgQEAgdm9pZCAqYWxsb2NfZnJvbV9wY3Moc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLFxuIFx0Ym9vbCBub2RlX3JlcXVlc3RlZDtcbiBcdHZvaWQgKm9iamVjdDtcbiBcbi0jaWZkZWYgQ09ORklHX05VTUFcbi1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnN0cmljdF9udW1hKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgbm9kZSA9PSBOVU1BX05PX05PREUpIHtcbi1cbi1cdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCA9IGN1cnJlbnQtXHUwMDNlbWVtcG9saWN5O1xuLVxuLVx0XHRpZiAobXBvbCkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogU3BlY2lhbCBCSU5EIHJ1bGUgc3VwcG9ydC4gSWYgdGhlIGxvY2FsIG5vZGVcbi1cdFx0XHQgKiBpcyBpbiBwZXJtaXR0ZWQgc2V0IHRoZW4gZG8gbm90IHJlZGlyZWN0XG4tXHRcdFx0ICogdG8gYSBwYXJ0aWN1bGFyIG5vZGUuXG4tXHRcdFx0ICogT3RoZXJ3aXNlIHdlIGFwcGx5IHRoZSBtZW1vcnkgcG9saWN5IHRvIGdldFxuLVx0XHRcdCAqIHRoZSBub2RlIHdlIG5lZWQgdG8gYWxsb2NhdGUgb24uXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKG1wb2wtXHUwMDNlbW9kZSAhPSBNUE9MX0JJTkQgfHxcbi1cdFx0XHRcdFx0IW5vZGVfaXNzZXQobnVtYV9tZW1faWQoKSwgbXBvbC1cdTAwM2Vub2RlcykpXG4tXG4tXHRcdFx0XHRub2RlID0gbWVtcG9saWN5X3NsYWJfbm9kZSgpO1xuLVx0XHR9XG4tXHR9XG4tI2VuZGlmXG4tXG4gXHRub2RlX3JlcXVlc3RlZCA9IElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBub2RlICE9IE5VTUFfTk9fTk9ERTtcbiBcbiBcdC8qXG5AQCAtNDkzMCwxMCArNDkwMiwxMiBAQCBzdGF0aWMgX19mYXN0cGF0aF9pbmxpbmUgdm9pZCAqc2xhYl9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0aWYgKHVubGlrZWx5KG9iamVjdCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0bm9kZSA9IGFwcGx5X3N0cmljdF9udW1hX3BvbGljeShub2RlKTtcbitcbiBcdG9iamVjdCA9IGFsbG9jX2Zyb21fcGNzKHMsIGdmcGZsYWdzLCBhYy1cdTAwM2VhbGxvY19mbGFncywgbm9kZSk7XG4gXG4gXHRpZiAodW5saWtlbHkoIW9iamVjdCkpXG4tXHRcdG9iamVjdCA9IF9fc2xhYl9hbGxvY19ub2RlKHMsIGdmcGZsYWdzLCBub2RlLCBhYyk7XG4rXHRcdG9iamVjdCA9IF9fX3NsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIG5vZGUsIGFjKTtcbiBcbiBcdG1heWJlX3dpcGVfb2JqX2ZyZWVwdHIocywgb2JqZWN0KTtcbiBcbkBAIC01NDE2LDYgKzUzOTAsOCBAQCBzdGF0aWMgdm9pZCAqX19rbWFsbG9jX25vbG9ja19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBnZnBfZlxuIFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19TTVApIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4rXHRub2RlID0gYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KG5vZGUpO1xuK1xuIHJldHJ5OlxuIFx0aWYgKHVubGlrZWx5KHNpemUgXHUwMDNlIEtNQUxMT0NfTUFYX0NBQ0hFX1NJWkUpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC01NDQwLDEwICs1NDE2LDEwIEBAIHN0YXRpYyB2b2lkICpfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mXG4gXHQvKlxuIFx0ICogRG8gbm90IGNhbGwgc2xhYl9hbGxvY19ub2RlKCksIHNpbmNlIHRyeWxvY2sgbW9kZSBpc24ndFxuIFx0ICogY29tcGF0aWJsZSB3aXRoIHNsYWJfcHJlX2FsbG9jX2hvb2svc2hvdWxkX2ZhaWxzbGFiIGFuZFxuLVx0ICoga2ZlbmNlX2FsbG9jLiBIZW5jZSBjYWxsIF9fc2xhYl9hbGxvY19ub2RlKCkgKGF0IG1vc3QgdHdpY2UpXG4rXHQgKiBrZmVuY2VfYWxsb2MuIEhlbmNlIGNhbGwgX19fc2xhYl9hbGxvYygpIChhdCBtb3N0IHR3aWNlKVxuIFx0ICogYW5kIHNsYWJfcG9zdF9hbGxvY19ob29rKCkgZGlyZWN0bHkuXG4gXHQgKi9cbi1cdHJldCA9IF9fc2xhYl9hbGxvY19ub2RlKHMsIGdmcF9mbGFncywgbm9kZSwgYWMpO1xuK1x0cmV0ID0gX19fc2xhYl9hbGxvYyhzLCBnZnBfZmxhZ3MsIG5vZGUsIGFjKTtcbiBcbiBcdC8qXG4gXHQgKiBJdCdzIHBvc3NpYmxlIHdlIGZhaWxlZCBkdWUgdG8gdHJ5bG9jayBhcyB3ZSBwcmVlbXB0ZWQgc29tZW9uZSB3aXRoXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMzo0NToyMi45ODE5MzMxMzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjYwNDQ1MzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0xVQiBOVU1BIFBvbGljeSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCByZWZhY3RvcnMgdGhlIHN0cmljdCBOVU1BIHBvbGljeSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IGltcHJvdmluZyBjb2RlIG9yZ2FuaXphdGlvbiBhbmQgcG90ZW50aWFsbHkgcmVkdWNpbmcgZHVwbGljYXRpb24uIFRoZSBwYXRjaCB0YXJnZXRzIGBtbS9zbHViLmNgLCB3aGljaCBpcyB0aGUgaGVhcnQgb2YgdGhlIFNMVUIgbWVtb3J5IGFsbG9jYXRvci5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3koaW50IG5vZGUpYC4gVGhpcyBmdW5jdGlvbiBjZW50cmFsaXplcyB0aGUgbG9naWMgZm9yIGVuZm9yY2luZyBzdHJpY3QgTlVNQSBwb2xpY2llcywgcHJldmlvdXNseSBzY2F0dGVyZWQgd2l0aGluIGBfX3NsYWJfYWxsb2Nfbm9kZSgpYCBhbmQgYGFsbG9jX2Zyb21fcGNzKClgLiBJdCB0aGVuIHJlcGxhY2VzIGNhbGxzIHRvIGBfX3NsYWJfYWxsb2Nfbm9kZSgpYCB3aXRoIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBjYWxsaW5nIGBhbGxvY19mcm9tX3BjcygpYCBhbmQgYSByZW5hbWVkIGZ1bmN0aW9uIGBfX19zbGFiX2FsbG9jKClgLiBUaGUgcGF0Y2ggYWxzbyBpbmplY3RzIHRoaXMgZnVuY3Rpb24gaW50byB0aGUgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKClgIHBhdGguXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIG5ldyBmdW5jdGlvbi4gWWVzLCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGZyb20gYHNsYWJfYWxsb2Nfbm9kZWAgYW5kIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAsIHNvIHRoZSBjaGFuZ2UgaXMgdXNlZC4gSSdtIG5vdGluZyB0aGF0IHRoZSBwb2xpY3kgaXRzZWxmIGlzIHByb2JhYmx5IGVuYWJsZWQgdGhyb3VnaCBgQ09ORklHX05VTUFgLCB3aGlsZSBgQ09ORklHX1NMVUJgIGlkZW50aWZpZXMgdGhlIGFsbG9jYXRvci5cblxuTm93LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHBvaW50cyBvZiBpbnRlZ3JhdGlvbi4gUXVpY2tseSBsb29raW5nIGluIGBtbS9zbHViLmNgIGZvciB0aG9zZSBmdW5jdGlvbnMsIEknbSByZW1pbmRpbmcgbXlzZWxmIHRoYXQgYHNsYWJfYWxsb2Nfbm9kZWAgaXMgYSBmYXN0cGF0aCBpbmxpbmUgZnVuY3Rpb24sIGFuZCBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgIGlzIHN0YXRpYy4gVGhpcyBtZWFucyB0aGF0IHRoZSByZWFsIHBvaW50cyBvZiBpbnRlcmVzdCBmb3IgYW5hbHlzaXMgYXJlIHRoZSAqY2FsbGVycyogb2YgYHNsYWJfYWxsb2Nfbm9kZWAgYW5kIHBvdGVudGlhbCBhbHRlcm5hdGl2ZSBlbnRyeSBwb2ludHMuIExldCdzIHNlZS4uLiBiZWNhdXNlIG9mIHRoZSBpbmxpbmluZyBhbmQgdGhlIHN0YXRpYyBkZXNpZ25hdGlvbiBvZiBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgLCBpdCBtYXkgYmUgdGhhdCB0aGUgZnVuY3Rpb24gY2FsbHMgSSdtIGludGVyZXN0ZWQgaW4gYXJlIGBrbWVtX2NhY2hlX2FsbG9jX25vZGVgLCBga21hbGxvY19ub2RlYCBvciBwb3NzaWJseSBvdGhlciBmdW5jdGlvbnMgdGhhdCB1c2UgdGhvc2UuIE5vdyB0aGF0IGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGlzIGBfX2Fsd2F5c19pbmxpbmVgLCBpdCdzIG5vdCBhIGZ1bmN0aW9uIGNhbGwgYW55bW9yZSwgaXQncyBqdXN0IGNvZGUgYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgY2FsbGVyLlxuXG5JJ20gbm93IGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBjYWxsZXJzIG9mIGBzbGFiX2FsbG9jX25vZGVgIHdpdGhpbiBgbW0vc2x1Yi5jYCB0byBzZWUgdGhlIGZ1bGwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzkxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTM6NDU6MzAuNjQyMzgxMzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgwODY0NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNsYWJfYWxsb2Nfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTQ4MDM9dW5zaWduZWQgaW50IGFsbG9jX2Zyb21fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcXG4tLVxcbm1tL3NsdWIuYy00ODkxLSAqL1xcbm1tL3NsdWIuYzo0ODkyOnN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZSB2b2lkICpzbGFiX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTQ4OTMtXFx0XFx0Z2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLCBjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0ICphYylcXG4tLVxcbm1tL3NsdWIuYz00OTI0PXZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncylcXG4tLVxcbm1tL3NsdWIuYy00OTMyLVxcbm1tL3NsdWIuYzo0OTMzOlxcdHJldCA9IHNsYWJfYWxsb2Nfbm9kZShzLCBnZnBmbGFncywgTlVNQV9OT19OT0RFLCBcXHUwMDI2YWMpO1xcbm1tL3NsdWIuYy00OTM0LVxcbi0tXFxubW0vc2x1Yi5jPTQ5NDE9dm9pZCAqa21lbV9jYWNoZV9hbGxvY19scnVfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4tLVxcbm1tL3NsdWIuYy00OTUxLVxcbm1tL3NsdWIuYzo0OTUyOlxcdHJldCA9IHNsYWJfYWxsb2Nfbm9kZShzLCBnZnBmbGFncywgTlVNQV9OT19OT0RFLCBcXHUwMDI2YWMpO1xcbm1tL3NsdWIuYy00OTUzLVxcbi0tXFxubW0vc2x1Yi5jPTQ5ODI9dm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlKVxcbi0tXFxubW0vc2x1Yi5jLTQ5OTAtXFxubW0vc2x1Yi5jOjQ5OTE6XFx0cmV0ID0gc2xhYl9hbGxvY19ub2RlKHMsIGdmcGZsYWdzLCBub2RlLCBcXHUwMDI2YWMpO1xcbm1tL3NsdWIuYy00OTkyLVxcbi0tXFxubW0vc2x1Yi5jPTUzMTY9dm9pZCAqX19kb19rbWFsbG9jX25vZGUoa21lbV9idWNrZXRzICpiLCBnZnBfdCBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5tbS9zbHViLmMtNTMzNC1cXG5tbS9zbHViLmM6NTMzNTpcXHRyZXQgPSBzbGFiX2FsbG9jX25vZGUocywgZmxhZ3MsIG5vZGUsIGFjKTtcXG5tbS9zbHViLmMtNTMzNi1cXHRyZXQgPSBrYXNhbl9rbWFsbG9jKHMsIHJldCwgc2l6ZSwgZmxhZ3MpO1xcbi0tXFxubW0vc2x1Yi5jPTUzNjY9c3RhdGljIHZvaWQgKl9fa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTU0MTYtXFx0LypcXG5tbS9zbHViLmM6NTQxNzpcXHQgKiBEbyBub3QgY2FsbCBzbGFiX2FsbG9jX25vZGUoKSwgc2luY2UgdHJ5bG9jayBtb2RlIGlzbid0XFxubW0vc2x1Yi5jLTU0MTgtXFx0ICogY29tcGF0aWJsZSB3aXRoIHNsYWJfcHJlX2FsbG9jX2hvb2svc2hvdWxkX2ZhaWxzbGFiIGFuZFxcbi0tXFxubW0vc2x1Yi5jPTU0Nzg9dm9pZCAqX19rbWFsbG9jX2NhY2hlX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIHNpemVfdCBzaXplKVxcbi0tXFxubW0vc2x1Yi5jLTU0ODYtXFxubW0vc2x1Yi5jOjU0ODc6XFx0cmV0ID0gc2xhYl9hbGxvY19ub2RlKHMsIGdmcGZsYWdzLCBOVU1BX05PX05PREUsIFxcdTAwMjZhYyk7XFxubW0vc2x1Yi5jLTU0ODgtXFxuLS1cXG5tbS9zbHViLmM9NTQ5Nj12b2lkICpfX2ttYWxsb2NfY2FjaGVfbm9kZV9ub3Byb2Yoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTU1MDUtXFxubW0vc2x1Yi5jOjU1MDY6XFx0cmV0ID0gc2xhYl9hbGxvY19ub2RlKHMsIGdmcGZsYWdzLCBub2RlLCBcXHUwMDI2YWMpO1xcbm1tL3NsdWIuYy01NTA3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMzo0NTozMS4wMjMyNTA2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwODk2NjQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxvdyBoZXJlLCBzcGVjaWZpY2FsbHkgZm9yIG5vbi1wcm9maWxlZCBhbGxvY2F0aW9ucy4gTXkgaW1tZWRpYXRlIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGZ1bmN0aW9uczogYGttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3Byb2ZgLCBgX19kb19rbWFsbG9jX25vZGVgLCBgX19rbWFsbG9jX2NhY2hlX25vZGVfbm9wcm9mYCwgYW5kIHRoYXQgc3RhdGljIGZ1bmN0aW9uLCBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgLiBUaGUgc3RhdGljIGtleXdvcmQgaXMgYSByZWQgZmxhZywgdGhvdWdoLiBJdCBtZWFucyBpdCdzIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQsIHNvIGl0J3MgcHJvYmFibHkgd2hlcmUgdGhlIHJlYWwgd29yayBoYXBwZW5zLiBJdCBhbHNvIGluZGljYXRlcyBJJ2xsIG5lZWQgdG8gY2hhc2UgZG93biBpdHMgY2FsbGVycyB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIFRpbWUgdG8gaW52ZXN0aWdhdGUgd2hhdCBjYWxscyBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgIGFuZCB1bnJhdmVsIHRoZSBjYWxsaW5nIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQgaW50ZXJuYWxseSB0byBzZWUgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMzo0NTozNC43MzIyMTkzMDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2MDgzMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19rbWFsbG9jX25vbG9ja19ub3Byb2ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz01MzY0PUVYUE9SVF9TWU1CT0woX19rbWFsbG9jX25vcHJvZik7XFxubW0vc2x1Yi5jLTUzNjUtXFxubW0vc2x1Yi5jOjUzNjY6c3RhdGljIHZvaWQgKl9fa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbm1tL3NsdWIuYy01MzY3LVxcdFxcdFxcdFxcdCAgICAgaW50IG5vZGUsIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKVxcbi0tXFxubW0vc2x1Yi5jPTU0NTE9dm9pZCAqX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpXFxuLS1cXG5tbS9zbHViLmMtNTQ1OC1cXG5tbS9zbHViLmM6NTQ1OTpcXHRyZXR1cm4gX19rbWFsbG9jX25vbG9ja19ub3Byb2YoUEFTU19UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLFxcbm1tL3NsdWIuYy01NDYwLVxcdFxcdFxcdFxcdCAgICAgICBnZnBfZmxhZ3MsIG5vZGUsIFxcdTAwMjZhYyk7XFxuLS1cXG5tbS9zbHViLmM9NTUyMD12b2lkICpfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtNTUzMi1cXHR9IGVsc2Uge1xcbm1tL3NsdWIuYzo1NTMzOlxcdFxcdHJldHVybiBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihQQVNTX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksXFxubW0vc2x1Yi5jLTU1MzQtXFx0XFx0XFx0XFx0XFx0ICAgICAgIGZsYWdzLCBub2RlLCBcXHUwMDI2YWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMzo0NTozNC43OTA4NTYwNjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk4MTY3MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0xVQiBBbGxvY2F0b3IgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cmFjaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgU0xVQiBhbGxvY2F0b3IuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBmdW5jdGlvbnMgbGlrZSBgX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAgYW5kIGBfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mYCBhcmUgY2FsbGluZyBpdCwgd2hpY2ggc3VnZ2VzdHMgaXQgdGFyZ2V0cyBzb21lIGNvcmUgYWxsb2NhdGlvbiBwYXRocy5cblxuVGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YC4gVGhhdCdzIGEgcmVkIGZsYWcg4oCTIGEgTlVNQSBwb2xpY3kgbW9kaWZpY2F0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgaXMgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4gVGhlIHBhdGNoIGRlc2NyaXB0aW9uIGltbWVkaWF0ZWx5IHN0YXRlcyB0aGF0IHRoaXMgaXMgb25seSByZWxldmFudCB3aGVuIGBDT05GSUdfTlVNQWAgaXMgZW5hYmxlZCwgYW5kIGdpdmVuIHRoZSByZW1vdmFsIG9mIFNMQUIgYW5kIFNMT0IsIGFuZCB0aGUgZmFjdCB0aGF0IFNMVUIgaXMgdGhlIGRlZmF1bHQsIE5VTUEgaXMgbGlrZWx5IHRoZSBrZXkgY29uZmlndXJhdGlvbiBoZXJlLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgcGF0Y2ggbG9va3Mgc29saWQuIEl0J3MgZm9jdXNlZCBvbiB0aGUgU0xVQiBhbGxvY2F0b3IgYW5kIHNlZW1zIHRvIGVuc3VyZSB0aGF0IHN0cmljdCBOVU1BIHBvbGljaWVzIGFyZSBhcHBsaWVkIGNvcnJlY3RseSBpbiBtb3JlIGxvY2F0aW9ucy4gVGhpcyBjb2RlIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LCB3aGljaCBpcyBhbHdheXMgbmljZSB0byBzZWUgaW4gdGhlc2UgbG93LWxldmVsIGFyZWFzLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBJJ2QgbGlrZSB0byBxdWlja2x5IGxvb2sgYXQgdGhlc2Ugc3ltYm9scy4gSSdsbCBmb2N1cyBvbiB0aGVzZTpcbiogICBga21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZmBcbiogICBgX19kb19rbWFsbG9jX25vZGVgXG4qICAgYF9fa21hbGxvY19jYWNoZV9ub2RlX25vcHJvZmBcbiogICBgX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmBcbiogICBgX19rbWFsbG9jX2ZsYWdzX25vcHJvZmBcblxuT25lIHF1aWNrIHRoaW5nIEkgc2hvdWxkIGNoZWNrIGlzIHdoZXRoZXIgYGttZW1fY2FjaGVfYWxsb2Nfbm9kZWAgaXMgYSBtYWNybyBvciBmdW5jdGlvbi4gVGhhdCdzIGEgZ29vZCBmaXJzdCB0aGluZyB0byBkbyBiZWZvcmUgSSBsb29rIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTM6NDU6NDEuMTg5MDI1MzM1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTc4NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1fY2FjaGVfYWxsb2Nfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD0yODU9c3RydWN0IGttZW1fY2FjaGVfYXJncyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0zNjItXFx0ICogVGhlIHNoZWF2ZXMgZG8gbm90IGVuZm9yY2UgTlVNQSBwbGFjZW1lbnQgb2Ygb2JqZWN0cywgc28gYWxsb2NhdGlvbnNcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDozNjM6XFx0ICogdmlhIGttZW1fY2FjaGVfYWxsb2Nfbm9kZSgpIHdpdGggYSBub2RlIHNwZWNpZmllZCBvdGhlciB0aGFuXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMzY0LVxcdCAqIE5VTUFfTk9fTk9ERSB3aWxsIGJ5cGFzcyB0aGVtLlxcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmg9ODg5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrZnJlZV9idWxrKHNpemVfdCBzaXplLCB2b2lkICoqcClcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTg5My1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo4OTQ6dm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtODk1LVxcdFxcdFxcdFxcdCAgIGludCBub2RlKSBfX2Fzc3VtZV9zbGFiX2FsaWdubWVudCBfX21hbGxvYztcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo4OTY6I2RlZmluZSBrbWVtX2NhY2hlX2FsbG9jX25vZGUoLi4uKVxcdGFsbG9jX2hvb2tzKGttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTg5Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTM6NDU6NDEuMjQ0MjA5OTE0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzNTU4Mjc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBLZXJuZWwgTWVtb3J5IEFsbG9jYXRpb24gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMga2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uIGNvZGUuIFRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGBrbWVtX2NhY2hlX2FsbG9jX25vZGVfbm9wcm9mYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIEkgdGhpbmsuIFRoZW4gdGhlcmUgaXMgYF9fa21hbGxvY19jYWNoZV9ub2RlX25vcHJvZmAgd2hpY2gsIGJ5IHRoZSBuYW1pbmcgY29udmVudGlvbiwgbG9va3MgbGlrZSBhbm90aGVyIGxldmVsIGRvd24gdGhlIGNhbGwgc3RhY2suIExldCdzIG5vdCBmb3JnZXQgdGhlIGZ1bmN0aW9uIGBfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mYCBhcyBpdCBwbGF5cyBzb21lIHBhcnQgaW4gdGhlIHByb2Nlc3MuXG5cbk5vdywgd2hlcmUgZG8gdGhleSBhbGwgbGluayB0b2dldGhlcj8gTXkgaW5zdGluY3RzIHRlbGwgbWUgdG8gZm9jdXMgb24gYF9fZG9fa21hbGxvY19ub2RlYC4gSXQgaGFzIHRvIGJlIHdoZXJlIHRoZSBtYWluIGxvZ2ljIGlzIGV4ZWN1dGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzM4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTM6NDU6NDQuMzc5Nzk1MjI1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzQ3NzU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2RvX2ttYWxsb2Nfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTUzMTU9c3RhdGljIF9fYWx3YXlzX2lubGluZVxcbm1tL3NsdWIuYzo1MzE2OnZvaWQgKl9fZG9fa21hbGxvY19ub2RlKGttZW1fYnVja2V0cyAqYiwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxcbm1tL3NsdWIuYy01MzE3LVxcdFxcdFxcdGttYWxsb2NfdG9rZW5fdCB0b2tlbiwgY29uc3Qgc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCAqYWMpXFxuLS1cXG5tbS9zbHViLmM9NTM0MD12b2lkICpfX2ttYWxsb2Nfbm9kZV9ub3Byb2YoREVDTF9LTUFMTE9DX1BBUkFNUyhzaXplLCBiLCB0b2tlbiksIGdmcF90IGZsYWdzLCBpbnQgbm9kZSlcXG4tLVxcbm1tL3NsdWIuYy01MzQ3LVxcbm1tL3NsdWIuYzo1MzQ4OlxcdHJldHVybiBfX2RvX2ttYWxsb2Nfbm9kZShQQVNTX0JVQ0tFVF9QQVJBTShiKSwgZmxhZ3MsIG5vZGUsXFxubW0vc2x1Yi5jLTUzNDktXFx0XFx0XFx0XFx0IFBBU1NfVE9LRU5fUEFSQU0odG9rZW4pLCBcXHUwMDI2YWMpO1xcbi0tXFxubW0vc2x1Yi5jPTUzNTM9dm9pZCAqX19rbWFsbG9jX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jLTUzNjAtXFxubW0vc2x1Yi5jOjUzNjE6XFx0cmV0dXJuIF9fZG9fa21hbGxvY19ub2RlKE5VTEwsIGZsYWdzLCAgTlVNQV9OT19OT0RFLFxcbm1tL3NsdWIuYy01MzYyLVxcdFxcdFxcdFxcdCBQQVNTX1RPS0VOX1BBUkFNKHRva2VuKSwgXFx1MDAyNmFjKTtcXG4tLVxcbm1tL3NsdWIuYz01NDY0PXZvaWQgKl9fa21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcl9ub3Byb2YoREVDTF9LTUFMTE9DX1BBUkFNUyhzaXplLCBiLCB0b2tlbiksIGdmcF90IGZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTU0NzItXFxubW0vc2x1Yi5jOjU0NzM6XFx0cmV0dXJuIF9fZG9fa21hbGxvY19ub2RlKFBBU1NfQlVDS0VUX1BBUkFNKGIpLCBmbGFncywgbm9kZSxcXG5tbS9zbHViLmMtNTQ3NC1cXHRcXHRcXHRcXHQgUEFTU19UT0tFTl9QQVJBTSh0b2tlbiksIFxcdTAwMjZhYyk7XFxuLS1cXG5tbS9zbHViLmM9NTUyMD12b2lkICpfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtNTUyOS1cXHRpZiAoYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWxsb2NfZmxhZ3MpKSB7XFxubW0vc2x1Yi5jOjU1MzA6XFx0XFx0cmV0dXJuIF9fZG9fa21hbGxvY19ub2RlKE5VTEwsIGZsYWdzLCBub2RlLFxcbm1tL3NsdWIuYy01NTMxLVxcdFxcdFxcdFxcdFBBU1NfVE9LRU5fUEFSQU0odG9rZW4pLCBcXHUwMDI2YWMpO1xcbi0tXFxubW0vc2x1Yi5jPTY4OTQ9dm9pZCAqX19rdm1hbGxvY19ub2RlX25vcHJvZihERUNMX0tNQUxMT0NfUEFSQU1TKHNpemUsIGIsIHRva2VuKSwgdW5zaWduZWQgbG9uZyBhbGlnbixcXG4tLVxcbm1tL3NsdWIuYy02OTA4LVxcdCAqL1xcbm1tL3NsdWIuYzo2OTA5OlxcdHJldCA9IF9fZG9fa21hbGxvY19ub2RlKFBBU1NfQlVDS0VUX1BBUkFNKGIpLFxcbm1tL3NsdWIuYy02OTEwLVxcdFxcdFxcdFxcdGttYWxsb2NfZ2ZwX2FkanVzdChmbGFncywgc2l6ZSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEzOjQ1OjQ0LjQzNzI3ODk4M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODAyMzg2MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIE5VTUEgUG9saWN5IFx1MDAyNiBNZW1vcnkgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIGBfX2RvX2ttYWxsb2Nfbm9kZWAgaXMgaW5saW5lZCwgd2hpY2ggbWVhbnMgaXQncyBjYWxsZWQgKmEgbG90Ki4gTG9va2luZyBhdCB0aGUgY2FsbGVycywgSSBzZWUgYSBidW5jaCBvZiBgX19rbWFsbG9jXy4uLl9ub3Byb2ZgIGZ1bmN0aW9uczogYGttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3Byb2ZgLCBgX19rbWFsbG9jX25vZGVfbm9wcm9mYCwgYF9fa21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcl9ub3Byb2ZgLCBgX19rbWFsbG9jX2ZsYWdzX25vcHJvZmAsIGBfX2t2bWFsbG9jX25vZGVfbm9wcm9mYCwgYF9fa21hbGxvY19jYWNoZV9ub2RlX25vcHJvZmAsIGFuZCBgX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAuIFJpZ2h0LCBtZW1vcnkgYWxsb2NhdGlvbi4uLiB0aG9zZSBhcmUgYWxsICp0ZXh0Ym9vayogaG90IHBhdGhzLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSB3YXJucyBhZ2FpbnN0IGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gVGhhdCdzIGV4YWN0bHkgd2hhdCB0aGVzZSBmdW5jdGlvbnMgd291bGQgY2F1c2UhIFdlICpkb24ndCogd2FudCBzeXprYWxsZXIgc3BlbmRpbmcgYWxsIGl0cyB0aW1lIGp1c3QgaGFtbWVyaW5nIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGF0IGRlZmVhdHMgdGhlIHB1cnBvc2UuXG5cblRoZSBwcm9tcHQgaW5kaWNhdGVzIGEgZm9jdXMgb24gTlVNQSBwb2xpY3kuIEhvdyBkbyB3ZSB0cmlnZ2VyIHRoYXQ/IEFoLCBgc2V0X21lbXBvbGljeWAgYW5kIGBtYmluZGAuIFRoYXQncyB0aGUga2V5LiBBbmQgdGhlIHBhdGNoIGFkZHJlc3NlcyBgc3RyaWN0X251bWFgIHBvbGljeSBhcHBsaWNhdGlvbiAqaW4gU0xVQiouIGBzdHJpY3RfbnVtYWAgaXMgY29udHJvbGxlZCBieSBhIHN0YXRpYyBicmFuY2guIFNvLCB0aGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IHdoZXJlIGlzIHRoYXQgYHN0cmljdF9udW1hYCBicmFuY2ggYWN0dWFsbHkgZW5hYmxlZD8gV2UgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgcmVsYXRlZCB0byB0aGF0IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMjMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTM6NDU6NTAuMjM5NjcxODA4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQwOTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJpY3RfbnVtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTIwOD1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzbHViX2RlYnVnX2VuYWJsZWQpO1xcbi0tXFxubW0vc2x1Yi5jLTIxMi0jaWZkZWYgQ09ORklHX05VTUFcXG5tbS9zbHViLmM6MjEzOnN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzdHJpY3RfbnVtYSk7XFxubW0vc2x1Yi5jLTIxNC0jZW5kaWZcXG4tLVxcbm1tL3NsdWIuYz00NDU2PXN0YXRpYyB2b2lkICpfX19zbGFiX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5tbS9zbHViLmMtNDUyOC1cXG5tbS9zbHViLmM6NDUyOTpzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3koaW50IG5vZGUpXFxubW0vc2x1Yi5jLTQ1MzAte1xcbm1tL3NsdWIuYy00NTMxLSNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3NsdWIuYzo0NTMyOlxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZzdHJpY3RfbnVtYSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmMtNDUzMy1cXHRcXHRcXHRub2RlID09IE5VTUFfTk9fTk9ERSkge1xcbi0tXFxubW0vc2x1Yi5jPTQ4OTI9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lIHZvaWQgKnNsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy00OTA0LVxcbm1tL3NsdWIuYzo0OTA1OlxcdG5vZGUgPSBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3kobm9kZSk7XFxubW0vc2x1Yi5jLTQ5MDYtXFxuLS1cXG5tbS9zbHViLmM9NTM2Nj1zdGF0aWMgdm9pZCAqX19rbWFsbG9jX25vbG9ja19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBnZnBfZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtNTM5Mi1cXG5tbS9zbHViLmM6NTM5MzpcXHRub2RlID0gYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KG5vZGUpO1xcbm1tL3NsdWIuYy01Mzk0LVxcbi0tXFxubW0vc2x1Yi5jPTgxNzU9Y29yZV9wYXJhbShzbHViX21pbl9vYmplY3RzLCBzbHViX21pbl9vYmplY3RzLCB1aW50LCAwKTtcXG4tLVxcbm1tL3NsdWIuYy04MTc3LSNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3NsdWIuYzo4MTc4OnN0YXRpYyBpbnQgX19pbml0IHNldHVwX3NsYWJfc3RyaWN0X251bWEoY29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG5tbS9zbHViLmMtODE3OS17XFxubW0vc2x1Yi5jLTgxODAtXFx0aWYgKG5yX25vZGVfaWRzIFxcdTAwM2UgMSkge1xcbm1tL3NsdWIuYzo4MTgxOlxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZzdHJpY3RfbnVtYSk7XFxubW0vc2x1Yi5jLTgxODItXFx0XFx0cHJfaW5mbyhcXFwiU0xVQjogU3RyaWN0IE5VTUEgZW5hYmxlZC5cXFxcblxcXCIpO1xcbm1tL3NsdWIuYy04MTgzLVxcdH0gZWxzZSB7XFxubW0vc2x1Yi5jOjgxODQ6XFx0XFx0cHJfd2FybihcXFwic2xhYl9zdHJpY3RfbnVtYSBwYXJhbWV0ZXIgc2V0IG9uIG5vbiBOVU1BIHN5c3RlbS5cXFxcblxcXCIpO1xcbm1tL3NsdWIuYy04MTg1LVxcdH1cXG4tLVxcbm1tL3NsdWIuYy04MTg5LVxcbm1tL3NsdWIuYzo4MTkwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBwYXJhbV9vcHNfc2xhYl9zdHJpY3RfbnVtYSBfX2luaXRjb25zdCA9IHtcXG5tbS9zbHViLmMtODE5MS1cXHQuZmxhZ3MgPSBLRVJORUxfUEFSQU1fT1BTX0ZMX05PQVJHLFxcbm1tL3NsdWIuYzo4MTkyOlxcdC5zZXQgPSBzZXR1cF9zbGFiX3N0cmljdF9udW1hLFxcbm1tL3NsdWIuYy04MTkzLX07XFxubW0vc2x1Yi5jOjgxOTQ6X19jb3JlX3BhcmFtX2NiKHNsYWJfc3RyaWN0X251bWEsIFxcdTAwMjZwYXJhbV9vcHNfc2xhYl9zdHJpY3RfbnVtYSwgTlVMTCwgMCk7XFxubW0vc2x1Yi5jLTgxOTUtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEzOjQ1OjUwLjMwOTA4ODM5NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTQ2NDYzMDYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBzbGFiX3N0cmljdF9udW1hYCBLZXJuZWwgUGFyYW1ldGVyIGFuZCBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBgc2xhYl9zdHJpY3RfbnVtYWAgaXMgYSBrZXJuZWwgcGFyYW1ldGVyLCBlbmFibGVkIHZpYSB0aGUgYm9vdCBwYXJhbWV0ZXIgYHNsYWJfc3RyaWN0X251bWFgLiBJZiBpdCdzIG5vdCBlbmFibGVkLCBgc3RyaWN0X251bWFgIGlzIGZhbHNlLCBhbmQgdGhlIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGZ1bmN0aW9uIGlzIG5ldmVyIGV4ZWN1dGVkLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBzeXprYWxsZXI7IGl0IG1pZ2h0IG5vdCBwYXNzIHRoaXMgcGFyYW1ldGVyIGJ5IGRlZmF1bHQsIGFuZCB3ZSBjYW4ndCBkaXJlY3RseSB0ZWxsIGl0IHRvIHBhc3Mga2VybmVsIHBhcmFtZXRlcnMsIG9ubHkgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLlxuXG5Mb29raW5nIGF0IGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgLCBpdCdzIGNsZWFyIHRoYXQgaXQgb25seSBkb2VzIGFueXRoaW5nIGlmIGBzdHJpY3RfbnVtYWAgaXMgdHJ1ZSBhbmQgdGhlIG5vZGUgaXMgYE5VTUFfTk9fTk9ERWAuIFRoZSBjb2RlIHVzZXMgYHN0YXRpY19icmFuY2hfdW5saWtlbHlgLCBzbyBpZiBgc3RyaWN0X251bWFgIGlzIGZhbHNlLCB0aGUgZW50aXJlIGJsb2NrIGlzIG9wdGltaXplZCBhd2F5LiBBbmQgaXQncyBzZXQgd2l0aCBgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpYCwgbWVhbmluZyBpdCdzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFNvLCB1bmxlc3MgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgaGFzIGBzbGFiX3N0cmljdF9udW1hYCwgdGhlIGNvZGUgaW5zaWRlIHRoZSBgaWZgIHN0YXRlbWVudCBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cblxuVGhlIHBhdGNoIEknbSBsb29raW5nIGF0IG1vdmVzIHRoaXMgbG9naWMgaW50byBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBhbmQgY2FsbHMgaXQgZnJvbSBgc2xhYl9hbGxvY19ub2RlYCBhbmQgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgYWxsb2NfZnJvbV9wY3NgIGFuZCBgX19zbGFiX2FsbG9jX25vZGVgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgTlVNQSBjaGVjayB3YXMgaW4gYF9fc2xhYl9hbGxvY19ub2RlYCwgYnV0IG5vdyBgX19zbGFiX2FsbG9jX25vZGVgIGlzIHJlbW92ZWQgYW5kIHJlcGxhY2VkIGJ5IGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIHBsdXMgYF9fX3NsYWJfYWxsb2NgLlxuXG5Ob3csIHRoZSBjb3JlIHF1ZXN0aW9uOiB3aGF0J3MgdGhlIGZ1bmN0aW9uYWwgaW1wYWN0IGlmIGBzdHJpY3RfbnVtYWAgaXMgZmFsc2U/IExvb2tpbmcgYXQgdGhlIG9sZCBhbmQgbmV3IGNvZGUsIHRoZSBwYXRjaCBlZmZlY3RpdmVseSBqdXN0IGZhY3RvcmVkIG91dCB0aGUgYHN0cmljdF9udW1hYCBjaGVjayBpbnRvIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGFuZCBjYWxscyBpdCBvbmNlIGJlZm9yZSBgYWxsb2NfZnJvbV9wY3NgIGFuZCBgX19fc2xhYl9hbGxvY2AuIEl0IGFsc28gYWRkcyBgbm9kZSA9IGFwcGx5X3N0cmljdF9udW1hX3BvbGljeShub2RlKTtgIHRvIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAuIElmIGBzdHJpY3RfbnVtYWAgaXMgZmFsc2UsIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGlzIGEgbm8tb3AuIENvbXBhcmluZyB0aGUgb2xkIGFuZCB0aGUgbmV3IHZlcnNpb25zIG9mIGBfX3NsYWJfYWxsb2Nfbm9kZWAsIGl0IG9ubHkgY2FsbGVkIGBfX19zbGFiX2FsbG9jYCBpZiBgc3RyaWN0X251bWFgIHdhcyBmYWxzZS5cblxuVGhlcmVmb3JlLCBpZiBgc3RyaWN0X251bWFgIGlzIGZhbHNlLCB0aGlzIGlzIGEgcHVyZSByZWZhY3RvcmluZy4gVGhlIGxvZ2ljIGlzIGlkZW50aWNhbDsgdGhlIHBhdGNoIHNpbXBseSByZXBsYWNlcyBhIHdyYXBwZXIgZnVuY3Rpb24gKGBfX3NsYWJfYWxsb2Nfbm9kZWApIHdpdGggYSBkaXJlY3QgY2FsbCB0byB0aGUgY29yZSBhbGxvY2F0aW9uIGZ1bmN0aW9uIChgX19fc2xhYl9hbGxvY2ApLlxuXG5MZXQncyBjaGVjayBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgIGJlY2F1c2UgdGhlIHBhdGNoIGNoYW5nZWQgdGhlIGNhbGwuIElmIGBzdHJpY3RfbnVtYWAgaXMgZmFsc2UsIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGRvZXMgbm90aGluZy4gQmVmb3JlIGl0IGNhbGxlZCBgX19zbGFiX2FsbG9jX25vZGVgIGFuZCBub3cgaXQgY2FsbHMgYGFwcGx5X3N0cmljdF9udW1hX3BvbGljeWAgYW5kIHRoZW4gYF9fX3NsYWJfYWxsb2NgLCBidXQgaWYgdGhlIHN0cmljdCBOVU1BIGlzbid0IGFjdGl2ZSwgdGhlbiB0aGlzIGRvZXMgbm90IGNoYW5nZSBhbnl0aGluZy5cblxuKipJbiBzdW1tYXJ5OiBpZiBgc3RyaWN0X251bWFgIGlzIGZhbHNlLCB0aGVyZSBpcyBhYnNvbHV0ZWx5ICp6ZXJvKiBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyBqdXN0IGEgcmVmYWN0b3JpbmcuKiogQW55IGZ1bmN0aW9uYWwgY2hhbmdlIGhhcHBlbnMgd2hlbiBzdHJpY3QgTlVNQSBpcyB0cnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTAzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMzo0NjowNS43NzM3MjkwMzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMTUxNjIwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTUzNjQ9RVhQT1JUX1NZTUJPTChfX2ttYWxsb2Nfbm9wcm9mKTtcXG5tbS9zbHViLmMtNTM2NS1cXG5tbS9zbHViLmM6NTM2NjpzdGF0aWMgdm9pZCAqX19rbWFsbG9jX25vbG9ja19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBnZnBfZmxhZ3MsXFxubW0vc2x1Yi5jLTUzNjctXFx0XFx0XFx0XFx0ICAgICBpbnQgbm9kZSwgY29uc3Qgc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCAqYWMpXFxuLS1cXG5tbS9zbHViLmM9NTQ1MT12b2lkICpfa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSlcXG4tLVxcbm1tL3NsdWIuYy01NDU4LVxcbm1tL3NsdWIuYzo1NDU5OlxcdHJldHVybiBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihQQVNTX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksXFxubW0vc2x1Yi5jLTU0NjAtXFx0XFx0XFx0XFx0ICAgICAgIGdmcF9mbGFncywgbm9kZSwgXFx1MDAyNmFjKTtcXG4tLVxcbm1tL3NsdWIuYz01NTIwPXZvaWQgKl9fa21hbGxvY19mbGFnc19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy01NTMyLVxcdH0gZWxzZSB7XFxubW0vc2x1Yi5jOjU1MzM6XFx0XFx0cmV0dXJuIF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKFBBU1NfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSxcXG5tbS9zbHViLmMtNTUzNC1cXHRcXHRcXHRcXHRcXHQgICAgICAgZmxhZ3MsIG5vZGUsIFxcdTAwMjZhYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEzOjQ2OjA2LjA3NTI1MDk3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Mjg4NDg5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpc3NlY3RpbmcgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBCZWZvcmUgYSBQYXRjaCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBiZWZvcmUgd2UgZXZlbiAqdGhpbmsqIGFib3V0IHRoYXQgcGF0Y2guIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHByZS1wYXRjaCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbDsgaXQncyB0aGUgY29yZSBvZiBrZXJuZWwgbWVtb3J5IGFsbG9jYXRpb24gd2l0aG91dCBsb2NrIGNvbnRlbnRpb24gYW5kIHdpdGhvdXQgdGhlIHBlcmZvcm1hbmNlIHByb2ZpbGluZyBvdmVyaGVhZC4gU28sIEkgbmVlZCBhIHJvY2stc29saWQgZ3Jhc3Agb2YgaG93IGl0ICpjdXJyZW50bHkqIG9wZXJhdGVzLiBUaGlzIG1lYW5zIGxvb2tpbmcgYXQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgc2xhYiBhbGxvY2F0b3IsIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgYW55IHJlbGF0ZWQgY2FjaGluZyBtZWNoYW5pc21zLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpdCByZWxpZXMgb24/IEhvdyBkb2VzIGl0IGhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmVzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb250ZW50aW9uIGV2ZW4gKndpdGhvdXQqIGV4cGxpY2l0IGxvY2tzLCBwZXJoYXBzIHJlbGF0ZWQgdG8gYXRvbWljIG9wZXJhdGlvbnMgb3IgY2FjaGUgbGluZSBib3VuY2luZz8gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IGFzc3VtcHRpb25zIHRoZSBjb2RlIG1ha2VzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFRob3JvdWdobHkgcmV2aWV3aW5nIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAgbm93IGlzIHRoZSBrZXkuIFRoZSBkZXZpbCdzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgYW5kIHRoaXMga2luZCBvZiBzY3J1dGlueSBpcyB3aGF0IGVuc3VyZXMgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHN1YnRsZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gT2theSwgbGV0J3MgZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTk1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTM6NDY6MTAuMDA0MTAzMTgxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjU0NzEwNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zbGFiX2FsbG9jX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMzo0NjoxMC4wOTY2NjM1NzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjM3MTg5MjgwODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgYW5kIE9wdGltaXphdGlvbiBvZiBTTFVCIE5VTUEgUG9saWN5IEFwcGxpY2F0aW9uKipcblxuT2theSwgc28gdGhlIHBhdGNoIGhhcyBiZWVuIGFwcGxpZWQsIGxldCdzIHNlZSB3aGF0J3MgY2hhbmdlZC4gSG1tLCBpdCBzZWVtcyBsaWtlIHRoZSBrZXkgY2hhbmdlIGlzIHRoYXQgdGhlIHN0cmljdCBOVU1BIHBvbGljeSBhcHBsaWNhdGlvbiBpcyBiZWluZyBtb3ZlZCBhcm91bmQgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGxvZ2ljIGlzIG5vdyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBhbmQgYHNsYWJfYWxsb2Nfbm9kZWAgZnVuY3Rpb25zIGluc3RlYWQgb2YgYmVpbmcgcGVyZm9ybWVkIGluc2lkZSB0aGUgYF9fc2xhYl9hbGxvY19ub2RlYCBhbmQgYGFsbG9jX2Zyb21fcGNzYCBmdW5jdGlvbnMuXG5cbkJlZm9yZSB0aGUgcGF0Y2gsIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAgY2FsbGVkIGBfX3NsYWJfYWxsb2Nfbm9kZWAsIHdoaWNoIHdvdWxkIGFwcGx5IHRoZSBzdHJpY3QgTlVNQSBwb2xpY3kgYW5kIHRoZW4gY2FsbCBgX19fc2xhYl9hbGxvY2AuIE5vdywgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBjYWxscyBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBmaXJzdCwgYW5kIHRoZW4gY2FsbHMgYF9fX3NsYWJfYWxsb2NgIGRpcmVjdGx5LiBUaGVyZSdzIGEgYHJldHJ5YCBsYWJlbCBpbiBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgIHdoaWNoLCBpZiBpdCB3YXMgaGl0LCBjYXVzZWQgdGhlIGNvZGUgdG8gYXBwbHkgdGhlIHBvbGljeSBhZ2Fpbi4gTm93IGl0IG9ubHkgYXBwbGllcyBvbmNlIGJlZm9yZSB0aGUgYHJldHJ5YCBsYWJlbCwgYXMgaW50ZW5kZWQuXG5cbkFsc28sIGBzbGFiX2FsbG9jX25vZGVgIG9yaWdpbmFsbHkgY2FsbGVkIGBhbGxvY19mcm9tX3Bjc2AsIHdoaWNoIG1pZ2h0IGhhdmUgYXBwbGllZCB0aGUgc3RyaWN0IE5VTUEgcG9saWN5LCBhbmQgaWYgdGhhdCBmYWlsZWQsIGl0IHdvdWxkIGNhbGwgYF9fc2xhYl9hbGxvY19ub2RlYCwgd2hpY2ggKmFsc28qIGFwcGxpZWQgdGhlIHN0cmljdCBOVU1BIHBvbGljeS4gVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB0aGUgYG5vZGVgIHBhcmFtZXRlciwgd2hpY2ggYGFsbG9jX2Zyb21fcGNzYCBtaWdodCBjaGFuZ2UgaW50ZXJuYWxseSB3aGVuIGFwcGx5aW5nIHRoZSBzdHJpY3QgTlVNQSBwb2xpY3ksIGJ1dCB0aGlzIG1vZGlmaWVkIHZhbHVlIHdhcyAqbm90KiBwYXNzZWQgYmFjayB0byBgc2xhYl9hbGxvY19ub2RlYCBzbyBgX19zbGFiX2FsbG9jX25vZGVgIHdvdWxkIHJlcGVhdCB0aGUgbWVtcG9saWN5IGV2YWx1YXRpb24uXG5cblRoaXMgcGF0Y2ggcmVmYWN0b3JzIHRoYXQ6IGBzbGFiX2FsbG9jX25vZGVgIG5vdyBjYWxscyBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCAqZmlyc3QqLCBhbmQgKnRoZW4qIHRoZSBgbm9kZWAgdmFyaWFibGUgdGhhdCBpcyBwYXNzZWQgdG8gYGFsbG9jX2Zyb21fcGNzYCBhbmQgYF9fX3NsYWJfYWxsb2NgIGlzIHRoZSB1cGRhdGVkIHZhbHVlLCBiYXNlZCBvbiB0aGUgc3RyaWN0IE5VTUEgcG9saWN5LlxuXG5TbywgdGhlIGVmZmVjdCBvZiB0aGUgcGF0Y2ggaXMganVzdCB0byBwZXJmb3JtIHRoZSBzYW1lIE5VTUEgcG9saWN5IGxvb2t1cCBvbmx5ICpvbmNlKiwgYXZvaWRpbmcgcmVkdW5kYW50IGNvbXB1dGF0aW9ucy4gQmVjYXVzZSBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBpcyBkZXRlcm1pbmlzdGljIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1lbXBvbGljeSwgdGhpcyBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC4gVGhlIHBhdGNoIHNpbXBseSBlbGltaW5hdGVzIHRoZSBkdXBsaWNhdGVkIGFwcGxpY2F0aW9uIG9mIHRoZSBOVU1BIHBvbGljeSBjaGVjay5cblxuVGhlIHBhdGNoIGl0c2VsZiBqdXN0IG1vdmVzIHRoZSBjaGVjayB0byBvcHRpbWl6ZS5cblxuVGhpcyBhcHBlYXJzIHRvIGJlIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgb3B0aW1pemF0aW9uLiBJdCBkb2Vzbid0IG1vZGlmeSB0aGUgZnVuY3Rpb25hbCBiZWhhdmlvciBvZiB0aGUgYWxsb2NhdGlvbiBwYXRocywganVzdCBtYWtlcyBpdCBhIGxpdHRsZSBmYXN0ZXIgYnkgYXZvaWRpbmcgcmVkdW5kYW50IGNoZWNrcyBhbmQgcG9saWN5IGFwcGxpY2F0aW9uLCB3aGljaCBtZWFucyB0aGF0IHRoZSBleGVjdXRpb24gZmxvdyAqc2hvdWxkbid0KiBjaGFuZ2UgaW4gYW55IHdheSB0aGF0IHdvdWxkIHJlcXVpcmUgbmV3IGZ1enppbmcuIFRoZSBjb21taXQgbWVzc2FnZSBwcm9iYWJseSBzYXlzIHNvbWV0aGluZyBsaWtlIFwiZGVkdXBsaWNhdGUgc3RyaWN0X251bWEgcG9saWN5IGFwcGxpY2F0aW9uXCIuXG5cbkdpdmVuIHRoaXMsIEkgd291bGQgY29uY2x1ZGUgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gSXQncyBhIHJlZmFjdG9yaW5nLCBub3QgYSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MzMsIk91dHB1dFRva2VucyI6MTMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMzo0NjozMy44MTU1OTU5NzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgYW5kIG9wdGltaXphdGlvbiBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGV4dHJhY3RzIHRoZSBzdHJpY3QgTlVNQSBwb2xpY3kgZXZhbHVhdGlvbiBpbnRvIGEgbmV3IGlubGluZSBmdW5jdGlvbiBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3koKSBhbmQgY2FsbHMgaXQgb25jZSBpbiB0aGUgYWxsb2NhdGlvbiBwYXRocyAoc2xhYl9hbGxvY19ub2RlIGFuZCBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZikgaW5zdGVhZCBvZiByZWR1bmRhbnRseSBldmFsdWF0aW5nIGl0IGluIGJvdGggYWxsb2NfZnJvbV9wY3MoKSBhbmQgX19zbGFiX2FsbG9jX25vZGUoKS4gVGhlcmUgaXMgbm8gY2hhbmdlIHRvIHRoZSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IHRoYXQgd2FycmFudHMgZGVkaWNhdGVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgYW5kIG9wdGltaXphdGlvbiBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGV4dHJhY3RzIHRoZSBzdHJpY3QgTlVNQSBwb2xpY3kgZXZhbHVhdGlvbiBpbnRvIGEgbmV3IGlubGluZSBmdW5jdGlvbiBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3koKSBhbmQgY2FsbHMgaXQgb25jZSBpbiB0aGUgYWxsb2NhdGlvbiBwYXRocyAoc2xhYl9hbGxvY19ub2RlIGFuZCBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZikgaW5zdGVhZCBvZiByZWR1bmRhbnRseSBldmFsdWF0aW5nIGl0IGluIGJvdGggYWxsb2NfZnJvbV9wY3MoKSBhbmQgX19zbGFiX2FsbG9jX25vZGUoKS4gVGhlcmUgaXMgbm8gY2hhbmdlIHRvIHRoZSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IHRoYXQgd2FycmFudHMgZGVkaWNhdGVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlp5z8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 13:17:53 +0000 UTC FinishedAt: 2026-06-26 13:46: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+CgkJCTx0ZD4yMDI2LzA2LzI2IDEzOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgb3B0aW1pemF0aW9uIGluIHRoZSBTTFVCIGFsbG9jYXRvci4gSXQgZXh0cmFjdHMgdGhlIHN0cmljdCBOVU1BIHBvbGljeSBldmFsdWF0aW9uIGludG8gYSBuZXcgaW5saW5lIGZ1bmN0aW9uIGFwcGx5X3N0cmljdF9udW1hX3BvbGljeSgpIGFuZCBjYWxscyBpdCBvbmNlIGluIHRoZSBhbGxvY2F0aW9uIHBhdGhzIChzbGFiX2FsbG9jX25vZGUgYW5kIF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKSBpbnN0ZWFkIG9mIHJlZHVuZGFudGx5IGV2YWx1YXRpbmcgaXQgaW4gYm90aCBhbGxvY19mcm9tX3BjcygpIGFuZCBfX3NsYWJfYWxsb2Nfbm9kZSgpLiBUaGVyZSBpcyBubyBjaGFuZ2UgdG8gdGhlIGZ1bmN0aW9uYWwgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cgdGhhdCB3YXJyYW50cyBkZWRpY2F0ZWQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NDYwMDFiY2Q3YjQ2M2VmNzI4NDEyY2M4MWQ1Mjk3MzljZTY5NjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTM6NDU6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCA5ZWM3NzRkYzcwMDk2OS4uOWY3NTRjZjFjMTg3NGMgMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsdWIuY1xuQEAgLTQ1MjYsMTEgJiM0Mzs0NTI2LDggQEAgc3RhdGljIHZvaWQgKl9fX3NsYWJfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSxcbiBcdHJldHVybiBvYmplY3Q7XG4gfVxuIFxuLXN0YXRpYyB2b2lkICpfX3NsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLFxuLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0ICphYylcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KGludCBub2RlKVxuIHtcbi1cdHZvaWQgKm9iamVjdDtcbi1cbiAjaWZkZWYgQ09ORklHX05VTUFcbiBcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnN0cmljdF9udW1hKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRub2RlID09IE5VTUFfTk9fTk9ERSkge1xuQEAgLTQ1NTEsMTAgJiM0Mzs0NTQ4LDcgQEAgc3RhdGljIHZvaWQgKl9fc2xhYl9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsXG4gXHRcdH1cbiBcdH1cbiAjZW5kaWZcbi1cbi1cdG9iamVjdCA9IF9fX3NsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIG5vZGUsIGFjKTtcbi1cbi1cdHJldHVybiBvYmplY3Q7XG4mIzQzO1x0cmV0dXJuIG5vZGU7XG4gfVxuIFxuIHN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxuQEAgLTQ3NTksMjggJiM0Mzs0NzUzLDYgQEAgdm9pZCAqYWxsb2NfZnJvbV9wY3Moc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLFxuIFx0Ym9vbCBub2RlX3JlcXVlc3RlZDtcbiBcdHZvaWQgKm9iamVjdDtcbiBcbi0jaWZkZWYgQ09ORklHX05VTUFcbi1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnN0cmljdF9udW1hKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgbm9kZSA9PSBOVU1BX05PX05PREUpIHtcbi1cbi1cdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCA9IGN1cnJlbnQtXHUwMDNlbWVtcG9saWN5O1xuLVxuLVx0XHRpZiAobXBvbCkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogU3BlY2lhbCBCSU5EIHJ1bGUgc3VwcG9ydC4gSWYgdGhlIGxvY2FsIG5vZGVcbi1cdFx0XHQgKiBpcyBpbiBwZXJtaXR0ZWQgc2V0IHRoZW4gZG8gbm90IHJlZGlyZWN0XG4tXHRcdFx0ICogdG8gYSBwYXJ0aWN1bGFyIG5vZGUuXG4tXHRcdFx0ICogT3RoZXJ3aXNlIHdlIGFwcGx5IHRoZSBtZW1vcnkgcG9saWN5IHRvIGdldFxuLVx0XHRcdCAqIHRoZSBub2RlIHdlIG5lZWQgdG8gYWxsb2NhdGUgb24uXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKG1wb2wtXHUwMDNlbW9kZSAhPSBNUE9MX0JJTkQgfHxcbi1cdFx0XHRcdFx0IW5vZGVfaXNzZXQobnVtYV9tZW1faWQoKSwgbXBvbC1cdTAwM2Vub2RlcykpXG4tXG4tXHRcdFx0XHRub2RlID0gbWVtcG9saWN5X3NsYWJfbm9kZSgpO1xuLVx0XHR9XG4tXHR9XG4tI2VuZGlmXG4tXG4gXHRub2RlX3JlcXVlc3RlZCA9IElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBub2RlICE9IE5VTUFfTk9fTk9ERTtcbiBcbiBcdC8qXG5AQCAtNDkzMCwxMCAmIzQzOzQ5MDIsMTIgQEAgc3RhdGljIF9fZmFzdHBhdGhfaW5saW5lIHZvaWQgKnNsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdGlmICh1bmxpa2VseShvYmplY3QpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRub2RlID0gYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KG5vZGUpO1xuJiM0MztcbiBcdG9iamVjdCA9IGFsbG9jX2Zyb21fcGNzKHMsIGdmcGZsYWdzLCBhYy1cdTAwM2VhbGxvY19mbGFncywgbm9kZSk7XG4gXG4gXHRpZiAodW5saWtlbHkoIW9iamVjdCkpXG4tXHRcdG9iamVjdCA9IF9fc2xhYl9hbGxvY19ub2RlKHMsIGdmcGZsYWdzLCBub2RlLCBhYyk7XG4mIzQzO1x0XHRvYmplY3QgPSBfX19zbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBub2RlLCBhYyk7XG4gXG4gXHRtYXliZV93aXBlX29ial9mcmVlcHRyKHMsIG9iamVjdCk7XG4gXG5AQCAtNTQxNiw2ICYjNDM7NTM5MCw4IEBAIHN0YXRpYyB2b2lkICpfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mXG4gXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1NNUCkgXHUwMDI2XHUwMDI2IGluX25taSgpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiYjNDM7XHRub2RlID0gYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KG5vZGUpO1xuJiM0MztcbiByZXRyeTpcbiBcdGlmICh1bmxpa2VseShzaXplIFx1MDAzZSBLTUFMTE9DX01BWF9DQUNIRV9TSVpFKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtNTQ0MCwxMCAmIzQzOzU0MTYsMTAgQEAgc3RhdGljIHZvaWQgKl9fa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZcbiBcdC8qXG4gXHQgKiBEbyBub3QgY2FsbCBzbGFiX2FsbG9jX25vZGUoKSwgc2luY2UgdHJ5bG9jayBtb2RlIGlzbiYjMzk7dFxuIFx0ICogY29tcGF0aWJsZSB3aXRoIHNsYWJfcHJlX2FsbG9jX2hvb2svc2hvdWxkX2ZhaWxzbGFiIGFuZFxuLVx0ICoga2ZlbmNlX2FsbG9jLiBIZW5jZSBjYWxsIF9fc2xhYl9hbGxvY19ub2RlKCkgKGF0IG1vc3QgdHdpY2UpXG4mIzQzO1x0ICoga2ZlbmNlX2FsbG9jLiBIZW5jZSBjYWxsIF9fX3NsYWJfYWxsb2MoKSAoYXQgbW9zdCB0d2ljZSlcbiBcdCAqIGFuZCBzbGFiX3Bvc3RfYWxsb2NfaG9vaygpIGRpcmVjdGx5LlxuIFx0ICovXG4tXHRyZXQgPSBfX3NsYWJfYWxsb2Nfbm9kZShzLCBnZnBfZmxhZ3MsIG5vZGUsIGFjKTtcbiYjNDM7XHRyZXQgPSBfX19zbGFiX2FsbG9jKHMsIGdmcF9mbGFncywgbm9kZSwgYWMpO1xuIFxuIFx0LypcbiBcdCAqIEl0JiMzOTtzIHBvc3NpYmxlIHdlIGZhaWxlZCBkdWUgdG8gdHJ5bG9jayBhcyB3ZSBwcmVlbXB0ZWQgc29tZW9uZSB3aXRoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIGFuZCBvcHRpbWl6YXRpb24gaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBJdCBleHRyYWN0cyB0aGUgc3RyaWN0IE5VTUEgcG9saWN5IGV2YWx1YXRpb24gaW50byBhIG5ldyBpbmxpbmUgZnVuY3Rpb24gYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KCkgYW5kIGNhbGxzIGl0IG9uY2UgaW4gdGhlIGFsbG9jYXRpb24gcGF0aHMgKHNsYWJfYWxsb2Nfbm9kZSBhbmQgX19rbWFsbG9jX25vbG9ja19ub3Byb2YpIGluc3RlYWQgb2YgcmVkdW5kYW50bHkgZXZhbHVhdGluZyBpdCBpbiBib3RoIGFsbG9jX2Zyb21fcGNzKCkgYW5kIF9fc2xhYl9hbGxvY19ub2RlKCkuIFRoZXJlIGlzIG5vIGNoYW5nZSB0byB0aGUgZnVuY3Rpb25hbCBsb2dpYyBvciBleGVjdXRpb24gZmxvdyB0aGF0IHdhcnJhbnRzIGRlZGljYXRlZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDQ2MDAxYmNkN2I0NjNlZjcyODQxMmNjODFkNTI5NzM5Y2U2OTY4ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDI2IDEzOjQ1OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IDllYzc3NGRjNzAwOTY5Li45Zjc1NGNmMWMxODc0YyAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsdWIuYwpAQCAtNDUyNiwxMSAmIzQzOzQ1MjYsOCBAQCBzdGF0aWMgdm9pZCAqX19fc2xhYl9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLAogCXJldHVybiBvYmplY3Q7CiB9CiAKLXN0YXRpYyB2b2lkICpfX3NsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKQomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFwcGx5X3N0cmljdF9udW1hX3BvbGljeShpbnQgbm9kZSkKIHsKLQl2b2lkICpvYmplY3Q7Ci0KICNpZmRlZiBDT05GSUdfTlVNQQogCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7c3RyaWN0X251bWEpICZhbXA7JmFtcDsKIAkJCW5vZGUgPT0gTlVNQV9OT19OT0RFKSB7CkBAIC00NTUxLDEwICYjNDM7NDU0OCw3IEBAIHN0YXRpYyB2b2lkICpfX3NsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLAogCQl9CiAJfQogI2VuZGlmCi0KLQlvYmplY3QgPSBfX19zbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBub2RlLCBhYyk7Ci0KLQlyZXR1cm4gb2JqZWN0OwomIzQzOwlyZXR1cm4gbm9kZTsKIH0KIAogc3RhdGljIF9fZmFzdHBhdGhfaW5saW5lCkBAIC00NzU5LDI4ICYjNDM7NDc1Myw2IEBAIHZvaWQgKmFsbG9jX2Zyb21fcGNzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywKIAlib29sIG5vZGVfcmVxdWVzdGVkOwogCXZvaWQgKm9iamVjdDsKIAotI2lmZGVmIENPTkZJR19OVU1BCi0JaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtzdHJpY3RfbnVtYSkgJmFtcDsmYW1wOwotCQkJIG5vZGUgPT0gTlVNQV9OT19OT0RFKSB7Ci0KLQkJc3RydWN0IG1lbXBvbGljeSAqbXBvbCA9IGN1cnJlbnQtJmd0O21lbXBvbGljeTsKLQotCQlpZiAobXBvbCkgewotCQkJLyoKLQkJCSAqIFNwZWNpYWwgQklORCBydWxlIHN1cHBvcnQuIElmIHRoZSBsb2NhbCBub2RlCi0JCQkgKiBpcyBpbiBwZXJtaXR0ZWQgc2V0IHRoZW4gZG8gbm90IHJlZGlyZWN0Ci0JCQkgKiB0byBhIHBhcnRpY3VsYXIgbm9kZS4KLQkJCSAqIE90aGVyd2lzZSB3ZSBhcHBseSB0aGUgbWVtb3J5IHBvbGljeSB0byBnZXQKLQkJCSAqIHRoZSBub2RlIHdlIG5lZWQgdG8gYWxsb2NhdGUgb24uCi0JCQkgKi8KLQkJCWlmIChtcG9sLSZndDttb2RlICE9IE1QT0xfQklORCB8fAotCQkJCQkhbm9kZV9pc3NldChudW1hX21lbV9pZCgpLCBtcG9sLSZndDtub2RlcykpCi0KLQkJCQlub2RlID0gbWVtcG9saWN5X3NsYWJfbm9kZSgpOwotCQl9Ci0JfQotI2VuZGlmCi0KIAlub2RlX3JlcXVlc3RlZCA9IElTX0VOQUJMRUQoQ09ORklHX05VTUEpICZhbXA7JmFtcDsgbm9kZSAhPSBOVU1BX05PX05PREU7CiAKIAkvKgpAQCAtNDkzMCwxMCAmIzQzOzQ5MDIsMTIgQEAgc3RhdGljIF9fZmFzdHBhdGhfaW5saW5lIHZvaWQgKnNsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAlpZiAodW5saWtlbHkob2JqZWN0KSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJbm9kZSA9IGFwcGx5X3N0cmljdF9udW1hX3BvbGljeShub2RlKTsKJiM0MzsKIAlvYmplY3QgPSBhbGxvY19mcm9tX3BjcyhzLCBnZnBmbGFncywgYWMtJmd0O2FsbG9jX2ZsYWdzLCBub2RlKTsKIAogCWlmICh1bmxpa2VseSghb2JqZWN0KSkKLQkJb2JqZWN0ID0gX19zbGFiX2FsbG9jX25vZGUocywgZ2ZwZmxhZ3MsIG5vZGUsIGFjKTsKJiM0MzsJCW9iamVjdCA9IF9fX3NsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIG5vZGUsIGFjKTsKIAogCW1heWJlX3dpcGVfb2JqX2ZyZWVwdHIocywgb2JqZWN0KTsKIApAQCAtNTQxNiw2ICYjNDM7NTM5MCw4IEBAIHN0YXRpYyB2b2lkICpfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mCiAJaWYgKCFJU19FTkFCTEVEKENPTkZJR19TTVApICZhbXA7JmFtcDsgaW5fbm1pKCkpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CW5vZGUgPSBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3kobm9kZSk7CiYjNDM7CiByZXRyeToKIAlpZiAodW5saWtlbHkoc2l6ZSAmZ3Q7IEtNQUxMT0NfTUFYX0NBQ0hFX1NJWkUpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTU0NDAsMTAgJiM0Mzs1NDE2LDEwIEBAIHN0YXRpYyB2b2lkICpfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mCiAJLyoKIAkgKiBEbyBub3QgY2FsbCBzbGFiX2FsbG9jX25vZGUoKSwgc2luY2UgdHJ5bG9jayBtb2RlIGlzbiYjMzk7dAogCSAqIGNvbXBhdGlibGUgd2l0aCBzbGFiX3ByZV9hbGxvY19ob29rL3Nob3VsZF9mYWlsc2xhYiBhbmQKLQkgKiBrZmVuY2VfYWxsb2MuIEhlbmNlIGNhbGwgX19zbGFiX2FsbG9jX25vZGUoKSAoYXQgbW9zdCB0d2ljZSkKJiM0MzsJICoga2ZlbmNlX2FsbG9jLiBIZW5jZSBjYWxsIF9fX3NsYWJfYWxsb2MoKSAoYXQgbW9zdCB0d2ljZSkKIAkgKiBhbmQgc2xhYl9wb3N0X2FsbG9jX2hvb2soKSBkaXJlY3RseS4KIAkgKi8KLQlyZXQgPSBfX3NsYWJfYWxsb2Nfbm9kZShzLCBnZnBfZmxhZ3MsIG5vZGUsIGFjKTsKJiM0MzsJcmV0ID0gX19fc2xhYl9hbGxvYyhzLCBnZnBfZmxhZ3MsIG5vZGUsIGFjKTsKIAogCS8qCiAJICogSXQmIzM5O3MgcG9zc2libGUgd2UgZmFpbGVkIGR1ZSB0byB0cnlsb2NrIGFzIHdlIHByZWVtcHRlZCBzb21lb25lIHdpdGgKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc5MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNMVUIgTlVNQSBQb2xpY3kgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCByZWZhY3RvcnMgdGhlIHN0cmljdCBOVU1BIHBvbGljeSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgY2hhbmdlLCBhaW1lZCBhdCBpbXByb3ZpbmcgY29kZSBvcmdhbml6YXRpb24gYW5kIHBvdGVudGlhbGx5IHJlZHVjaW5nIGR1cGxpY2F0aW9uLiBUaGUgcGF0Y2ggdGFyZ2V0cyBgbW0vc2x1Yi5jYCwgd2hpY2ggaXMgdGhlIGhlYXJ0IG9mIHRoZSBTTFVCIG1lbW9yeSBhbGxvY2F0b3IuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGFwcGx5X3N0cmljdF9udW1hX3BvbGljeShpbnQgbm9kZSlgLiBUaGlzIGZ1bmN0aW9uIGNlbnRyYWxpemVzIHRoZSBsb2dpYyBmb3IgZW5mb3JjaW5nIHN0cmljdCBOVU1BIHBvbGljaWVzLCBwcmV2aW91c2x5IHNjYXR0ZXJlZCB3aXRoaW4gYF9fc2xhYl9hbGxvY19ub2RlKClgIGFuZCBgYWxsb2NfZnJvbV9wY3MoKWAuIEl0IHRoZW4gcmVwbGFjZXMgY2FsbHMgdG8gYF9fc2xhYl9hbGxvY19ub2RlKClgIHdpdGggYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gYmVmb3JlIGNhbGxpbmcgYGFsbG9jX2Zyb21fcGNzKClgIGFuZCBhIHJlbmFtZWQgZnVuY3Rpb24gYF9fX3NsYWJfYWxsb2MoKWAuIFRoZSBwYXRjaCBhbHNvIGluamVjdHMgdGhpcyBmdW5jdGlvbiBpbnRvIHRoZSBgX19rbWFsbG9jX25vbG9ja19ub3Byb2YoKWAgcGF0aC4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIG5ldyBmdW5jdGlvbi4gWWVzLCBsb29rcyBsaWtlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBzbGFiX2FsbG9jX25vZGVgIGFuZCBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgLCBzbyB0aGUgY2hhbmdlIGlzIHVzZWQuIEkmIzM5O20gbm90aW5nIHRoYXQgdGhlIHBvbGljeSBpdHNlbGYgaXMgcHJvYmFibHkgZW5hYmxlZCB0aHJvdWdoIGBDT05GSUdfTlVNQWAsIHdoaWxlIGBDT05GSUdfU0xVQmAgaWRlbnRpZmllcyB0aGUgYWxsb2NhdG9yLgoKTm93LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHBvaW50cyBvZiBpbnRlZ3JhdGlvbi4gUXVpY2tseSBsb29raW5nIGluIGBtbS9zbHViLmNgIGZvciB0aG9zZSBmdW5jdGlvbnMsIEkmIzM5O20gcmVtaW5kaW5nIG15c2VsZiB0aGF0IGBzbGFiX2FsbG9jX25vZGVgIGlzIGEgZmFzdHBhdGggaW5saW5lIGZ1bmN0aW9uLCBhbmQgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBpcyBzdGF0aWMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgcmVhbCBwb2ludHMgb2YgaW50ZXJlc3QgZm9yIGFuYWx5c2lzIGFyZSB0aGUgKmNhbGxlcnMqIG9mIGBzbGFiX2FsbG9jX25vZGVgIGFuZCBwb3RlbnRpYWwgYWx0ZXJuYXRpdmUgZW50cnkgcG9pbnRzLiBMZXQmIzM5O3Mgc2VlLi4uIGJlY2F1c2Ugb2YgdGhlIGlubGluaW5nIGFuZCB0aGUgc3RhdGljIGRlc2lnbmF0aW9uIG9mIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAsIGl0IG1heSBiZSB0aGF0IHRoZSBmdW5jdGlvbiBjYWxscyBJJiMzOTttIGludGVyZXN0ZWQgaW4gYXJlIGBrbWVtX2NhY2hlX2FsbG9jX25vZGVgLCBga21hbGxvY19ub2RlYCBvciBwb3NzaWJseSBvdGhlciBmdW5jdGlvbnMgdGhhdCB1c2UgdGhvc2UuIE5vdyB0aGF0IGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGlzIGBfX2Fsd2F5c19pbmxpbmVgLCBpdCYjMzk7cyBub3QgYSBmdW5jdGlvbiBjYWxsIGFueW1vcmUsIGl0JiMzOTtzIGp1c3QgY29kZSBiZWluZyBpbnNlcnRlZCBpbnRvIHRoZSBjYWxsZXIuCgpJJiMzOTttIG5vdyBnb2luZyB0byBmb2N1cyBvbiB0aGUgY2FsbGVycyBvZiBgc2xhYl9hbGxvY19ub2RlYCB3aXRoaW4gYG1tL3NsdWIuY2AgdG8gc2VlIHRoZSBmdWxsIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbGFiX2FsbG9jX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTQ4MDM9dW5zaWduZWQgaW50IGFsbG9jX2Zyb21fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbi0tXG5tbS9zbHViLmMtNDg5MS0gKi9cbm1tL3NsdWIuYzo0ODkyOnN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZSB2b2lkICpzbGFiX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtNDg5My1cdFx0Z2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLCBjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0ICphYylcbi0tXG5tbS9zbHViLmM9NDkyND12b2lkICprbWVtX2NhY2hlX2FsbG9jX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MpXG4tLVxubW0vc2x1Yi5jLTQ5MzItXG5tbS9zbHViLmM6NDkzMzpcdHJldCA9IHNsYWJfYWxsb2Nfbm9kZShzLCBnZnBmbGFncywgTlVNQV9OT19OT0RFLCBcdTAwMjZhYyk7XG5tbS9zbHViLmMtNDkzNC1cbi0tXG5tbS9zbHViLmM9NDk0MT12b2lkICprbWVtX2NhY2hlX2FsbG9jX2xydV9ub3Byb2Yoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuLS1cbm1tL3NsdWIuYy00OTUxLVxubW0vc2x1Yi5jOjQ5NTI6XHRyZXQgPSBzbGFiX2FsbG9jX25vZGUocywgZ2ZwZmxhZ3MsIE5VTUFfTk9fTk9ERSwgXHUwMDI2YWMpO1xubW0vc2x1Yi5jLTQ5NTMtXG4tLVxubW0vc2x1Yi5jPTQ5ODI9dm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlKVxuLS1cbm1tL3NsdWIuYy00OTkwLVxubW0vc2x1Yi5jOjQ5OTE6XHRyZXQgPSBzbGFiX2FsbG9jX25vZGUocywgZ2ZwZmxhZ3MsIG5vZGUsIFx1MDAyNmFjKTtcbm1tL3NsdWIuYy00OTkyLVxuLS1cbm1tL3NsdWIuYz01MzE2PXZvaWQgKl9fZG9fa21hbGxvY19ub2RlKGttZW1fYnVja2V0cyAqYiwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxuLS1cbm1tL3NsdWIuYy01MzM0LVxubW0vc2x1Yi5jOjUzMzU6XHRyZXQgPSBzbGFiX2FsbG9jX25vZGUocywgZmxhZ3MsIG5vZGUsIGFjKTtcbm1tL3NsdWIuYy01MzM2LVx0cmV0ID0ga2FzYW5fa21hbGxvYyhzLCByZXQsIHNpemUsIGZsYWdzKTtcbi0tXG5tbS9zbHViLmM9NTM2Nj1zdGF0aWMgdm9pZCAqX19rbWFsbG9jX25vbG9ja19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBnZnBfZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTU0MTYtXHQvKlxubW0vc2x1Yi5jOjU0MTc6XHQgKiBEbyBub3QgY2FsbCBzbGFiX2FsbG9jX25vZGUoKSwgc2luY2UgdHJ5bG9jayBtb2RlIGlzbiYjMzk7dFxubW0vc2x1Yi5jLTU0MTgtXHQgKiBjb21wYXRpYmxlIHdpdGggc2xhYl9wcmVfYWxsb2NfaG9vay9zaG91bGRfZmFpbHNsYWIgYW5kXG4tLVxubW0vc2x1Yi5jPTU0Nzg9dm9pZCAqX19rbWFsbG9jX2NhY2hlX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIHNpemVfdCBzaXplKVxuLS1cbm1tL3NsdWIuYy01NDg2LVxubW0vc2x1Yi5jOjU0ODc6XHRyZXQgPSBzbGFiX2FsbG9jX25vZGUocywgZ2ZwZmxhZ3MsIE5VTUFfTk9fTk9ERSwgXHUwMDI2YWMpO1xubW0vc2x1Yi5jLTU0ODgtXG4tLVxubW0vc2x1Yi5jPTU0OTY9dm9pZCAqX19rbWFsbG9jX2NhY2hlX25vZGVfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncyxcbi0tXG5tbS9zbHViLmMtNTUwNS1cbm1tL3NsdWIuYzo1NTA2Olx0cmV0ID0gc2xhYl9hbGxvY19ub2RlKHMsIGdmcGZsYWdzLCBub2RlLCBcdTAwMjZhYyk7XG5tbS9zbHViLmMtNTUwNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzA1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgRGVlcCBpbnRvIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmbG93IGhlcmUsIHNwZWNpZmljYWxseSBmb3Igbm9uLXByb2ZpbGVkIGFsbG9jYXRpb25zLiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zOiBga21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZmAsIGBfX2RvX2ttYWxsb2Nfbm9kZWAsIGBfX2ttYWxsb2NfY2FjaGVfbm9kZV9ub3Byb2ZgLCBhbmQgdGhhdCBzdGF0aWMgZnVuY3Rpb24sIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAuIFRoZSBzdGF0aWMga2V5d29yZCBpcyBhIHJlZCBmbGFnLCB0aG91Z2guIEl0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQsIHNvIGl0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSByZWFsIHdvcmsgaGFwcGVucy4gSXQgYWxzbyBpbmRpY2F0ZXMgSSYjMzk7bGwgbmVlZCB0byBjaGFzZSBkb3duIGl0cyBjYWxsZXJzIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSB3aGF0IGNhbGxzIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAgYW5kIHVucmF2ZWwgdGhlIGNhbGxpbmcgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgaW50ZXJuYWxseSB0byBzZWUgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19rbWFsbG9jX25vbG9ja19ub3Byb2YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTUzNjQ9RVhQT1JUX1NZTUJPTChfX2ttYWxsb2Nfbm9wcm9mKTtcbm1tL3NsdWIuYy01MzY1LVxubW0vc2x1Yi5jOjUzNjY6c3RhdGljIHZvaWQgKl9fa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxubW0vc2x1Yi5jLTUzNjctXHRcdFx0XHQgICAgIGludCBub2RlLCBjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0ICphYylcbi0tXG5tbS9zbHViLmM9NTQ1MT12b2lkICpfa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSlcbi0tXG5tbS9zbHViLmMtNTQ1OC1cbm1tL3NsdWIuYzo1NDU5Olx0cmV0dXJuIF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKFBBU1NfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSxcbm1tL3NsdWIuYy01NDYwLVx0XHRcdFx0ICAgICAgIGdmcF9mbGFncywgbm9kZSwgXHUwMDI2YWMpO1xuLS1cbm1tL3NsdWIuYz01NTIwPXZvaWQgKl9fa21hbGxvY19mbGFnc19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNTUzMi1cdH0gZWxzZSB7XG5tbS9zbHViLmM6NTUzMzpcdFx0cmV0dXJuIF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKFBBU1NfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSxcbm1tL3NsdWIuYy01NTM0LVx0XHRcdFx0XHQgICAgICAgZmxhZ3MsIG5vZGUsIFx1MDAyNmFjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDA4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0xVQiBBbGxvY2F0b3IgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBTTFVCIGFsbG9jYXRvci4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGZ1bmN0aW9ucyBsaWtlIGBfa21hbGxvY19ub2xvY2tfbm9wcm9mYCBhbmQgYF9fa21hbGxvY19mbGFnc19ub3Byb2ZgIGFyZSBjYWxsaW5nIGl0LCB3aGljaCBzdWdnZXN0cyBpdCB0YXJnZXRzIHNvbWUgY29yZSBhbGxvY2F0aW9uIHBhdGhzLgoKVGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnIOKAkyBhIE5VTUEgcG9saWN5IG1vZGlmaWNhdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uIFRoZSBwYXRjaCBkZXNjcmlwdGlvbiBpbW1lZGlhdGVseSBzdGF0ZXMgdGhhdCB0aGlzIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiBgQ09ORklHX05VTUFgIGlzIGVuYWJsZWQsIGFuZCBnaXZlbiB0aGUgcmVtb3ZhbCBvZiBTTEFCIGFuZCBTTE9CLCBhbmQgdGhlIGZhY3QgdGhhdCBTTFVCIGlzIHRoZSBkZWZhdWx0LCBOVU1BIGlzIGxpa2VseSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZS4KCkZ1bmN0aW9uYWxseSwgdGhpcyBwYXRjaCBsb29rcyBzb2xpZC4gSXQmIzM5O3MgZm9jdXNlZCBvbiB0aGUgU0xVQiBhbGxvY2F0b3IgYW5kIHNlZW1zIHRvIGVuc3VyZSB0aGF0IHN0cmljdCBOVU1BIHBvbGljaWVzIGFyZSBhcHBsaWVkIGNvcnJlY3RseSBpbiBtb3JlIGxvY2F0aW9ucy4gVGhpcyBjb2RlIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LCB3aGljaCBpcyBhbHdheXMgbmljZSB0byBzZWUgaW4gdGhlc2UgbG93LWxldmVsIGFyZWFzLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgSSYjMzk7ZCBsaWtlIHRvIHF1aWNrbHkgbG9vayBhdCB0aGVzZSBzeW1ib2xzLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZToKKiAgIGBrbWVtX2NhY2hlX2FsbG9jX25vZGVfbm9wcm9mYAoqICAgYF9fZG9fa21hbGxvY19ub2RlYAoqICAgYF9fa21hbGxvY19jYWNoZV9ub2RlX25vcHJvZmAKKiAgIGBfa21hbGxvY19ub2xvY2tfbm9wcm9mYAoqICAgYF9fa21hbGxvY19mbGFnc19ub3Byb2ZgCgpPbmUgcXVpY2sgdGhpbmcgSSBzaG91bGQgY2hlY2sgaXMgd2hldGhlciBga21lbV9jYWNoZV9hbGxvY19ub2RlYCBpcyBhIG1hY3JvIG9yIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgZ29vZCBmaXJzdCB0aGluZyB0byBkbyBiZWZvcmUgSSBsb29rIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21lbV9jYWNoZV9hbGxvY19ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zbGFiLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zbGFiLmg9Mjg1PXN0cnVjdCBrbWVtX2NhY2hlX2FyZ3Mge1xuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTM2Mi1cdCAqIFRoZSBzaGVhdmVzIGRvIG5vdCBlbmZvcmNlIE5VTUEgcGxhY2VtZW50IG9mIG9iamVjdHMsIHNvIGFsbG9jYXRpb25zXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDozNjM6XHQgKiB2aWEga21lbV9jYWNoZV9hbGxvY19ub2RlKCkgd2l0aCBhIG5vZGUgc3BlY2lmaWVkIG90aGVyIHRoYW5cbmluY2x1ZGUvbGludXgvc2xhYi5oLTM2NC1cdCAqIE5VTUFfTk9fTk9ERSB3aWxsIGJ5cGFzcyB0aGVtLlxuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oPTg4OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga2ZyZWVfYnVsayhzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtODkzLVxuaW5jbHVkZS9saW51eC9zbGFiLmg6ODk0OnZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3Byb2Yoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuaW5jbHVkZS9saW51eC9zbGFiLmgtODk1LVx0XHRcdFx0ICAgaW50IG5vZGUpIF9fYXNzdW1lX3NsYWJfYWxpZ25tZW50IF9fbWFsbG9jO1xuaW5jbHVkZS9saW51eC9zbGFiLmg6ODk2OiNkZWZpbmUga21lbV9jYWNoZV9hbGxvY19ub2RlKC4uLilcdGFsbG9jX2hvb2tzKGttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9zbGFiLmgtODk3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiBjb2RlLiBUaGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSBzZWVtcyB0byBiZSBga21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZmAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgSSB0aGluay4gVGhlbiB0aGVyZSBpcyBgX19rbWFsbG9jX2NhY2hlX25vZGVfbm9wcm9mYCB3aGljaCwgYnkgdGhlIG5hbWluZyBjb252ZW50aW9uLCBsb29rcyBsaWtlIGFub3RoZXIgbGV2ZWwgZG93biB0aGUgY2FsbCBzdGFjay4gTGV0JiMzOTtzIG5vdCBmb3JnZXQgdGhlIGZ1bmN0aW9uIGBfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mYCBhcyBpdCBwbGF5cyBzb21lIHBhcnQgaW4gdGhlIHByb2Nlc3MuCgpOb3csIHdoZXJlIGRvIHRoZXkgYWxsIGxpbmsgdG9nZXRoZXI/IE15IGluc3RpbmN0cyB0ZWxsIG1lIHRvIGZvY3VzIG9uIGBfX2RvX2ttYWxsb2Nfbm9kZWAuIEl0IGhhcyB0byBiZSB3aGVyZSB0aGUgbWFpbiBsb2dpYyBpcyBleGVjdXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19kb19rbWFsbG9jX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTUzMTU9c3RhdGljIF9fYWx3YXlzX2lubGluZVxubW0vc2x1Yi5jOjUzMTY6dm9pZCAqX19kb19rbWFsbG9jX25vZGUoa21lbV9idWNrZXRzICpiLCBnZnBfdCBmbGFncywgaW50IG5vZGUsXG5tbS9zbHViLmMtNTMxNy1cdFx0XHRrbWFsbG9jX3Rva2VuX3QgdG9rZW4sIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKVxuLS1cbm1tL3NsdWIuYz01MzQwPXZvaWQgKl9fa21hbGxvY19ub2RlX25vcHJvZihERUNMX0tNQUxMT0NfUEFSQU1TKHNpemUsIGIsIHRva2VuKSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKVxuLS1cbm1tL3NsdWIuYy01MzQ3LVxubW0vc2x1Yi5jOjUzNDg6XHRyZXR1cm4gX19kb19rbWFsbG9jX25vZGUoUEFTU19CVUNLRVRfUEFSQU0oYiksIGZsYWdzLCBub2RlLFxubW0vc2x1Yi5jLTUzNDktXHRcdFx0XHQgUEFTU19UT0tFTl9QQVJBTSh0b2tlbiksIFx1MDAyNmFjKTtcbi0tXG5tbS9zbHViLmM9NTM1Mz12b2lkICpfX2ttYWxsb2Nfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZmxhZ3MpXG4tLVxubW0vc2x1Yi5jLTUzNjAtXG5tbS9zbHViLmM6NTM2MTpcdHJldHVybiBfX2RvX2ttYWxsb2Nfbm9kZShOVUxMLCBmbGFncywgIE5VTUFfTk9fTk9ERSxcbm1tL3NsdWIuYy01MzYyLVx0XHRcdFx0IFBBU1NfVE9LRU5fUEFSQU0odG9rZW4pLCBcdTAwMjZhYyk7XG4tLVxubW0vc2x1Yi5jPTU0NjQ9dm9pZCAqX19rbWFsbG9jX25vZGVfdHJhY2tfY2FsbGVyX25vcHJvZihERUNMX0tNQUxMT0NfUEFSQU1TKHNpemUsIGIsIHRva2VuKSwgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTU0NzItXG5tbS9zbHViLmM6NTQ3MzpcdHJldHVybiBfX2RvX2ttYWxsb2Nfbm9kZShQQVNTX0JVQ0tFVF9QQVJBTShiKSwgZmxhZ3MsIG5vZGUsXG5tbS9zbHViLmMtNTQ3NC1cdFx0XHRcdCBQQVNTX1RPS0VOX1BBUkFNKHRva2VuKSwgXHUwMDI2YWMpO1xuLS1cbm1tL3NsdWIuYz01NTIwPXZvaWQgKl9fa21hbGxvY19mbGFnc19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNTUyOS1cdGlmIChhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncykpIHtcbm1tL3NsdWIuYzo1NTMwOlx0XHRyZXR1cm4gX19kb19rbWFsbG9jX25vZGUoTlVMTCwgZmxhZ3MsIG5vZGUsXG5tbS9zbHViLmMtNTUzMS1cdFx0XHRcdFBBU1NfVE9LRU5fUEFSQU0odG9rZW4pLCBcdTAwMjZhYyk7XG4tLVxubW0vc2x1Yi5jPTY4OTQ9dm9pZCAqX19rdm1hbGxvY19ub2RlX25vcHJvZihERUNMX0tNQUxMT0NfUEFSQU1TKHNpemUsIGIsIHRva2VuKSwgdW5zaWduZWQgbG9uZyBhbGlnbixcbi0tXG5tbS9zbHViLmMtNjkwOC1cdCAqL1xubW0vc2x1Yi5jOjY5MDk6XHRyZXQgPSBfX2RvX2ttYWxsb2Nfbm9kZShQQVNTX0JVQ0tFVF9QQVJBTShiKSxcbm1tL3NsdWIuYy02OTEwLVx0XHRcdFx0a21hbGxvY19nZnBfYWRqdXN0KGZsYWdzLCBzaXplKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMyMwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDM0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBOVU1BIFBvbGljeSAmYW1wOyBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBgX19kb19rbWFsbG9jX25vZGVgIGlzIGlubGluZWQsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGNhbGxlZCAqYSBsb3QqLiBMb29raW5nIGF0IHRoZSBjYWxsZXJzLCBJIHNlZSBhIGJ1bmNoIG9mIGBfX2ttYWxsb2NfLi4uX25vcHJvZmAgZnVuY3Rpb25zOiBga21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZmAsIGBfX2ttYWxsb2Nfbm9kZV9ub3Byb2ZgLCBgX19rbWFsbG9jX25vZGVfdHJhY2tfY2FsbGVyX25vcHJvZmAsIGBfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mYCwgYF9fa3ZtYWxsb2Nfbm9kZV9ub3Byb2ZgLCBgX19rbWFsbG9jX2NhY2hlX25vZGVfbm9wcm9mYCwgYW5kIGBfa21hbGxvY19ub2xvY2tfbm9wcm9mYC4gUmlnaHQsIG1lbW9yeSBhbGxvY2F0aW9uLi4uIHRob3NlIGFyZSBhbGwgKnRleHRib29rKiBob3QgcGF0aHMuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHdhcm5zIGFnYWluc3QgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBUaGF0JiMzOTtzIGV4YWN0bHkgd2hhdCB0aGVzZSBmdW5jdGlvbnMgd291bGQgY2F1c2UhIFdlICpkb24mIzM5O3QqIHdhbnQgc3l6a2FsbGVyIHNwZW5kaW5nIGFsbCBpdHMgdGltZSBqdXN0IGhhbW1lcmluZyBtZW1vcnkgYWxsb2NhdGlvbi4gVGhhdCBkZWZlYXRzIHRoZSBwdXJwb3NlLgoKVGhlIHByb21wdCBpbmRpY2F0ZXMgYSBmb2N1cyBvbiBOVU1BIHBvbGljeS4gSG93IGRvIHdlIHRyaWdnZXIgdGhhdD8gQWgsIGBzZXRfbWVtcG9saWN5YCBhbmQgYG1iaW5kYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBBbmQgdGhlIHBhdGNoIGFkZHJlc3NlcyBgc3RyaWN0X251bWFgIHBvbGljeSBhcHBsaWNhdGlvbiAqaW4gU0xVQiouIGBzdHJpY3RfbnVtYWAgaXMgY29udHJvbGxlZCBieSBhIHN0YXRpYyBicmFuY2guIFNvLCB0aGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IHdoZXJlIGlzIHRoYXQgYHN0cmljdF9udW1hYCBicmFuY2ggYWN0dWFsbHkgZW5hYmxlZD8gV2UgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgcmVsYXRlZCB0byB0aGF0IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cmljdF9udW1hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0yMDg9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc2x1Yl9kZWJ1Z19lbmFibGVkKTtcbi0tXG5tbS9zbHViLmMtMjEyLSNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jOjIxMzpzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpO1xubW0vc2x1Yi5jLTIxNC0jZW5kaWZcbi0tXG5tbS9zbHViLmM9NDQ1Nj1zdGF0aWMgdm9pZCAqX19fc2xhYl9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLFxuLS1cbm1tL3NsdWIuYy00NTI4LVxubW0vc2x1Yi5jOjQ1Mjk6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KGludCBub2RlKVxubW0vc2x1Yi5jLTQ1MzAte1xubW0vc2x1Yi5jLTQ1MzEtI2lmZGVmIENPTkZJR19OVU1BXG5tbS9zbHViLmM6NDUzMjpcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnN0cmljdF9udW1hKSBcdTAwMjZcdTAwMjZcbm1tL3NsdWIuYy00NTMzLVx0XHRcdG5vZGUgPT0gTlVNQV9OT19OT0RFKSB7XG4tLVxubW0vc2x1Yi5jPTQ4OTI9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lIHZvaWQgKnNsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtNDkwNC1cbm1tL3NsdWIuYzo0OTA1Olx0bm9kZSA9IGFwcGx5X3N0cmljdF9udW1hX3BvbGljeShub2RlKTtcbm1tL3NsdWIuYy00OTA2LVxuLS1cbm1tL3NsdWIuYz01MzY2PXN0YXRpYyB2b2lkICpfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mbGFncyxcbi0tXG5tbS9zbHViLmMtNTM5Mi1cbm1tL3NsdWIuYzo1MzkzOlx0bm9kZSA9IGFwcGx5X3N0cmljdF9udW1hX3BvbGljeShub2RlKTtcbm1tL3NsdWIuYy01Mzk0LVxuLS1cbm1tL3NsdWIuYz04MTc1PWNvcmVfcGFyYW0oc2x1Yl9taW5fb2JqZWN0cywgc2x1Yl9taW5fb2JqZWN0cywgdWludCwgMCk7XG4tLVxubW0vc2x1Yi5jLTgxNzctI2lmZGVmIENPTkZJR19OVU1BXG5tbS9zbHViLmM6ODE3ODpzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9zbGFiX3N0cmljdF9udW1hKGNvbnN0IGNoYXIgKnN0ciwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG5tbS9zbHViLmMtODE3OS17XG5tbS9zbHViLmMtODE4MC1cdGlmIChucl9ub2RlX2lkcyBcdTAwM2UgMSkge1xubW0vc2x1Yi5jOjgxODE6XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNnN0cmljdF9udW1hKTtcbm1tL3NsdWIuYy04MTgyLVx0XHRwcl9pbmZvKFwmIzM0O1NMVUI6IFN0cmljdCBOVU1BIGVuYWJsZWQuXFxuXCYjMzQ7KTtcbm1tL3NsdWIuYy04MTgzLVx0fSBlbHNlIHtcbm1tL3NsdWIuYzo4MTg0Olx0XHRwcl93YXJuKFwmIzM0O3NsYWJfc3RyaWN0X251bWEgcGFyYW1ldGVyIHNldCBvbiBub24gTlVNQSBzeXN0ZW0uXFxuXCYjMzQ7KTtcbm1tL3NsdWIuYy04MTg1LVx0fVxuLS1cbm1tL3NsdWIuYy04MTg5LVxubW0vc2x1Yi5jOjgxOTA6c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHBhcmFtX29wc19zbGFiX3N0cmljdF9udW1hIF9faW5pdGNvbnN0ID0ge1xubW0vc2x1Yi5jLTgxOTEtXHQuZmxhZ3MgPSBLRVJORUxfUEFSQU1fT1BTX0ZMX05PQVJHLFxubW0vc2x1Yi5jOjgxOTI6XHQuc2V0ID0gc2V0dXBfc2xhYl9zdHJpY3RfbnVtYSxcbm1tL3NsdWIuYy04MTkzLX07XG5tbS9zbHViLmM6ODE5NDpfX2NvcmVfcGFyYW1fY2Ioc2xhYl9zdHJpY3RfbnVtYSwgXHUwMDI2cGFyYW1fb3BzX3NsYWJfc3RyaWN0X251bWEsIE5VTEwsIDApO1xubW0vc2x1Yi5jLTgxOTUtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHNsYWJfc3RyaWN0X251bWFgIEtlcm5lbCBQYXJhbWV0ZXIgYW5kIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBgc2xhYl9zdHJpY3RfbnVtYWAgaXMgYSBrZXJuZWwgcGFyYW1ldGVyLCBlbmFibGVkIHZpYSB0aGUgYm9vdCBwYXJhbWV0ZXIgYHNsYWJfc3RyaWN0X251bWFgLiBJZiBpdCYjMzk7cyBub3QgZW5hYmxlZCwgYHN0cmljdF9udW1hYCBpcyBmYWxzZSwgYW5kIHRoZSBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBmdW5jdGlvbiBpcyBuZXZlciBleGVjdXRlZC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgc3l6a2FsbGVyOyBpdCBtaWdodCBub3QgcGFzcyB0aGlzIHBhcmFtZXRlciBieSBkZWZhdWx0LCBhbmQgd2UgY2FuJiMzOTt0IGRpcmVjdGx5IHRlbGwgaXQgdG8gcGFzcyBrZXJuZWwgcGFyYW1ldGVycywgb25seSBlbmFibGUgY29uZmlndXJhdGlvbnMuCgpMb29raW5nIGF0IGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgLCBpdCYjMzk7cyBjbGVhciB0aGF0IGl0IG9ubHkgZG9lcyBhbnl0aGluZyBpZiBgc3RyaWN0X251bWFgIGlzIHRydWUgYW5kIHRoZSBub2RlIGlzIGBOVU1BX05PX05PREVgLiBUaGUgY29kZSB1c2VzIGBzdGF0aWNfYnJhbmNoX3VubGlrZWx5YCwgc28gaWYgYHN0cmljdF9udW1hYCBpcyBmYWxzZSwgdGhlIGVudGlyZSBibG9jayBpcyBvcHRpbWl6ZWQgYXdheS4gQW5kIGl0JiMzOTtzIHNldCB3aXRoIGBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzdHJpY3RfbnVtYSlgLCBtZWFuaW5nIGl0JiMzOTtzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFNvLCB1bmxlc3MgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgaGFzIGBzbGFiX3N0cmljdF9udW1hYCwgdGhlIGNvZGUgaW5zaWRlIHRoZSBgaWZgIHN0YXRlbWVudCBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4KClRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgbW92ZXMgdGhpcyBsb2dpYyBpbnRvIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGFuZCBjYWxscyBpdCBmcm9tIGBzbGFiX2FsbG9jX25vZGVgIGFuZCBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBhbGxvY19mcm9tX3Bjc2AgYW5kIGBfX3NsYWJfYWxsb2Nfbm9kZWAuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBOVU1BIGNoZWNrIHdhcyBpbiBgX19zbGFiX2FsbG9jX25vZGVgLCBidXQgbm93IGBfX3NsYWJfYWxsb2Nfbm9kZWAgaXMgcmVtb3ZlZCBhbmQgcmVwbGFjZWQgYnkgYGFwcGx5X3N0cmljdF9udW1hX3BvbGljeWAgcGx1cyBgX19fc2xhYl9hbGxvY2AuCgpOb3csIHRoZSBjb3JlIHF1ZXN0aW9uOiB3aGF0JiMzOTtzIHRoZSBmdW5jdGlvbmFsIGltcGFjdCBpZiBgc3RyaWN0X251bWFgIGlzIGZhbHNlPyBMb29raW5nIGF0IHRoZSBvbGQgYW5kIG5ldyBjb2RlLCB0aGUgcGF0Y2ggZWZmZWN0aXZlbHkganVzdCBmYWN0b3JlZCBvdXQgdGhlIGBzdHJpY3RfbnVtYWAgY2hlY2sgaW50byBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBhbmQgY2FsbHMgaXQgb25jZSBiZWZvcmUgYGFsbG9jX2Zyb21fcGNzYCBhbmQgYF9fX3NsYWJfYWxsb2NgLiBJdCBhbHNvIGFkZHMgYG5vZGUgPSBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3kobm9kZSk7YCB0byBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgLiBJZiBgc3RyaWN0X251bWFgIGlzIGZhbHNlLCBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBpcyBhIG5vLW9wLiBDb21wYXJpbmcgdGhlIG9sZCBhbmQgdGhlIG5ldyB2ZXJzaW9ucyBvZiBgX19zbGFiX2FsbG9jX25vZGVgLCBpdCBvbmx5IGNhbGxlZCBgX19fc2xhYl9hbGxvY2AgaWYgYHN0cmljdF9udW1hYCB3YXMgZmFsc2UuCgpUaGVyZWZvcmUsIGlmIGBzdHJpY3RfbnVtYWAgaXMgZmFsc2UsIHRoaXMgaXMgYSBwdXJlIHJlZmFjdG9yaW5nLiBUaGUgbG9naWMgaXMgaWRlbnRpY2FsOyB0aGUgcGF0Y2ggc2ltcGx5IHJlcGxhY2VzIGEgd3JhcHBlciBmdW5jdGlvbiAoYF9fc2xhYl9hbGxvY19ub2RlYCkgd2l0aCBhIGRpcmVjdCBjYWxsIHRvIHRoZSBjb3JlIGFsbG9jYXRpb24gZnVuY3Rpb24gKGBfX19zbGFiX2FsbG9jYCkuCgpMZXQmIzM5O3MgY2hlY2sgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBiZWNhdXNlIHRoZSBwYXRjaCBjaGFuZ2VkIHRoZSBjYWxsLiBJZiBgc3RyaWN0X251bWFgIGlzIGZhbHNlLCBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBkb2VzIG5vdGhpbmcuIEJlZm9yZSBpdCBjYWxsZWQgYF9fc2xhYl9hbGxvY19ub2RlYCBhbmQgbm93IGl0IGNhbGxzIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGFuZCB0aGVuIGBfX19zbGFiX2FsbG9jYCwgYnV0IGlmIHRoZSBzdHJpY3QgTlVNQSBpc24mIzM5O3QgYWN0aXZlLCB0aGVuIHRoaXMgZG9lcyBub3QgY2hhbmdlIGFueXRoaW5nLgoKKipJbiBzdW1tYXJ5OiBpZiBgc3RyaWN0X251bWFgIGlzIGZhbHNlLCB0aGVyZSBpcyBhYnNvbHV0ZWx5ICp6ZXJvKiBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MganVzdCBhIHJlZmFjdG9yaW5nLioqIEFueSBmdW5jdGlvbmFsIGNoYW5nZSBoYXBwZW5zIHdoZW4gc3RyaWN0IE5VTUEgaXMgdHJ1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19rbWFsbG9jX25vbG9ja19ub3Byb2YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTUzNjQ9RVhQT1JUX1NZTUJPTChfX2ttYWxsb2Nfbm9wcm9mKTtcbm1tL3NsdWIuYy01MzY1LVxubW0vc2x1Yi5jOjUzNjY6c3RhdGljIHZvaWQgKl9fa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxubW0vc2x1Yi5jLTUzNjctXHRcdFx0XHQgICAgIGludCBub2RlLCBjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0ICphYylcbi0tXG5tbS9zbHViLmM9NTQ1MT12b2lkICpfa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSlcbi0tXG5tbS9zbHViLmMtNTQ1OC1cbm1tL3NsdWIuYzo1NDU5Olx0cmV0dXJuIF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKFBBU1NfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSxcbm1tL3NsdWIuYy01NDYwLVx0XHRcdFx0ICAgICAgIGdmcF9mbGFncywgbm9kZSwgXHUwMDI2YWMpO1xuLS1cbm1tL3NsdWIuYz01NTIwPXZvaWQgKl9fa21hbGxvY19mbGFnc19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNTUzMi1cdH0gZWxzZSB7XG5tbS9zbHViLmM6NTUzMzpcdFx0cmV0dXJuIF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKFBBU1NfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSxcbm1tL3NsdWIuYy01NTM0LVx0XHRcdFx0XHQgICAgICAgZmxhZ3MsIG5vZGUsIFx1MDAyNmFjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1OTUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGlzc2VjdGluZyBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgIEJlZm9yZSBhIFBhdGNoKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAgYmVmb3JlIHdlIGV2ZW4gKnRoaW5rKiBhYm91dCB0aGF0IHBhdGNoLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmUtcGF0Y2ggc3RhdGUuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWw7IGl0JiMzOTtzIHRoZSBjb3JlIG9mIGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiB3aXRob3V0IGxvY2sgY29udGVudGlvbiBhbmQgd2l0aG91dCB0aGUgcGVyZm9ybWFuY2UgcHJvZmlsaW5nIG92ZXJoZWFkLiBTbywgSSBuZWVkIGEgcm9jay1zb2xpZCBncmFzcCBvZiBob3cgaXQgKmN1cnJlbnRseSogb3BlcmF0ZXMuIFRoaXMgbWVhbnMgbG9va2luZyBhdCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBzbGFiIGFsbG9jYXRvciwgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBhbnkgcmVsYXRlZCBjYWNoaW5nIG1lY2hhbmlzbXMuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGl0IHJlbGllcyBvbj8gSG93IGRvZXMgaXQgaGFuZGxlIGFsbG9jYXRpb24gZmFpbHVyZXM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbnRlbnRpb24gZXZlbiAqd2l0aG91dCogZXhwbGljaXQgbG9ja3MsIHBlcmhhcHMgcmVsYXRlZCB0byBhdG9taWMgb3BlcmF0aW9ucyBvciBjYWNoZSBsaW5lIGJvdW5jaW5nPyBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IGFzc3VtcHRpb25zIHRoZSBjb2RlIG1ha2VzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFRob3JvdWdobHkgcmV2aWV3aW5nIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAgbm93IGlzIHRoZSBrZXkuIFRoZSBkZXZpbCYjMzk7cyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIGFuZCB0aGlzIGtpbmQgb2Ygc2NydXRpbnkgaXMgd2hhdCBlbnN1cmVzIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3Igc3VidGxlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBPa2F5LCBsZXQmIzM5O3MgZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zbGFiX2FsbG9jX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkzMwoJCQkJCQkJb3V0cHV0OiAxMzMKCQkJCQkJCXRob3VnaHRzOiAyMjY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIGFuZCBPcHRpbWl6YXRpb24gb2YgU0xVQiBOVU1BIFBvbGljeSBBcHBsaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaGFzIGJlZW4gYXBwbGllZCwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQuIEhtbSwgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGNoYW5nZSBpcyB0aGF0IHRoZSBzdHJpY3QgTlVNQSBwb2xpY3kgYXBwbGljYXRpb24gaXMgYmVpbmcgbW92ZWQgYXJvdW5kIGluIHRoZSBTTFVCIGFsbG9jYXRvciBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBsb2dpYyBpcyBub3cgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAgYW5kIGBzbGFiX2FsbG9jX25vZGVgIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIGJlaW5nIHBlcmZvcm1lZCBpbnNpZGUgdGhlIGBfX3NsYWJfYWxsb2Nfbm9kZWAgYW5kIGBhbGxvY19mcm9tX3Bjc2AgZnVuY3Rpb25zLgoKQmVmb3JlIHRoZSBwYXRjaCwgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBjYWxsZWQgYF9fc2xhYl9hbGxvY19ub2RlYCwgd2hpY2ggd291bGQgYXBwbHkgdGhlIHN0cmljdCBOVU1BIHBvbGljeSBhbmQgdGhlbiBjYWxsIGBfX19zbGFiX2FsbG9jYC4gTm93LCBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgIGNhbGxzIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGZpcnN0LCBhbmQgdGhlbiBjYWxscyBgX19fc2xhYl9hbGxvY2AgZGlyZWN0bHkuIFRoZXJlJiMzOTtzIGEgYHJldHJ5YCBsYWJlbCBpbiBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgIHdoaWNoLCBpZiBpdCB3YXMgaGl0LCBjYXVzZWQgdGhlIGNvZGUgdG8gYXBwbHkgdGhlIHBvbGljeSBhZ2Fpbi4gTm93IGl0IG9ubHkgYXBwbGllcyBvbmNlIGJlZm9yZSB0aGUgYHJldHJ5YCBsYWJlbCwgYXMgaW50ZW5kZWQuCgpBbHNvLCBgc2xhYl9hbGxvY19ub2RlYCBvcmlnaW5hbGx5IGNhbGxlZCBgYWxsb2NfZnJvbV9wY3NgLCB3aGljaCBtaWdodCBoYXZlIGFwcGxpZWQgdGhlIHN0cmljdCBOVU1BIHBvbGljeSwgYW5kIGlmIHRoYXQgZmFpbGVkLCBpdCB3b3VsZCBjYWxsIGBfX3NsYWJfYWxsb2Nfbm9kZWAsIHdoaWNoICphbHNvKiBhcHBsaWVkIHRoZSBzdHJpY3QgTlVNQSBwb2xpY3kuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhlIGBub2RlYCBwYXJhbWV0ZXIsIHdoaWNoIGBhbGxvY19mcm9tX3Bjc2AgbWlnaHQgY2hhbmdlIGludGVybmFsbHkgd2hlbiBhcHBseWluZyB0aGUgc3RyaWN0IE5VTUEgcG9saWN5LCBidXQgdGhpcyBtb2RpZmllZCB2YWx1ZSB3YXMgKm5vdCogcGFzc2VkIGJhY2sgdG8gYHNsYWJfYWxsb2Nfbm9kZWAgc28gYF9fc2xhYl9hbGxvY19ub2RlYCB3b3VsZCByZXBlYXQgdGhlIG1lbXBvbGljeSBldmFsdWF0aW9uLgoKVGhpcyBwYXRjaCByZWZhY3RvcnMgdGhhdDogYHNsYWJfYWxsb2Nfbm9kZWAgbm93IGNhbGxzIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgICpmaXJzdCosIGFuZCAqdGhlbiogdGhlIGBub2RlYCB2YXJpYWJsZSB0aGF0IGlzIHBhc3NlZCB0byBgYWxsb2NfZnJvbV9wY3NgIGFuZCBgX19fc2xhYl9hbGxvY2AgaXMgdGhlIHVwZGF0ZWQgdmFsdWUsIGJhc2VkIG9uIHRoZSBzdHJpY3QgTlVNQSBwb2xpY3kuCgpTbywgdGhlIGVmZmVjdCBvZiB0aGUgcGF0Y2ggaXMganVzdCB0byBwZXJmb3JtIHRoZSBzYW1lIE5VTUEgcG9saWN5IGxvb2t1cCBvbmx5ICpvbmNlKiwgYXZvaWRpbmcgcmVkdW5kYW50IGNvbXB1dGF0aW9ucy4gQmVjYXVzZSBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBpcyBkZXRlcm1pbmlzdGljIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1lbXBvbGljeSwgdGhpcyBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC4gVGhlIHBhdGNoIHNpbXBseSBlbGltaW5hdGVzIHRoZSBkdXBsaWNhdGVkIGFwcGxpY2F0aW9uIG9mIHRoZSBOVU1BIHBvbGljeSBjaGVjay4KClRoZSBwYXRjaCBpdHNlbGYganVzdCBtb3ZlcyB0aGUgY2hlY2sgdG8gb3B0aW1pemUuCgpUaGlzIGFwcGVhcnMgdG8gYmUgYSBwdXJlIHJlZmFjdG9yaW5nIGFuZCBvcHRpbWl6YXRpb24uIEl0IGRvZXNuJiMzOTt0IG1vZGlmeSB0aGUgZnVuY3Rpb25hbCBiZWhhdmlvciBvZiB0aGUgYWxsb2NhdGlvbiBwYXRocywganVzdCBtYWtlcyBpdCBhIGxpdHRsZSBmYXN0ZXIgYnkgYXZvaWRpbmcgcmVkdW5kYW50IGNoZWNrcyBhbmQgcG9saWN5IGFwcGxpY2F0aW9uLCB3aGljaCBtZWFucyB0aGF0IHRoZSBleGVjdXRpb24gZmxvdyAqc2hvdWxkbiYjMzk7dCogY2hhbmdlIGluIGFueSB3YXkgdGhhdCB3b3VsZCByZXF1aXJlIG5ldyBmdXp6aW5nLiBUaGUgY29tbWl0IG1lc3NhZ2UgcHJvYmFibHkgc2F5cyBzb21ldGhpbmcgbGlrZSAmIzM0O2RlZHVwbGljYXRlIHN0cmljdF9udW1hIHBvbGljeSBhcHBsaWNhdGlvbiYjMzQ7LgoKR2l2ZW4gdGhpcywgSSB3b3VsZCBjb25jbHVkZSB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLiBJdCYjMzk7cyBhIHJlZmFjdG9yaW5nLCBub3QgYSBmdW5jdGlvbmFsIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgYW5kIG9wdGltaXphdGlvbiBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGV4dHJhY3RzIHRoZSBzdHJpY3QgTlVNQSBwb2xpY3kgZXZhbHVhdGlvbiBpbnRvIGEgbmV3IGlubGluZSBmdW5jdGlvbiBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3koKSBhbmQgY2FsbHMgaXQgb25jZSBpbiB0aGUgYWxsb2NhdGlvbiBwYXRocyAoc2xhYl9hbGxvY19ub2RlIGFuZCBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZikgaW5zdGVhZCBvZiByZWR1bmRhbnRseSBldmFsdWF0aW5nIGl0IGluIGJvdGggYWxsb2NfZnJvbV9wY3MoKSBhbmQgX19zbGFiX2FsbG9jX25vZGUoKS4gVGhlcmUgaXMgbm8gY2hhbmdlIHRvIHRoZSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IHRoYXQgd2FycmFudHMgZGVkaWNhdGVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgYW5kIG9wdGltaXphdGlvbiBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGV4dHJhY3RzIHRoZSBzdHJpY3QgTlVNQSBwb2xpY3kgZXZhbHVhdGlvbiBpbnRvIGEgbmV3IGlubGluZSBmdW5jdGlvbiBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3koKSBhbmQgY2FsbHMgaXQgb25jZSBpbiB0aGUgYWxsb2NhdGlvbiBwYXRocyAoc2xhYl9hbGxvY19ub2RlIGFuZCBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZikgaW5zdGVhZCBvZiByZWR1bmRhbnRseSBldmFsdWF0aW5nIGl0IGluIGJvdGggYWxsb2NfZnJvbV9wY3MoKSBhbmQgX19zbGFiX2FsbG9jX25vZGUoKS4gVGhlcmUgaXMgbm8gY2hhbmdlIHRvIHRoZSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IHRoYXQgd2FycmFudHMgZGVkaWNhdGVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTM6NDU6MjIuNTQyNzA3Nzg0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEyNzI5MzAyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgb3B0aW1pemF0aW9uIGluIHRoZSBTTFVCIGFsbG9jYXRvci4gSXQgZXh0cmFjdHMgdGhlIHN0cmljdCBOVU1BIHBvbGljeSBldmFsdWF0aW9uIGludG8gYSBuZXcgaW5saW5lIGZ1bmN0aW9uIGFwcGx5X3N0cmljdF9udW1hX3BvbGljeSgpIGFuZCBjYWxscyBpdCBvbmNlIGluIHRoZSBhbGxvY2F0aW9uIHBhdGhzIChzbGFiX2FsbG9jX25vZGUgYW5kIF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKSBpbnN0ZWFkIG9mIHJlZHVuZGFudGx5IGV2YWx1YXRpbmcgaXQgaW4gYm90aCBhbGxvY19mcm9tX3BjcygpIGFuZCBfX3NsYWJfYWxsb2Nfbm9kZSgpLiBUaGVyZSBpcyBubyBjaGFuZ2UgdG8gdGhlIGZ1bmN0aW9uYWwgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cgdGhhdCB3YXJyYW50cyBkZWRpY2F0ZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEzOjQ1OjIyLjU0MjcxMzI5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4NDIwNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDQ2MDAxYmNkN2I0NjNlZjcyODQxMmNjODFkNTI5NzM5Y2U2OTY4ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1biAyNiAxMzo0NToyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcXG5pbmRleCA5ZWM3NzRkYzcwMDk2OS4uOWY3NTRjZjFjMTg3NGMgMTAwNjQ0XFxuLS0tIGEvbW0vc2x1Yi5jXFxuKysrIGIvbW0vc2x1Yi5jXFxuQEAgLTQ1MjYsMTEgKzQ1MjYsOCBAQCBzdGF0aWMgdm9pZCAqX19fc2xhYl9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLFxcbiBcXHRyZXR1cm4gb2JqZWN0O1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCAqX19zbGFiX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSxcXG4tXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKVxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3koaW50IG5vZGUpXFxuIHtcXG4tXFx0dm9pZCAqb2JqZWN0O1xcbi1cXG4gI2lmZGVmIENPTkZJR19OVU1BXFxuIFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZzdHJpY3RfbnVtYSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0bm9kZSA9PSBOVU1BX05PX05PREUpIHtcXG5AQCAtNDU1MSwxMCArNDU0OCw3IEBAIHN0YXRpYyB2b2lkICpfX3NsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gI2VuZGlmXFxuLVxcbi1cXHRvYmplY3QgPSBfX19zbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBub2RlLCBhYyk7XFxuLVxcbi1cXHRyZXR1cm4gb2JqZWN0O1xcbitcXHRyZXR1cm4gbm9kZTtcXG4gfVxcbiBcXG4gc3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxuQEAgLTQ3NTksMjggKzQ3NTMsNiBAQCB2b2lkICphbGxvY19mcm9tX3BjcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsXFxuIFxcdGJvb2wgbm9kZV9yZXF1ZXN0ZWQ7XFxuIFxcdHZvaWQgKm9iamVjdDtcXG4gXFxuLSNpZmRlZiBDT05GSUdfTlVNQVxcbi1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2c3RyaWN0X251bWEpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCBub2RlID09IE5VTUFfTk9fTk9ERSkge1xcbi1cXG4tXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCA9IGN1cnJlbnQtXFx1MDAzZW1lbXBvbGljeTtcXG4tXFxuLVxcdFxcdGlmIChtcG9sKSB7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFNwZWNpYWwgQklORCBydWxlIHN1cHBvcnQuIElmIHRoZSBsb2NhbCBub2RlXFxuLVxcdFxcdFxcdCAqIGlzIGluIHBlcm1pdHRlZCBzZXQgdGhlbiBkbyBub3QgcmVkaXJlY3RcXG4tXFx0XFx0XFx0ICogdG8gYSBwYXJ0aWN1bGFyIG5vZGUuXFxuLVxcdFxcdFxcdCAqIE90aGVyd2lzZSB3ZSBhcHBseSB0aGUgbWVtb3J5IHBvbGljeSB0byBnZXRcXG4tXFx0XFx0XFx0ICogdGhlIG5vZGUgd2UgbmVlZCB0byBhbGxvY2F0ZSBvbi5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlmIChtcG9sLVxcdTAwM2Vtb2RlICE9IE1QT0xfQklORCB8fFxcbi1cXHRcXHRcXHRcXHRcXHQhbm9kZV9pc3NldChudW1hX21lbV9pZCgpLCBtcG9sLVxcdTAwM2Vub2RlcykpXFxuLVxcbi1cXHRcXHRcXHRcXHRub2RlID0gbWVtcG9saWN5X3NsYWJfbm9kZSgpO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tI2VuZGlmXFxuLVxcbiBcXHRub2RlX3JlcXVlc3RlZCA9IElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5vZGUgIT0gTlVNQV9OT19OT0RFO1xcbiBcXG4gXFx0LypcXG5AQCAtNDkzMCwxMCArNDkwMiwxMiBAQCBzdGF0aWMgX19mYXN0cGF0aF9pbmxpbmUgdm9pZCAqc2xhYl9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbiBcXHRpZiAodW5saWtlbHkob2JqZWN0KSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHRub2RlID0gYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KG5vZGUpO1xcbitcXG4gXFx0b2JqZWN0ID0gYWxsb2NfZnJvbV9wY3MocywgZ2ZwZmxhZ3MsIGFjLVxcdTAwM2VhbGxvY19mbGFncywgbm9kZSk7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIW9iamVjdCkpXFxuLVxcdFxcdG9iamVjdCA9IF9fc2xhYl9hbGxvY19ub2RlKHMsIGdmcGZsYWdzLCBub2RlLCBhYyk7XFxuK1xcdFxcdG9iamVjdCA9IF9fX3NsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIG5vZGUsIGFjKTtcXG4gXFxuIFxcdG1heWJlX3dpcGVfb2JqX2ZyZWVwdHIocywgb2JqZWN0KTtcXG4gXFxuQEAgLTU0MTYsNiArNTM5MCw4IEBAIHN0YXRpYyB2b2lkICpfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mXFxuIFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfU01QKSBcXHUwMDI2XFx1MDAyNiBpbl9ubWkoKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbitcXHRub2RlID0gYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KG5vZGUpO1xcbitcXG4gcmV0cnk6XFxuIFxcdGlmICh1bmxpa2VseShzaXplIFxcdTAwM2UgS01BTExPQ19NQVhfQ0FDSEVfU0laRSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbkBAIC01NDQwLDEwICs1NDE2LDEwIEBAIHN0YXRpYyB2b2lkICpfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mXFxuIFxcdC8qXFxuIFxcdCAqIERvIG5vdCBjYWxsIHNsYWJfYWxsb2Nfbm9kZSgpLCBzaW5jZSB0cnlsb2NrIG1vZGUgaXNuJ3RcXG4gXFx0ICogY29tcGF0aWJsZSB3aXRoIHNsYWJfcHJlX2FsbG9jX2hvb2svc2hvdWxkX2ZhaWxzbGFiIGFuZFxcbi1cXHQgKiBrZmVuY2VfYWxsb2MuIEhlbmNlIGNhbGwgX19zbGFiX2FsbG9jX25vZGUoKSAoYXQgbW9zdCB0d2ljZSlcXG4rXFx0ICoga2ZlbmNlX2FsbG9jLiBIZW5jZSBjYWxsIF9fX3NsYWJfYWxsb2MoKSAoYXQgbW9zdCB0d2ljZSlcXG4gXFx0ICogYW5kIHNsYWJfcG9zdF9hbGxvY19ob29rKCkgZGlyZWN0bHkuXFxuIFxcdCAqL1xcbi1cXHRyZXQgPSBfX3NsYWJfYWxsb2Nfbm9kZShzLCBnZnBfZmxhZ3MsIG5vZGUsIGFjKTtcXG4rXFx0cmV0ID0gX19fc2xhYl9hbGxvYyhzLCBnZnBfZmxhZ3MsIG5vZGUsIGFjKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEl0J3MgcG9zc2libGUgd2UgZmFpbGVkIGR1ZSB0byB0cnlsb2NrIGFzIHdlIHByZWVtcHRlZCBzb21lb25lIHdpdGhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTM6NDU6MjIuOTgxOTMxMTYzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDgzMzY5ODEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIGFuZCBvcHRpbWl6YXRpb24gaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBJdCBleHRyYWN0cyB0aGUgc3RyaWN0IE5VTUEgcG9saWN5IGV2YWx1YXRpb24gaW50byBhIG5ldyBpbmxpbmUgZnVuY3Rpb24gYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KCkgYW5kIGNhbGxzIGl0IG9uY2UgaW4gdGhlIGFsbG9jYXRpb24gcGF0aHMgKHNsYWJfYWxsb2Nfbm9kZSBhbmQgX19rbWFsbG9jX25vbG9ja19ub3Byb2YpIGluc3RlYWQgb2YgcmVkdW5kYW50bHkgZXZhbHVhdGluZyBpdCBpbiBib3RoIGFsbG9jX2Zyb21fcGNzKCkgYW5kIF9fc2xhYl9hbGxvY19ub2RlKCkuIFRoZXJlIGlzIG5vIGNoYW5nZSB0byB0aGUgZnVuY3Rpb25hbCBsb2dpYyBvciBleGVjdXRpb24gZmxvdyB0aGF0IHdhcnJhbnRzIGRlZGljYXRlZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NDYwMDFiY2Q3YjQ2M2VmNzI4NDEyY2M4MWQ1Mjk3MzljZTY5NjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTM6NDU6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcbmluZGV4IDllYzc3NGRjNzAwOTY5Li45Zjc1NGNmMWMxODc0YyAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuKysrIGIvbW0vc2x1Yi5jXG5AQCAtNDUyNiwxMSArNDUyNiw4IEBAIHN0YXRpYyB2b2lkICpfX19zbGFiX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsXG4gXHRyZXR1cm4gb2JqZWN0O1xuIH1cbiBcbi1zdGF0aWMgdm9pZCAqX19zbGFiX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSxcbi1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCAqYWMpXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KGludCBub2RlKVxuIHtcbi1cdHZvaWQgKm9iamVjdDtcbi1cbiAjaWZkZWYgQ09ORklHX05VTUFcbiBcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnN0cmljdF9udW1hKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRub2RlID09IE5VTUFfTk9fTk9ERSkge1xuQEAgLTQ1NTEsMTAgKzQ1NDgsNyBAQCBzdGF0aWMgdm9pZCAqX19zbGFiX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSxcbiBcdFx0fVxuIFx0fVxuICNlbmRpZlxuLVxuLVx0b2JqZWN0ID0gX19fc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgbm9kZSwgYWMpO1xuLVxuLVx0cmV0dXJuIG9iamVjdDtcbitcdHJldHVybiBub2RlO1xuIH1cbiBcbiBzdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbkBAIC00NzU5LDI4ICs0NzUzLDYgQEAgdm9pZCAqYWxsb2NfZnJvbV9wY3Moc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLFxuIFx0Ym9vbCBub2RlX3JlcXVlc3RlZDtcbiBcdHZvaWQgKm9iamVjdDtcbiBcbi0jaWZkZWYgQ09ORklHX05VTUFcbi1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnN0cmljdF9udW1hKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgbm9kZSA9PSBOVU1BX05PX05PREUpIHtcbi1cbi1cdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCA9IGN1cnJlbnQtXHUwMDNlbWVtcG9saWN5O1xuLVxuLVx0XHRpZiAobXBvbCkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogU3BlY2lhbCBCSU5EIHJ1bGUgc3VwcG9ydC4gSWYgdGhlIGxvY2FsIG5vZGVcbi1cdFx0XHQgKiBpcyBpbiBwZXJtaXR0ZWQgc2V0IHRoZW4gZG8gbm90IHJlZGlyZWN0XG4tXHRcdFx0ICogdG8gYSBwYXJ0aWN1bGFyIG5vZGUuXG4tXHRcdFx0ICogT3RoZXJ3aXNlIHdlIGFwcGx5IHRoZSBtZW1vcnkgcG9saWN5IHRvIGdldFxuLVx0XHRcdCAqIHRoZSBub2RlIHdlIG5lZWQgdG8gYWxsb2NhdGUgb24uXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKG1wb2wtXHUwMDNlbW9kZSAhPSBNUE9MX0JJTkQgfHxcbi1cdFx0XHRcdFx0IW5vZGVfaXNzZXQobnVtYV9tZW1faWQoKSwgbXBvbC1cdTAwM2Vub2RlcykpXG4tXG4tXHRcdFx0XHRub2RlID0gbWVtcG9saWN5X3NsYWJfbm9kZSgpO1xuLVx0XHR9XG4tXHR9XG4tI2VuZGlmXG4tXG4gXHRub2RlX3JlcXVlc3RlZCA9IElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBub2RlICE9IE5VTUFfTk9fTk9ERTtcbiBcbiBcdC8qXG5AQCAtNDkzMCwxMCArNDkwMiwxMiBAQCBzdGF0aWMgX19mYXN0cGF0aF9pbmxpbmUgdm9pZCAqc2xhYl9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0aWYgKHVubGlrZWx5KG9iamVjdCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0bm9kZSA9IGFwcGx5X3N0cmljdF9udW1hX3BvbGljeShub2RlKTtcbitcbiBcdG9iamVjdCA9IGFsbG9jX2Zyb21fcGNzKHMsIGdmcGZsYWdzLCBhYy1cdTAwM2VhbGxvY19mbGFncywgbm9kZSk7XG4gXG4gXHRpZiAodW5saWtlbHkoIW9iamVjdCkpXG4tXHRcdG9iamVjdCA9IF9fc2xhYl9hbGxvY19ub2RlKHMsIGdmcGZsYWdzLCBub2RlLCBhYyk7XG4rXHRcdG9iamVjdCA9IF9fX3NsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIG5vZGUsIGFjKTtcbiBcbiBcdG1heWJlX3dpcGVfb2JqX2ZyZWVwdHIocywgb2JqZWN0KTtcbiBcbkBAIC01NDE2LDYgKzUzOTAsOCBAQCBzdGF0aWMgdm9pZCAqX19rbWFsbG9jX25vbG9ja19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBnZnBfZlxuIFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19TTVApIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4rXHRub2RlID0gYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KG5vZGUpO1xuK1xuIHJldHJ5OlxuIFx0aWYgKHVubGlrZWx5KHNpemUgXHUwMDNlIEtNQUxMT0NfTUFYX0NBQ0hFX1NJWkUpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC01NDQwLDEwICs1NDE2LDEwIEBAIHN0YXRpYyB2b2lkICpfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mXG4gXHQvKlxuIFx0ICogRG8gbm90IGNhbGwgc2xhYl9hbGxvY19ub2RlKCksIHNpbmNlIHRyeWxvY2sgbW9kZSBpc24ndFxuIFx0ICogY29tcGF0aWJsZSB3aXRoIHNsYWJfcHJlX2FsbG9jX2hvb2svc2hvdWxkX2ZhaWxzbGFiIGFuZFxuLVx0ICoga2ZlbmNlX2FsbG9jLiBIZW5jZSBjYWxsIF9fc2xhYl9hbGxvY19ub2RlKCkgKGF0IG1vc3QgdHdpY2UpXG4rXHQgKiBrZmVuY2VfYWxsb2MuIEhlbmNlIGNhbGwgX19fc2xhYl9hbGxvYygpIChhdCBtb3N0IHR3aWNlKVxuIFx0ICogYW5kIHNsYWJfcG9zdF9hbGxvY19ob29rKCkgZGlyZWN0bHkuXG4gXHQgKi9cbi1cdHJldCA9IF9fc2xhYl9hbGxvY19ub2RlKHMsIGdmcF9mbGFncywgbm9kZSwgYWMpO1xuK1x0cmV0ID0gX19fc2xhYl9hbGxvYyhzLCBnZnBfZmxhZ3MsIG5vZGUsIGFjKTtcbiBcbiBcdC8qXG4gXHQgKiBJdCdzIHBvc3NpYmxlIHdlIGZhaWxlZCBkdWUgdG8gdHJ5bG9jayBhcyB3ZSBwcmVlbXB0ZWQgc29tZW9uZSB3aXRoXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMzo0NToyMi45ODE5MzMxMzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjYwNDQ1MzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0xVQiBOVU1BIFBvbGljeSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCByZWZhY3RvcnMgdGhlIHN0cmljdCBOVU1BIHBvbGljeSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IGltcHJvdmluZyBjb2RlIG9yZ2FuaXphdGlvbiBhbmQgcG90ZW50aWFsbHkgcmVkdWNpbmcgZHVwbGljYXRpb24uIFRoZSBwYXRjaCB0YXJnZXRzIGBtbS9zbHViLmNgLCB3aGljaCBpcyB0aGUgaGVhcnQgb2YgdGhlIFNMVUIgbWVtb3J5IGFsbG9jYXRvci5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3koaW50IG5vZGUpYC4gVGhpcyBmdW5jdGlvbiBjZW50cmFsaXplcyB0aGUgbG9naWMgZm9yIGVuZm9yY2luZyBzdHJpY3QgTlVNQSBwb2xpY2llcywgcHJldmlvdXNseSBzY2F0dGVyZWQgd2l0aGluIGBfX3NsYWJfYWxsb2Nfbm9kZSgpYCBhbmQgYGFsbG9jX2Zyb21fcGNzKClgLiBJdCB0aGVuIHJlcGxhY2VzIGNhbGxzIHRvIGBfX3NsYWJfYWxsb2Nfbm9kZSgpYCB3aXRoIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBjYWxsaW5nIGBhbGxvY19mcm9tX3BjcygpYCBhbmQgYSByZW5hbWVkIGZ1bmN0aW9uIGBfX19zbGFiX2FsbG9jKClgLiBUaGUgcGF0Y2ggYWxzbyBpbmplY3RzIHRoaXMgZnVuY3Rpb24gaW50byB0aGUgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKClgIHBhdGguXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIG5ldyBmdW5jdGlvbi4gWWVzLCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGZyb20gYHNsYWJfYWxsb2Nfbm9kZWAgYW5kIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAsIHNvIHRoZSBjaGFuZ2UgaXMgdXNlZC4gSSdtIG5vdGluZyB0aGF0IHRoZSBwb2xpY3kgaXRzZWxmIGlzIHByb2JhYmx5IGVuYWJsZWQgdGhyb3VnaCBgQ09ORklHX05VTUFgLCB3aGlsZSBgQ09ORklHX1NMVUJgIGlkZW50aWZpZXMgdGhlIGFsbG9jYXRvci5cblxuTm93LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHBvaW50cyBvZiBpbnRlZ3JhdGlvbi4gUXVpY2tseSBsb29raW5nIGluIGBtbS9zbHViLmNgIGZvciB0aG9zZSBmdW5jdGlvbnMsIEknbSByZW1pbmRpbmcgbXlzZWxmIHRoYXQgYHNsYWJfYWxsb2Nfbm9kZWAgaXMgYSBmYXN0cGF0aCBpbmxpbmUgZnVuY3Rpb24sIGFuZCBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgIGlzIHN0YXRpYy4gVGhpcyBtZWFucyB0aGF0IHRoZSByZWFsIHBvaW50cyBvZiBpbnRlcmVzdCBmb3IgYW5hbHlzaXMgYXJlIHRoZSAqY2FsbGVycyogb2YgYHNsYWJfYWxsb2Nfbm9kZWAgYW5kIHBvdGVudGlhbCBhbHRlcm5hdGl2ZSBlbnRyeSBwb2ludHMuIExldCdzIHNlZS4uLiBiZWNhdXNlIG9mIHRoZSBpbmxpbmluZyBhbmQgdGhlIHN0YXRpYyBkZXNpZ25hdGlvbiBvZiBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgLCBpdCBtYXkgYmUgdGhhdCB0aGUgZnVuY3Rpb24gY2FsbHMgSSdtIGludGVyZXN0ZWQgaW4gYXJlIGBrbWVtX2NhY2hlX2FsbG9jX25vZGVgLCBga21hbGxvY19ub2RlYCBvciBwb3NzaWJseSBvdGhlciBmdW5jdGlvbnMgdGhhdCB1c2UgdGhvc2UuIE5vdyB0aGF0IGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGlzIGBfX2Fsd2F5c19pbmxpbmVgLCBpdCdzIG5vdCBhIGZ1bmN0aW9uIGNhbGwgYW55bW9yZSwgaXQncyBqdXN0IGNvZGUgYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgY2FsbGVyLlxuXG5JJ20gbm93IGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBjYWxsZXJzIG9mIGBzbGFiX2FsbG9jX25vZGVgIHdpdGhpbiBgbW0vc2x1Yi5jYCB0byBzZWUgdGhlIGZ1bGwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzkxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTM6NDU6MzAuNjQyMzgxMzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgwODY0NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNsYWJfYWxsb2Nfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTQ4MDM9dW5zaWduZWQgaW50IGFsbG9jX2Zyb21fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcXG4tLVxcbm1tL3NsdWIuYy00ODkxLSAqL1xcbm1tL3NsdWIuYzo0ODkyOnN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZSB2b2lkICpzbGFiX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTQ4OTMtXFx0XFx0Z2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLCBjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0ICphYylcXG4tLVxcbm1tL3NsdWIuYz00OTI0PXZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncylcXG4tLVxcbm1tL3NsdWIuYy00OTMyLVxcbm1tL3NsdWIuYzo0OTMzOlxcdHJldCA9IHNsYWJfYWxsb2Nfbm9kZShzLCBnZnBmbGFncywgTlVNQV9OT19OT0RFLCBcXHUwMDI2YWMpO1xcbm1tL3NsdWIuYy00OTM0LVxcbi0tXFxubW0vc2x1Yi5jPTQ5NDE9dm9pZCAqa21lbV9jYWNoZV9hbGxvY19scnVfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4tLVxcbm1tL3NsdWIuYy00OTUxLVxcbm1tL3NsdWIuYzo0OTUyOlxcdHJldCA9IHNsYWJfYWxsb2Nfbm9kZShzLCBnZnBmbGFncywgTlVNQV9OT19OT0RFLCBcXHUwMDI2YWMpO1xcbm1tL3NsdWIuYy00OTUzLVxcbi0tXFxubW0vc2x1Yi5jPTQ5ODI9dm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlKVxcbi0tXFxubW0vc2x1Yi5jLTQ5OTAtXFxubW0vc2x1Yi5jOjQ5OTE6XFx0cmV0ID0gc2xhYl9hbGxvY19ub2RlKHMsIGdmcGZsYWdzLCBub2RlLCBcXHUwMDI2YWMpO1xcbm1tL3NsdWIuYy00OTkyLVxcbi0tXFxubW0vc2x1Yi5jPTUzMTY9dm9pZCAqX19kb19rbWFsbG9jX25vZGUoa21lbV9idWNrZXRzICpiLCBnZnBfdCBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5tbS9zbHViLmMtNTMzNC1cXG5tbS9zbHViLmM6NTMzNTpcXHRyZXQgPSBzbGFiX2FsbG9jX25vZGUocywgZmxhZ3MsIG5vZGUsIGFjKTtcXG5tbS9zbHViLmMtNTMzNi1cXHRyZXQgPSBrYXNhbl9rbWFsbG9jKHMsIHJldCwgc2l6ZSwgZmxhZ3MpO1xcbi0tXFxubW0vc2x1Yi5jPTUzNjY9c3RhdGljIHZvaWQgKl9fa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTU0MTYtXFx0LypcXG5tbS9zbHViLmM6NTQxNzpcXHQgKiBEbyBub3QgY2FsbCBzbGFiX2FsbG9jX25vZGUoKSwgc2luY2UgdHJ5bG9jayBtb2RlIGlzbid0XFxubW0vc2x1Yi5jLTU0MTgtXFx0ICogY29tcGF0aWJsZSB3aXRoIHNsYWJfcHJlX2FsbG9jX2hvb2svc2hvdWxkX2ZhaWxzbGFiIGFuZFxcbi0tXFxubW0vc2x1Yi5jPTU0Nzg9dm9pZCAqX19rbWFsbG9jX2NhY2hlX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIHNpemVfdCBzaXplKVxcbi0tXFxubW0vc2x1Yi5jLTU0ODYtXFxubW0vc2x1Yi5jOjU0ODc6XFx0cmV0ID0gc2xhYl9hbGxvY19ub2RlKHMsIGdmcGZsYWdzLCBOVU1BX05PX05PREUsIFxcdTAwMjZhYyk7XFxubW0vc2x1Yi5jLTU0ODgtXFxuLS1cXG5tbS9zbHViLmM9NTQ5Nj12b2lkICpfX2ttYWxsb2NfY2FjaGVfbm9kZV9ub3Byb2Yoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTU1MDUtXFxubW0vc2x1Yi5jOjU1MDY6XFx0cmV0ID0gc2xhYl9hbGxvY19ub2RlKHMsIGdmcGZsYWdzLCBub2RlLCBcXHUwMDI2YWMpO1xcbm1tL3NsdWIuYy01NTA3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMzo0NTozMS4wMjMyNTA2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwODk2NjQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxvdyBoZXJlLCBzcGVjaWZpY2FsbHkgZm9yIG5vbi1wcm9maWxlZCBhbGxvY2F0aW9ucy4gTXkgaW1tZWRpYXRlIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGZ1bmN0aW9uczogYGttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3Byb2ZgLCBgX19kb19rbWFsbG9jX25vZGVgLCBgX19rbWFsbG9jX2NhY2hlX25vZGVfbm9wcm9mYCwgYW5kIHRoYXQgc3RhdGljIGZ1bmN0aW9uLCBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgLiBUaGUgc3RhdGljIGtleXdvcmQgaXMgYSByZWQgZmxhZywgdGhvdWdoLiBJdCBtZWFucyBpdCdzIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQsIHNvIGl0J3MgcHJvYmFibHkgd2hlcmUgdGhlIHJlYWwgd29yayBoYXBwZW5zLiBJdCBhbHNvIGluZGljYXRlcyBJJ2xsIG5lZWQgdG8gY2hhc2UgZG93biBpdHMgY2FsbGVycyB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIFRpbWUgdG8gaW52ZXN0aWdhdGUgd2hhdCBjYWxscyBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgIGFuZCB1bnJhdmVsIHRoZSBjYWxsaW5nIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQgaW50ZXJuYWxseSB0byBzZWUgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMzo0NTozNC43MzIyMTkzMDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2MDgzMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19rbWFsbG9jX25vbG9ja19ub3Byb2ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz01MzY0PUVYUE9SVF9TWU1CT0woX19rbWFsbG9jX25vcHJvZik7XFxubW0vc2x1Yi5jLTUzNjUtXFxubW0vc2x1Yi5jOjUzNjY6c3RhdGljIHZvaWQgKl9fa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbm1tL3NsdWIuYy01MzY3LVxcdFxcdFxcdFxcdCAgICAgaW50IG5vZGUsIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKVxcbi0tXFxubW0vc2x1Yi5jPTU0NTE9dm9pZCAqX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpXFxuLS1cXG5tbS9zbHViLmMtNTQ1OC1cXG5tbS9zbHViLmM6NTQ1OTpcXHRyZXR1cm4gX19rbWFsbG9jX25vbG9ja19ub3Byb2YoUEFTU19UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLFxcbm1tL3NsdWIuYy01NDYwLVxcdFxcdFxcdFxcdCAgICAgICBnZnBfZmxhZ3MsIG5vZGUsIFxcdTAwMjZhYyk7XFxuLS1cXG5tbS9zbHViLmM9NTUyMD12b2lkICpfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtNTUzMi1cXHR9IGVsc2Uge1xcbm1tL3NsdWIuYzo1NTMzOlxcdFxcdHJldHVybiBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihQQVNTX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksXFxubW0vc2x1Yi5jLTU1MzQtXFx0XFx0XFx0XFx0XFx0ICAgICAgIGZsYWdzLCBub2RlLCBcXHUwMDI2YWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMzo0NTozNC43OTA4NTYwNjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk4MTY3MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0xVQiBBbGxvY2F0b3IgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cmFjaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgU0xVQiBhbGxvY2F0b3IuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBmdW5jdGlvbnMgbGlrZSBgX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAgYW5kIGBfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mYCBhcmUgY2FsbGluZyBpdCwgd2hpY2ggc3VnZ2VzdHMgaXQgdGFyZ2V0cyBzb21lIGNvcmUgYWxsb2NhdGlvbiBwYXRocy5cblxuVGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YC4gVGhhdCdzIGEgcmVkIGZsYWcg4oCTIGEgTlVNQSBwb2xpY3kgbW9kaWZpY2F0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgaXMgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4gVGhlIHBhdGNoIGRlc2NyaXB0aW9uIGltbWVkaWF0ZWx5IHN0YXRlcyB0aGF0IHRoaXMgaXMgb25seSByZWxldmFudCB3aGVuIGBDT05GSUdfTlVNQWAgaXMgZW5hYmxlZCwgYW5kIGdpdmVuIHRoZSByZW1vdmFsIG9mIFNMQUIgYW5kIFNMT0IsIGFuZCB0aGUgZmFjdCB0aGF0IFNMVUIgaXMgdGhlIGRlZmF1bHQsIE5VTUEgaXMgbGlrZWx5IHRoZSBrZXkgY29uZmlndXJhdGlvbiBoZXJlLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgcGF0Y2ggbG9va3Mgc29saWQuIEl0J3MgZm9jdXNlZCBvbiB0aGUgU0xVQiBhbGxvY2F0b3IgYW5kIHNlZW1zIHRvIGVuc3VyZSB0aGF0IHN0cmljdCBOVU1BIHBvbGljaWVzIGFyZSBhcHBsaWVkIGNvcnJlY3RseSBpbiBtb3JlIGxvY2F0aW9ucy4gVGhpcyBjb2RlIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LCB3aGljaCBpcyBhbHdheXMgbmljZSB0byBzZWUgaW4gdGhlc2UgbG93LWxldmVsIGFyZWFzLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBJJ2QgbGlrZSB0byBxdWlja2x5IGxvb2sgYXQgdGhlc2Ugc3ltYm9scy4gSSdsbCBmb2N1cyBvbiB0aGVzZTpcbiogICBga21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZmBcbiogICBgX19kb19rbWFsbG9jX25vZGVgXG4qICAgYF9fa21hbGxvY19jYWNoZV9ub2RlX25vcHJvZmBcbiogICBgX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmBcbiogICBgX19rbWFsbG9jX2ZsYWdzX25vcHJvZmBcblxuT25lIHF1aWNrIHRoaW5nIEkgc2hvdWxkIGNoZWNrIGlzIHdoZXRoZXIgYGttZW1fY2FjaGVfYWxsb2Nfbm9kZWAgaXMgYSBtYWNybyBvciBmdW5jdGlvbi4gVGhhdCdzIGEgZ29vZCBmaXJzdCB0aGluZyB0byBkbyBiZWZvcmUgSSBsb29rIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTM6NDU6NDEuMTg5MDI1MzM1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTc4NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1fY2FjaGVfYWxsb2Nfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD0yODU9c3RydWN0IGttZW1fY2FjaGVfYXJncyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0zNjItXFx0ICogVGhlIHNoZWF2ZXMgZG8gbm90IGVuZm9yY2UgTlVNQSBwbGFjZW1lbnQgb2Ygb2JqZWN0cywgc28gYWxsb2NhdGlvbnNcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDozNjM6XFx0ICogdmlhIGttZW1fY2FjaGVfYWxsb2Nfbm9kZSgpIHdpdGggYSBub2RlIHNwZWNpZmllZCBvdGhlciB0aGFuXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMzY0LVxcdCAqIE5VTUFfTk9fTk9ERSB3aWxsIGJ5cGFzcyB0aGVtLlxcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmg9ODg5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrZnJlZV9idWxrKHNpemVfdCBzaXplLCB2b2lkICoqcClcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTg5My1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo4OTQ6dm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtODk1LVxcdFxcdFxcdFxcdCAgIGludCBub2RlKSBfX2Fzc3VtZV9zbGFiX2FsaWdubWVudCBfX21hbGxvYztcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo4OTY6I2RlZmluZSBrbWVtX2NhY2hlX2FsbG9jX25vZGUoLi4uKVxcdGFsbG9jX2hvb2tzKGttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTg5Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTM6NDU6NDEuMjQ0MjA5OTE0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzNTU4Mjc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBLZXJuZWwgTWVtb3J5IEFsbG9jYXRpb24gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMga2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uIGNvZGUuIFRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGBrbWVtX2NhY2hlX2FsbG9jX25vZGVfbm9wcm9mYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIEkgdGhpbmsuIFRoZW4gdGhlcmUgaXMgYF9fa21hbGxvY19jYWNoZV9ub2RlX25vcHJvZmAgd2hpY2gsIGJ5IHRoZSBuYW1pbmcgY29udmVudGlvbiwgbG9va3MgbGlrZSBhbm90aGVyIGxldmVsIGRvd24gdGhlIGNhbGwgc3RhY2suIExldCdzIG5vdCBmb3JnZXQgdGhlIGZ1bmN0aW9uIGBfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mYCBhcyBpdCBwbGF5cyBzb21lIHBhcnQgaW4gdGhlIHByb2Nlc3MuXG5cbk5vdywgd2hlcmUgZG8gdGhleSBhbGwgbGluayB0b2dldGhlcj8gTXkgaW5zdGluY3RzIHRlbGwgbWUgdG8gZm9jdXMgb24gYF9fZG9fa21hbGxvY19ub2RlYC4gSXQgaGFzIHRvIGJlIHdoZXJlIHRoZSBtYWluIGxvZ2ljIGlzIGV4ZWN1dGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzM4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTM6NDU6NDQuMzc5Nzk1MjI1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzQ3NzU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2RvX2ttYWxsb2Nfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTUzMTU9c3RhdGljIF9fYWx3YXlzX2lubGluZVxcbm1tL3NsdWIuYzo1MzE2OnZvaWQgKl9fZG9fa21hbGxvY19ub2RlKGttZW1fYnVja2V0cyAqYiwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxcbm1tL3NsdWIuYy01MzE3LVxcdFxcdFxcdGttYWxsb2NfdG9rZW5fdCB0b2tlbiwgY29uc3Qgc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCAqYWMpXFxuLS1cXG5tbS9zbHViLmM9NTM0MD12b2lkICpfX2ttYWxsb2Nfbm9kZV9ub3Byb2YoREVDTF9LTUFMTE9DX1BBUkFNUyhzaXplLCBiLCB0b2tlbiksIGdmcF90IGZsYWdzLCBpbnQgbm9kZSlcXG4tLVxcbm1tL3NsdWIuYy01MzQ3LVxcbm1tL3NsdWIuYzo1MzQ4OlxcdHJldHVybiBfX2RvX2ttYWxsb2Nfbm9kZShQQVNTX0JVQ0tFVF9QQVJBTShiKSwgZmxhZ3MsIG5vZGUsXFxubW0vc2x1Yi5jLTUzNDktXFx0XFx0XFx0XFx0IFBBU1NfVE9LRU5fUEFSQU0odG9rZW4pLCBcXHUwMDI2YWMpO1xcbi0tXFxubW0vc2x1Yi5jPTUzNTM9dm9pZCAqX19rbWFsbG9jX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jLTUzNjAtXFxubW0vc2x1Yi5jOjUzNjE6XFx0cmV0dXJuIF9fZG9fa21hbGxvY19ub2RlKE5VTEwsIGZsYWdzLCAgTlVNQV9OT19OT0RFLFxcbm1tL3NsdWIuYy01MzYyLVxcdFxcdFxcdFxcdCBQQVNTX1RPS0VOX1BBUkFNKHRva2VuKSwgXFx1MDAyNmFjKTtcXG4tLVxcbm1tL3NsdWIuYz01NDY0PXZvaWQgKl9fa21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcl9ub3Byb2YoREVDTF9LTUFMTE9DX1BBUkFNUyhzaXplLCBiLCB0b2tlbiksIGdmcF90IGZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTU0NzItXFxubW0vc2x1Yi5jOjU0NzM6XFx0cmV0dXJuIF9fZG9fa21hbGxvY19ub2RlKFBBU1NfQlVDS0VUX1BBUkFNKGIpLCBmbGFncywgbm9kZSxcXG5tbS9zbHViLmMtNTQ3NC1cXHRcXHRcXHRcXHQgUEFTU19UT0tFTl9QQVJBTSh0b2tlbiksIFxcdTAwMjZhYyk7XFxuLS1cXG5tbS9zbHViLmM9NTUyMD12b2lkICpfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtNTUyOS1cXHRpZiAoYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWxsb2NfZmxhZ3MpKSB7XFxubW0vc2x1Yi5jOjU1MzA6XFx0XFx0cmV0dXJuIF9fZG9fa21hbGxvY19ub2RlKE5VTEwsIGZsYWdzLCBub2RlLFxcbm1tL3NsdWIuYy01NTMxLVxcdFxcdFxcdFxcdFBBU1NfVE9LRU5fUEFSQU0odG9rZW4pLCBcXHUwMDI2YWMpO1xcbi0tXFxubW0vc2x1Yi5jPTY4OTQ9dm9pZCAqX19rdm1hbGxvY19ub2RlX25vcHJvZihERUNMX0tNQUxMT0NfUEFSQU1TKHNpemUsIGIsIHRva2VuKSwgdW5zaWduZWQgbG9uZyBhbGlnbixcXG4tLVxcbm1tL3NsdWIuYy02OTA4LVxcdCAqL1xcbm1tL3NsdWIuYzo2OTA5OlxcdHJldCA9IF9fZG9fa21hbGxvY19ub2RlKFBBU1NfQlVDS0VUX1BBUkFNKGIpLFxcbm1tL3NsdWIuYy02OTEwLVxcdFxcdFxcdFxcdGttYWxsb2NfZ2ZwX2FkanVzdChmbGFncywgc2l6ZSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEzOjQ1OjQ0LjQzNzI3ODk4M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODAyMzg2MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIE5VTUEgUG9saWN5IFx1MDAyNiBNZW1vcnkgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIGBfX2RvX2ttYWxsb2Nfbm9kZWAgaXMgaW5saW5lZCwgd2hpY2ggbWVhbnMgaXQncyBjYWxsZWQgKmEgbG90Ki4gTG9va2luZyBhdCB0aGUgY2FsbGVycywgSSBzZWUgYSBidW5jaCBvZiBgX19rbWFsbG9jXy4uLl9ub3Byb2ZgIGZ1bmN0aW9uczogYGttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3Byb2ZgLCBgX19rbWFsbG9jX25vZGVfbm9wcm9mYCwgYF9fa21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcl9ub3Byb2ZgLCBgX19rbWFsbG9jX2ZsYWdzX25vcHJvZmAsIGBfX2t2bWFsbG9jX25vZGVfbm9wcm9mYCwgYF9fa21hbGxvY19jYWNoZV9ub2RlX25vcHJvZmAsIGFuZCBgX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAuIFJpZ2h0LCBtZW1vcnkgYWxsb2NhdGlvbi4uLiB0aG9zZSBhcmUgYWxsICp0ZXh0Ym9vayogaG90IHBhdGhzLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSB3YXJucyBhZ2FpbnN0IGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gVGhhdCdzIGV4YWN0bHkgd2hhdCB0aGVzZSBmdW5jdGlvbnMgd291bGQgY2F1c2UhIFdlICpkb24ndCogd2FudCBzeXprYWxsZXIgc3BlbmRpbmcgYWxsIGl0cyB0aW1lIGp1c3QgaGFtbWVyaW5nIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGF0IGRlZmVhdHMgdGhlIHB1cnBvc2UuXG5cblRoZSBwcm9tcHQgaW5kaWNhdGVzIGEgZm9jdXMgb24gTlVNQSBwb2xpY3kuIEhvdyBkbyB3ZSB0cmlnZ2VyIHRoYXQ/IEFoLCBgc2V0X21lbXBvbGljeWAgYW5kIGBtYmluZGAuIFRoYXQncyB0aGUga2V5LiBBbmQgdGhlIHBhdGNoIGFkZHJlc3NlcyBgc3RyaWN0X251bWFgIHBvbGljeSBhcHBsaWNhdGlvbiAqaW4gU0xVQiouIGBzdHJpY3RfbnVtYWAgaXMgY29udHJvbGxlZCBieSBhIHN0YXRpYyBicmFuY2guIFNvLCB0aGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IHdoZXJlIGlzIHRoYXQgYHN0cmljdF9udW1hYCBicmFuY2ggYWN0dWFsbHkgZW5hYmxlZD8gV2UgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgcmVsYXRlZCB0byB0aGF0IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMjMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTM6NDU6NTAuMjM5NjcxODA4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQwOTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJpY3RfbnVtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTIwOD1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzbHViX2RlYnVnX2VuYWJsZWQpO1xcbi0tXFxubW0vc2x1Yi5jLTIxMi0jaWZkZWYgQ09ORklHX05VTUFcXG5tbS9zbHViLmM6MjEzOnN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzdHJpY3RfbnVtYSk7XFxubW0vc2x1Yi5jLTIxNC0jZW5kaWZcXG4tLVxcbm1tL3NsdWIuYz00NDU2PXN0YXRpYyB2b2lkICpfX19zbGFiX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5tbS9zbHViLmMtNDUyOC1cXG5tbS9zbHViLmM6NDUyOTpzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3koaW50IG5vZGUpXFxubW0vc2x1Yi5jLTQ1MzAte1xcbm1tL3NsdWIuYy00NTMxLSNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3NsdWIuYzo0NTMyOlxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZzdHJpY3RfbnVtYSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmMtNDUzMy1cXHRcXHRcXHRub2RlID09IE5VTUFfTk9fTk9ERSkge1xcbi0tXFxubW0vc2x1Yi5jPTQ4OTI9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lIHZvaWQgKnNsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy00OTA0LVxcbm1tL3NsdWIuYzo0OTA1OlxcdG5vZGUgPSBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3kobm9kZSk7XFxubW0vc2x1Yi5jLTQ5MDYtXFxuLS1cXG5tbS9zbHViLmM9NTM2Nj1zdGF0aWMgdm9pZCAqX19rbWFsbG9jX25vbG9ja19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBnZnBfZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtNTM5Mi1cXG5tbS9zbHViLmM6NTM5MzpcXHRub2RlID0gYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KG5vZGUpO1xcbm1tL3NsdWIuYy01Mzk0LVxcbi0tXFxubW0vc2x1Yi5jPTgxNzU9Y29yZV9wYXJhbShzbHViX21pbl9vYmplY3RzLCBzbHViX21pbl9vYmplY3RzLCB1aW50LCAwKTtcXG4tLVxcbm1tL3NsdWIuYy04MTc3LSNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3NsdWIuYzo4MTc4OnN0YXRpYyBpbnQgX19pbml0IHNldHVwX3NsYWJfc3RyaWN0X251bWEoY29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG5tbS9zbHViLmMtODE3OS17XFxubW0vc2x1Yi5jLTgxODAtXFx0aWYgKG5yX25vZGVfaWRzIFxcdTAwM2UgMSkge1xcbm1tL3NsdWIuYzo4MTgxOlxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZzdHJpY3RfbnVtYSk7XFxubW0vc2x1Yi5jLTgxODItXFx0XFx0cHJfaW5mbyhcXFwiU0xVQjogU3RyaWN0IE5VTUEgZW5hYmxlZC5cXFxcblxcXCIpO1xcbm1tL3NsdWIuYy04MTgzLVxcdH0gZWxzZSB7XFxubW0vc2x1Yi5jOjgxODQ6XFx0XFx0cHJfd2FybihcXFwic2xhYl9zdHJpY3RfbnVtYSBwYXJhbWV0ZXIgc2V0IG9uIG5vbiBOVU1BIHN5c3RlbS5cXFxcblxcXCIpO1xcbm1tL3NsdWIuYy04MTg1LVxcdH1cXG4tLVxcbm1tL3NsdWIuYy04MTg5LVxcbm1tL3NsdWIuYzo4MTkwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBwYXJhbV9vcHNfc2xhYl9zdHJpY3RfbnVtYSBfX2luaXRjb25zdCA9IHtcXG5tbS9zbHViLmMtODE5MS1cXHQuZmxhZ3MgPSBLRVJORUxfUEFSQU1fT1BTX0ZMX05PQVJHLFxcbm1tL3NsdWIuYzo4MTkyOlxcdC5zZXQgPSBzZXR1cF9zbGFiX3N0cmljdF9udW1hLFxcbm1tL3NsdWIuYy04MTkzLX07XFxubW0vc2x1Yi5jOjgxOTQ6X19jb3JlX3BhcmFtX2NiKHNsYWJfc3RyaWN0X251bWEsIFxcdTAwMjZwYXJhbV9vcHNfc2xhYl9zdHJpY3RfbnVtYSwgTlVMTCwgMCk7XFxubW0vc2x1Yi5jLTgxOTUtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEzOjQ1OjUwLjMwOTA4ODM5NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTQ2NDYzMDYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBzbGFiX3N0cmljdF9udW1hYCBLZXJuZWwgUGFyYW1ldGVyIGFuZCBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBgc2xhYl9zdHJpY3RfbnVtYWAgaXMgYSBrZXJuZWwgcGFyYW1ldGVyLCBlbmFibGVkIHZpYSB0aGUgYm9vdCBwYXJhbWV0ZXIgYHNsYWJfc3RyaWN0X251bWFgLiBJZiBpdCdzIG5vdCBlbmFibGVkLCBgc3RyaWN0X251bWFgIGlzIGZhbHNlLCBhbmQgdGhlIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGZ1bmN0aW9uIGlzIG5ldmVyIGV4ZWN1dGVkLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBzeXprYWxsZXI7IGl0IG1pZ2h0IG5vdCBwYXNzIHRoaXMgcGFyYW1ldGVyIGJ5IGRlZmF1bHQsIGFuZCB3ZSBjYW4ndCBkaXJlY3RseSB0ZWxsIGl0IHRvIHBhc3Mga2VybmVsIHBhcmFtZXRlcnMsIG9ubHkgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLlxuXG5Mb29raW5nIGF0IGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgLCBpdCdzIGNsZWFyIHRoYXQgaXQgb25seSBkb2VzIGFueXRoaW5nIGlmIGBzdHJpY3RfbnVtYWAgaXMgdHJ1ZSBhbmQgdGhlIG5vZGUgaXMgYE5VTUFfTk9fTk9ERWAuIFRoZSBjb2RlIHVzZXMgYHN0YXRpY19icmFuY2hfdW5saWtlbHlgLCBzbyBpZiBgc3RyaWN0X251bWFgIGlzIGZhbHNlLCB0aGUgZW50aXJlIGJsb2NrIGlzIG9wdGltaXplZCBhd2F5LiBBbmQgaXQncyBzZXQgd2l0aCBgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpYCwgbWVhbmluZyBpdCdzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFNvLCB1bmxlc3MgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgaGFzIGBzbGFiX3N0cmljdF9udW1hYCwgdGhlIGNvZGUgaW5zaWRlIHRoZSBgaWZgIHN0YXRlbWVudCBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cblxuVGhlIHBhdGNoIEknbSBsb29raW5nIGF0IG1vdmVzIHRoaXMgbG9naWMgaW50byBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBhbmQgY2FsbHMgaXQgZnJvbSBgc2xhYl9hbGxvY19ub2RlYCBhbmQgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgYWxsb2NfZnJvbV9wY3NgIGFuZCBgX19zbGFiX2FsbG9jX25vZGVgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgTlVNQSBjaGVjayB3YXMgaW4gYF9fc2xhYl9hbGxvY19ub2RlYCwgYnV0IG5vdyBgX19zbGFiX2FsbG9jX25vZGVgIGlzIHJlbW92ZWQgYW5kIHJlcGxhY2VkIGJ5IGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIHBsdXMgYF9fX3NsYWJfYWxsb2NgLlxuXG5Ob3csIHRoZSBjb3JlIHF1ZXN0aW9uOiB3aGF0J3MgdGhlIGZ1bmN0aW9uYWwgaW1wYWN0IGlmIGBzdHJpY3RfbnVtYWAgaXMgZmFsc2U/IExvb2tpbmcgYXQgdGhlIG9sZCBhbmQgbmV3IGNvZGUsIHRoZSBwYXRjaCBlZmZlY3RpdmVseSBqdXN0IGZhY3RvcmVkIG91dCB0aGUgYHN0cmljdF9udW1hYCBjaGVjayBpbnRvIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGFuZCBjYWxscyBpdCBvbmNlIGJlZm9yZSBgYWxsb2NfZnJvbV9wY3NgIGFuZCBgX19fc2xhYl9hbGxvY2AuIEl0IGFsc28gYWRkcyBgbm9kZSA9IGFwcGx5X3N0cmljdF9udW1hX3BvbGljeShub2RlKTtgIHRvIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAuIElmIGBzdHJpY3RfbnVtYWAgaXMgZmFsc2UsIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGlzIGEgbm8tb3AuIENvbXBhcmluZyB0aGUgb2xkIGFuZCB0aGUgbmV3IHZlcnNpb25zIG9mIGBfX3NsYWJfYWxsb2Nfbm9kZWAsIGl0IG9ubHkgY2FsbGVkIGBfX19zbGFiX2FsbG9jYCBpZiBgc3RyaWN0X251bWFgIHdhcyBmYWxzZS5cblxuVGhlcmVmb3JlLCBpZiBgc3RyaWN0X251bWFgIGlzIGZhbHNlLCB0aGlzIGlzIGEgcHVyZSByZWZhY3RvcmluZy4gVGhlIGxvZ2ljIGlzIGlkZW50aWNhbDsgdGhlIHBhdGNoIHNpbXBseSByZXBsYWNlcyBhIHdyYXBwZXIgZnVuY3Rpb24gKGBfX3NsYWJfYWxsb2Nfbm9kZWApIHdpdGggYSBkaXJlY3QgY2FsbCB0byB0aGUgY29yZSBhbGxvY2F0aW9uIGZ1bmN0aW9uIChgX19fc2xhYl9hbGxvY2ApLlxuXG5MZXQncyBjaGVjayBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgIGJlY2F1c2UgdGhlIHBhdGNoIGNoYW5nZWQgdGhlIGNhbGwuIElmIGBzdHJpY3RfbnVtYWAgaXMgZmFsc2UsIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGRvZXMgbm90aGluZy4gQmVmb3JlIGl0IGNhbGxlZCBgX19zbGFiX2FsbG9jX25vZGVgIGFuZCBub3cgaXQgY2FsbHMgYGFwcGx5X3N0cmljdF9udW1hX3BvbGljeWAgYW5kIHRoZW4gYF9fX3NsYWJfYWxsb2NgLCBidXQgaWYgdGhlIHN0cmljdCBOVU1BIGlzbid0IGFjdGl2ZSwgdGhlbiB0aGlzIGRvZXMgbm90IGNoYW5nZSBhbnl0aGluZy5cblxuKipJbiBzdW1tYXJ5OiBpZiBgc3RyaWN0X251bWFgIGlzIGZhbHNlLCB0aGVyZSBpcyBhYnNvbHV0ZWx5ICp6ZXJvKiBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyBqdXN0IGEgcmVmYWN0b3JpbmcuKiogQW55IGZ1bmN0aW9uYWwgY2hhbmdlIGhhcHBlbnMgd2hlbiBzdHJpY3QgTlVNQSBpcyB0cnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTAzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMzo0NjowNS43NzM3MjkwMzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMTUxNjIwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTUzNjQ9RVhQT1JUX1NZTUJPTChfX2ttYWxsb2Nfbm9wcm9mKTtcXG5tbS9zbHViLmMtNTM2NS1cXG5tbS9zbHViLmM6NTM2NjpzdGF0aWMgdm9pZCAqX19rbWFsbG9jX25vbG9ja19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBnZnBfZmxhZ3MsXFxubW0vc2x1Yi5jLTUzNjctXFx0XFx0XFx0XFx0ICAgICBpbnQgbm9kZSwgY29uc3Qgc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCAqYWMpXFxuLS1cXG5tbS9zbHViLmM9NTQ1MT12b2lkICpfa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSlcXG4tLVxcbm1tL3NsdWIuYy01NDU4LVxcbm1tL3NsdWIuYzo1NDU5OlxcdHJldHVybiBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihQQVNTX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksXFxubW0vc2x1Yi5jLTU0NjAtXFx0XFx0XFx0XFx0ICAgICAgIGdmcF9mbGFncywgbm9kZSwgXFx1MDAyNmFjKTtcXG4tLVxcbm1tL3NsdWIuYz01NTIwPXZvaWQgKl9fa21hbGxvY19mbGFnc19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy01NTMyLVxcdH0gZWxzZSB7XFxubW0vc2x1Yi5jOjU1MzM6XFx0XFx0cmV0dXJuIF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKFBBU1NfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSxcXG5tbS9zbHViLmMtNTUzNC1cXHRcXHRcXHRcXHRcXHQgICAgICAgZmxhZ3MsIG5vZGUsIFxcdTAwMjZhYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEzOjQ2OjA2LjA3NTI1MDk3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Mjg4NDg5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpc3NlY3RpbmcgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBCZWZvcmUgYSBQYXRjaCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBiZWZvcmUgd2UgZXZlbiAqdGhpbmsqIGFib3V0IHRoYXQgcGF0Y2guIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHByZS1wYXRjaCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbDsgaXQncyB0aGUgY29yZSBvZiBrZXJuZWwgbWVtb3J5IGFsbG9jYXRpb24gd2l0aG91dCBsb2NrIGNvbnRlbnRpb24gYW5kIHdpdGhvdXQgdGhlIHBlcmZvcm1hbmNlIHByb2ZpbGluZyBvdmVyaGVhZC4gU28sIEkgbmVlZCBhIHJvY2stc29saWQgZ3Jhc3Agb2YgaG93IGl0ICpjdXJyZW50bHkqIG9wZXJhdGVzLiBUaGlzIG1lYW5zIGxvb2tpbmcgYXQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgc2xhYiBhbGxvY2F0b3IsIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgYW55IHJlbGF0ZWQgY2FjaGluZyBtZWNoYW5pc21zLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpdCByZWxpZXMgb24/IEhvdyBkb2VzIGl0IGhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmVzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb250ZW50aW9uIGV2ZW4gKndpdGhvdXQqIGV4cGxpY2l0IGxvY2tzLCBwZXJoYXBzIHJlbGF0ZWQgdG8gYXRvbWljIG9wZXJhdGlvbnMgb3IgY2FjaGUgbGluZSBib3VuY2luZz8gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IGFzc3VtcHRpb25zIHRoZSBjb2RlIG1ha2VzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFRob3JvdWdobHkgcmV2aWV3aW5nIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAgbm93IGlzIHRoZSBrZXkuIFRoZSBkZXZpbCdzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgYW5kIHRoaXMga2luZCBvZiBzY3J1dGlueSBpcyB3aGF0IGVuc3VyZXMgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHN1YnRsZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gT2theSwgbGV0J3MgZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTk1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTM6NDY6MTAuMDA0MTAzMTgxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjU0NzEwNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zbGFiX2FsbG9jX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMzo0NjoxMC4wOTY2NjM1NzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjM3MTg5MjgwODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgYW5kIE9wdGltaXphdGlvbiBvZiBTTFVCIE5VTUEgUG9saWN5IEFwcGxpY2F0aW9uKipcblxuT2theSwgc28gdGhlIHBhdGNoIGhhcyBiZWVuIGFwcGxpZWQsIGxldCdzIHNlZSB3aGF0J3MgY2hhbmdlZC4gSG1tLCBpdCBzZWVtcyBsaWtlIHRoZSBrZXkgY2hhbmdlIGlzIHRoYXQgdGhlIHN0cmljdCBOVU1BIHBvbGljeSBhcHBsaWNhdGlvbiBpcyBiZWluZyBtb3ZlZCBhcm91bmQgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIGBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3lgIGxvZ2ljIGlzIG5vdyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBhbmQgYHNsYWJfYWxsb2Nfbm9kZWAgZnVuY3Rpb25zIGluc3RlYWQgb2YgYmVpbmcgcGVyZm9ybWVkIGluc2lkZSB0aGUgYF9fc2xhYl9hbGxvY19ub2RlYCBhbmQgYGFsbG9jX2Zyb21fcGNzYCBmdW5jdGlvbnMuXG5cbkJlZm9yZSB0aGUgcGF0Y2gsIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAgY2FsbGVkIGBfX3NsYWJfYWxsb2Nfbm9kZWAsIHdoaWNoIHdvdWxkIGFwcGx5IHRoZSBzdHJpY3QgTlVNQSBwb2xpY3kgYW5kIHRoZW4gY2FsbCBgX19fc2xhYl9hbGxvY2AuIE5vdywgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBjYWxscyBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBmaXJzdCwgYW5kIHRoZW4gY2FsbHMgYF9fX3NsYWJfYWxsb2NgIGRpcmVjdGx5LiBUaGVyZSdzIGEgYHJldHJ5YCBsYWJlbCBpbiBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgIHdoaWNoLCBpZiBpdCB3YXMgaGl0LCBjYXVzZWQgdGhlIGNvZGUgdG8gYXBwbHkgdGhlIHBvbGljeSBhZ2Fpbi4gTm93IGl0IG9ubHkgYXBwbGllcyBvbmNlIGJlZm9yZSB0aGUgYHJldHJ5YCBsYWJlbCwgYXMgaW50ZW5kZWQuXG5cbkFsc28sIGBzbGFiX2FsbG9jX25vZGVgIG9yaWdpbmFsbHkgY2FsbGVkIGBhbGxvY19mcm9tX3Bjc2AsIHdoaWNoIG1pZ2h0IGhhdmUgYXBwbGllZCB0aGUgc3RyaWN0IE5VTUEgcG9saWN5LCBhbmQgaWYgdGhhdCBmYWlsZWQsIGl0IHdvdWxkIGNhbGwgYF9fc2xhYl9hbGxvY19ub2RlYCwgd2hpY2ggKmFsc28qIGFwcGxpZWQgdGhlIHN0cmljdCBOVU1BIHBvbGljeS4gVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB0aGUgYG5vZGVgIHBhcmFtZXRlciwgd2hpY2ggYGFsbG9jX2Zyb21fcGNzYCBtaWdodCBjaGFuZ2UgaW50ZXJuYWxseSB3aGVuIGFwcGx5aW5nIHRoZSBzdHJpY3QgTlVNQSBwb2xpY3ksIGJ1dCB0aGlzIG1vZGlmaWVkIHZhbHVlIHdhcyAqbm90KiBwYXNzZWQgYmFjayB0byBgc2xhYl9hbGxvY19ub2RlYCBzbyBgX19zbGFiX2FsbG9jX25vZGVgIHdvdWxkIHJlcGVhdCB0aGUgbWVtcG9saWN5IGV2YWx1YXRpb24uXG5cblRoaXMgcGF0Y2ggcmVmYWN0b3JzIHRoYXQ6IGBzbGFiX2FsbG9jX25vZGVgIG5vdyBjYWxscyBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCAqZmlyc3QqLCBhbmQgKnRoZW4qIHRoZSBgbm9kZWAgdmFyaWFibGUgdGhhdCBpcyBwYXNzZWQgdG8gYGFsbG9jX2Zyb21fcGNzYCBhbmQgYF9fX3NsYWJfYWxsb2NgIGlzIHRoZSB1cGRhdGVkIHZhbHVlLCBiYXNlZCBvbiB0aGUgc3RyaWN0IE5VTUEgcG9saWN5LlxuXG5TbywgdGhlIGVmZmVjdCBvZiB0aGUgcGF0Y2ggaXMganVzdCB0byBwZXJmb3JtIHRoZSBzYW1lIE5VTUEgcG9saWN5IGxvb2t1cCBvbmx5ICpvbmNlKiwgYXZvaWRpbmcgcmVkdW5kYW50IGNvbXB1dGF0aW9ucy4gQmVjYXVzZSBgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5YCBpcyBkZXRlcm1pbmlzdGljIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1lbXBvbGljeSwgdGhpcyBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC4gVGhlIHBhdGNoIHNpbXBseSBlbGltaW5hdGVzIHRoZSBkdXBsaWNhdGVkIGFwcGxpY2F0aW9uIG9mIHRoZSBOVU1BIHBvbGljeSBjaGVjay5cblxuVGhlIHBhdGNoIGl0c2VsZiBqdXN0IG1vdmVzIHRoZSBjaGVjayB0byBvcHRpbWl6ZS5cblxuVGhpcyBhcHBlYXJzIHRvIGJlIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgb3B0aW1pemF0aW9uLiBJdCBkb2Vzbid0IG1vZGlmeSB0aGUgZnVuY3Rpb25hbCBiZWhhdmlvciBvZiB0aGUgYWxsb2NhdGlvbiBwYXRocywganVzdCBtYWtlcyBpdCBhIGxpdHRsZSBmYXN0ZXIgYnkgYXZvaWRpbmcgcmVkdW5kYW50IGNoZWNrcyBhbmQgcG9saWN5IGFwcGxpY2F0aW9uLCB3aGljaCBtZWFucyB0aGF0IHRoZSBleGVjdXRpb24gZmxvdyAqc2hvdWxkbid0KiBjaGFuZ2UgaW4gYW55IHdheSB0aGF0IHdvdWxkIHJlcXVpcmUgbmV3IGZ1enppbmcuIFRoZSBjb21taXQgbWVzc2FnZSBwcm9iYWJseSBzYXlzIHNvbWV0aGluZyBsaWtlIFwiZGVkdXBsaWNhdGUgc3RyaWN0X251bWEgcG9saWN5IGFwcGxpY2F0aW9uXCIuXG5cbkdpdmVuIHRoaXMsIEkgd291bGQgY29uY2x1ZGUgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gSXQncyBhIHJlZmFjdG9yaW5nLCBub3QgYSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MzMsIk91dHB1dFRva2VucyI6MTMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMzo0NjozMy44MTU1OTU5NzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgYW5kIG9wdGltaXphdGlvbiBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGV4dHJhY3RzIHRoZSBzdHJpY3QgTlVNQSBwb2xpY3kgZXZhbHVhdGlvbiBpbnRvIGEgbmV3IGlubGluZSBmdW5jdGlvbiBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3koKSBhbmQgY2FsbHMgaXQgb25jZSBpbiB0aGUgYWxsb2NhdGlvbiBwYXRocyAoc2xhYl9hbGxvY19ub2RlIGFuZCBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZikgaW5zdGVhZCBvZiByZWR1bmRhbnRseSBldmFsdWF0aW5nIGl0IGluIGJvdGggYWxsb2NfZnJvbV9wY3MoKSBhbmQgX19zbGFiX2FsbG9jX25vZGUoKS4gVGhlcmUgaXMgbm8gY2hhbmdlIHRvIHRoZSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IHRoYXQgd2FycmFudHMgZGVkaWNhdGVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgYW5kIG9wdGltaXphdGlvbiBpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIEl0IGV4dHJhY3RzIHRoZSBzdHJpY3QgTlVNQSBwb2xpY3kgZXZhbHVhdGlvbiBpbnRvIGEgbmV3IGlubGluZSBmdW5jdGlvbiBhcHBseV9zdHJpY3RfbnVtYV9wb2xpY3koKSBhbmQgY2FsbHMgaXQgb25jZSBpbiB0aGUgYWxsb2NhdGlvbiBwYXRocyAoc2xhYl9hbGxvY19ub2RlIGFuZCBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZikgaW5zdGVhZCBvZiByZWR1bmRhbnRseSBldmFsdWF0aW5nIGl0IGluIGJvdGggYWxsb2NfZnJvbV9wY3MoKSBhbmQgX19zbGFiX2FsbG9jX25vZGUoKS4gVGhlcmUgaXMgbm8gY2hhbmdlIHRvIHRoZSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IHRoYXQgd2FycmFudHMgZGVkaWNhdGVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlp5z8[1] Phase: Running StartedAt: 2026-06-26 13:47:57 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlp5z8[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-26 13:47:57 +0000 UTC FinishedAt: 2026-06-26 13:48:04 +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,}