Name: series-workflowhgbfs Phase: Succeeded StartedAt: 2026-06-22 16:20:10 +0000 UTC FinishedAt: 2026-06-22 17:28:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[0] Phase: Succeeded StartedAt: 2026-06-22 16:20:10 +0000 UTC FinishedAt: 2026-06-22 16:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[0].run-triage Phase: Succeeded StartedAt: 2026-06-22 16:20:10 +0000 UTC FinishedAt: 2026-06-22 16:30:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "ef057cbf825e03b63f6edf5980f96abf3c53089d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "ef057cbf825e03b63f6edf5980f96abf3c53089d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "8ffdef2f-676c-46e3-a410-7ce0e857da7c" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "dat_peek_cmma", "dat_get_cmma", "gmap_clear_young_crste", "__set_cmma_dirty_pte", "gmap_set_cmma_all_dirty", "gmap_protect_asce_top_level", "kvm_s390_set_mem_control", "kvm_s390_vm_start_migration", "kvm_s390_vm_stop_migration", "kvm_s390_set_cmma_bits", "handle_sske", "handle_pfmf", "handle_essa", "gmap_helper_try_set_pte_unused" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhdF9wZWVrX2NtbWEmIzM0OywKICAgICYjMzQ7ZGF0X2dldF9jbW1hJiMzNDssCiAgICAmIzM0O2dtYXBfY2xlYXJfeW91bmdfY3JzdGUmIzM0OywKICAgICYjMzQ7X19zZXRfY21tYV9kaXJ0eV9wdGUmIzM0OywKICAgICYjMzQ7Z21hcF9zZXRfY21tYV9hbGxfZGlydHkmIzM0OywKICAgICYjMzQ7Z21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3NldF9tZW1fY29udHJvbCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfc2V0X2NtbWFfYml0cyYjMzQ7LAogICAgJiMzNDtoYW5kbGVfc3NrZSYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcGZtZiYjMzQ7LAogICAgJiMzNDtoYW5kbGVfZXNzYSYjMzQ7LAogICAgJiMzNDtnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgS1ZNIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBDb2xsYWJvcmF0aXZlIE1lbW9yeSBNYW5hZ2VtZW50IEFzc2lzdCAoQ01NQSksIHBhZ2UgdGFibGUgdXBkYXRlcywgYW5kIFZNIG1pZ3JhdGlvbi4gSXQgZml4ZXMgYnVncyBpbiBDTU1BIHN0YXRlIGhhbmRsaW5nLCBkaXJ0eSBwYWdlIHRyYWNraW5nLCBhbmQgbWVtb3J5IGNvbnRyb2wgaW9jdGxzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgS1ZNIGNvcmUgbG9naWMgYW5kIGluc3RydWN0aW9uIGhhbmRsZXJzLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucyBpbiB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAyMzQzOWJkZGFhNDE2MWVhNzcxYzgwNjI2ODY1ZDZlYzljYTRlYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAxNjoyNzo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggMmM2Y2VlODI0MWUwNDQuLjQ3NDBjNzU2NDllYmI1IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTk4MCw2ICYjNDM7OTgwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZClcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuIHtcbiYjNDM7XHRpZiAocHRlX3ByZXNlbnQocHRlKSlcbiYjNDM7XHRcdHB0ZSA9IGNsZWFyX3B0ZV9iaXQocHRlLCBfX3BncHJvdChfUEFHRV9VTlVTRUQpKTtcbiBcdFdSSVRFX09OQ0UoKnB0ZXAsIHB0ZSk7XG4gfVxuIFxuQEAgLTEzMzIsOCAmIzQzOzEzMzQsNiBAQCBwZ3Byb3RfdCBwZ3Byb3Rfd3JpdGVjb21iaW5lKHBncHJvdF90IHByb3QpO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IG5yKVxuIHtcbi1cdGlmIChwdGVfcHJlc2VudChlbnRyeSkpXG4tXHRcdGVudHJ5ID0gY2xlYXJfcHRlX2JpdChlbnRyeSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XG4gXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBlbnRyeSwgbnIpO1xuIFx0Zm9yICg7Oykge1xuIFx0XHRzZXRfcHRlKHB0ZXAsIGVudHJ5KTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuaW5kZXggYTRmZTY2NGY2NWVlMTUuLjVmMTk2MGVjOTgyZDA0IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuQEAgLTEyMDksNyAmIzQzOzEyMDksNyBAQCBpbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKVxuIFx0aW50IHJjO1xuIFxuIFx0cmMgPSBfZGF0X3dhbGtfZ2ZuX3JhbmdlKHN0YXJ0LCBzdGFydCAmIzQzOyAqY291bnQsIGFzY2UsIFx1MDAyNm9wcywgREFUX1dBTEtfREVGQVVMVCwgXHUwMDI2c3RhdGUpO1xuLVx0KmNvdW50ID0gc3RhdGUuZW5kIC0gc3RhcnQ7XG4mIzQzO1x0KmNvdW50ID0gc3RhdGUuZW5kIFx1MDAzZT0gc3RhcnQgPyBzdGF0ZS5lbmQgLSBzdGFydCA6IDA7XG4gXHQvKiBSZXR1cm4gc3VjY2VzcyBpZiBhdCBsZWFzdCBvbmUgdmFsdWUgd2FzIHNhdmVkLCBvdGhlcndpc2UgYW4gZXJyb3IuICovXG4gXHRyZXR1cm4gKHJjID09IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICpjb3VudCBcdTAwM2UgMCkgPyAwIDogcmM7XG4gfVxuQEAgLTEyNTMsNiAmIzQzOzEyNTMsOSBAQCBpbnQgZGF0X2dldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzLFxuIFx0fTtcbiBcbiBcdF9kYXRfd2Fsa19nZm5fcmFuZ2UoKnN0YXJ0LCBhc2NlX2VuZChhc2NlKSwgYXNjZSwgXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsIFx1MDAyNnN0YXRlKTtcbiYjNDM7XHQvKiBJZiBubyBkaXJ0eSBwYWdlcyB3ZXJlIGZvdW5kLCB3cmFwIGFyb3VuZCBhbmQgY29udGludWUgc2VhcmNoaW5nICovXG4mIzQzO1x0aWYgKCpzdGFydCBcdTAwMjZcdTAwMjYgc3RhdGUuc3RhcnQgPT0gLTEpXG4mIzQzO1x0XHRfZGF0X3dhbGtfZ2ZuX3JhbmdlKDAsICpzdGFydCwgYXNjZSwgXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsIFx1MDAyNnN0YXRlKTtcbiBcbiBcdGlmIChzdGF0ZS5zdGFydCA9PSAtMSkge1xuIFx0XHQqY291bnQgPSAwO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZ21hcC5jIGIvYXJjaC9zMzkwL2t2bS9nbWFwLmNcbmluZGV4IDc3ODI5Zjc4N2RjNzgxLi41ZTc1NDg1YjUzZjlmZCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZ21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2dtYXAuY1xuQEAgLTMzMiw3ICYjNDM7MzMyLDcgQEAgc3RhdGljIGxvbmcgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgc3RcbiBcdFx0bmV3LmguaSA9IDE7XG4gXHRcdG5ldy5zLmZjMS55ID0gMDtcbiBcdFx0bmV3LnMuZmMxLnByZWZpeF9ub3RpZiA9IDA7XG4tXHRcdGlmIChuZXcucy5mYzEuZCB8fCAhbmV3LmgucClcbiYjNDM7XHRcdGlmICgobmV3LnMuZmMxLmQgfHwgIW5ldy5oLnApIFx1MDAyNlx1MDAyNiAhbmV3LnMuZmMxLnMpXG4gXHRcdFx0Zm9saW9fc2V0X2RpcnR5KHBoeXNfdG9fZm9saW8oY3JzdGVfb3JpZ2luX2xhcmdlKGNyc3RlKSkpO1xuIFx0XHRuZXcucy5mYzEuZCA9IDA7XG4gXHRcdG5ldy5oLnAgPSAxO1xuQEAgLTExMDAsNyAmIzQzOzExMDAsMTMgQEAgaW50IGdtYXBfcHJvdGVjdF9ybWFwKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqc2csIGdmbl90IHBfZ2ZcbiBcbiBzdGF0aWMgbG9uZyBfX3NldF9jbW1hX2RpcnR5X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuIHtcbi1cdF9fYXRvbWljNjRfb3IoUEdTVEVfQ01NQV9EX0JJVCwgXHUwMDI2cGdzdGVfb2YocHRlcCktXHUwMDNldmFsKTtcbiYjNDM7XHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbiYjNDM7XG4mIzQzO1x0cGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbiYjNDM7XHRwZ3N0ZS5jbW1hX2QgPSAxO1xuJiM0MztcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuJiM0MztcdGF0b21pYzY0X2luYyh3YWxrLVx1MDAzZXByaXYpO1xuJiM0MztcbiBcdGlmIChuZWVkX3Jlc2NoZWQoKSlcbiBcdFx0cmV0dXJuIG5leHQ7XG4gXHRyZXR1cm4gMDtcbkBAIC0xMTE0LDcgJiM0MzsxMTIwLDggQEAgdm9pZCBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShzdHJ1Y3QgZ21hcCAqZ21hcClcbiBcdGRvIHtcbiBcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2Z21hcC1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4gXHRcdFx0Z2ZuID0gX2RhdF93YWxrX2dmbl9yYW5nZShnZm4sIGFzY2VfZW5kKGdtYXAtXHUwMDNlYXNjZSksIGdtYXAtXHUwMDNlYXNjZSwgXHUwMDI2b3BzLFxuLVx0XHRcdFx0XHRcdCAgREFUX1dBTEtfSUdOX0hPTEVTLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICBEQVRfV0FMS19JR05fSE9MRVMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgXHUwMDI2Z21hcC1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTtcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHR9IHdoaWxlIChnZm4pO1xuIH1cbkBAIC0xMjg3LDcgJiM0MzsxMjk0LDcgQEAgc3RhdGljIGludCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFcbiBcdC8qIFBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbiBrdm1fbW11X2ludmFsaWRhdGVfZW5kKCkuICovXG4gXHRzbXBfcm1iKCk7XG4gXG4tXHRyYyA9IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlcyhzZy1cdTAwM2Vrdm0sIGNvbnRleHQuZiwgYXNjZS5yc3RvLCBhc2NlLmR0ICYjNDM7IDEsIGZhbHNlKTtcbiYjNDM7XHRyYyA9IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlcyhzZy1cdTAwM2Vrdm0sIGNvbnRleHQuZiwgYXNjZS5yc3RvLCBhc2NlLnRsICYjNDM7IDEsIGZhbHNlKTtcbiBcdGlmIChyYyBcdTAwM2UgMClcbiBcdFx0cmMgPSAtRUZBVUxUO1xuIFx0aWYgKCFyYylcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IGRjOWM3NDUxZmU5Nzk0Li5iZGQyMjkyY2ZkYzc2OSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtOTk0LDYgJiM0Mzs5OTQsOCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dFxuIHtcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4gXHRzd2l0Y2ggKGF0dHItXHUwMDNlYXR0cikge1xuIFx0Y2FzZSBLVk1fUzM5MF9WTV9NRU1fRU5BQkxFX0NNTUE6XG4gXHRcdHJldCA9IC1FTlhJTztcbkBAIC0xMDAxLDcgJiM0MzsxMDAzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0Vk1fRVZFTlQoa3ZtLCAzLCBcJiMzNDslc1wmIzM0OywgXCYjMzQ7RU5BQkxFOiBDTU1BIHN1cHBvcnRcJiMzNDspO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbiBcdFx0aWYgKGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzKVxuIFx0XHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0ZWxzZSB7XG5AQCAtMTAxMCw3ICYjNDM7MTAxMSw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0XG4gXHRcdFx0a3ZtLVx1MDAzZWFyY2gudXNlX3BmbWZpID0gMDtcbiBcdFx0XHRyZXQgPSAwO1xuIFx0XHR9XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9WTV9NRU1fQ0xSX0NNTUE6IHtcbiBcdFx0Z2ZuX3Qgc3RhcnRfZ2ZuID0gMDtcbkBAIC0xMDI0LDcgJiM0MzsxMDI0LDggQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRcbiBcbiBcdFx0Vk1fRVZFTlQoa3ZtLCAzLCBcJiMzNDslc1wmIzM0OywgXCYjMzQ7UkVTRVQ6IENNTUEgc3RhdGVzXCYjMzQ7KTtcbiBcdFx0ZG8ge1xuLVx0XHRcdHN0YXJ0X2dmbiA9IGRhdF9yZXNldF9jbW1hKGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgc3RhcnRfZ2ZuKTtcbiYjNDM7XHRcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKVxuJiM0MztcdFx0XHRcdHN0YXJ0X2dmbiA9IGRhdF9yZXNldF9jbW1hKGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgc3RhcnRfZ2ZuKTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0fSB3aGlsZSAoc3RhcnRfZ2ZuKTtcbiBcdFx0cmV0ID0gMDtcbkBAIC0xMDQyLDggJiM0MzsxMDQzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRcbiBcdFx0aWYgKGdldF91c2VyKG5ld19saW1pdCwgKHU2NCBfX3VzZXIgKilhdHRyLVx1MDAzZWFkZHIpKVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFxuLVx0XHRndWFyZChtdXRleCkoXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuLVxuIFx0XHRuZXdfbGltaXQgPSBBTElHTihuZXdfbGltaXQsIEhQQUdFX1NJWkUpO1xuIFx0XHRpZiAoa3ZtLVx1MDAzZWFyY2gubWVtX2xpbWl0ICE9IEtWTV9TMzkwX05PX01FTV9MSU1JVCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIG5ld19saW1pdCBcdTAwM2Uga3ZtLVx1MDAzZWFyY2gubWVtX2xpbWl0KVxuQEAgLTEyMjMsNyAmIzQzOzEyMjIsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbXM7XG4gXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcbi1cdHVuc2lnbmVkIGxvbmcgcmFtX3BhZ2VzID0gMDtcbiBcdGludCBia3Q7XG4gXG4gXHQvKiBtaWdyYXRpb24gbW9kZSBhbHJlYWR5IGVuYWJsZWQgKi9cbkBAIC0xMjQwLDEyICYjNDM7MTIzOCwxMSBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4gXHRrdm1fZm9yX2VhY2hfbWVtc2xvdChtcywgYmt0LCBzbG90cykge1xuIFx0XHRpZiAoIW1zLVx1MDAzZWRpcnR5X2JpdG1hcClcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0cmFtX3BhZ2VzICYjNDM7PSBtcy1cdTAwM2VucGFnZXM7XG4gXHR9XG4gXHQvKiBtYXJrIGFsbCB0aGUgcGFnZXMgYXMgZGlydHkgKi9cbiYjNDM7XHRhdG9taWM2NF9zZXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcywgMCk7XG4gXHRnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShrdm0tXHUwMDNlYXJjaC5nbWFwKTtcbi1cdGF0b21pYzY0X3NldChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzLCByYW1fcGFnZXMpO1xuLVx0a3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgPSAxO1xuJiM0MztcdFdSSVRFX09OQ0Uoa3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUsIDEpO1xuIFx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RBUlRfTUlHUkFUSU9OKTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMjU5LDcgJiM0MzsxMjU2LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4gXHQvKiBtaWdyYXRpb24gbW9kZSBhbHJlYWR5IGRpc2FibGVkICovXG4gXHRpZiAoIWt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlKVxuIFx0XHRyZXR1cm4gMDtcbi1cdGt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlID0gMDtcbiYjNDM7XHRXUklURV9PTkNFKGt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlLCAwKTtcbiBcdGlmIChrdm0tXHUwMDNlYXJjaC51c2VfY21tYSlcbiBcdFx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RPUF9NSUdSQVRJT04pO1xuIFx0cmV0dXJuIDA7XG5AQCAtMjMxNyw4ICYjNDM7MjMxNCw4IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXG4gc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGt2bV9zMzkwX2NtbWFfbG9nICphcmdzKVxuIHtcbi1cdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jO1xuLVx0dTggKmJpdHMgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcbiYjNDM7XHR1OCAqYml0cyBfX2ZyZWUoa3ZmcmVlKSA9IE5VTEw7XG4gXHRpbnQgciA9IDA7XG4gXG4gXHRpZiAoIWt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hKVxuQEAgLTIzMzgsMTggJiM0MzsyMzM1LDE2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0Yml0cyA9IHZtYWxsb2MoYXJyYXlfc2l6ZShzaXplb2YoKmJpdHMpLCBhcmdzLVx1MDAzZWNvdW50KSk7XG4gXHRpZiAoIWJpdHMpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRyID0gY29weV9mcm9tX3VzZXIoYml0cywgKHZvaWQgX191c2VyICopYXJncy1cdTAwM2V2YWx1ZXMsIGFyZ3MtXHUwMDNlY291bnQpO1xuLVx0aWYgKHIpIHtcbi1cdFx0ciA9IC1FRkFVTFQ7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuJiM0MztcdGlmIChyKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4gXHRkbyB7XG4gXHRcdHIgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAobWMpO1xuIFx0XHRpZiAocilcbi1cdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0cmV0dXJuIHI7XG4gXHRcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuIFx0XHRcdHIgPSBkYXRfc2V0X2NtbWFfYml0cyhtYywga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBhcmdzLVx1MDAzZXN0YXJ0X2dmbixcbiBcdFx0XHRcdFx0ICAgICAgYXJncy1cdTAwM2Vjb3VudCwgYXJncy1cdTAwM2VtYXNrLCBiaXRzKTtcbkBAIC0yMzU3LDkgJiM0MzsyMzUyLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBcdH0gd2hpbGUgKHIgPT0gLUVOT01FTSk7XG4gXG4gXHRzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2VmbGFncyk7XG4tb3V0OlxuLVx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuLVx0dmZyZWUoYml0cyk7XG4mIzQzO1xuIFx0cmV0dXJuIHI7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbmluZGV4IDQ0N2VjN2VkNDIzZGM0Li5hZDBkZGM0MzNhNzNjMyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHJpdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuQEAgLTM2Niw3ICYjNDM7MzY2LDkgQEAgc3RhdGljIGludCBoYW5kbGVfc3NrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdGlmIChyYyBcdTAwM2UgMSlcbiBcdFx0XHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9BRERSRVNTSU5HKTtcbiBcdFx0aWYgKHJjID09IC1FTk9NRU0pIHtcbi1cdFx0XHRrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cdTAwM2VhcmNoLm1jKTtcbiYjNDM7XHRcdFx0cmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cdTAwM2VhcmNoLm1jKTtcbiYjNDM7XHRcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRcdHJldHVybiByYztcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFx0XHRpZiAocmMgXHUwMDNjIDApXG5AQCAtMTEyMiw3ICYjNDM7MTEyNCw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BmbWYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdGlmIChyYyBcdTAwM2UgMSlcbiBcdFx0XHRcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgcmMpO1xuIFx0XHRcdGlmIChyYyA9PSAtRU5PTUVNKSB7XG4tXHRcdFx0XHRrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cdTAwM2VhcmNoLm1jKTtcbiYjNDM7XHRcdFx0XHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cCh2Y3B1LVx1MDAzZWFyY2gubWMpO1xuJiM0MztcdFx0XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0XHRcdHJldHVybiByYztcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAocmMgXHUwMDNjIDApXG5AQCAtMTIzMiw3ICYjNDM7MTIzNiw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdFx0XHRcdDogRVNTQV9TRVRfU1RBQkxFX0lGX1JFU0lERU5UKSlcbiBcdFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fU1BFQ0lGSUNBVElPTik7XG4gXG4tXHRpZiAoIXZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUpIHtcbiYjNDM7XHRpZiAoIVJFQURfT05DRSh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBDTU1BIGlzIGVuYWJsZWQgaW4gdGhlIEtWTSBzZXR0aW5ncywgYnV0IGlzIGRpc2FibGVkIGluXG4gXHRcdCAqIHRoZSBTSUUgYmxvY2sgYW5kIGluIHRoZSBtbV9jb250ZXh0LCBhbmQgd2UgYXJlIG5vdCBkb2luZ1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYyBiL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY1xuaW5kZXggZWUzZjM3YWY4YWVlNGEuLjRiZjdjOTAxMmZlYjZhIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmNcbkBAIC0xODEsNyAmIzQzOzE4MSw4IEBAIHZvaWQgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHZtYWRkcilcbiBcdGlmIChJU19FUlJfT1JfTlVMTChwdGVwKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0X19hdG9taWM2NF9vcihfUEFHRV9VTlVTRUQsIChsb25nICopcHRlcCk7XG4mIzQzO1x0aWYgKHB0ZV9wcmVzZW50KCpwdGVwKSlcbiYjNDM7XHRcdF9fYXRvbWljNjRfb3IoX1BBR0VfVU5VU0VELCAobG9uZyAqKXB0ZXApO1xuIFx0cHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcbmluZGV4IGUzOWE3MjRmZTg2MGUzLi4xNWQ4MWIyZWQ3YWQzOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xuQEAgLTM0LDE2ICYjNDM7MzQsMjIgQEAgc3RhdGljIGNoYXIgY21tYV92YWx1ZV9idWZbTUFJTl9QQUdFX0NPVU5UICYjNDM7IFRFU1RfREFUQV9QQUdFX0NPVU5UXTtcbiAvKipcbiAgKiBEaXJ0eSBDTU1BIGF0dHJpYnV0ZXMgb2YgZXhhY3RseSBvbmUgcGFnZSBpbiB0aGUgVEVTVF9EQVRBIG1lbXNsb3QsXG4gICogc28gdXNlX2NtbWEgZ29lcyBvbiBhbmQgdGhlIENNTUEgcmVsYXRlZCBpb2N0bHMgZG8gc29tZXRoaW5nLlxuJiM0MzsgKiBUb3VjaCB0aGUgcGFnZSBhdCBvZmZzZXQgMU0gaW5zaWRlIFRFU1RfREFUQSB0byBtYWtlIHN1cmUgaXRzIHBhZ2VcbiYjNDM7ICogdGFibGVzIGFyZSBhbGxvY2F0ZWQgaW4gdGhlIGhvc3QuXG4gICovXG4gc3RhdGljIHZvaWQgZ3Vlc3RfZG9fb25lX2Vzc2Eodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUoXG4gXHRcdC8qIGxvYWQgVEVTVF9EQVRBX1NUQVJUX0dGTiBpbnRvIHIxICovXG4mIzQzO1x0XHRcJiMzNDtcdHhnciAxLDFcXG5cJiMzNDtcbiBcdFx0XCYjMzQ7XHRsbGlsZiAxLCVbc3RhcnRfZ2ZuXVxcblwmIzM0O1xuIFx0XHQvKiBjYWxjdWxhdGUgdGhlIGFkZHJlc3MgZnJvbSB0aGUgZ2ZuICovXG4gXHRcdFwmIzM0O1x0c2xsZyAxLDEsMTIoMClcXG5cJiMzNDtcbiBcdFx0Lyogc2V0IHRoZSBmaXJzdCBwYWdlIGluIFRFU1RfREFUQSBtZW1zbG90IHRvIFNUQUJMRSAqL1xuIFx0XHRcJiMzNDtcdC5pbnNuIHJyZiwweGI5YWIwMDAwLDIsMSwxLDBcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1x0YWdmaSAxLDB4MTAwMDAwXFxuXCYjMzQ7XG4mIzQzO1x0XHQvKiBhbHNvIHRvdWNoIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzZWNvbmQgTUIgb2YgVEVTVF9EQVRBICovXG4mIzQzO1x0XHRcJiMzNDtcdC5pbnNuIHJyZiwweGI5YWIwMDAwLDIsMSwxLDBcXG5cJiMzNDtcbiBcdFx0LyogaHlwZXJjYWxsICovXG4gXHRcdFwmIzM0O1x0ZGlhZyAwLDAsMHg1MDFcXG5cJiMzNDtcbiBcdFx0XCYjMzQ7MDpcdGogMGJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXRfcGVla19jbW1hJiMzNDssCiAgICAmIzM0O2RhdF9nZXRfY21tYSYjMzQ7LAogICAgJiMzNDtnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlJiMzNDssCiAgICAmIzM0O19fc2V0X2NtbWFfZGlydHlfcHRlJiMzNDssCiAgICAmIzM0O2dtYXBfc2V0X2NtbWFfYWxsX2RpcnR5JiMzNDssCiAgICAmIzM0O2dtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2wmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3NldF9jbW1hX2JpdHMmIzM0OywKICAgICYjMzQ7aGFuZGxlX3Nza2UmIzM0OywKICAgICYjMzQ7aGFuZGxlX3BmbWYmIzM0OywKICAgICYjMzQ7aGFuZGxlX2Vzc2EmIzM0OywKICAgICYjMzQ7Z21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgaGFuZGxpbmcgb2YgQ29sbGFib3JhdGl2ZSBNZW1vcnkgTWFuYWdlbWVudCBBc3Npc3QgKENNTUEpLCBwYWdlIHRhYmxlIHVwZGF0ZXMsIGFuZCBWTSBtaWdyYXRpb24uIEl0IGZpeGVzIGJ1Z3MgaW4gQ01NQSBzdGF0ZSBoYW5kbGluZywgZGlydHkgcGFnZSB0cmFja2luZywgYW5kIG1lbW9yeSBjb250cm9sIGlvY3Rscy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIEtWTSBjb3JlIGxvZ2ljIGFuZCBpbnN0cnVjdGlvbiBoYW5kbGVycywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gZmVhdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAyMzQzOWJkZGFhNDE2MWVhNzcxYzgwNjI2ODY1ZDZlYzljYTRlYTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyMiAxNjoyNzo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDJjNmNlZTgyNDFlMDQ0Li40NzQwYzc1NjQ5ZWJiNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC05ODAsNiAmIzQzOzk4MCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG1kKHBtZF90ICpwbWRwLCBwbWRfdCBwbWQpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCiB7CiYjNDM7CWlmIChwdGVfcHJlc2VudChwdGUpKQomIzQzOwkJcHRlID0gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpOwogCVdSSVRFX09OQ0UoKnB0ZXAsIHB0ZSk7CiB9CiAKQEAgLTEzMzIsOCAmIzQzOzEzMzQsNiBAQCBwZ3Byb3RfdCBwZ3Byb3Rfd3JpdGVjb21iaW5lKHBncHJvdF90IHByb3QpOwogc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBucikKIHsKLQlpZiAocHRlX3ByZXNlbnQoZW50cnkpKQotCQllbnRyeSA9IGNsZWFyX3B0ZV9iaXQoZW50cnksIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpOwogCXBhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQobW0sIGFkZHIsIHB0ZXAsIGVudHJ5LCBucik7CiAJZm9yICg7OykgewogCQlzZXRfcHRlKHB0ZXAsIGVudHJ5KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmMgYi9hcmNoL3MzOTAva3ZtL2RhdC5jCmluZGV4IGE0ZmU2NjRmNjVlZTE1Li41ZjE5NjBlYzk4MmQwNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5jCkBAIC0xMjA5LDcgJiM0MzsxMjA5LDcgQEAgaW50IGRhdF9wZWVrX2NtbWEoZ2ZuX3Qgc3RhcnQsIHVuaW9uIGFzY2UgYXNjZSwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcykKIAlpbnQgcmM7CiAKIAlyYyA9IF9kYXRfd2Fsa19nZm5fcmFuZ2Uoc3RhcnQsIHN0YXJ0ICYjNDM7ICpjb3VudCwgYXNjZSwgJmFtcDtvcHMsIERBVF9XQUxLX0RFRkFVTFQsICZhbXA7c3RhdGUpOwotCSpjb3VudCA9IHN0YXRlLmVuZCAtIHN0YXJ0OwomIzQzOwkqY291bnQgPSBzdGF0ZS5lbmQgJmd0Oz0gc3RhcnQgPyBzdGF0ZS5lbmQgLSBzdGFydCA6IDA7CiAJLyogUmV0dXJuIHN1Y2Nlc3MgaWYgYXQgbGVhc3Qgb25lIHZhbHVlIHdhcyBzYXZlZCwgb3RoZXJ3aXNlIGFuIGVycm9yLiAqLwogCXJldHVybiAocmMgPT0gLUVGQVVMVCAmYW1wOyZhbXA7ICpjb3VudCAmZ3Q7IDApID8gMCA6IHJjOwogfQpAQCAtMTI1Myw2ICYjNDM7MTI1Myw5IEBAIGludCBkYXRfZ2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCAqc3RhcnQsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMsCiAJfTsKIAogCV9kYXRfd2Fsa19nZm5fcmFuZ2UoKnN0YXJ0LCBhc2NlX2VuZChhc2NlKSwgYXNjZSwgJmFtcDtvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgJmFtcDtzdGF0ZSk7CiYjNDM7CS8qIElmIG5vIGRpcnR5IHBhZ2VzIHdlcmUgZm91bmQsIHdyYXAgYXJvdW5kIGFuZCBjb250aW51ZSBzZWFyY2hpbmcgKi8KJiM0MzsJaWYgKCpzdGFydCAmYW1wOyZhbXA7IHN0YXRlLnN0YXJ0ID09IC0xKQomIzQzOwkJX2RhdF93YWxrX2dmbl9yYW5nZSgwLCAqc3RhcnQsIGFzY2UsICZhbXA7b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsICZhbXA7c3RhdGUpOwogCiAJaWYgKHN0YXRlLnN0YXJ0ID09IC0xKSB7CiAJCSpjb3VudCA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2dtYXAuYyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jCmluZGV4IDc3ODI5Zjc4N2RjNzgxLi41ZTc1NDg1YjUzZjlmZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9nbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9nbWFwLmMKQEAgLTMzMiw3ICYjNDM7MzMyLDcgQEAgc3RhdGljIGxvbmcgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgc3QKIAkJbmV3LmguaSA9IDE7CiAJCW5ldy5zLmZjMS55ID0gMDsKIAkJbmV3LnMuZmMxLnByZWZpeF9ub3RpZiA9IDA7Ci0JCWlmIChuZXcucy5mYzEuZCB8fCAhbmV3LmgucCkKJiM0MzsJCWlmICgobmV3LnMuZmMxLmQgfHwgIW5ldy5oLnApICZhbXA7JmFtcDsgIW5ldy5zLmZjMS5zKQogCQkJZm9saW9fc2V0X2RpcnR5KHBoeXNfdG9fZm9saW8oY3JzdGVfb3JpZ2luX2xhcmdlKGNyc3RlKSkpOwogCQluZXcucy5mYzEuZCA9IDA7CiAJCW5ldy5oLnAgPSAxOwpAQCAtMTEwMCw3ICYjNDM7MTEwMCwxMyBAQCBpbnQgZ21hcF9wcm90ZWN0X3JtYXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZywgZ2ZuX3QgcF9nZgogCiBzdGF0aWMgbG9uZyBfX3NldF9jbW1hX2RpcnR5X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKQogewotCV9fYXRvbWljNjRfb3IoUEdTVEVfQ01NQV9EX0JJVCwgJmFtcDtwZ3N0ZV9vZihwdGVwKS0mZ3Q7dmFsKTsKJiM0MzsJdW5pb24gcGdzdGUgcGdzdGU7CiYjNDM7CiYjNDM7CXBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7CiYjNDM7CXBnc3RlLmNtbWFfZCA9IDE7CiYjNDM7CXBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpOwomIzQzOwlhdG9taWM2NF9pbmMod2Fsay0mZ3Q7cHJpdik7CiYjNDM7CiAJaWYgKG5lZWRfcmVzY2hlZCgpKQogCQlyZXR1cm4gbmV4dDsKIAlyZXR1cm4gMDsKQEAgLTExMTQsNyAmIzQzOzExMjAsOCBAQCB2b2lkIGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5KHN0cnVjdCBnbWFwICpnbWFwKQogCWRvIHsKIAkJc2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgJmFtcDtnbWFwLSZndDtrdm0tJmd0O21tdV9sb2NrKQogCQkJZ2ZuID0gX2RhdF93YWxrX2dmbl9yYW5nZShnZm4sIGFzY2VfZW5kKGdtYXAtJmd0O2FzY2UpLCBnbWFwLSZndDthc2NlLCAmYW1wO29wcywKLQkJCQkJCSAgREFUX1dBTEtfSUdOX0hPTEVTLCBOVUxMKTsKJiM0MzsJCQkJCQkgIERBVF9XQUxLX0lHTl9IT0xFUywKJiM0MzsJCQkJCQkgICZhbXA7Z21hcC0mZ3Q7a3ZtLSZndDthcmNoLmNtbWFfZGlydHlfcGFnZXMpOwogCQljb25kX3Jlc2NoZWQoKTsKIAl9IHdoaWxlIChnZm4pOwogfQpAQCAtMTI4Nyw3ICYjNDM7MTI5NCw3IEBAIHN0YXRpYyBpbnQgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hCiAJLyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi8KIAlzbXBfcm1iKCk7CiAKLQlyYyA9IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlcyhzZy0mZ3Q7a3ZtLCBjb250ZXh0LmYsIGFzY2UucnN0bywgYXNjZS5kdCAmIzQzOyAxLCBmYWxzZSk7CiYjNDM7CXJjID0ga3ZtX3MzOTBfZ2V0X2d1ZXN0X3BhZ2VzKHNnLSZndDtrdm0sIGNvbnRleHQuZiwgYXNjZS5yc3RvLCBhc2NlLnRsICYjNDM7IDEsIGZhbHNlKTsKIAlpZiAocmMgJmd0OyAwKQogCQlyYyA9IC1FRkFVTFQ7CiAJaWYgKCFyYykKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCBkYzljNzQ1MWZlOTc5NC4uYmRkMjI5MmNmZGM3NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTk5NCw2ICYjNDM7OTk0LDggQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHQKIHsKIAlpbnQgcmV0OwogCiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2t2bS0mZ3Q7bG9jayk7CiYjNDM7CiAJc3dpdGNoIChhdHRyLSZndDthdHRyKSB7CiAJY2FzZSBLVk1fUzM5MF9WTV9NRU1fRU5BQkxFX0NNTUE6CiAJCXJldCA9IC1FTlhJTzsKQEAgLTEwMDEsNyAmIzQzOzEwMDMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dAogCQkJYnJlYWs7CiAKIAkJVk1fRVZFTlQoa3ZtLCAzLCAmIzM0OyVzJiMzNDssICYjMzQ7RU5BQkxFOiBDTU1BIHN1cHBvcnQmIzM0Oyk7Ci0JCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O2xvY2spOwogCQlpZiAoa3ZtLSZndDtjcmVhdGVkX3ZjcHVzKQogCQkJcmV0ID0gLUVCVVNZOwogCQllbHNlIHsKQEAgLTEwMTAsNyAmIzQzOzEwMTEsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dAogCQkJa3ZtLSZndDthcmNoLnVzZV9wZm1maSA9IDA7CiAJCQlyZXQgPSAwOwogCQl9Ci0JCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfVk1fTUVNX0NMUl9DTU1BOiB7CiAJCWdmbl90IHN0YXJ0X2dmbiA9IDA7CkBAIC0xMDI0LDcgJiM0MzsxMDI0LDggQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHQKIAogCQlWTV9FVkVOVChrdm0sIDMsICYjMzQ7JXMmIzM0OywgJiMzNDtSRVNFVDogQ01NQSBzdGF0ZXMmIzM0Oyk7CiAJCWRvIHsKLQkJCXN0YXJ0X2dmbiA9IGRhdF9yZXNldF9jbW1hKGt2bS0mZ3Q7YXJjaC5nbWFwLSZndDthc2NlLCBzdGFydF9nZm4pOwomIzQzOwkJCXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7a3ZtLSZndDttbXVfbG9jaykKJiM0MzsJCQkJc3RhcnRfZ2ZuID0gZGF0X3Jlc2V0X2NtbWEoa3ZtLSZndDthcmNoLmdtYXAtJmd0O2FzY2UsIHN0YXJ0X2dmbik7CiAJCQljb25kX3Jlc2NoZWQoKTsKIAkJfSB3aGlsZSAoc3RhcnRfZ2ZuKTsKIAkJcmV0ID0gMDsKQEAgLTEwNDIsOCAmIzQzOzEwNDMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dAogCQlpZiAoZ2V0X3VzZXIobmV3X2xpbWl0LCAodTY0IF9fdXNlciAqKWF0dHItJmd0O2FkZHIpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJZ3VhcmQobXV0ZXgpKCZhbXA7a3ZtLSZndDtsb2NrKTsKLQogCQluZXdfbGltaXQgPSBBTElHTihuZXdfbGltaXQsIEhQQUdFX1NJWkUpOwogCQlpZiAoa3ZtLSZndDthcmNoLm1lbV9saW1pdCAhPSBLVk1fUzM5MF9OT19NRU1fTElNSVQgJmFtcDsmYW1wOwogCQkgICAgbmV3X2xpbWl0ICZndDsga3ZtLSZndDthcmNoLm1lbV9saW1pdCkKQEAgLTEyMjMsNyAmIzQzOzEyMjIsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbXM7CiAJc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHM7Ci0JdW5zaWduZWQgbG9uZyByYW1fcGFnZXMgPSAwOwogCWludCBia3Q7CiAKIAkvKiBtaWdyYXRpb24gbW9kZSBhbHJlYWR5IGVuYWJsZWQgKi8KQEAgLTEyNDAsMTIgJiM0MzsxMjM4LDExIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSkKIAlrdm1fZm9yX2VhY2hfbWVtc2xvdChtcywgYmt0LCBzbG90cykgewogCQlpZiAoIW1zLSZndDtkaXJ0eV9iaXRtYXApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmFtX3BhZ2VzICYjNDM7PSBtcy0mZ3Q7bnBhZ2VzOwogCX0KIAkvKiBtYXJrIGFsbCB0aGUgcGFnZXMgYXMgZGlydHkgKi8KJiM0MzsJYXRvbWljNjRfc2V0KCZhbXA7a3ZtLSZndDthcmNoLmNtbWFfZGlydHlfcGFnZXMsIDApOwogCWdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5KGt2bS0mZ3Q7YXJjaC5nbWFwKTsKLQlhdG9taWM2NF9zZXQoJmFtcDtrdm0tJmd0O2FyY2guY21tYV9kaXJ0eV9wYWdlcywgcmFtX3BhZ2VzKTsKLQlrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUgPSAxOwomIzQzOwlXUklURV9PTkNFKGt2bS0mZ3Q7YXJjaC5taWdyYXRpb25fbW9kZSwgMSk7CiAJa3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RBUlRfTUlHUkFUSU9OKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEyNTksNyAmIzQzOzEyNTYsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSkKIAkvKiBtaWdyYXRpb24gbW9kZSBhbHJlYWR5IGRpc2FibGVkICovCiAJaWYgKCFrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUpCiAJCXJldHVybiAwOwotCWt2bS0mZ3Q7YXJjaC5taWdyYXRpb25fbW9kZSA9IDA7CiYjNDM7CVdSSVRFX09OQ0Uoa3ZtLSZndDthcmNoLm1pZ3JhdGlvbl9tb2RlLCAwKTsKIAlpZiAoa3ZtLSZndDthcmNoLnVzZV9jbW1hKQogCQlrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KGt2bSwgS1ZNX1JFUV9TVE9QX01JR1JBVElPTik7CiAJcmV0dXJuIDA7CkBAIC0yMzE3LDggJiM0MzsyMzE0LDggQEAgc3RhdGljIGludCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSwKIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJICBjb25zdCBzdHJ1Y3Qga3ZtX3MzOTBfY21tYV9sb2cgKmFyZ3MpCiB7Ci0Jc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWM7Ci0JdTggKmJpdHMgPSBOVUxMOwomIzQzOwlzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7CiYjNDM7CXU4ICpiaXRzIF9fZnJlZShrdmZyZWUpID0gTlVMTDsKIAlpbnQgciA9IDA7CiAKIAlpZiAoIWt2bS0mZ3Q7YXJjaC51c2VfY21tYSkKQEAgLTIzMzgsMTggJiM0MzsyMzM1LDE2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sCiAJCXJldHVybiAtRU5PTUVNOwogCWJpdHMgPSB2bWFsbG9jKGFycmF5X3NpemUoc2l6ZW9mKCpiaXRzKSwgYXJncy0mZ3Q7Y291bnQpKTsKIAlpZiAoIWJpdHMpCi0JCWdvdG8gb3V0OwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiAKIAlyID0gY29weV9mcm9tX3VzZXIoYml0cywgKHZvaWQgX191c2VyICopYXJncy0mZ3Q7dmFsdWVzLCBhcmdzLSZndDtjb3VudCk7Ci0JaWYgKHIpIHsKLQkJciA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0OwotCX0KJiM0MzsJaWYgKHIpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKIAogCWRvIHsKIAkJciA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7CiAJCWlmIChyKQotCQkJYnJlYWs7CiYjNDM7CQkJcmV0dXJuIHI7CiAJCXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7a3ZtLSZndDttbXVfbG9jaykgewogCQkJciA9IGRhdF9zZXRfY21tYV9iaXRzKG1jLCBrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZSwgYXJncy0mZ3Q7c3RhcnRfZ2ZuLAogCQkJCQkgICAgICBhcmdzLSZndDtjb3VudCwgYXJncy0mZ3Q7bWFzaywgYml0cyk7CkBAIC0yMzU3LDkgJiM0MzsyMzUyLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSwKIAl9IHdoaWxlIChyID09IC1FTk9NRU0pOwogCiAJc2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sICZhbXA7a3ZtLSZndDthcmNoLmdtYXAtJmd0O2ZsYWdzKTsKLW91dDoKLQlrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7Ci0JdmZyZWUoYml0cyk7CiYjNDM7CiAJcmV0dXJuIHI7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmMKaW5kZXggNDQ3ZWM3ZWQ0MjNkYzQuLmFkMGRkYzQzM2E3M2MzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwpAQCAtMzY2LDcgJiM0MzszNjYsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9zc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJaWYgKHJjICZndDsgMSkKIAkJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX0FERFJFU1NJTkcpOwogCQlpZiAocmMgPT0gLUVOT01FTSkgewotCQkJa3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtJmd0O2FyY2gubWMpOwomIzQzOwkJCXJjID0ga3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtJmd0O2FyY2gubWMpOwomIzQzOwkJCWlmIChyYykKJiM0MzsJCQkJcmV0dXJuIHJjOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKHJjICZsdDsgMCkKQEAgLTExMjIsNyAmIzQzOzExMjQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9wZm1mKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJCWlmIChyYyAmZ3Q7IDEpCiAJCQkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCByYyk7CiAJCQlpZiAocmMgPT0gLUVOT01FTSkgewotCQkJCWt2bV9zMzkwX21tdV9jYWNoZV90b3B1cCh2Y3B1LSZndDthcmNoLm1jKTsKJiM0MzsJCQkJcmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS0mZ3Q7YXJjaC5tYyk7CiYjNDM7CQkJCWlmIChyYykKJiM0MzsJCQkJCXJldHVybiByYzsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmIChyYyAmbHQ7IDApCkBAIC0xMjMyLDcgJiM0MzsxMjM2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXNzYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCQkJCQk6IEVTU0FfU0VUX1NUQUJMRV9JRl9SRVNJREVOVCkpCiAJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX1NQRUNJRklDQVRJT04pOwogCi0JaWYgKCF2Y3B1LSZndDtrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUpIHsKJiM0MzsJaWYgKCFSRUFEX09OQ0UodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pZ3JhdGlvbl9tb2RlKSkgewogCQkvKgogCQkgKiBDTU1BIGlzIGVuYWJsZWQgaW4gdGhlIEtWTSBzZXR0aW5ncywgYnV0IGlzIGRpc2FibGVkIGluCiAJCSAqIHRoZSBTSUUgYmxvY2sgYW5kIGluIHRoZSBtbV9jb250ZXh0LCBhbmQgd2UgYXJlIG5vdCBkb2luZwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jIGIvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jCmluZGV4IGVlM2YzN2FmOGFlZTRhLi40YmY3YzkwMTJmZWI2YSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYwpAQCAtMTgxLDcgJiM0MzsxODEsOCBAQCB2b2lkIGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpCiAJaWYgKElTX0VSUl9PUl9OVUxMKHB0ZXApKQogCQlyZXR1cm47CiAKLQlfX2F0b21pYzY0X29yKF9QQUdFX1VOVVNFRCwgKGxvbmcgKilwdGVwKTsKJiM0MzsJaWYgKHB0ZV9wcmVzZW50KCpwdGVwKSkKJiM0MzsJCV9fYXRvbWljNjRfb3IoX1BBR0VfVU5VU0VELCAobG9uZyAqKXB0ZXApOwogCXB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jCmluZGV4IGUzOWE3MjRmZTg2MGUzLi4xNWQ4MWIyZWQ3YWQzOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMKQEAgLTM0LDE2ICYjNDM7MzQsMjIgQEAgc3RhdGljIGNoYXIgY21tYV92YWx1ZV9idWZbTUFJTl9QQUdFX0NPVU5UICYjNDM7IFRFU1RfREFUQV9QQUdFX0NPVU5UXTsKIC8qKgogICogRGlydHkgQ01NQSBhdHRyaWJ1dGVzIG9mIGV4YWN0bHkgb25lIHBhZ2UgaW4gdGhlIFRFU1RfREFUQSBtZW1zbG90LAogICogc28gdXNlX2NtbWEgZ29lcyBvbiBhbmQgdGhlIENNTUEgcmVsYXRlZCBpb2N0bHMgZG8gc29tZXRoaW5nLgomIzQzOyAqIFRvdWNoIHRoZSBwYWdlIGF0IG9mZnNldCAxTSBpbnNpZGUgVEVTVF9EQVRBIHRvIG1ha2Ugc3VyZSBpdHMgcGFnZQomIzQzOyAqIHRhYmxlcyBhcmUgYWxsb2NhdGVkIGluIHRoZSBob3N0LgogICovCiBzdGF0aWMgdm9pZCBndWVzdF9kb19vbmVfZXNzYSh2b2lkKQogewogCWFzbSB2b2xhdGlsZSgKIAkJLyogbG9hZCBURVNUX0RBVEFfU1RBUlRfR0ZOIGludG8gcjEgKi8KJiM0MzsJCSYjMzQ7CXhnciAxLDFcbiYjMzQ7CiAJCSYjMzQ7CWxsaWxmIDEsJVtzdGFydF9nZm5dXG4mIzM0OwogCQkvKiBjYWxjdWxhdGUgdGhlIGFkZHJlc3MgZnJvbSB0aGUgZ2ZuICovCiAJCSYjMzQ7CXNsbGcgMSwxLDEyKDApXG4mIzM0OwogCQkvKiBzZXQgdGhlIGZpcnN0IHBhZ2UgaW4gVEVTVF9EQVRBIG1lbXNsb3QgdG8gU1RBQkxFICovCiAJCSYjMzQ7CS5pbnNuIHJyZiwweGI5YWIwMDAwLDIsMSwxLDBcbiYjMzQ7CiYjNDM7CQkmIzM0OwlhZ2ZpIDEsMHgxMDAwMDBcbiYjMzQ7CiYjNDM7CQkvKiBhbHNvIHRvdWNoIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzZWNvbmQgTUIgb2YgVEVTVF9EQVRBICovCiYjNDM7CQkmIzM0OwkuaW5zbiBycmYsMHhiOWFiMDAwMCwyLDEsMSwwXG4mIzM0OwogCQkvKiBoeXBlcmNhbGwgKi8KIAkJJiMzNDsJZGlhZyAwLDAsMHg1MDFcbiYjMzQ7CiAJCSYjMzQ7MDoJaiAwYiYjMzQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2OTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWw6IHMzOTAgS1ZNIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyAqZG9lcyogaW50cm9kdWNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsLCBhbmQgdGhlcmVmb3JlLCBpdCYjMzk7cyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIG1vZGlmaWVkIGZpbGVzIHBvaW50IGRpcmVjdGx5IHRvIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0sIHdoaWNoIGlzIHNpZ25pZmljYW50LiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgbWlub3IgdHdlYWs7IHdlJiMzOTtyZSBsb29raW5nIGF0IGNvZGUgdGhhdCB0b3VjaGVzIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCBDTU1BIChDb2xsYWJvcmF0aXZlIE1lbW9yeSBNYW5hZ2VtZW50IEFzc2lzdCkgZnVuY3Rpb25hbGl0eSwgYW5kIFZNIG1pZ3JhdGlvbiDigJMgYWxsIGNyaXRpY2FsIGFyZWFzIHdpdGhpbiBhIHZpcnR1YWxpemF0aW9uIGNvbnRleHQuCgpNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCBLVk0gb24gczM5MCBpcyBhIHdlbGwtZXN0YWJsaXNoZWQgYW5kIGFjdGl2ZWx5IHVzZWQgcGxhdGZvcm0uIEl0JiMzOTtzIG5vdCBzb21lIG9ic2N1cmUgY29ybmVyIGNhc2UuIFRoaXMgbWVhbnMgYW55IGJ1Z3MgbHVya2luZyB3aXRoaW4gdGhlc2UgY2hhbmdlcyBjb3VsZCBoYXZlIHJlYWwtd29ybGQgaW1wYWN0LiBJbXBvcnRhbnRseSwgSSBrbm93IHRoYXQgU3l6a2FsbGVyIHN1cHBvcnRzIHMzOTB4LCB3aGljaCBpcyBhIG1ham9yIHBvc2l0aXZlIHNpZ24uIElmIHN5emthbGxlciBjYW4gd29yayBvbiB0aGUgcGxhdGZvcm0sIHRoZW4gd2UgaGF2ZSBhIGdvb2Qgb3Bwb3J0dW5pdHkuCgpOb3csIGxldCYjMzk7cyBnZXQgc3BlY2lmaWMuIEkgd2FudCB0byBpZGVudGlmeSB0aGUgKm1vc3QqIGludGVyZXN0aW5nIGZ1bmN0aW9ucyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSSBrbm93IHRoYXQgY2VydGFpbiBmdW5jdGlvbnMgbWlnaHQgYmUgaG90IHBhdGhzLCBhbmQgSSB3YW50IHRvIGV4Y2x1ZGUgdGhvc2UuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgc2V0X3B0ZWAsIGBzZXRfcHRlc2AsIGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlYCwgYF9fc2V0X2NtbWFfZGlydHlfcHRlYCwgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCwgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAsIGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgLCBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCwgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCwgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCBgaGFuZGxlX3Nza2VgLCBgaGFuZGxlX3BmbWZgLCBgaGFuZGxlX2Vzc2FgLCBhbmQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAuICBJIHN1c3BlY3QgYHNldF9wdGVgIGFuZCBgc2V0X3B0ZXNgIGFyZSBwcm9iYWJseSBob3QgcGF0aHMsIHNvIEkmIzM5O2xsIHB1dCB0aG9zZSBhc2lkZSBmb3Igbm93LgoKVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBLY29uZmlnIG9wdGlvbnMuIEkga25vdyB0aGF0IGBDT05GSUdfS1ZNYCB3aWxsIGJlIHJlbGV2YW50LCBhbmQgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMgQ01NQS1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQSBxdWljayBncmVwIGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIHdpbGwgdGVsbCBtZSBpZiB3ZSBuZWVkIHRvIGNvbnNpZGVyIHNwZWNpZmljIGVuYWJsZW1lbnQgZmxhZ3MgZm9yIHRob3JvdWdoIGZ1enppbmcuIFRoaXMgd2lsbCBnaXZlIG1lIGEgbW9yZSBjb25jcmV0ZSBwaWN0dXJlIG9mIHRoZSBleHBvc3VyZSBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXy4qQ01NQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk3NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgaXQgc2VlbXMgbGlrZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBpbW1lZGlhdGVseSBvYnZpb3VzLCBwcmUtY29uZmlndXJlZCBDTU1BIHNldHRpbmdzIEkgY2FuIHJlYWRpbHkgaWRlbnRpZnkuIFRpbWUgdG8gZGlnIGRlZXBlci4gTXkgbmV4dCBtb3ZlIGlzIHRvIGxldmVyYWdlIHRoZSBwb3dlciBvZiBgZ3JlcGAuIEkmIzM5O2xsIGZvY3VzIG15IHNlYXJjaCBvbiB0aGUgYGFyY2gvczM5MC9rdm0vYCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IG1lbnRpb25zIG9mIGBLVk1gLiBUaGlzIHNob3VsZCBoZWxwIG1lIHBpbnBvaW50IGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBjb2RlIHJlbGF0ZWQgdG8gS1ZNIHdpdGhpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIG5leHQgc3RlcCBnaXZlbiB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMjkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBmaWd1cmluZyBvdXQgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBLVk0uIE15IGluc3RpbmN0IHNheXMgdG8gc3RhcnQgd2l0aCBgS1ZNYCBhcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uLCB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1haW4gZGVmaW5pdGlvbnMgYXJlLiBIb3dldmVyLCBJIHdhbnQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBnb2luZyBvbiBoZXJlLiBUaGVyZWZvcmUsIEkgc2hvdWxkIGNoZWNrIHRoZSBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCBmaWxlLiBJdCYjMzk7cyB0aGUgb2J2aW91cyBwbGFjZSB0byBsb29rIGZvciBhbnkgc3BlY2lhbGl6ZWQgY29uZmlndXJhdGlvbnMgb3IgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIEtWTSBvbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgbW9zdCByZWxldmFudCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiBDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz02MDI9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNjA4LVx0Y2FzZSBLVk1fQ0FQX1MzOTBfR01BUDpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo2MDk6I2lmZGVmIENPTkZJR19LVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTYxMC1cdGNhc2UgS1ZNX0NBUF9TMzkwX1VDT05UUk9MOlxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMjI5PWludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjM3LVx0cmMgPSAtRUlOVkFMO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMzg6I2lmZGVmIENPTkZJR19LVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyMzktXHRpZiAodHlwZSBcdTAwMjYgfktWTV9WTV9TMzkwX1VDT05UUk9MKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NDgzPWxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTU1NC1cdH1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NTU1OiNpZmRlZiBDT05GSUdfS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTU2LVx0Y2FzZSBLVk1fUzM5MF9VQ0FTX01BUDoge1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01Njk4PXZtX2ZhdWx0X3Qga3ZtX2FyY2hfdmNwdV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2OTkte1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3MDA6I2lmZGVmIENPTkZJR19LVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MDEtXHRpZiAoKHZtZi1cdTAwM2VwZ29mZiA9PSBLVk1fUzM5MF9TSUVfUEFHRV9PRkZTRVQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIzNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBLVk0gcGF0Y2gsIGFuZCBpbW1lZGlhdGVseSB0aGUgZm9jdXMgaXMgb24gYSBoYW5kZnVsIG9mIGtleSBmdW5jdGlvbnMgdGhhdCBuZWVkIGEgdGhvcm91Z2ggaW5zcGVjdGlvbiwgc3BlY2lmaWNhbGx5IHRob3NlIHJlbGF0ZWQgdG8gS1ZNIG1lbW9yeSBjb250cm9sIG9uIHMzOTAgc3lzdGVtcy4gIEkmIzM5O20gc2VlaW5nIGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgLCBoYW5kbGluZyB0aG9zZSBpb2N0bHMg4oCTIGBLVk1fUzM5MF9WTV9NRU1fRU5BQkxFX0NNTUFgLCBgS1ZNX1MzOTBfVk1fTUVNX0NMUl9DTU1BYCwgYW5kIGBLVk1fUzM5MF9WTV9NRU1fTElNSVRfU0laRWAg4oCTIHRoYXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuICBUaGVuIHdlIGhhdmUgbWlncmF0aW9uLXJlbGF0ZWQgaGFuZGxlcnM6IGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gIGFuZCBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBhbmQgYWxzbyBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AuCgpCZXlvbmQgdGhlIGNvcmUgbWVtb3J5IGNvbnRyb2wsIGl0JiMzOTtzIGNsZWFyIHdlIGhhdmUgdG8gZGlnIGludG8gYWxsIHRoZSBDTU1BIGJpdHMsIHBhZ2luZyBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGhhbmRsaW5nIG9mIHRoZSBnbWFwLiBUaGlzIGluY2x1ZGVzIGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlYCwgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCwgYW5kIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgYW55IHN1YnRsZSBtaXNjb25maWd1cmF0aW9uIG9yIHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aG9zZSBnbWFwIHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzIGNvdWxkIGJlIGRpc2FzdHJvdXMuCgpUaGVuIHRoZSByZWFsIGludGVyZXN0aW5nIHN0dWZmIC0gdGhlIGluc3RydWN0aW9uIGhhbmRsZXJzOiBgaGFuZGxlX3Nza2VgLCBgaGFuZGxlX3BmbWZgLCBhbmQgYGhhbmRsZV9lc3NhYC4gIFRoZXNlIGFyZSBpbiBgYXJjaC9zMzkwL2t2bS9wcml2LmNgLiBUaGF0IG1lYW5zIHRoZXkmIzM5O3JlIGNvcmUgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMgd2l0aGluIHRoZSBLVk0gZ3Vlc3QuICBUaGV5JiMzOTtyZSAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgaGlnaCBvbiB0aGUgZnV6emluZyBsaXN0LiBBIHN1YnRsZSBidWcgdGhlcmUgY291bGQgbGVhZCB0byBzZXJpb3VzIFZNIGVzY2FwZXMuCgpJIHNob3VsZCBhbHNvIGNoZWNrIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgIGluIGBhcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmNgLgoKT2J2aW91c2x5LCBgQ09ORklHX0tWTWAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBjaGVjayBmb3IgdGhlc2UgZmVhdHVyZXMsIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGdvIGRlZXBlciB0byBiZSBzdXJlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgdGhhdCB0aG9zZSBpbnN0cnVjdGlvbiBoYW5kbGVycyBhcmUgaW5kZWVkIGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhbmQgbWFrZSBhIGZ1enppbmcgcGxhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vZ21hcF9oZWxwZXJzLmg9MTM9aW50IGdtYXBfaGVscGVyX2Rpc2FibGVfY293X3NoYXJpbmcodm9pZCk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vZ21hcF9oZWxwZXJzLmg6MTQ6dm9pZCBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdm1hZGRyKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9nbWFwX2hlbHBlcnMuaC0xNS1wdGVfdCAqdHJ5X2dldF9sb2NrZWRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHNwaW5sb2NrX3QgKipwdGwpO1xuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jPTM3Nj1zdGF0aWMgbG9uZyBfZ21hcF91bm1hcF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqdylcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0zODUtXHRcdHZtYWRkciA9IF9fZ2ZuX3RvX2h2YV9tZW1zbG90KHByaXYtXHUwMDNlc2xvdCwgZ2ZuKTtcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjM4NjpcdFx0Z21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKHByaXYtXHUwMDNlZ21hcC1cdTAwM2Vrdm0tXHUwMDNlbW0sIHZtYWRkcik7XG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0zODctXHR9XG4tLVxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jPTE0NT1FWFBPUlRfU1lNQk9MX0dQTChnbWFwX2hlbHBlcl9kaXNjYXJkKTtcbi0tXG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmMtMTQ3LS8qKlxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jOjE0ODogKiBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQoKSAtIG1hcmsgYSBwdGUgZW50cnkgYXMgdW51c2VkXG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmMtMTQ5LSAqIEBtbTogdGhlIG1tXG4tLVxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jLTE2Mi0gKi9cbmFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYzoxNjM6dm9pZCBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdm1hZGRyKVxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jLTE2NC17XG4tLVxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jLTE4Ny19XG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmM6MTg4OkVYUE9SVF9TWU1CT0xfR1BMKGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZCk7XG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmMtMTg5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg0NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gTWVtb3J5IE1hbmFnZW1lbnQgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAuICBUaGF0IGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBfZ21hcF91bm1hcF9wdGVgLiAgUmlnaHQgYXdheSwgbXkgbWluZCBjbGlja3M6IGBfZ21hcF91bm1hcF9wdGVgIGlzIHBhcnQgb2YgS1ZNLiAgVGhhdOKAmXMgd2hlcmUgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBhY3Rpb24gaXMgaGFwcGVuaW5nLCB3aGljaCBoZWxwcyBtZSBwbGFjZSBpdCBpbnRvIGNvbnRleHQuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZSBDTU1BIGZ1bmN0aW9uYWxpdHkuIExldCYjMzk7cyBzZWUgaWYgdGhlIG5leHQgc3RlcHMgd2lsbCBtYWtlIG1vcmUgc2Vuc2UsIGZvY3VzaW5nIG9uIGhvdyBkYXRhIGlzIGJlaW5nIHJlYWQgYW5kIGFjY2Vzc2VkLiAgSSYjMzk7bGwgc3RhcnQgd2l0aCBgZGF0X3BlZWtfY21tYWAgYW5kIGBkYXRfZ2V0X2NtbWFgIC0gdGhvc2UgZnVuY3Rpb25zIHNob3VsZCB0ZWxsIG1lIG1vcmUgYWJvdXQgaG93IHRoZSBDb21tb24gTWVtb3J5IE1hbmFnZW1lbnQgQXJlYSAoQ01NQSkgaXMgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF0X3BlZWtfY21tYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9kYXQuYz0xMTY5PXN0cnVjdCBkYXRfZ2V0X2NtbWFfc3RhdGUge1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3Ni1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE3NzpzdGF0aWMgbG9uZyBfX2RhdF9wZWVrX2NtbWFfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExNzgte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE4OS1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5MDpzdGF0aWMgbG9uZyBfX2RhdF9wZWVrX2NtbWFfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExOTEte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE5OC1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5OTppbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjAwLXtcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwMS1cdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0ge1xuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjAyOlx0XHQucHRlX2VudHJ5ID0gX19kYXRfcGVla19jbW1hX3B0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwMzpcdFx0LnBtZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwNDpcdFx0LnB1ZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwNTpcdFx0LnA0ZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwNjpcdFx0LnBnZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwNy1cdH07XG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuaD01NTI9bG9uZyBkYXRfcmVzZXRfY21tYSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0X2dmbik7XG5hcmNoL3MzOTAva3ZtL2RhdC5oOjU1MzppbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKTtcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTU0LWludCBkYXRfZ2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCAqc3RhcnQsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMsIGF0b21pYzY0X3QgKnJlbSk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIyNTc9c3RhdGljIGludCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjI4OS1cdFx0aWYgKHBlZWspXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjI5MDpcdFx0XHRyZXQgPSBkYXRfcGVla19jbW1hKGFyZ3MtXHUwMDNlc3RhcnRfZ2ZuLCBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIFx1MDAyNmFyZ3MtXHUwMDNlY291bnQsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjI5MS1cdFx0XHRcdFx0ICAgIHZhbHVlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDI4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDTU1BIEJpdCBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgQ01NQSBiaXRzIGFyZSBtYW5hZ2VkLCBhbmQgaXQgbG9va3MgbGlrZSBgZGF0X3BlZWtfY21tYWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgLiBBbHNvLCBgZGF0X2dldF9jbW1hYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB0aGUgc2FtZSBzcG90LCBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBDTU1BIGJpdCBmdW5jdGlvbmFsaXR5IGFyZSB0aGUgb25lcyBkaXJlY3RseSBsaW5rZWQgdG8gc2V0dGluZywgZ2V0dGluZywgYW5kIG1hbmlwdWxhdGluZyB0aGVzZSBiaXRzLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgZnVuY3Rpb25zIHRvIGdldCBhIGdyYXNwIG9mIHRoZSBvdmVyYWxsIG9wZXJhdGlvbi4KCkJhc2VkIG9uIHRoZSBmdW5jdGlvbiBjYWxscywgSSYjMzk7dmUgZ290IGEgcHJlbGltaW5hcnkgbGlzdCBvZiBjYW5kaWRhdGVzLiBUaGV5IGxvb2sgbGlrZToKCiogICBga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sYAoqICAgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAKKiAgIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAKKiAgIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYAoqICAgYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgCiogICBgZGF0X3BlZWtfY21tYWAKKiAgIGBkYXRfZ2V0X2NtbWFgCiogICBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAKKiAgIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAKKiAgIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgCiogICBgaGFuZGxlX3Nza2VgCiogICBgaGFuZGxlX3BmbWZgCiogICBgaGFuZGxlX2Vzc2FgCiogICBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYAoKTm93LCBJIHRoaW5rIGl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGdtYXBfY2xlYXJfeW91bmdfY3JzdGVgIHRvIHNlZSBob3cgaXQgbWlnaHQgYmUgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3MuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2dtYXAuYz0yODc9c3RhdGljIGxvbmcgZ21hcF9jbGVhcl95b3VuZ19wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTMxNS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjMxNjpzdGF0aWMgbG9uZyBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgZW5kLCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0zMTcte1xuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jPTM1ND1ib29sIGdtYXBfYWdlX2dmbihzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZClcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0zNTctXHRcdC5wdGVfZW50cnkgPSBnbWFwX2NsZWFyX3lvdW5nX3B0ZSxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjM1ODpcdFx0LnBtZF9lbnRyeSA9IGdtYXBfY2xlYXJfeW91bmdfY3JzdGUsXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzozNTk6XHRcdC5wdWRfZW50cnkgPSBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlLFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMzYwLVx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwOTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZ21hcF9hZ2VfZ2ZuYCBDYWxsKioKCk9rYXksIHNvIGBnbWFwX2FnZV9nZm5gIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBrdm1fYWdlX2dmbmAuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBga3ZtX2FnZV9nZm5gIGlzIHR5cGljYWxseSBpbnZvbHZlZCBpbiBhZ2luZyBndWVzdCBwaHlzaWNhbCBwYWdlcywgYW5kIGBnbWFwX2FnZV9nZm5gIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGdsb2JhbCBtZW1vcnkgbWFwLiBUaGlzIGNvdWxkIGJlIGFib3V0IHRyYWNraW5nIHBhZ2UgdXNhZ2UgZnJvbSB0aGUgaG9zdCYjMzk7cyBwZXJzcGVjdGl2ZSwgb3IgbWF5YmUgaXQgaXMgc29tZSBzb3J0IG9mIHNoYXJlZCBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYW5kLCBzcGVjaWZpY2FsbHksIHRoZSBjb250ZXh0IG9mIHRoYXQgY2FsbC4KClRoZSBuZXh0IHRoaW5nIEkgdGhpbmsgdG8gY2hlY2sgaXMgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAuIE15IGluaXRpYWwgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGNhbGwgaXMgZnJvbSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgQWRkcmVzcyBTcGFjZSBDb250cm9sIEVudHJ5IChBU0NFKSB0YWJsZS4gVGhpcyBjb3VsZCBiZSBhIGNyaXRpY2FsIHBhcnQgb2YgZW5zdXJpbmcgcHJvcGVyIHByb3RlY3Rpb24gYW5kIGlzb2xhdGlvbiwgZXNwZWNpYWxseSBkdXJpbmcgcGFnZSBhZ2luZyBvcGVyYXRpb25zLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYCBoYW5kbGVzIGEgbmVjZXNzYXJ5IHByb3RlY3Rpb24gbWVjaGFuaXNtIHdoZW4gbW9kaWZ5aW5nIHRoZSB0b3AtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyaWVzLiBTbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXQmIzM5O3MgbGlrZWx5IGEgY3JpdGljYWwgc2VjdGlvbiBhbmQgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgY2FsbCBpcyBjb3JyZWN0bHkgc3luY2hyb25pemVkIHRvIHByZXZlbnQgYW55IHJhY2UgY29uZGl0aW9ucyBvciBkYXRhIGNvcnJ1cHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9nbWFwLmM9MTIxMj1zdGF0aWMgc3RydWN0IGdtYXAgKmdtYXBfZmluZF9zaGFkb3coc3RydWN0IGdtYXAgKnBhcmVudCwgdW5pb24gYXNjZSBhc2NlLCBpbnQgZWRhdF9sZXZlbClcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjI1LSNkZWZpbmUgQ1JTVF9UQUJMRV9QQUdFUyAoX0NSU1RfVEFCTEVfU0laRSAvIFBBR0VfU0laRSlcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyMjY6c3RydWN0IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbCB7XG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjI3LVx0dW5zaWduZWQgbG9uZyBzZXE7XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTIzMC1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyMzE6c3RhdGljIGlubGluZSBpbnQgX19nbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZyxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyMzI6XHRcdFx0XHRcdFx0c3RydWN0IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbCAqY29udGV4dClcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyMzMte1xuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyNjMtXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjY0OnN0YXRpYyBpbmxpbmUgaW50IF9nbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZyxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyNjU6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsICpjb250ZXh0KVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI2Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI3Ny1cdFx0XHRyZXR1cm4gcmM7XG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjc4Olx0XHRyYyA9IF9fZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsKG1jLCBzZywgY29udGV4dCk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjc5LVx0XHRyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI4NC1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyODU6c3RhdGljIGludCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZylcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyODYte1xuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTI4NzpcdHN0cnVjdCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwgY29udGV4dCA9IHt9O1xuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI4OC1cdHVuaW9uIGFzY2UgYXNjZSA9IHNnLVx1MDAzZWd1ZXN0X2FzY2U7XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTMwMC1cdGlmICghcmMpXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzAxOlx0XHRyYyA9IF9nbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwobWMsIHNnLCBcdTAwMjZjb250ZXh0KTtcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzMDItXHRpZiAocmMpXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTMyNT1zdHJ1Y3QgZ21hcCAqZ21hcF9jcmVhdGVfc2hhZG93KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqcGFyZW50LFxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzNzUtXHQvKiBQcm90ZWN0IHdoaWxlIGluc2VydGluZywgcHJvdGVjdHMgYWdhaW5zdCBpbnZhbGlkYXRpb24gcmFjZXMuICovXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzc2Olx0cmMgPSBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwobWMsIG5ldyk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMzc3LVx0aWYgKHJjKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDM1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbCoqCgpPa2F5LCBzbyBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgZ21hcF9jcmVhdGVfc2hhZG93YC4gVGhhdCYjMzk7cyB0aGUgY29udGV4dC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGludGVyYWN0aW9uLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoaXMgcHJvdGVjdGlvbiBjYWxsLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb25zLCBpdCBzZWVtcyBsaWtlIHdlIGFyZSBkZWFsaW5nIHdpdGggc29tZSBraW5kIG9mIGFjY2VzcyBjb250cm9sIG9uIHRoZSB0b3AtbGV2ZWwgQVNDRS4KCk5vdywgbXkgbmV4dCBxdWVzdGlvbiByZXZvbHZlcyBhcm91bmQgd2hhdCB0cmlnZ2VycyB0aGUgcHJvdGVjdGlvbi4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBgX19zZXRfY21tYV9kaXJ0eV9wdGVgLiBJIGJldCB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBkaXJ0eSBiaXQgaXMgc2V0LCBhbmQgaXQgcHJvYmFibHkgaGFzIHRvIGRvIHdpdGggaG93IHRoZSBBU0NFIGdldHMgdXBkYXRlZCB3aGVuIGEgcGFnZSBpcyB3cml0dGVuIHRvLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGlzIGZ1bmN0aW9uIGNhbGwsIGJlY2F1c2UgdGhpcyB3aWxsIHByb2JhYmx5IHByb3ZpZGUgaW5zaWdodCBpbnRvIHRoZSBjb250ZXh0IG9mIHRoZSBwcm90ZWN0aW9uIG9mIHRoZSBhZGRyZXNzIHNwYWNlIHRvcC1sZXZlbCBzdHJ1Y3R1cmVzLCBzbyBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCB3aHkgdGhleSBhcmUgY2FsbGluZyBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zZXRfY21tYV9kaXJ0eV9wdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vZ21hcC5jPTEwNjM9aW50IGdtYXBfcHJvdGVjdF9ybWFwKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqc2csIGdmbl90IHBfZ2ZuLCBnZm5fdCByX2dmbixcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMTAwLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTEwMTpzdGF0aWMgbG9uZyBfX3NldF9jbW1hX2RpcnR5X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTEwMi17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTExNT12b2lkIGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5KHN0cnVjdCBnbWFwICpnbWFwKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTExNi17XG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMTE3Olx0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBfX3NldF9jbW1hX2RpcnR5X3B0ZSwgfTtcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTExMTgtXHRnZm5fdCBnZm4gPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA3MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENNTUEgRGlydHkgUFRFIFNldHRpbmcgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuIEl0JiMzOTtzIHRyaWdnZXJlZCBmcm9tIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIHdoaWNoIGltbWVkaWF0ZWx5IGRpcmVjdHMgbXkgYXR0ZW50aW9uIHRvIHRoZSBrZXkgZnVuY3Rpb25zIGluIHRoaXMgY29kZSBwYXRoOiBga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sYCwgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYGRhdF9wZWVrX2NtbWFgLCBgZGF0X2dldF9jbW1hYCwgYGdtYXBfY2xlYXJfeW91bmdfY3JzdGVgLCBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgIGl0c2VsZiwgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAsIGBoYW5kbGVfc3NrZWAsIGBoYW5kbGVfcGZtZmAsIGBoYW5kbGVfZXNzYWAsIGFuZCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSBhbmQgd2hlcmUgYF9fc2V0X2NtbWFfZGlydHlfcHRlYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IGFueSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDT05GSUdfS1ZNYCBpcyB0aGUgcHJpbWFyeSBvbmUsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSG9sZCBvbi4uLiBJIHJlY2FsbCBgS1ZNX1MzOTBfVUNPTlRST0xgIGFzIGEgc2VwYXJhdGUsIG1heWJlIHBvdGVudGlhbGx5IHJlbGV2YW50LCBjb25maWd1cmF0aW9uIG9wdGlvbi4KCkxldCBtZSB2ZXJpZnk6IHRoZSBjb2RlIHRoYXQgdXNlcyBgX19zZXRfY21tYV9kaXJ0eV9wdGVgIGFwcGVhcnMgdG8gcmVzaWRlIHdpdGhpbiBga3ZtLXMzOTAuY2AsIGBnbWFwLmNgLCBgZGF0LmNgLCBhbmQgYHByaXYuY2AuIFRoZXNlIGZpbGVzIGFyZSwgYXMgSSBleHBlY3RlZCwgY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBhIHN0YW5kYXJkIGRlcGVuZGVuY3kuIExldCYjMzk7cyBjb25maXJtIHRoYXQgd2l0aCBhIHF1aWNrIGxvb2sgaW4gYGFyY2gvczM5MC9rdm0vTWFrZWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm0teSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9NYWtlZmlsZT04PWNjZmxhZ3MteSA6PSAtSXZpcnQva3ZtIC1JYXJjaC9zMzkwL2t2bVxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZS05LVxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZToxMDprdm0teSAmIzQzOz0ga3ZtLXMzOTAubyBpbnRlcmNlcHQubyBpbnRlcnJ1cHQubyBwcml2Lm8gc2lncC5vXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlOjExOmt2bS15ICYjNDM7PSBkaWFnLm8gZ2FjY2Vzcy5vIGd1ZXN0ZGJnLm8gdnNpZS5vIHB2Lm9cbmFyY2gvczM5MC9rdm0vTWFrZWZpbGU6MTI6a3ZtLXkgJiM0Mzs9IGRhdC5vIGdtYXAubyBmYXVsdGluLm9cbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtMTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDMwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBDb25maWd1cmF0aW9uIFJldmlldyoqCgpPa2F5LCBzbyBpdCBzZWVtcyBsaWtlIGBDT05GSUdfS1ZNYCBpcyB0aGUgcHJpbWFyeSwgcGVyaGFwcyBldmVuICpvbmx5KiwgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoIHJpZ2h0IG5vdy4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgYXJlIHBpdm90YWwgaW4gdGhpcyBzcGVjaWZpYyBLVk0vczM5MCBjb250ZXh0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIGFyZWFzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgYXQ6CgoqICAgYGt2bV9zMzkwX3NldF9tZW1fY29udHJvbGAgLSBJIHJlbWVtYmVyIHRoaXMgZGVhbHMgd2l0aCBtZW1vcnkgY29udHJvbCByZWdpc3RlcnMsIGxldCBtZSByZWZyZXNoIG15IGtub3dsZWRnZSBvZiB0aGUgZXhhY3QgbWFuaXB1bGF0aW9ucyB0aGlzIHBlcmZvcm1zLgoqICAgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAgJmFtcDsgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCAtIE9mIGNvdXJzZSwgdGhlIG1pZ3JhdGlvbiBmdW5jdGlvbnMsIGVzc2VudGlhbCBmb3IgbGl2ZSBtaWdyYXRpb24gZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHJlLWV2YWx1YXRlIHRoZWlyIGltcGxlbWVudGF0aW9uIHJlZ2FyZGluZyBzMzkwIGFyY2hpdGVjdHVyZS4KKiAgIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCAtIFJlbGF0ZWQgdG8gQ01NQSAoQ29udHJvbCBNZW1vcnkgTWFuYWdlbWVudCBBcmVhKSwgcHJvYmFibHkgc2V0dGluZyBhbmQgbWFuYWdpbmcgdGhlIENNTUEgYml0cyB0byBkZWZpbmUgd2hpY2ggcGFydCBvZiBtZW1vcnkgY2FuIGJlIGFjY2Vzc2VkIGJ5IHRoZSBndWVzdC4KKiAgIGBkYXRfcGVla19jbW1hYCAmYW1wOyBgZGF0X2dldF9jbW1hYCAtIEZ1bmN0aW9ucyB0byBpbnRlcmFjdCB3aXRoIHRoZSBDTU1BLCBwZWVraW5nIGFuZCBnZXR0aW5nIENNTUEgZGF0YSBhbmQgYWRkcmVzcy4KKiAgIGBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlYCwgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCwgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAgLSBUaGVzZSBHTUFQIChHdWVzdCBNZW1vcnkgQWRkcmVzcyBUcmFuc2xhdGlvbikgZnVuY3Rpb25zIGFyZSBpbXBvcnRhbnQuIENsZWFyaW5nIHlvdW5nIGJpdHMsIG1hcmtpbmcgbWVtb3J5IGRpcnR5IGFuZCBwcm90ZWN0aW5nIHRoZSBBU0NFIChBZGRyZXNzIFNwYWNlIENvbnRyb2wgRWxlbWVudCkgdG9wIGxldmVsIGFyZSBjcml0aWNhbCBvcGVyYXRpb25zLgoqICAgYGhhbmRsZV9zc2tlYCwgYGhhbmRsZV9wZm1mYCwgYGhhbmRsZV9lc3NhYCAtIEhhbmRsaW5nIG9mIHNwZWNpYWwgUzM5MCBpbnN0cnVjdGlvbnMgc3VjaCBhcyBTU0tFIChTZXQgU3RvcmFnZSBLZXkgRXh0ZW5kZWQpLCBQRk0gKFByb2dyYW0gRmV0Y2ggTW9kaWZpY2F0aW9uKSBhbmQgRVNTQSAoRXh0ZW5kZWQgU2VnbWVudCBhbmQgQXJlYSksIHRoZXNlIGFyZSBjcnVjaWFsIGZvciBzZWN1cml0eSBhbmQgYWRkcmVzcyBzcGFjZSBtYW5hZ2VtZW50LgoqICAgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAgLSBUaGUgUFRFIHJlbGF0ZWQgZnVuY3Rpb24sIHJlbGF0ZWQgdG8gc2V0dGluZyBwYWdlIHRhYmxlIGVudHJpZXMgKFBURSkgYXMgdW51c2VkIGluIGd1ZXN0IG1lbW9yeS4KCkJ1dCwgYXJlIHRoZXJlIGFueSBvdGhlciBzdWJ0bGUgY29uZmlncyBsdXJraW5nIGluIHRoZSBzaGFkb3dzPyBMZXQmIzM5O3MgYmUgdGhvcm91Z2guIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBhcmNoL3MzOTAvbW0vTWFrZWZpbGVgIGZpbGUgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IHJlbGV2YW50IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgb3IgaGlkZGVuIHNldHRpbmdzIHRoYXQgbWlnaHQgYmUgcGVydGluZW50IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dtYXBfaGVscGVycy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9tbS9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfUEZBVUxUKVx0XHQmIzQzOz0gcGZhdWx0Lm9cbmFyY2gvczM5MC9tbS9NYWtlZmlsZS0xNC1cbmFyY2gvczM5MC9tbS9NYWtlZmlsZToxNTpvYmotJChzdWJzdCBtLHksJChDT05GSUdfS1ZNKSlcdCYjNDM7PSBnbWFwX2hlbHBlcnMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg5NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgS1ZNL3MzOTAgRm9jdXMgZm9yIFN5emthbGxlcioqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBnbWFwX2hlbHBlcnMub2AgZ2V0cyBidWlsdCBldmVuIHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQuIEdvb2QgdG8ga25vdy4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gdXNlIGBLVk1gIGFzIG91ciBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gZm9jdXMuIFllcCwgYEtWTWAgaXMgaW5kZWVkIHRoZSBtYWluIGNvbmZpZyBmb3IgS1ZNIG9uIHMzOTAsIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gYSBtb3JlIHJlZmluZWQgbGlzdCBvZiBmdW5jdGlvbnMgZm9yIFN5emthbGxlciB0byBwcmlvcml0aXplLiBJJiMzOTt2ZSBnb3Q6IGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgLCBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCwgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCwgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCBgZGF0X3BlZWtfY21tYWAsIGBkYXRfZ2V0X2NtbWFgLCBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLCBgaGFuZGxlX3Nza2VgLCBgaGFuZGxlX3BmbWZgLCBgaGFuZGxlX2Vzc2FgLCBhbmQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAuCgpIb2xkIG9uLCBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAgaXMgc3RhdGljLi4uIFRoYXQgdGhyb3dzIGEgd3JlbmNoIGluIHRoaW5ncy4gSSBzaG91bGQgY2hlY2sgYGFyY2gvczM5MC9rdm0vZ21hcC5jYCB0byBiZSBzdXJlLiBZZXAsIGl0JiMzOTtzIHN0YXRpYy4gU3l6a2FsbGVyIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHRhcmdldCBpdCBkaXJlY3RseSBpZiBpdCBnZXRzIGlubGluZWQsIGJ1dCBpdCYjMzk7cyBzdGlsbCB3b3J0aCBsaXN0aW5nIGJlY2F1c2UgaXQgbWlnaHQgaW5kaXJlY3RseSBsZWFkIHRvIHNvbWV0aGluZyBpbnRlcmVzdGluZy4KCkxldCYjMzk7cyBhbHNvIGNoZWNrIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAuIFl1cCwgdGhhdCYjMzk7cyBzdGF0aWMgdG9vLiBTbywgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCBpcyBleHBvcnRlZC9nbG9iYWwsIHRoYXQmIzM5O3MgZ29vZC4gQW5kIGBkYXRfcGVla19jbW1hYCBhbmQgYGRhdF9nZXRfY21tYWAgYXJlIGdsb2JhbCBhcyB3ZWxsLiBPa2F5LCB0aGF0JiMzOTtzIGhlbHBmdWwuIGBoYW5kbGVfc3NrZWAsIGBoYW5kbGVfcGZtZmAsIGFuZCBgaGFuZGxlX2Vzc2FgIGFyZSBzdGF0aWMuIEkgd2lsbCBsb29rIGluIGBhcmNoL3MzOTAva3ZtL3ByaXYuY2AgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBvdGhlciBoZWxwZnVsIGluZm8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV9zc2tlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmM9Mjg5PXN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTMyMi0jZGVmaW5lIFNTS0VfTUIgMHgxXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzozMjM6c3RhdGljIGludCBoYW5kbGVfc3NrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0zMjQte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTk1OD1pbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05ODAtXHRjYXNlIDB4MmI6XG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo5ODE6XHRcdHJldHVybiBoYW5kbGVfc3NrZSh2Y3B1KTtcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk4Mi1cdGNhc2UgMHgyYzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwOTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgSW5zdHJ1Y3Rpb24gSGFuZGxlciBTdHJhdGVneSBmb3IgU3RhdGljIEFuYWx5c2lzIGluIFN5emthbGxlcioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgaW5zdHJ1Y3Rpb25zLCBzcGVjaWZpY2FsbHkgZnJvbSBhIHBlcnNwZWN0aXZlIHdoZXJlIHdlJiMzOTtyZSBhaW1pbmcgdG8gbWF4aW1pemUgU3l6a2FsbGVyJiMzOTtzIGVmZmVjdGl2ZW5lc3Mgd2l0aCBzdGF0aWMgYW5hbHlzaXMuIFRoZSBjb3JlIGlkZWEgaXMgdGhhdCB0aGVzZSBpbnN0cnVjdGlvbiBoYW5kbGVycyBhcmUgZXNzZW50aWFsbHkgcmVjaXBlcyBmb3IgdGhlIGZ1enplci4gTm93LCBJJiMzOTttIG5vdGluZyB0aGF0IGlmIHRoZXNlIGhhbmRsZXJzIGFyZSBzdGF0aWNhbGx5IGRlZmluZWQsIGl0IHByZXNlbnRzIGEgdmVyeSBzcGVjaWZpYyBvcHBvcnR1bml0eS4gSXQgbWVhbnMgU3l6a2FsbGVyIGNhbiwgaW4gYSBzZW5zZSwgKmZvY3VzKiBvbiB0aGVtIG1vcmUgZWZmZWN0aXZlbHksIGFsbW9zdCB0cmVhdCB0aGVtIGFzIHByaW1hcnkgdGFyZ2V0cyBmb3IgZXhwbG9yYXRpb24sICphcyBsb25nIGFzKiB0aGV5JiMzOTtyZSBub3QgaW5saW5lZC4gSW5saW5pbmcgbWVzc2VzIHRoaW5ncyB1cCwgbWFrZXMgdGhlbSBsZXNzIGRpc2NyZXRlIGFuZCBhY2Nlc3NpYmxlLiBUaGF0JiMzOTtzIGEga2V5IGNvbnNpZGVyYXRpb24uCgpTbywgdGhlIGZvY3VzIHNoaWZ0cyB0byBlbnN1cmluZyBoYW5kbGVycyBhcmVuJiMzOTt0IGlubGluZWQsIGFzIHdlbGwgYXMgY2hlY2tpbmcgdGhlIGBoYW5kbGVfcGZtZmAgaGFuZGxlciBzcGVjaWZpY2FsbHksIGFzIGFuIGV4YW1wbGUsIHNpbmNlIHRoYXQgaGFuZGxlciBpcyBjcml0aWNhbCBmb3IgcGFnZS1mYXVsdCBtaXRpZ2F0aW9uIGFuZCBoYW5kbGluZy4gSSBuZWVkIHRvIGRpZyBpbnRvIGBoYW5kbGVfcGZtZmAgbm93IHRvIHNlZSB3aGF0IHdlIGNhbiBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX3BmbWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ByaXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ByaXYuYz0xMDE2PXN0YXRpYyBpbnQgaGFuZGxlX2Vwc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEwNDQtXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMDQ1OnN0YXRpYyBpbnQgaGFuZGxlX3BmbWYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTA0Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTI4Mj1pbnQga3ZtX3MzOTBfaGFuZGxlX2I5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjkzLVx0Y2FzZSAweGFmOlxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTI5NDpcdFx0cmV0dXJuIGhhbmRsZV9wZm1mKHZjcHUpO1xuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5NS1cdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjU3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBoYW5kbGVfZXNzYWAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgaW50byBpdC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyB6ZXJvaW5nIGluIG9uIHRoaXMgYGhhbmRsZV9lc3NhYCBmdW5jdGlvbiBvciBtb2R1bGUsIHdoZXJldmVyIGl0IHJlc2lkZXMgaW4gdGhlIGNvZGViYXNlLiBNeSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBpcyB0aGUgY2VudHJhbCBwb2ludCBmb3Igc29tZSBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gdGhpcyAmIzM0O0VTU0EmIzM0OyB0aGluZy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIHNvbWUgaHlwb3RoZXNlcy4gSXMgaXQgYW4gZW5kcG9pbnQgaGFuZGxlcj8gQSBwcm9jZXNzaW5nIHBpcGVsaW5lIGVudHJ5PyBPciBhIGxvd2VyLWxldmVsIHV0aWxpdHk/IEtub3dpbmcgdGhlIG5hbWluZyBjb252ZW50aW9ucyBvZiB0aGlzIHByb2plY3Qgd2lsbCBndWlkZSBteSBpbml0aWFsIGFzc3VtcHRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGNvZGUgaW1tZWRpYXRlbHkgdG8gc2VlIHdoYXQgaXQgaXMgYWN0dWFsbHkgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV9lc3NhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmM9MTE5MD1zdGF0aWMgdm9pZCBfZXNzYV9jbGVhcl9jYnJsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyAqY2JybCwgaW50IGxlbilcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjE1LVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTIxNjpzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyMTcte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTEyODI9aW50IGt2bV9zMzkwX2hhbmRsZV9iOShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5MS1cdGNhc2UgMHhhYjpcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEyOTI6XHRcdHJldHVybiBoYW5kbGVfZXNzYSh2Y3B1KTtcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTMtXHRjYXNlIDB4YWY6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTM3CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipBc3Nlc3NtZW50IG9mIEZvY3VzIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCB0aGVzZSBsb29rIGxpa2UgcHJvbWlzaW5nIGZvY3VzIGZ1bmN0aW9ucy4gU2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0IHRvIG5hcnJvd2luZyBkb3duIHRoZSBhcmVhIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJdCYjMzk7cyBhIGNsZWFuIHdheSB0byBkaXJlY3QgdGhlIGV4YW1pbmF0aW9uLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLiBJIHRoaW5rIGEgZ29vZCBuZXh0IHN0ZXAgd291bGQgYmUgdG8gZHJpbGwgZG93biBhbmQgY2hlY2sgb3V0IGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgLiBUaGF0IGZ1bmN0aW9uJiMzOTtzIGxpa2VseSB0byByZXZlYWwgc29tZSBpbnRlcmVzdGluZyBkZXRhaWxzIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCB3b3VsZCBvZmZlciB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG93YXJkIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfc2V0X21lbV9jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz05NzQ9c3RhdGljIGludCBrdm1fczM5MF9nZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy05OTItXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6OTkzOnN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy05OTQte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMDEwPXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDE1LVx0Y2FzZSBLVk1fUzM5MF9WTV9NRU1fQ1RSTDpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMDE2Olx0XHRyZXQgPSBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woa3ZtLCBhdHRyKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDE3LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MTQKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNL3MzOTAgTWlncmF0aW9uIENvZGUqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgY2x1ZSBpcyB0aGF0IHRoaXMgY29kZSBpcyAqc3RhdGljKiBidXQgc29tZWhvdyBiZWluZyBpbnZva2VkIHZpYSBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyBzb21lIHNvcnQgb2YgY29uZmlndXJhdGlvbiBjaGFuZ2Ugb3IgYXR0cmlidXRlIHNldHRpbmcgdGhhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoaXMgYmVoYXZpb3IsIHdoaWNoIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kLiBPZnRlbiBzdGF0aWMgZnVuY3Rpb25zIGFyZSBjb250YWluZWQgd2l0aGluIHRoZWlyIGZpbGUgYW5kIHRoaXMgaW1wbGllcyBpdCBpcyBvbmx5IHVzZWQgbG9jYWxseS4KCk15IG5leHQgbGluZSBvZiB0aG91Z2h0LCBiZWluZyB0aGF0IHRoaXMgaXMgYWJvdXQgbWlncmF0aW9uLCBpcyB0byB6ZXJvIGluIG9uIHRoZSBzdGFydCBhbmQgc3RvcCBwcm9jZXNzZXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAgYW5kIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAuIFRob3NlIHdpbGwgbGlrZWx5IGJlIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMsIG9yIGF0IGxlYXN0IHRoZSBrZXkgZnVuY3Rpb25zIGNvb3JkaW5hdGluZyB0aGUgd2hvbGUgb3BlcmF0aW9uLiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIGFuZCBob3cgdGhlIHN0YXRpYyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWlncmF0aW9uIGZsb3cg4oCTIGlzIGl0IGEgc2V0dXAgc3RlcCwgYSBjbGVhbnVwIHJvdXRpbmUsIG9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIHRvIHRoZSBtaWdyYXRpb24gcHJvY2VzcyBpdHNlbGY/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0JiMzOTtzIGFmZmVjdGluZyBkdXJpbmcgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgbWlncmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyMDg9c3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyMjAtICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTIyMTpzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIyMi17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNTEtICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyBhbmRcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjUyOiAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbi5cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjUzLSAqL1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMjY1PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNzItXHRjYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVDpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjczOlx0XHRyZXMgPSBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oa3ZtKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjc0LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NDgKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIE1pZ3JhdGlvbiBJc3N1ZSoqCgpBbHJpZ2h0LCB0aGlzIGxvb2tzIGxpa2UgaXQmIzM5O3MgY29taW5nIGZyb20gYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLiBPa2F5LCBzbyBpdCYjMzk7cyBhICpzdGF0aWMqIGNhbGwsIHdoaWNoIHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBhIHRhcmdldGVkIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBmb3IgbWlncmF0aW9uIHNldHVwIG9uIHRoaXMgUzM5MCBhcmNoaXRlY3R1cmUuIE1ha2VzIHNlbnNlLgoKSSBuZWVkIHRvIGRpdmUgZGVlcGVyLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXIgLSBsZXQmIzM5O3MgaW1tZWRpYXRlbHkgbG9vayBpbnRvIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBjcnVjaWFsIGJpdHMgcmVsYXRlZCB0byB0aGUgQ2hhbm5lbCBNYW5hZ2VtZW50IE1lbW9yeSBBcmVhIChDTU1BKSwgd2hpY2ggYXJlIGFic29sdXRlbHkgZnVuZGFtZW50YWwgZm9yIGEgc21vb3RoIG1pZ3JhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIGhhcHBlbnMsIHdoZXJlIHRoZSBWTSBpcyBjb25maWd1cmVkIHRvIGJlIG1vdmVkIC0gb3IgY29uZmlndXJlZCB0byBiZSByZWFkeSB0byBiZSBtb3ZlZC4gSSYjMzk7bSBob3BpbmcgdGhpcyBpcyB3aGVyZSB0aGUgZXJyb3IgbGllcy4gSSYjMzk7bGwgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3NldF9jbW1hX2JpdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIyNTc9c3RhdGljIGludCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjMxMy0gKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMzE0OnN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjMxNS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGt2bV9zMzkwX2NtbWFfbG9nICphcmdzKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yODkyPWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjk4NC1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mjk4NTpcdFx0ciA9IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTg2LVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIwOQoJCQkJCQkJb3V0cHV0OiAyODcKCQkJCQkJCXRob3VnaHRzOiAxNjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0vczM5MCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBga3ZtX2FyY2hfdm1faW9jdGxgIGZ1bmN0aW9uLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGlvY3Rscy4gVGhhdCBuYXJyb3dzIHRoZSBzY29wZSBjb25zaWRlcmFibHkuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgcmVsYXRlZCB0byBDTU1BLCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiwgYW5kIFZNIG1pZ3JhdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4KCkZpcnN0LCBJIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgZGlyZWN0bHkgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMgdG8gbG9vayBhdCBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgLCBidXQgdGhhdCYjMzk7cyBhIGJpdCB0b28gZ2VuZXJpYy4gSXQmIzM5O3MgYmV0dGVyIHRvIHplcm8gaW4gb24gbW9yZSB0YXJnZXRlZCBlbnRyeSBwb2ludHMgZm9yIHRoZSBmdXp6ZXIuIFNvLCBJIGxvb2tlZCBmb3IgdGhlIGRpcmVjdCBmdW5jdGlvbnMuCgpJIGNhbiBtYWtlIGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgIGEgY2VudHJhbCBzdGFydGluZyBwb2ludCwgZXNwZWNpYWxseSBzaW5jZSBzeXprYWxsZXIgaXMgYmV0dGVyIHdpdGggZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBpbmxpbmVkLCBhbmQgdGhpcyBvbmUgaXMgbGlrZWx5IHRvIGJlIGxhcmdlIGVub3VnaCB0byBhdm9pZCBiZWluZyBpbmxpbmVkLiBJIGFtIGNoZWNraW5nIGlmIGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgIGlzIGlubGluZWQgYXMgaXQgaXMgbW9yZSB0aGFuIDEwMCBsaW5lcy4gU2FtZSB3aXRoIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gIGFuZCBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLgoKVGhlIGZ1bGwgbGlzdCBJJiMzOTt2ZSBjb21lIHVwIHdpdGggaXM6IGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgLCBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCwgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCwgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCBgZGF0X3BlZWtfY21tYWAsIGBkYXRfZ2V0X2NtbWFgLCBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgLCBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYCwgYGhhbmRsZV9zc2tlYCwgYGhhbmRsZV9wZm1mYCwgYGhhbmRsZV9lc3NhYCwgYW5kIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLgoKSSYjMzk7bSBtYWtpbmcgc3VyZSB0byBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEluIHRoaXMgY2FzZSwgYEtWTWAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnLgoKTXkgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzIEtWTS9zMzkwIGluIGFyZWFzIHRoYXQgZGVhbCB3aXRoIENNTUEsIHBhZ2UgdGFibGVzLCBhbmQgVk0gbWlncmF0aW9uLiBUaGVzZSBhcmUgYWxsIGNyaXRpY2FsIGFyZWFzLiBXZSBuZWVkIHRvIGZ1enogdGhlc2UgZnVuY3Rpb25zIHRvIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIHdvcmtpbmcgY29ycmVjdGx5LiBBbnkgZmxhd3Mgb3IgcmVncmVzc2lvbiB0aGF0IG9jY3VyIGhlcmUgY291bGQgY2F1c2Ugc2V2ZXJlIGlzc3VlcyBpbiB2aXJ0dWFsaXphdGlvbi4gU28sIGZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIHNob3VsZCBiZSBoaWdoIHByaW9yaXR5LgoKSSBhbHNvIGNvbnNpZGVyZWQgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAsIHdoaWNoICppcyogc3RhdGljLCBidXQgc3l6a2FsbGVyIGhhbmRsZXMgc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGUgc3ltYm9sIHRhYmxlLCBzbyBJJiMzOTtsbCBpbmNsdWRlIGl0LgoKSSBkaWQgYSBxdWljayByZXZpZXcgb2YgdGhlIG1vZGlmaWVkIGZpbGVzIGFuZCBmdW5jdGlvbnMuIEkgYW0gdHJ5aW5nIHRvIGZvY3VzIHRoZSBmdXp6aW5nIG9uIHRoZSBjaGFuZ2VkIGZ1bmN0aW9ucywgd2hpY2ggYXJlIG1vc3QgbGlrZWx5IHRvIGludHJvZHVjZSBhIGJ1ZyBvciBleGhpYml0IHJlZ3Jlc3Npb24uIEluIG9yZGVyIHRvIGF2b2lkIHBvdGVudGlhbCBmYWxzZSBwb3NpdGl2ZXMgZnJvbSB2ZXJ5IGZyZXF1ZW50bHkgYWNjZXNzZWQgY29kZSwgSSBhbSBza2lwcGluZyBgc2V0X3B0ZWAgYW5kIGBzZXRfcHRlc2AuCkkgd2lsbCBmb2N1cyBvbjogYGRhdF9wZWVrX2NtbWFgLCBgZGF0X2dldF9jbW1hYCwgYGdtYXBfY2xlYXJfeW91bmdfY3JzdGVgLCBgX19zZXRfY21tYV9kaXJ0eV9wdGVgLCBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgLCBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYCwgYGt2bV9zMzkwX3NldF9tZW1fY29udHJvbGAsIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gLCBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIGBoYW5kbGVfc3NrZWAsIGBoYW5kbGVfcGZtZmAsIGBoYW5kbGVfZXNzYWAsIGFuZCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYC4KCkkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBjb3ZlcnMgdGhlIG1vc3QgY3JpdGljYWwgcGFydHMgb2YgdGhpcyBwYXRjaCwgc28gSSYjMzk7bGwgc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGF0X3BlZWtfY21tYSYjMzQ7LAogICAgJiMzNDtkYXRfZ2V0X2NtbWEmIzM0OywKICAgICYjMzQ7Z21hcF9jbGVhcl95b3VuZ19jcnN0ZSYjMzQ7LAogICAgJiMzNDtfX3NldF9jbW1hX2RpcnR5X3B0ZSYjMzQ7LAogICAgJiMzNDtnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eSYjMzQ7LAogICAgJiMzNDtnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfc2V0X21lbV9jb250cm9sJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9zZXRfY21tYV9iaXRzJiMzNDssCiAgICAmIzM0O2hhbmRsZV9zc2tlJiMzNDssCiAgICAmIzM0O2hhbmRsZV9wZm1mJiMzNDssCiAgICAmIzM0O2hhbmRsZV9lc3NhJiMzNDssCiAgICAmIzM0O2dtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIENvbGxhYm9yYXRpdmUgTWVtb3J5IE1hbmFnZW1lbnQgQXNzaXN0IChDTU1BKSwgcGFnZSB0YWJsZSB1cGRhdGVzLCBhbmQgVk0gbWlncmF0aW9uLiBJdCBmaXhlcyBidWdzIGluIENNTUEgc3RhdGUgaGFuZGxpbmcsIGRpcnR5IHBhZ2UgdHJhY2tpbmcsIGFuZCBtZW1vcnkgY29udHJvbCBpb2N0bHMuIFRoZXNlIGFyZSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBLVk0gY29yZSBsb2dpYyBhbmQgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zIGluIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXRfcGVla19jbW1hJiMzNDssCiAgICAmIzM0O2RhdF9nZXRfY21tYSYjMzQ7LAogICAgJiMzNDtnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlJiMzNDssCiAgICAmIzM0O19fc2V0X2NtbWFfZGlydHlfcHRlJiMzNDssCiAgICAmIzM0O2dtYXBfc2V0X2NtbWFfYWxsX2RpcnR5JiMzNDssCiAgICAmIzM0O2dtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2wmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3NldF9jbW1hX2JpdHMmIzM0OywKICAgICYjMzQ7aGFuZGxlX3Nza2UmIzM0OywKICAgICYjMzQ7aGFuZGxlX3BmbWYmIzM0OywKICAgICYjMzQ7aGFuZGxlX2Vzc2EmIzM0OywKICAgICYjMzQ7Z21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgaGFuZGxpbmcgb2YgQ29sbGFib3JhdGl2ZSBNZW1vcnkgTWFuYWdlbWVudCBBc3Npc3QgKENNTUEpLCBwYWdlIHRhYmxlIHVwZGF0ZXMsIGFuZCBWTSBtaWdyYXRpb24uIEl0IGZpeGVzIGJ1Z3MgaW4gQ01NQSBzdGF0ZSBoYW5kbGluZywgZGlydHkgcGFnZSB0cmFja2luZywgYW5kIG1lbW9yeSBjb250cm9sIGlvY3Rscy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIEtWTSBjb3JlIGxvZ2ljIGFuZCBpbnN0cnVjdGlvbiBoYW5kbGVycywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gZmVhdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyNzo0MS42NjEwMDI2NDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA4MTkxNjg1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF0X3BlZWtfY21tYVwiLFxuICAgIFwiZGF0X2dldF9jbW1hXCIsXG4gICAgXCJnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlXCIsXG4gICAgXCJfX3NldF9jbW1hX2RpcnR5X3B0ZVwiLFxuICAgIFwiZ21hcF9zZXRfY21tYV9hbGxfZGlydHlcIixcbiAgICBcImdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbFwiLFxuICAgIFwia3ZtX3MzOTBfc2V0X21lbV9jb250cm9sXCIsXG4gICAgXCJrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25cIixcbiAgICBcImt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uXCIsXG4gICAgXCJrdm1fczM5MF9zZXRfY21tYV9iaXRzXCIsXG4gICAgXCJoYW5kbGVfc3NrZVwiLFxuICAgIFwiaGFuZGxlX3BmbWZcIixcbiAgICBcImhhbmRsZV9lc3NhXCIsXG4gICAgXCJnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIENvbGxhYm9yYXRpdmUgTWVtb3J5IE1hbmFnZW1lbnQgQXNzaXN0IChDTU1BKSwgcGFnZSB0YWJsZSB1cGRhdGVzLCBhbmQgVk0gbWlncmF0aW9uLiBJdCBmaXhlcyBidWdzIGluIENNTUEgc3RhdGUgaGFuZGxpbmcsIGRpcnR5IHBhZ2UgdHJhY2tpbmcsIGFuZCBtZW1vcnkgY29udHJvbCBpb2N0bHMuIFRoZXNlIGFyZSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBLVk0gY29yZSBsb2dpYyBhbmQgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zIGluIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyNzo0MS42NjEwMDg3MzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTk2NTA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAyMzQzOWJkZGFhNDE2MWVhNzcxYzgwNjI2ODY1ZDZlYzljYTRlYTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjIgMTY6Mjc6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5pbmRleCAyYzZjZWU4MjQxZTA0NC4uNDc0MGM3NTY0OWViYjUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5AQCAtOTgwLDYgKzk4MCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG1kKHBtZF90ICpwbWRwLCBwbWRfdCBwbWQpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxcbiB7XFxuK1xcdGlmIChwdGVfcHJlc2VudChwdGUpKVxcbitcXHRcXHRwdGUgPSBjbGVhcl9wdGVfYml0KHB0ZSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XFxuIFxcdFdSSVRFX09OQ0UoKnB0ZXAsIHB0ZSk7XFxuIH1cXG4gXFxuQEAgLTEzMzIsOCArMTMzNCw2IEBAIHBncHJvdF90IHBncHJvdF93cml0ZWNvbWJpbmUocGdwcm90X3QgcHJvdCk7XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHQgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBucilcXG4ge1xcbi1cXHRpZiAocHRlX3ByZXNlbnQoZW50cnkpKVxcbi1cXHRcXHRlbnRyeSA9IGNsZWFyX3B0ZV9iaXQoZW50cnksIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpO1xcbiBcXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBlbnRyeSwgbnIpO1xcbiBcXHRmb3IgKDs7KSB7XFxuIFxcdFxcdHNldF9wdGUocHRlcCwgZW50cnkpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xcbmluZGV4IGE0ZmU2NjRmNjVlZTE1Li41ZjE5NjBlYzk4MmQwNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xcbkBAIC0xMjA5LDcgKzEyMDksNyBAQCBpbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKVxcbiBcXHRpbnQgcmM7XFxuIFxcbiBcXHRyYyA9IF9kYXRfd2Fsa19nZm5fcmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgKmNvdW50LCBhc2NlLCBcXHUwMDI2b3BzLCBEQVRfV0FMS19ERUZBVUxULCBcXHUwMDI2c3RhdGUpO1xcbi1cXHQqY291bnQgPSBzdGF0ZS5lbmQgLSBzdGFydDtcXG4rXFx0KmNvdW50ID0gc3RhdGUuZW5kIFxcdTAwM2U9IHN0YXJ0ID8gc3RhdGUuZW5kIC0gc3RhcnQgOiAwO1xcbiBcXHQvKiBSZXR1cm4gc3VjY2VzcyBpZiBhdCBsZWFzdCBvbmUgdmFsdWUgd2FzIHNhdmVkLCBvdGhlcndpc2UgYW4gZXJyb3IuICovXFxuIFxcdHJldHVybiAocmMgPT0gLUVGQVVMVCBcXHUwMDI2XFx1MDAyNiAqY291bnQgXFx1MDAzZSAwKSA/IDAgOiByYztcXG4gfVxcbkBAIC0xMjUzLDYgKzEyNTMsOSBAQCBpbnQgZGF0X2dldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzLFxcbiBcXHR9O1xcbiBcXG4gXFx0X2RhdF93YWxrX2dmbl9yYW5nZSgqc3RhcnQsIGFzY2VfZW5kKGFzY2UpLCBhc2NlLCBcXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsIFxcdTAwMjZzdGF0ZSk7XFxuK1xcdC8qIElmIG5vIGRpcnR5IHBhZ2VzIHdlcmUgZm91bmQsIHdyYXAgYXJvdW5kIGFuZCBjb250aW51ZSBzZWFyY2hpbmcgKi9cXG4rXFx0aWYgKCpzdGFydCBcXHUwMDI2XFx1MDAyNiBzdGF0ZS5zdGFydCA9PSAtMSlcXG4rXFx0XFx0X2RhdF93YWxrX2dmbl9yYW5nZSgwLCAqc3RhcnQsIGFzY2UsIFxcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgXFx1MDAyNnN0YXRlKTtcXG4gXFxuIFxcdGlmIChzdGF0ZS5zdGFydCA9PSAtMSkge1xcbiBcXHRcXHQqY291bnQgPSAwO1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2dtYXAuYyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jXFxuaW5kZXggNzc4MjlmNzg3ZGM3ODEuLjVlNzU0ODViNTNmOWZkIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vZ21hcC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9nbWFwLmNcXG5AQCAtMzMyLDcgKzMzMiw3IEBAIHN0YXRpYyBsb25nIGdtYXBfY2xlYXJfeW91bmdfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBlbmQsIHN0XFxuIFxcdFxcdG5ldy5oLmkgPSAxO1xcbiBcXHRcXHRuZXcucy5mYzEueSA9IDA7XFxuIFxcdFxcdG5ldy5zLmZjMS5wcmVmaXhfbm90aWYgPSAwO1xcbi1cXHRcXHRpZiAobmV3LnMuZmMxLmQgfHwgIW5ldy5oLnApXFxuK1xcdFxcdGlmICgobmV3LnMuZmMxLmQgfHwgIW5ldy5oLnApIFxcdTAwMjZcXHUwMDI2ICFuZXcucy5mYzEucylcXG4gXFx0XFx0XFx0Zm9saW9fc2V0X2RpcnR5KHBoeXNfdG9fZm9saW8oY3JzdGVfb3JpZ2luX2xhcmdlKGNyc3RlKSkpO1xcbiBcXHRcXHRuZXcucy5mYzEuZCA9IDA7XFxuIFxcdFxcdG5ldy5oLnAgPSAxO1xcbkBAIC0xMTAwLDcgKzExMDAsMTMgQEAgaW50IGdtYXBfcHJvdGVjdF9ybWFwKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqc2csIGdmbl90IHBfZ2ZcXG4gXFxuIHN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuIHtcXG4tXFx0X19hdG9taWM2NF9vcihQR1NURV9DTU1BX0RfQklULCBcXHUwMDI2cGdzdGVfb2YocHRlcCktXFx1MDAzZXZhbCk7XFxuK1xcdHVuaW9uIHBnc3RlIHBnc3RlO1xcbitcXG4rXFx0cGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcXG4rXFx0cGdzdGUuY21tYV9kID0gMTtcXG4rXFx0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XFxuK1xcdGF0b21pYzY0X2luYyh3YWxrLVxcdTAwM2Vwcml2KTtcXG4rXFxuIFxcdGlmIChuZWVkX3Jlc2NoZWQoKSlcXG4gXFx0XFx0cmV0dXJuIG5leHQ7XFxuIFxcdHJldHVybiAwO1xcbkBAIC0xMTE0LDcgKzExMjAsOCBAQCB2b2lkIGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5KHN0cnVjdCBnbWFwICpnbWFwKVxcbiBcXHRkbyB7XFxuIFxcdFxcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFxcdTAwMjZnbWFwLVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKVxcbiBcXHRcXHRcXHRnZm4gPSBfZGF0X3dhbGtfZ2ZuX3JhbmdlKGdmbiwgYXNjZV9lbmQoZ21hcC1cXHUwMDNlYXNjZSksIGdtYXAtXFx1MDAzZWFzY2UsIFxcdTAwMjZvcHMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgREFUX1dBTEtfSUdOX0hPTEVTLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBEQVRfV0FMS19JR05fSE9MRVMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmdtYXAtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTtcXG4gXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdH0gd2hpbGUgKGdmbik7XFxuIH1cXG5AQCAtMTI4Nyw3ICsxMjk0LDcgQEAgc3RhdGljIGludCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFcXG4gXFx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi9cXG4gXFx0c21wX3JtYigpO1xcbiBcXG4tXFx0cmMgPSBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZXMoc2ctXFx1MDAzZWt2bSwgY29udGV4dC5mLCBhc2NlLnJzdG8sIGFzY2UuZHQgKyAxLCBmYWxzZSk7XFxuK1xcdHJjID0ga3ZtX3MzOTBfZ2V0X2d1ZXN0X3BhZ2VzKHNnLVxcdTAwM2Vrdm0sIGNvbnRleHQuZiwgYXNjZS5yc3RvLCBhc2NlLnRsICsgMSwgZmFsc2UpO1xcbiBcXHRpZiAocmMgXFx1MDAzZSAwKVxcbiBcXHRcXHRyYyA9IC1FRkFVTFQ7XFxuIFxcdGlmICghcmMpXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbmluZGV4IGRjOWM3NDUxZmU5Nzk0Li5iZGQyMjkyY2ZkYzc2OSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcXG5AQCAtOTk0LDYgKzk5NCw4IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0XFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4rXFxuIFxcdHN3aXRjaCAoYXR0ci1cXHUwMDNlYXR0cikge1xcbiBcXHRjYXNlIEtWTV9TMzkwX1ZNX01FTV9FTkFCTEVfQ01NQTpcXG4gXFx0XFx0cmV0ID0gLUVOWElPO1xcbkBAIC0xMDAxLDcgKzEwMDMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdFZNX0VWRU5UKGt2bSwgMywgXFxcIiVzXFxcIiwgXFxcIkVOQUJMRTogQ01NQSBzdXBwb3J0XFxcIik7XFxuLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdGlmIChrdm0tXFx1MDAzZWNyZWF0ZWRfdmNwdXMpXFxuIFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4gXFx0XFx0ZWxzZSB7XFxuQEAgLTEwMTAsNyArMTAxMSw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0XFxuIFxcdFxcdFxcdGt2bS1cXHUwMDNlYXJjaC51c2VfcGZtZmkgPSAwO1xcbiBcXHRcXHRcXHRyZXQgPSAwO1xcbiBcXHRcXHR9XFxuLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfVk1fTUVNX0NMUl9DTU1BOiB7XFxuIFxcdFxcdGdmbl90IHN0YXJ0X2dmbiA9IDA7XFxuQEAgLTEwMjQsNyArMTAyNCw4IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0XFxuIFxcbiBcXHRcXHRWTV9FVkVOVChrdm0sIDMsIFxcXCIlc1xcXCIsIFxcXCJSRVNFVDogQ01NQSBzdGF0ZXNcXFwiKTtcXG4gXFx0XFx0ZG8ge1xcbi1cXHRcXHRcXHRzdGFydF9nZm4gPSBkYXRfcmVzZXRfY21tYShrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZSwgc3RhcnRfZ2ZuKTtcXG4rXFx0XFx0XFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spXFxuK1xcdFxcdFxcdFxcdHN0YXJ0X2dmbiA9IGRhdF9yZXNldF9jbW1hKGt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBzdGFydF9nZm4pO1xcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0XFx0fSB3aGlsZSAoc3RhcnRfZ2ZuKTtcXG4gXFx0XFx0cmV0ID0gMDtcXG5AQCAtMTA0Miw4ICsxMDQzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRcXG4gXFx0XFx0aWYgKGdldF91c2VyKG5ld19saW1pdCwgKHU2NCBfX3VzZXIgKilhdHRyLVxcdTAwM2VhZGRyKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbi1cXHRcXHRndWFyZChtdXRleCkoXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuLVxcbiBcXHRcXHRuZXdfbGltaXQgPSBBTElHTihuZXdfbGltaXQsIEhQQUdFX1NJWkUpO1xcbiBcXHRcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLm1lbV9saW1pdCAhPSBLVk1fUzM5MF9OT19NRU1fTElNSVQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIG5ld19saW1pdCBcXHUwMDNlIGt2bS1cXHUwMDNlYXJjaC5tZW1fbGltaXQpXFxuQEAgLTEyMjMsNyArMTIyMiw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptcztcXG4gXFx0c3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHM7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcmFtX3BhZ2VzID0gMDtcXG4gXFx0aW50IGJrdDtcXG4gXFxuIFxcdC8qIG1pZ3JhdGlvbiBtb2RlIGFscmVhZHkgZW5hYmxlZCAqL1xcbkBAIC0xMjQwLDEyICsxMjM4LDExIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0a3ZtX2Zvcl9lYWNoX21lbXNsb3QobXMsIGJrdCwgc2xvdHMpIHtcXG4gXFx0XFx0aWYgKCFtcy1cXHUwMDNlZGlydHlfYml0bWFwKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0cmFtX3BhZ2VzICs9IG1zLVxcdTAwM2VucGFnZXM7XFxuIFxcdH1cXG4gXFx0LyogbWFyayBhbGwgdGhlIHBhZ2VzIGFzIGRpcnR5ICovXFxuK1xcdGF0b21pYzY0X3NldChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMsIDApO1xcbiBcXHRnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShrdm0tXFx1MDAzZWFyY2guZ21hcCk7XFxuLVxcdGF0b21pYzY0X3NldChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMsIHJhbV9wYWdlcyk7XFxuLVxcdGt2bS1cXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSA9IDE7XFxuK1xcdFdSSVRFX09OQ0Uoa3ZtLVxcdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlLCAxKTtcXG4gXFx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RBUlRfTUlHUkFUSU9OKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTI1OSw3ICsxMjU2LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdC8qIG1pZ3JhdGlvbiBtb2RlIGFscmVhZHkgZGlzYWJsZWQgKi9cXG4gXFx0aWYgKCFrdm0tXFx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUpXFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXHRrdm0tXFx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgPSAwO1xcbitcXHRXUklURV9PTkNFKGt2bS1cXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSwgMCk7XFxuIFxcdGlmIChrdm0tXFx1MDAzZWFyY2gudXNlX2NtbWEpXFxuIFxcdFxcdGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoa3ZtLCBLVk1fUkVRX1NUT1BfTUlHUkFUSU9OKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTIzMTcsOCArMjMxNCw4IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXFxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGt2bV9zMzkwX2NtbWFfbG9nICphcmdzKVxcbiB7XFxuLVxcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jO1xcbi1cXHR1OCAqYml0cyA9IE5VTEw7XFxuK1xcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcXG4rXFx0dTggKmJpdHMgX19mcmVlKGt2ZnJlZSkgPSBOVUxMO1xcbiBcXHRpbnQgciA9IDA7XFxuIFxcbiBcXHRpZiAoIWt2bS1cXHUwMDNlYXJjaC51c2VfY21tYSlcXG5AQCAtMjMzOCwxOCArMjMzNSwxNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0Yml0cyA9IHZtYWxsb2MoYXJyYXlfc2l6ZShzaXplb2YoKmJpdHMpLCBhcmdzLVxcdTAwM2Vjb3VudCkpO1xcbiBcXHRpZiAoIWJpdHMpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdHIgPSBjb3B5X2Zyb21fdXNlcihiaXRzLCAodm9pZCBfX3VzZXIgKilhcmdzLVxcdTAwM2V2YWx1ZXMsIGFyZ3MtXFx1MDAzZWNvdW50KTtcXG4tXFx0aWYgKHIpIHtcXG4tXFx0XFx0ciA9IC1FRkFVTFQ7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuK1xcdGlmIChyKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuIFxcdGRvIHtcXG4gXFx0XFx0ciA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XFxuIFxcdFxcdGlmIChyKVxcbi1cXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0cmV0dXJuIHI7XFxuIFxcdFxcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKSB7XFxuIFxcdFxcdFxcdHIgPSBkYXRfc2V0X2NtbWFfYml0cyhtYywga3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2UsIGFyZ3MtXFx1MDAzZXN0YXJ0X2dmbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgYXJncy1cXHUwMDNlY291bnQsIGFyZ3MtXFx1MDAzZW1hc2ssIGJpdHMpO1xcbkBAIC0yMzU3LDkgKzIzNTIsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHR9IHdoaWxlIChyID09IC1FTk9NRU0pO1xcbiBcXG4gXFx0c2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlZmxhZ3MpO1xcbi1vdXQ6XFxuLVxcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcXG4tXFx0dmZyZWUoYml0cyk7XFxuK1xcbiBcXHRyZXR1cm4gcjtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbmluZGV4IDQ0N2VjN2VkNDIzZGM0Li5hZDBkZGM0MzNhNzNjMyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXFxuQEAgLTM2Niw3ICszNjYsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9zc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0aWYgKHJjIFxcdTAwM2UgMSlcXG4gXFx0XFx0XFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fQUREUkVTU0lORyk7XFxuIFxcdFxcdGlmIChyYyA9PSAtRU5PTUVNKSB7XFxuLVxcdFxcdFxcdGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cCh2Y3B1LVxcdTAwM2VhcmNoLm1jKTtcXG4rXFx0XFx0XFx0cmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cXHUwMDNlYXJjaC5tYyk7XFxuK1xcdFxcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcbkBAIC0xMTIyLDcgKzExMjQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9wZm1mKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0XFx0aWYgKHJjIFxcdTAwM2UgMSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCByYyk7XFxuIFxcdFxcdFxcdGlmIChyYyA9PSAtRU5PTUVNKSB7XFxuLVxcdFxcdFxcdFxcdGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cCh2Y3B1LVxcdTAwM2VhcmNoLm1jKTtcXG4rXFx0XFx0XFx0XFx0cmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cXHUwMDNlYXJjaC5tYyk7XFxuK1xcdFxcdFxcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcbkBAIC0xMjMyLDcgKzEyMzYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0XFx0XFx0XFx0XFx0OiBFU1NBX1NFVF9TVEFCTEVfSUZfUkVTSURFTlQpKVxcbiBcXHRcXHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9TUEVDSUZJQ0FUSU9OKTtcXG4gXFxuLVxcdGlmICghdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlKSB7XFxuK1xcdGlmICghUkVBRF9PTkNFKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSkpIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogQ01NQSBpcyBlbmFibGVkIGluIHRoZSBLVk0gc2V0dGluZ3MsIGJ1dCBpcyBkaXNhYmxlZCBpblxcbiBcXHRcXHQgKiB0aGUgU0lFIGJsb2NrIGFuZCBpbiB0aGUgbW1fY29udGV4dCwgYW5kIHdlIGFyZSBub3QgZG9pbmdcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jIGIvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jXFxuaW5kZXggZWUzZjM3YWY4YWVlNGEuLjRiZjdjOTAxMmZlYjZhIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY1xcbisrKyBiL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY1xcbkBAIC0xODEsNyArMTgxLDggQEAgdm9pZCBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdm1hZGRyKVxcbiBcXHRpZiAoSVNfRVJSX09SX05VTEwocHRlcCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdF9fYXRvbWljNjRfb3IoX1BBR0VfVU5VU0VELCAobG9uZyAqKXB0ZXApO1xcbitcXHRpZiAocHRlX3ByZXNlbnQoKnB0ZXApKVxcbitcXHRcXHRfX2F0b21pYzY0X29yKF9QQUdFX1VOVVNFRCwgKGxvbmcgKilwdGVwKTtcXG4gXFx0cHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcXG5pbmRleCBlMzlhNzI0ZmU4NjBlMy4uMTVkODFiMmVkN2FkMzkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xcbkBAIC0zNCwxNiArMzQsMjIgQEAgc3RhdGljIGNoYXIgY21tYV92YWx1ZV9idWZbTUFJTl9QQUdFX0NPVU5UICsgVEVTVF9EQVRBX1BBR0VfQ09VTlRdO1xcbiAvKipcXG4gICogRGlydHkgQ01NQSBhdHRyaWJ1dGVzIG9mIGV4YWN0bHkgb25lIHBhZ2UgaW4gdGhlIFRFU1RfREFUQSBtZW1zbG90LFxcbiAgKiBzbyB1c2VfY21tYSBnb2VzIG9uIGFuZCB0aGUgQ01NQSByZWxhdGVkIGlvY3RscyBkbyBzb21ldGhpbmcuXFxuKyAqIFRvdWNoIHRoZSBwYWdlIGF0IG9mZnNldCAxTSBpbnNpZGUgVEVTVF9EQVRBIHRvIG1ha2Ugc3VyZSBpdHMgcGFnZVxcbisgKiB0YWJsZXMgYXJlIGFsbG9jYXRlZCBpbiB0aGUgaG9zdC5cXG4gICovXFxuIHN0YXRpYyB2b2lkIGd1ZXN0X2RvX29uZV9lc3NhKHZvaWQpXFxuIHtcXG4gXFx0YXNtIHZvbGF0aWxlKFxcbiBcXHRcXHQvKiBsb2FkIFRFU1RfREFUQV9TVEFSVF9HRk4gaW50byByMSAqL1xcbitcXHRcXHRcXFwiXFx0eGdyIDEsMVxcXFxuXFxcIlxcbiBcXHRcXHRcXFwiXFx0bGxpbGYgMSwlW3N0YXJ0X2dmbl1cXFxcblxcXCJcXG4gXFx0XFx0LyogY2FsY3VsYXRlIHRoZSBhZGRyZXNzIGZyb20gdGhlIGdmbiAqL1xcbiBcXHRcXHRcXFwiXFx0c2xsZyAxLDEsMTIoMClcXFxcblxcXCJcXG4gXFx0XFx0Lyogc2V0IHRoZSBmaXJzdCBwYWdlIGluIFRFU1RfREFUQSBtZW1zbG90IHRvIFNUQUJMRSAqL1xcbiBcXHRcXHRcXFwiXFx0Lmluc24gcnJmLDB4YjlhYjAwMDAsMiwxLDEsMFxcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFx0YWdmaSAxLDB4MTAwMDAwXFxcXG5cXFwiXFxuK1xcdFxcdC8qIGFsc28gdG91Y2ggdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHNlY29uZCBNQiBvZiBURVNUX0RBVEEgKi9cXG4rXFx0XFx0XFxcIlxcdC5pbnNuIHJyZiwweGI5YWIwMDAwLDIsMSwxLDBcXFxcblxcXCJcXG4gXFx0XFx0LyogaHlwZXJjYWxsICovXFxuIFxcdFxcdFxcXCJcXHRkaWFnIDAsMCwweDUwMVxcXFxuXFxcIlxcbiBcXHRcXHRcXFwiMDpcXHRqIDBiXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyNzo0Mi4xNDc4MzIxNjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MDMzMjI5Mzg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXRfcGVla19jbW1hXCIsXG4gICAgXCJkYXRfZ2V0X2NtbWFcIixcbiAgICBcImdtYXBfY2xlYXJfeW91bmdfY3JzdGVcIixcbiAgICBcIl9fc2V0X2NtbWFfZGlydHlfcHRlXCIsXG4gICAgXCJnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eVwiLFxuICAgIFwiZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsXCIsXG4gICAgXCJrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xcIixcbiAgICBcImt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvblwiLFxuICAgIFwia3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25cIixcbiAgICBcImt2bV9zMzkwX3NldF9jbW1hX2JpdHNcIixcbiAgICBcImhhbmRsZV9zc2tlXCIsXG4gICAgXCJoYW5kbGVfcGZtZlwiLFxuICAgIFwiaGFuZGxlX2Vzc2FcIixcbiAgICBcImdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgaGFuZGxpbmcgb2YgQ29sbGFib3JhdGl2ZSBNZW1vcnkgTWFuYWdlbWVudCBBc3Npc3QgKENNTUEpLCBwYWdlIHRhYmxlIHVwZGF0ZXMsIGFuZCBWTSBtaWdyYXRpb24uIEl0IGZpeGVzIGJ1Z3MgaW4gQ01NQSBzdGF0ZSBoYW5kbGluZywgZGlydHkgcGFnZSB0cmFja2luZywgYW5kIG1lbW9yeSBjb250cm9sIGlvY3Rscy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIEtWTSBjb3JlIGxvZ2ljIGFuZCBpbnN0cnVjdGlvbiBoYW5kbGVycywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gZmVhdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDIzNDM5YmRkYWE0MTYxZWE3NzFjODA2MjY4NjVkNmVjOWNhNGVhNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDIyIDE2OjI3OjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDJjNmNlZTgyNDFlMDQ0Li40NzQwYzc1NjQ5ZWJiNSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC05ODAsNiArOTgwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZClcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuIHtcbitcdGlmIChwdGVfcHJlc2VudChwdGUpKVxuK1x0XHRwdGUgPSBjbGVhcl9wdGVfYml0KHB0ZSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XG4gXHRXUklURV9PTkNFKCpwdGVwLCBwdGUpO1xuIH1cbiBcbkBAIC0xMzMyLDggKzEzMzQsNiBAQCBwZ3Byb3RfdCBwZ3Byb3Rfd3JpdGVjb21iaW5lKHBncHJvdF90IHByb3QpO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IG5yKVxuIHtcbi1cdGlmIChwdGVfcHJlc2VudChlbnRyeSkpXG4tXHRcdGVudHJ5ID0gY2xlYXJfcHRlX2JpdChlbnRyeSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XG4gXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBlbnRyeSwgbnIpO1xuIFx0Zm9yICg7Oykge1xuIFx0XHRzZXRfcHRlKHB0ZXAsIGVudHJ5KTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuaW5kZXggYTRmZTY2NGY2NWVlMTUuLjVmMTk2MGVjOTgyZDA0IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuQEAgLTEyMDksNyArMTIwOSw3IEBAIGludCBkYXRfcGVla19jbW1hKGdmbl90IHN0YXJ0LCB1bmlvbiBhc2NlIGFzY2UsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMpXG4gXHRpbnQgcmM7XG4gXG4gXHRyYyA9IF9kYXRfd2Fsa19nZm5fcmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgKmNvdW50LCBhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0RFRkFVTFQsIFx1MDAyNnN0YXRlKTtcbi1cdCpjb3VudCA9IHN0YXRlLmVuZCAtIHN0YXJ0O1xuK1x0KmNvdW50ID0gc3RhdGUuZW5kIFx1MDAzZT0gc3RhcnQgPyBzdGF0ZS5lbmQgLSBzdGFydCA6IDA7XG4gXHQvKiBSZXR1cm4gc3VjY2VzcyBpZiBhdCBsZWFzdCBvbmUgdmFsdWUgd2FzIHNhdmVkLCBvdGhlcndpc2UgYW4gZXJyb3IuICovXG4gXHRyZXR1cm4gKHJjID09IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICpjb3VudCBcdTAwM2UgMCkgPyAwIDogcmM7XG4gfVxuQEAgLTEyNTMsNiArMTI1Myw5IEBAIGludCBkYXRfZ2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCAqc3RhcnQsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMsXG4gXHR9O1xuIFxuIFx0X2RhdF93YWxrX2dmbl9yYW5nZSgqc3RhcnQsIGFzY2VfZW5kKGFzY2UpLCBhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgXHUwMDI2c3RhdGUpO1xuK1x0LyogSWYgbm8gZGlydHkgcGFnZXMgd2VyZSBmb3VuZCwgd3JhcCBhcm91bmQgYW5kIGNvbnRpbnVlIHNlYXJjaGluZyAqL1xuK1x0aWYgKCpzdGFydCBcdTAwMjZcdTAwMjYgc3RhdGUuc3RhcnQgPT0gLTEpXG4rXHRcdF9kYXRfd2Fsa19nZm5fcmFuZ2UoMCwgKnN0YXJ0LCBhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgXHUwMDI2c3RhdGUpO1xuIFxuIFx0aWYgKHN0YXRlLnN0YXJ0ID09IC0xKSB7XG4gXHRcdCpjb3VudCA9IDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9nbWFwLmMgYi9hcmNoL3MzOTAva3ZtL2dtYXAuY1xuaW5kZXggNzc4MjlmNzg3ZGM3ODEuLjVlNzU0ODViNTNmOWZkIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9nbWFwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jXG5AQCAtMzMyLDcgKzMzMiw3IEBAIHN0YXRpYyBsb25nIGdtYXBfY2xlYXJfeW91bmdfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBlbmQsIHN0XG4gXHRcdG5ldy5oLmkgPSAxO1xuIFx0XHRuZXcucy5mYzEueSA9IDA7XG4gXHRcdG5ldy5zLmZjMS5wcmVmaXhfbm90aWYgPSAwO1xuLVx0XHRpZiAobmV3LnMuZmMxLmQgfHwgIW5ldy5oLnApXG4rXHRcdGlmICgobmV3LnMuZmMxLmQgfHwgIW5ldy5oLnApIFx1MDAyNlx1MDAyNiAhbmV3LnMuZmMxLnMpXG4gXHRcdFx0Zm9saW9fc2V0X2RpcnR5KHBoeXNfdG9fZm9saW8oY3JzdGVfb3JpZ2luX2xhcmdlKGNyc3RlKSkpO1xuIFx0XHRuZXcucy5mYzEuZCA9IDA7XG4gXHRcdG5ldy5oLnAgPSAxO1xuQEAgLTExMDAsNyArMTEwMCwxMyBAQCBpbnQgZ21hcF9wcm90ZWN0X3JtYXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZywgZ2ZuX3QgcF9nZlxuIFxuIHN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4ge1xuLVx0X19hdG9taWM2NF9vcihQR1NURV9DTU1BX0RfQklULCBcdTAwMjZwZ3N0ZV9vZihwdGVwKS1cdTAwM2V2YWwpO1xuK1x0dW5pb24gcGdzdGUgcGdzdGU7XG4rXG4rXHRwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xuK1x0cGdzdGUuY21tYV9kID0gMTtcbitcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuK1x0YXRvbWljNjRfaW5jKHdhbGstXHUwMDNlcHJpdik7XG4rXG4gXHRpZiAobmVlZF9yZXNjaGVkKCkpXG4gXHRcdHJldHVybiBuZXh0O1xuIFx0cmV0dXJuIDA7XG5AQCAtMTExNCw3ICsxMTIwLDggQEAgdm9pZCBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShzdHJ1Y3QgZ21hcCAqZ21hcClcbiBcdGRvIHtcbiBcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2Z21hcC1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4gXHRcdFx0Z2ZuID0gX2RhdF93YWxrX2dmbl9yYW5nZShnZm4sIGFzY2VfZW5kKGdtYXAtXHUwMDNlYXNjZSksIGdtYXAtXHUwMDNlYXNjZSwgXHUwMDI2b3BzLFxuLVx0XHRcdFx0XHRcdCAgREFUX1dBTEtfSUdOX0hPTEVTLCBOVUxMKTtcbitcdFx0XHRcdFx0XHQgIERBVF9XQUxLX0lHTl9IT0xFUyxcbitcdFx0XHRcdFx0XHQgIFx1MDAyNmdtYXAtXHUwMDNla3ZtLVx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcyk7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fSB3aGlsZSAoZ2ZuKTtcbiB9XG5AQCAtMTI4Nyw3ICsxMjk0LDcgQEAgc3RhdGljIGludCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFcbiBcdC8qIFBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbiBrdm1fbW11X2ludmFsaWRhdGVfZW5kKCkuICovXG4gXHRzbXBfcm1iKCk7XG4gXG4tXHRyYyA9IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlcyhzZy1cdTAwM2Vrdm0sIGNvbnRleHQuZiwgYXNjZS5yc3RvLCBhc2NlLmR0ICsgMSwgZmFsc2UpO1xuK1x0cmMgPSBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZXMoc2ctXHUwMDNla3ZtLCBjb250ZXh0LmYsIGFzY2UucnN0bywgYXNjZS50bCArIDEsIGZhbHNlKTtcbiBcdGlmIChyYyBcdTAwM2UgMClcbiBcdFx0cmMgPSAtRUZBVUxUO1xuIFx0aWYgKCFyYylcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IGRjOWM3NDUxZmU5Nzk0Li5iZGQyMjkyY2ZkYzc2OSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtOTk0LDYgKzk5NCw4IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0XG4ge1xuIFx0aW50IHJldDtcbiBcbitcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4rXG4gXHRzd2l0Y2ggKGF0dHItXHUwMDNlYXR0cikge1xuIFx0Y2FzZSBLVk1fUzM5MF9WTV9NRU1fRU5BQkxFX0NNTUE6XG4gXHRcdHJldCA9IC1FTlhJTztcbkBAIC0xMDAxLDcgKzEwMDMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dFxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRWTV9FVkVOVChrdm0sIDMsIFwiJXNcIiwgXCJFTkFCTEU6IENNTUEgc3VwcG9ydFwiKTtcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXHRcdGlmIChrdm0tXHUwMDNlY3JlYXRlZF92Y3B1cylcbiBcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdGVsc2Uge1xuQEAgLTEwMTAsNyArMTAxMSw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0XG4gXHRcdFx0a3ZtLVx1MDAzZWFyY2gudXNlX3BmbWZpID0gMDtcbiBcdFx0XHRyZXQgPSAwO1xuIFx0XHR9XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9WTV9NRU1fQ0xSX0NNTUE6IHtcbiBcdFx0Z2ZuX3Qgc3RhcnRfZ2ZuID0gMDtcbkBAIC0xMDI0LDcgKzEwMjQsOCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dFxuIFxuIFx0XHRWTV9FVkVOVChrdm0sIDMsIFwiJXNcIiwgXCJSRVNFVDogQ01NQSBzdGF0ZXNcIik7XG4gXHRcdGRvIHtcbi1cdFx0XHRzdGFydF9nZm4gPSBkYXRfcmVzZXRfY21tYShrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIHN0YXJ0X2dmbik7XG4rXHRcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKVxuK1x0XHRcdFx0c3RhcnRfZ2ZuID0gZGF0X3Jlc2V0X2NtbWEoa3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBzdGFydF9nZm4pO1xuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHR9IHdoaWxlIChzdGFydF9nZm4pO1xuIFx0XHRyZXQgPSAwO1xuQEAgLTEwNDIsOCArMTA0Myw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0XG4gXHRcdGlmIChnZXRfdXNlcihuZXdfbGltaXQsICh1NjQgX191c2VyICopYXR0ci1cdTAwM2VhZGRyKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbi1cdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbi1cbiBcdFx0bmV3X2xpbWl0ID0gQUxJR04obmV3X2xpbWl0LCBIUEFHRV9TSVpFKTtcbiBcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLm1lbV9saW1pdCAhPSBLVk1fUzM5MF9OT19NRU1fTElNSVQgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBuZXdfbGltaXQgXHUwMDNlIGt2bS1cdTAwM2VhcmNoLm1lbV9saW1pdClcbkBAIC0xMjIzLDcgKzEyMjIsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbXM7XG4gXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcbi1cdHVuc2lnbmVkIGxvbmcgcmFtX3BhZ2VzID0gMDtcbiBcdGludCBia3Q7XG4gXG4gXHQvKiBtaWdyYXRpb24gbW9kZSBhbHJlYWR5IGVuYWJsZWQgKi9cbkBAIC0xMjQwLDEyICsxMjM4LDExIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbiBcdGt2bV9mb3JfZWFjaF9tZW1zbG90KG1zLCBia3QsIHNsb3RzKSB7XG4gXHRcdGlmICghbXMtXHUwMDNlZGlydHlfYml0bWFwKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRyYW1fcGFnZXMgKz0gbXMtXHUwMDNlbnBhZ2VzO1xuIFx0fVxuIFx0LyogbWFyayBhbGwgdGhlIHBhZ2VzIGFzIGRpcnR5ICovXG4rXHRhdG9taWM2NF9zZXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcywgMCk7XG4gXHRnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShrdm0tXHUwMDNlYXJjaC5nbWFwKTtcbi1cdGF0b21pYzY0X3NldChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzLCByYW1fcGFnZXMpO1xuLVx0a3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgPSAxO1xuK1x0V1JJVEVfT05DRShrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSwgMSk7XG4gXHRrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KGt2bSwgS1ZNX1JFUV9TVEFSVF9NSUdSQVRJT04pO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTEyNTksNyArMTI1Niw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIFx0LyogbWlncmF0aW9uIG1vZGUgYWxyZWFkeSBkaXNhYmxlZCAqL1xuIFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSA9IDA7XG4rXHRXUklURV9PTkNFKGt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlLCAwKTtcbiBcdGlmIChrdm0tXHUwMDNlYXJjaC51c2VfY21tYSlcbiBcdFx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RPUF9NSUdSQVRJT04pO1xuIFx0cmV0dXJuIDA7XG5AQCAtMjMxNyw4ICsyMzE0LDggQEAgc3RhdGljIGludCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qga3ZtX3MzOTBfY21tYV9sb2cgKmFyZ3MpXG4ge1xuLVx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWM7XG4tXHR1OCAqYml0cyA9IE5VTEw7XG4rXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XG4rXHR1OCAqYml0cyBfX2ZyZWUoa3ZmcmVlKSA9IE5VTEw7XG4gXHRpbnQgciA9IDA7XG4gXG4gXHRpZiAoIWt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hKVxuQEAgLTIzMzgsMTggKzIzMzUsMTYgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRiaXRzID0gdm1hbGxvYyhhcnJheV9zaXplKHNpemVvZigqYml0cyksIGFyZ3MtXHUwMDNlY291bnQpKTtcbiBcdGlmICghYml0cylcbi1cdFx0Z290byBvdXQ7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0ciA9IGNvcHlfZnJvbV91c2VyKGJpdHMsICh2b2lkIF9fdXNlciAqKWFyZ3MtXHUwMDNldmFsdWVzLCBhcmdzLVx1MDAzZWNvdW50KTtcbi1cdGlmIChyKSB7XG4tXHRcdHIgPSAtRUZBVUxUO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbitcdGlmIChyKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiBcdGRvIHtcbiBcdFx0ciA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XG4gXHRcdGlmIChyKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRcdHJldHVybiByO1xuIFx0XHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spIHtcbiBcdFx0XHRyID0gZGF0X3NldF9jbW1hX2JpdHMobWMsIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgYXJncy1cdTAwM2VzdGFydF9nZm4sXG4gXHRcdFx0XHRcdCAgICAgIGFyZ3MtXHUwMDNlY291bnQsIGFyZ3MtXHUwMDNlbWFzaywgYml0cyk7XG5AQCAtMjM1Nyw5ICsyMzUyLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBcdH0gd2hpbGUgKHIgPT0gLUVOT01FTSk7XG4gXG4gXHRzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2VmbGFncyk7XG4tb3V0OlxuLVx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuLVx0dmZyZWUoYml0cyk7XG4rXG4gXHRyZXR1cm4gcjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuaW5kZXggNDQ3ZWM3ZWQ0MjNkYzQuLmFkMGRkYzQzM2E3M2MzIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wcml2LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXG5AQCAtMzY2LDcgKzM2Niw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Nza2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRpZiAocmMgXHUwMDNlIDEpXG4gXHRcdFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fQUREUkVTU0lORyk7XG4gXHRcdGlmIChyYyA9PSAtRU5PTUVNKSB7XG4tXHRcdFx0a3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtXHUwMDNlYXJjaC5tYyk7XG4rXHRcdFx0cmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cdTAwM2VhcmNoLm1jKTtcbitcdFx0XHRpZiAocmMpXG4rXHRcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0aWYgKHJjIFx1MDAzYyAwKVxuQEAgLTExMjIsNyArMTEyNCw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BmbWYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdGlmIChyYyBcdTAwM2UgMSlcbiBcdFx0XHRcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgcmMpO1xuIFx0XHRcdGlmIChyYyA9PSAtRU5PTUVNKSB7XG4tXHRcdFx0XHRrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cdTAwM2VhcmNoLm1jKTtcbitcdFx0XHRcdHJjID0ga3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtXHUwMDNlYXJjaC5tYyk7XG4rXHRcdFx0XHRpZiAocmMpXG4rXHRcdFx0XHRcdHJldHVybiByYztcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAocmMgXHUwMDNjIDApXG5AQCAtMTIzMiw3ICsxMjM2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXNzYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdFx0XHRcdFx0OiBFU1NBX1NFVF9TVEFCTEVfSUZfUkVTSURFTlQpKVxuIFx0XHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9TUEVDSUZJQ0FUSU9OKTtcbiBcbi1cdGlmICghdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSkge1xuK1x0aWYgKCFSRUFEX09OQ0UodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSkpIHtcbiBcdFx0LypcbiBcdFx0ICogQ01NQSBpcyBlbmFibGVkIGluIHRoZSBLVk0gc2V0dGluZ3MsIGJ1dCBpcyBkaXNhYmxlZCBpblxuIFx0XHQgKiB0aGUgU0lFIGJsb2NrIGFuZCBpbiB0aGUgbW1fY29udGV4dCwgYW5kIHdlIGFyZSBub3QgZG9pbmdcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmMgYi9hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmNcbmluZGV4IGVlM2YzN2FmOGFlZTRhLi40YmY3YzkwMTJmZWI2YSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY1xuKysrIGIvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jXG5AQCAtMTgxLDcgKzE4MSw4IEBAIHZvaWQgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHZtYWRkcilcbiBcdGlmIChJU19FUlJfT1JfTlVMTChwdGVwKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0X19hdG9taWM2NF9vcihfUEFHRV9VTlVTRUQsIChsb25nICopcHRlcCk7XG4rXHRpZiAocHRlX3ByZXNlbnQoKnB0ZXApKVxuK1x0XHRfX2F0b21pYzY0X29yKF9QQUdFX1VOVVNFRCwgKGxvbmcgKilwdGVwKTtcbiBcdHB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG5pbmRleCBlMzlhNzI0ZmU4NjBlMy4uMTVkODFiMmVkN2FkMzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcbkBAIC0zNCwxNiArMzQsMjIgQEAgc3RhdGljIGNoYXIgY21tYV92YWx1ZV9idWZbTUFJTl9QQUdFX0NPVU5UICsgVEVTVF9EQVRBX1BBR0VfQ09VTlRdO1xuIC8qKlxuICAqIERpcnR5IENNTUEgYXR0cmlidXRlcyBvZiBleGFjdGx5IG9uZSBwYWdlIGluIHRoZSBURVNUX0RBVEEgbWVtc2xvdCxcbiAgKiBzbyB1c2VfY21tYSBnb2VzIG9uIGFuZCB0aGUgQ01NQSByZWxhdGVkIGlvY3RscyBkbyBzb21ldGhpbmcuXG4rICogVG91Y2ggdGhlIHBhZ2UgYXQgb2Zmc2V0IDFNIGluc2lkZSBURVNUX0RBVEEgdG8gbWFrZSBzdXJlIGl0cyBwYWdlXG4rICogdGFibGVzIGFyZSBhbGxvY2F0ZWQgaW4gdGhlIGhvc3QuXG4gICovXG4gc3RhdGljIHZvaWQgZ3Vlc3RfZG9fb25lX2Vzc2Eodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUoXG4gXHRcdC8qIGxvYWQgVEVTVF9EQVRBX1NUQVJUX0dGTiBpbnRvIHIxICovXG4rXHRcdFwiXHR4Z3IgMSwxXFxuXCJcbiBcdFx0XCJcdGxsaWxmIDEsJVtzdGFydF9nZm5dXFxuXCJcbiBcdFx0LyogY2FsY3VsYXRlIHRoZSBhZGRyZXNzIGZyb20gdGhlIGdmbiAqL1xuIFx0XHRcIlx0c2xsZyAxLDEsMTIoMClcXG5cIlxuIFx0XHQvKiBzZXQgdGhlIGZpcnN0IHBhZ2UgaW4gVEVTVF9EQVRBIG1lbXNsb3QgdG8gU1RBQkxFICovXG4gXHRcdFwiXHQuaW5zbiBycmYsMHhiOWFiMDAwMCwyLDEsMSwwXFxuXCJcbitcdFx0XCJcdGFnZmkgMSwweDEwMDAwMFxcblwiXG4rXHRcdC8qIGFsc28gdG91Y2ggdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHNlY29uZCBNQiBvZiBURVNUX0RBVEEgKi9cbitcdFx0XCJcdC5pbnNuIHJyZiwweGI5YWIwMDAwLDIsMSwxLDBcXG5cIlxuIFx0XHQvKiBoeXBlcmNhbGwgKi9cbiBcdFx0XCJcdGRpYWcgMCwwLDB4NTAxXFxuXCJcbiBcdFx0XCIwOlx0aiAwYlwiXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyNzo0Mi4xNDc4MzM4NDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODY1OTYxODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUG90ZW50aWFsOiBzMzkwIEtWTSBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzICpkb2VzKiBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwsIGFuZCB0aGVyZWZvcmUsIGl0J3MgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBtb2RpZmllZCBmaWxlcyBwb2ludCBkaXJlY3RseSB0byB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLCB3aGljaCBpcyBzaWduaWZpY2FudC4gVGhpcyBpc24ndCBqdXN0IGEgbWlub3IgdHdlYWs7IHdlJ3JlIGxvb2tpbmcgYXQgY29kZSB0aGF0IHRvdWNoZXMgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIENNTUEgKENvbGxhYm9yYXRpdmUgTWVtb3J5IE1hbmFnZW1lbnQgQXNzaXN0KSBmdW5jdGlvbmFsaXR5LCBhbmQgVk0gbWlncmF0aW9uIOKAkyBhbGwgY3JpdGljYWwgYXJlYXMgd2l0aGluIGEgdmlydHVhbGl6YXRpb24gY29udGV4dC5cblxuTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgS1ZNIG9uIHMzOTAgaXMgYSB3ZWxsLWVzdGFibGlzaGVkIGFuZCBhY3RpdmVseSB1c2VkIHBsYXRmb3JtLiBJdCdzIG5vdCBzb21lIG9ic2N1cmUgY29ybmVyIGNhc2UuIFRoaXMgbWVhbnMgYW55IGJ1Z3MgbHVya2luZyB3aXRoaW4gdGhlc2UgY2hhbmdlcyBjb3VsZCBoYXZlIHJlYWwtd29ybGQgaW1wYWN0LiBJbXBvcnRhbnRseSwgSSBrbm93IHRoYXQgU3l6a2FsbGVyIHN1cHBvcnRzIHMzOTB4LCB3aGljaCBpcyBhIG1ham9yIHBvc2l0aXZlIHNpZ24uIElmIHN5emthbGxlciBjYW4gd29yayBvbiB0aGUgcGxhdGZvcm0sIHRoZW4gd2UgaGF2ZSBhIGdvb2Qgb3Bwb3J0dW5pdHkuXG5cbk5vdywgbGV0J3MgZ2V0IHNwZWNpZmljLiBJIHdhbnQgdG8gaWRlbnRpZnkgdGhlICptb3N0KiBpbnRlcmVzdGluZyBmdW5jdGlvbnMgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIEkga25vdyB0aGF0IGNlcnRhaW4gZnVuY3Rpb25zIG1pZ2h0IGJlIGhvdCBwYXRocywgYW5kIEkgd2FudCB0byBleGNsdWRlIHRob3NlLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZTogYHNldF9wdGVgLCBgc2V0X3B0ZXNgLCBgZGF0X3BlZWtfY21tYWAsIGBkYXRfZ2V0X2NtbWFgLCBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAsIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLCBga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sYCwgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYGhhbmRsZV9zc2tlYCwgYGhhbmRsZV9wZm1mYCwgYGhhbmRsZV9lc3NhYCwgYW5kIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLiAgSSBzdXNwZWN0IGBzZXRfcHRlYCBhbmQgYHNldF9wdGVzYCBhcmUgcHJvYmFibHkgaG90IHBhdGhzLCBzbyBJJ2xsIHB1dCB0aG9zZSBhc2lkZSBmb3Igbm93LlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgb3B0aW9ucy4gSSBrbm93IHRoYXQgYENPTkZJR19LVk1gIHdpbGwgYmUgcmVsZXZhbnQsIGFuZCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBDTU1BLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBIHF1aWNrIGdyZXAgaW4gYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2Agd2lsbCB0ZWxsIG1lIGlmIHdlIG5lZWQgdG8gY29uc2lkZXIgc3BlY2lmaWMgZW5hYmxlbWVudCBmbGFncyBmb3IgdGhvcm91Z2ggZnV6emluZy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbmNyZXRlIHBpY3R1cmUgb2YgdGhlIGV4cG9zdXJlIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2OTIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyNzo1Mi4wMTM3OTk3MDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyNDE1NzI5NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHXy4qQ01NQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjc6NTQuNjM3OTcwNzk5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEzMjkyNTY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgaXQgc2VlbXMgbGlrZSB0aGVyZSBhcmVuJ3QgYW55IGltbWVkaWF0ZWx5IG9idmlvdXMsIHByZS1jb25maWd1cmVkIENNTUEgc2V0dGluZ3MgSSBjYW4gcmVhZGlseSBpZGVudGlmeS4gVGltZSB0byBkaWcgZGVlcGVyLiBNeSBuZXh0IG1vdmUgaXMgdG8gbGV2ZXJhZ2UgdGhlIHBvd2VyIG9mIGBncmVwYC4gSSdsbCBmb2N1cyBteSBzZWFyY2ggb24gdGhlIGBhcmNoL3MzOTAva3ZtL2AgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IG1lbnRpb25zIG9mIGBLVk1gLiBUaGlzIHNob3VsZCBoZWxwIG1lIHBpbnBvaW50IGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBjb2RlIHJlbGF0ZWQgdG8gS1ZNIHdpdGhpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIG5leHQgc3RlcCBnaXZlbiB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTc2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjc6NTkuNzcwODk5NjE0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNTc2ODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyNzo1OS44NjE1MDcyMjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc3MTgwMzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgZmlndXJpbmcgb3V0IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gS1ZNLiBNeSBpbnN0aW5jdCBzYXlzIHRvIHN0YXJ0IHdpdGggYEtWTWAgYXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiwgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIG1haW4gZGVmaW5pdGlvbnMgYXJlLiBIb3dldmVyLCBJIHdhbnQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJ3MgYW55dGhpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGdvaW5nIG9uIGhlcmUuIFRoZXJlZm9yZSwgSSBzaG91bGQgY2hlY2sgdGhlIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgIGZpbGUuIEl0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gbG9vayBmb3IgYW55IHNwZWNpYWxpemVkIGNvbmZpZ3VyYXRpb25zIG9yIG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byBLVk0gb24gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIHdoZXJlIEknbGwgZmluZCB0aGUgbW9zdCByZWxldmFudCBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzI5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjg6MDIuOTM4NjkxNzU3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NTU0MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZiBDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NjAyPWludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNjA4LVxcdGNhc2UgS1ZNX0NBUF9TMzkwX0dNQVA6XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjYwOTojaWZkZWYgQ09ORklHX0tWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTYxMC1cXHRjYXNlIEtWTV9DQVBfUzM5MF9VQ09OVFJPTDpcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMjI5PWludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyMzctXFx0cmMgPSAtRUlOVkFMO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjM4OiNpZmRlZiBDT05GSUdfS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzIzOS1cXHRpZiAodHlwZSBcXHUwMDI2IH5LVk1fVk1fUzM5MF9VQ09OVFJPTClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NDgzPWxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTU0LVxcdH1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTU1NTojaWZkZWYgQ09ORklHX0tWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1NTYtXFx0Y2FzZSBLVk1fUzM5MF9VQ0FTX01BUDoge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU2OTg9dm1fZmF1bHRfdCBrdm1fYXJjaF92Y3B1X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2OTkte1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NzAwOiNpZmRlZiBDT05GSUdfS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTcwMS1cXHRpZiAoKHZtZi1cXHUwMDNlcGdvZmYgPT0gS1ZNX1MzOTBfU0lFX1BBR0VfT0ZGU0VUKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyODowMy4wMDUyNTg2NDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODM1MjM3MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBLVk0gcGF0Y2gsIGFuZCBpbW1lZGlhdGVseSB0aGUgZm9jdXMgaXMgb24gYSBoYW5kZnVsIG9mIGtleSBmdW5jdGlvbnMgdGhhdCBuZWVkIGEgdGhvcm91Z2ggaW5zcGVjdGlvbiwgc3BlY2lmaWNhbGx5IHRob3NlIHJlbGF0ZWQgdG8gS1ZNIG1lbW9yeSBjb250cm9sIG9uIHMzOTAgc3lzdGVtcy4gIEknbSBzZWVpbmcgYGt2bV9zMzkwX3NldF9tZW1fY29udHJvbGAsIGhhbmRsaW5nIHRob3NlIGlvY3RscyDigJMgYEtWTV9TMzkwX1ZNX01FTV9FTkFCTEVfQ01NQWAsIGBLVk1fUzM5MF9WTV9NRU1fQ0xSX0NNTUFgLCBhbmQgYEtWTV9TMzkwX1ZNX01FTV9MSU1JVF9TSVpFYCDigJMgdGhhdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiAgVGhlbiB3ZSBoYXZlIG1pZ3JhdGlvbi1yZWxhdGVkIGhhbmRsZXJzOiBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCBhbmQgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCwgYW5kIGFsc28gYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLlxuXG5CZXlvbmQgdGhlIGNvcmUgbWVtb3J5IGNvbnRyb2wsIGl0J3MgY2xlYXIgd2UgaGF2ZSB0byBkaWcgaW50byBhbGwgdGhlIENNTUEgYml0cywgcGFnaW5nIHN0cnVjdHVyZXMsIGFuZCB0aGUgaGFuZGxpbmcgb2YgdGhlIGdtYXAuIFRoaXMgaW5jbHVkZXMgYGRhdF9wZWVrX2NtbWFgLCBgZGF0X2dldF9jbW1hYCwgYGdtYXBfY2xlYXJfeW91bmdfY3JzdGVgLCBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgLCBhbmQgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCBhbnkgc3VidGxlIG1pc2NvbmZpZ3VyYXRpb24gb3IgcmFjZSBjb25kaXRpb24gd2l0aGluIHRob3NlIGdtYXAgcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXMgY291bGQgYmUgZGlzYXN0cm91cy5cblxuVGhlbiB0aGUgcmVhbCBpbnRlcmVzdGluZyBzdHVmZiAtIHRoZSBpbnN0cnVjdGlvbiBoYW5kbGVyczogYGhhbmRsZV9zc2tlYCwgYGhhbmRsZV9wZm1mYCwgYW5kIGBoYW5kbGVfZXNzYWAuICBUaGVzZSBhcmUgaW4gYGFyY2gvczM5MC9rdm0vcHJpdi5jYC4gVGhhdCBtZWFucyB0aGV5J3JlIGNvcmUgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMgd2l0aGluIHRoZSBLVk0gZ3Vlc3QuICBUaGV5J3JlICpkZWZpbml0ZWx5KiByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBoaWdoIG9uIHRoZSBmdXp6aW5nIGxpc3QuIEEgc3VidGxlIGJ1ZyB0aGVyZSBjb3VsZCBsZWFkIHRvIHNlcmlvdXMgVk0gZXNjYXBlcy5cblxuSSBzaG91bGQgYWxzbyBjaGVjayBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYCBpbiBgYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jYC5cblxuT2J2aW91c2x5LCBgQ09ORklHX0tWTWAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBjaGVjayBmb3IgdGhlc2UgZmVhdHVyZXMsIGJ1dCBJJ2xsIG5lZWQgdG8gZ28gZGVlcGVyIHRvIGJlIHN1cmUuIEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoYXQgdGhvc2UgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMgYXJlIGluZGVlZCBlbmFibGVkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gYW5kIG1ha2UgYSBmdXp6aW5nIHBsYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMzYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjg6MTAuODQwNDk5NDc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjYxMDA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vZ21hcF9oZWxwZXJzLmg9MTM9aW50IGdtYXBfaGVscGVyX2Rpc2FibGVfY293X3NoYXJpbmcodm9pZCk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2dtYXBfaGVscGVycy5oOjE0OnZvaWQgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHZtYWRkcik7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2dtYXBfaGVscGVycy5oLTE1LXB0ZV90ICp0cnlfZ2V0X2xvY2tlZF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgc3BpbmxvY2tfdCAqKnB0bCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz0zNzY9c3RhdGljIGxvbmcgX2dtYXBfdW5tYXBfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKncpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0zODUtXFx0XFx0dm1hZGRyID0gX19nZm5fdG9faHZhX21lbXNsb3QocHJpdi1cXHUwMDNlc2xvdCwgZ2ZuKTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzozODY6XFx0XFx0Z21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKHByaXYtXFx1MDAzZWdtYXAtXFx1MDAzZWt2bS1cXHUwMDNlbW0sIHZtYWRkcik7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMzg3LVxcdH1cXG4tLVxcbmFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYz0xNDU9RVhQT1JUX1NZTUJPTF9HUEwoZ21hcF9oZWxwZXJfZGlzY2FyZCk7XFxuLS1cXG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmMtMTQ3LS8qKlxcbmFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYzoxNDg6ICogZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKCkgLSBtYXJrIGEgcHRlIGVudHJ5IGFzIHVudXNlZFxcbmFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYy0xNDktICogQG1tOiB0aGUgbW1cXG4tLVxcbmFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYy0xNjItICovXFxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jOjE2Mzp2b2lkIGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpXFxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jLTE2NC17XFxuLS1cXG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmMtMTg3LX1cXG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmM6MTg4OkVYUE9SVF9TWU1CT0xfR1BMKGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZCk7XFxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jLTE4OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjg6MTAuOTA3MTE4MjUzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyOTI4NTI1MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0gTWVtb3J5IE1hbmFnZW1lbnQgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLiAgVGhhdCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbSBgX2dtYXBfdW5tYXBfcHRlYC4gIFJpZ2h0IGF3YXksIG15IG1pbmQgY2xpY2tzOiBgX2dtYXBfdW5tYXBfcHRlYCBpcyBwYXJ0IG9mIEtWTS4gIFRoYXTigJlzIHdoZXJlIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgYWN0aW9uIGlzIGhhcHBlbmluZywgd2hpY2ggaGVscHMgbWUgcGxhY2UgaXQgaW50byBjb250ZXh0LiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoZSBDTU1BIGZ1bmN0aW9uYWxpdHkuIExldCdzIHNlZSBpZiB0aGUgbmV4dCBzdGVwcyB3aWxsIG1ha2UgbW9yZSBzZW5zZSwgZm9jdXNpbmcgb24gaG93IGRhdGEgaXMgYmVpbmcgcmVhZCBhbmQgYWNjZXNzZWQuICBJJ2xsIHN0YXJ0IHdpdGggYGRhdF9wZWVrX2NtbWFgIGFuZCBgZGF0X2dldF9jbW1hYCAtIHRob3NlIGZ1bmN0aW9ucyBzaG91bGQgdGVsbCBtZSBtb3JlIGFib3V0IGhvdyB0aGUgQ29tbW9uIE1lbW9yeSBNYW5hZ2VtZW50IEFyZWEgKENNTUEpIGlzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODQ1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjg6MTkuMTk5OTc0ODRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NzU1MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhdF9wZWVrX2NtbWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2RhdC5jPTExNjk9c3RydWN0IGRhdF9nZXRfY21tYV9zdGF0ZSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExNzYtXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMTc3OnN0YXRpYyBsb25nIF9fZGF0X3BlZWtfY21tYV9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExNzgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTg5LVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5MDpzdGF0aWMgbG9uZyBfX2RhdF9wZWVrX2NtbWFfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTkxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE5OC1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjExOTk6aW50IGRhdF9wZWVrX2NtbWEoZ2ZuX3Qgc3RhcnQsIHVuaW9uIGFzY2UgYXNjZSwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcylcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMDAte1xcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwMS1cXHRjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHtcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDI6XFx0XFx0LnB0ZV9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9wdGUsXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjAzOlxcdFxcdC5wbWRfZW50cnkgPSBfX2RhdF9wZWVrX2NtbWFfY3JzdGUsXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjA0OlxcdFxcdC5wdWRfZW50cnkgPSBfX2RhdF9wZWVrX2NtbWFfY3JzdGUsXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjA1OlxcdFxcdC5wNGRfZW50cnkgPSBfX2RhdF9wZWVrX2NtbWFfY3JzdGUsXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjA2OlxcdFxcdC5wZ2RfZW50cnkgPSBfX2RhdF9wZWVrX2NtbWFfY3JzdGUsXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjA3LVxcdH07XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5oPTU1Mj1sb25nIGRhdF9yZXNldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3Qgc3RhcnRfZ2ZuKTtcXG5hcmNoL3MzOTAva3ZtL2RhdC5oOjU1MzppbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKTtcXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTU1NC1pbnQgZGF0X2dldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzLCBhdG9taWM2NF90ICpyZW0pO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIyNTc9c3RhdGljIGludCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMjg5LVxcdFxcdGlmIChwZWVrKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMjkwOlxcdFxcdFxcdHJldCA9IGRhdF9wZWVrX2NtbWEoYXJncy1cXHUwMDNlc3RhcnRfZ2ZuLCBrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZSwgXFx1MDAyNmFyZ3MtXFx1MDAzZWNvdW50LFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMjkxLVxcdFxcdFxcdFxcdFxcdCAgICB2YWx1ZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyODoxOS4yNjc3MzczNzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwMDU2NTU0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENNTUEgQml0IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgQ01NQSBiaXRzIGFyZSBtYW5hZ2VkLCBhbmQgaXQgbG9va3MgbGlrZSBgZGF0X3BlZWtfY21tYWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgLiBBbHNvLCBgZGF0X2dldF9jbW1hYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB0aGUgc2FtZSBzcG90LCBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBDTU1BIGJpdCBmdW5jdGlvbmFsaXR5IGFyZSB0aGUgb25lcyBkaXJlY3RseSBsaW5rZWQgdG8gc2V0dGluZywgZ2V0dGluZywgYW5kIG1hbmlwdWxhdGluZyB0aGVzZSBiaXRzLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgZnVuY3Rpb25zIHRvIGdldCBhIGdyYXNwIG9mIHRoZSBvdmVyYWxsIG9wZXJhdGlvbi5cblxuQmFzZWQgb24gdGhlIGZ1bmN0aW9uIGNhbGxzLCBJJ3ZlIGdvdCBhIHByZWxpbWluYXJ5IGxpc3Qgb2YgY2FuZGlkYXRlcy4gVGhleSBsb29rIGxpa2U6XG5cbiogICBga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sYFxuKiAgIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gXG4qICAgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYFxuKiAgIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYFxuKiAgIGBrdm1fczM5MF9nZXRfY21tYV9iaXRzYFxuKiAgIGBkYXRfcGVla19jbW1hYFxuKiAgIGBkYXRfZ2V0X2NtbWFgXG4qICAgYGdtYXBfY2xlYXJfeW91bmdfY3JzdGVgXG4qICAgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YFxuKiAgIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgXG4qICAgYGhhbmRsZV9zc2tlYFxuKiAgIGBoYW5kbGVfcGZtZmBcbiogICBgaGFuZGxlX2Vzc2FgXG4qICAgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGBcblxuTm93LCBJIHRoaW5rIGl0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAgdG8gc2VlIGhvdyBpdCBtaWdodCBiZSBpbnZvbHZlZCBpbiB0aGUgcHJvY2Vzcy4gSSdsbCBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjg6MjkuMjczMzk3MTY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTIxMDgyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ21hcF9jbGVhcl95b3VuZ19jcnN0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vZ21hcC5jPTI4Nz1zdGF0aWMgbG9uZyBnbWFwX2NsZWFyX3lvdW5nX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgZW5kLCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0zMTUtXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MzE2OnN0YXRpYyBsb25nIGdtYXBfY2xlYXJfeW91bmdfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBlbmQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0zMTcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MzU0PWJvb2wgZ21hcF9hZ2VfZ2ZuKHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMzU3LVxcdFxcdC5wdGVfZW50cnkgPSBnbWFwX2NsZWFyX3lvdW5nX3B0ZSxcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzozNTg6XFx0XFx0LnBtZF9lbnRyeSA9IGdtYXBfY2xlYXJfeW91bmdfY3JzdGUsXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MzU5OlxcdFxcdC5wdWRfZW50cnkgPSBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlLFxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTM2MC1cXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyODoyOS42MjU1MTE5MzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyMjY0NzQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGdtYXBfYWdlX2dmbmAgQ2FsbCoqXG5cbk9rYXksIHNvIGBnbWFwX2FnZV9nZm5gIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBrdm1fYWdlX2dmbmAuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBga3ZtX2FnZV9nZm5gIGlzIHR5cGljYWxseSBpbnZvbHZlZCBpbiBhZ2luZyBndWVzdCBwaHlzaWNhbCBwYWdlcywgYW5kIGBnbWFwX2FnZV9nZm5gIHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byB0aGUgZ2xvYmFsIG1lbW9yeSBtYXAuIFRoaXMgY291bGQgYmUgYWJvdXQgdHJhY2tpbmcgcGFnZSB1c2FnZSBmcm9tIHRoZSBob3N0J3MgcGVyc3BlY3RpdmUsIG9yIG1heWJlIGl0IGlzIHNvbWUgc29ydCBvZiBzaGFyZWQgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCwgc3BlY2lmaWNhbGx5LCB0aGUgY29udGV4dCBvZiB0aGF0IGNhbGwuXG5cblRoZSBuZXh0IHRoaW5nIEkgdGhpbmsgdG8gY2hlY2sgaXMgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAuIE15IGluaXRpYWwgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGNhbGwgaXMgZnJvbSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgQWRkcmVzcyBTcGFjZSBDb250cm9sIEVudHJ5IChBU0NFKSB0YWJsZS4gVGhpcyBjb3VsZCBiZSBhIGNyaXRpY2FsIHBhcnQgb2YgZW5zdXJpbmcgcHJvcGVyIHByb3RlY3Rpb24gYW5kIGlzb2xhdGlvbiwgZXNwZWNpYWxseSBkdXJpbmcgcGFnZSBhZ2luZyBvcGVyYXRpb25zLiBJdCdzIGxpa2VseSB0aGF0IGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgIGhhbmRsZXMgYSBuZWNlc3NhcnkgcHJvdGVjdGlvbiBtZWNoYW5pc20gd2hlbiBtb2RpZnlpbmcgdGhlIHRvcC1sZXZlbCBwYWdlIHRhYmxlIGVudHJpZXMuIFNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEl0J3MgbGlrZWx5IGEgY3JpdGljYWwgc2VjdGlvbiBhbmQgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgY2FsbCBpcyBjb3JyZWN0bHkgc3luY2hyb25pemVkIHRvIHByZXZlbnQgYW55IHJhY2UgY29uZGl0aW9ucyBvciBkYXRhIGNvcnJ1cHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDkzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjg6MzQuNjQ4MTYzODQ0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjk0Njc1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2dtYXAuYz0xMjEyPXN0YXRpYyBzdHJ1Y3QgZ21hcCAqZ21hcF9maW5kX3NoYWRvdyhzdHJ1Y3QgZ21hcCAqcGFyZW50LCB1bmlvbiBhc2NlIGFzY2UsIGludCBlZGF0X2xldmVsKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTIyNS0jZGVmaW5lIENSU1RfVEFCTEVfUEFHRVMgKF9DUlNUX1RBQkxFX1NJWkUgLyBQQUdFX1NJWkUpXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTIyNjpzdHJ1Y3QgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsIHtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjI3LVxcdHVuc2lnbmVkIGxvbmcgc2VxO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTIzMC1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjMxOnN0YXRpYyBpbmxpbmUgaW50IF9fZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqc2csXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTIzMjpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsICpjb250ZXh0KVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyMzMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI2My1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjY0OnN0YXRpYyBpbmxpbmUgaW50IF9nbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZyxcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjY1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsICpjb250ZXh0KVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyNjYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI3Ny1cXHRcXHRcXHRyZXR1cm4gcmM7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTI3ODpcXHRcXHRyYyA9IF9fZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsKG1jLCBzZywgY29udGV4dCk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI3OS1cXHRcXHRyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjg0LVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyODU6c3RhdGljIGludCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZylcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjg2LXtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjg3OlxcdHN0cnVjdCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwgY29udGV4dCA9IHt9O1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyODgtXFx0dW5pb24gYXNjZSBhc2NlID0gc2ctXFx1MDAzZWd1ZXN0X2FzY2U7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMzAwLVxcdGlmICghcmMpXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTMwMTpcXHRcXHRyYyA9IF9nbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwobWMsIHNnLCBcXHUwMDI2Y29udGV4dCk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTMwMi1cXHRpZiAocmMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz0xMzI1PXN0cnVjdCBnbWFwICpnbWFwX2NyZWF0ZV9zaGFkb3coc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpwYXJlbnQsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMzc1LVxcdC8qIFByb3RlY3Qgd2hpbGUgaW5zZXJ0aW5nLCBwcm90ZWN0cyBhZ2FpbnN0IGludmFsaWRhdGlvbiByYWNlcy4gKi9cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzc2OlxcdHJjID0gZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsKG1jLCBuZXcpO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzNzctXFx0aWYgKHJjKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE2OjI4OjM0LjczMTExOTY2MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjkyMjU5NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsKipcblxuT2theSwgc28gYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYGdtYXBfY3JlYXRlX3NoYWRvd2AuIFRoYXQncyB0aGUgY29udGV4dC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGludGVyYWN0aW9uLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCdzIHRyaWdnZXJpbmcgdGhpcyBwcm90ZWN0aW9uIGNhbGwuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbnMsIGl0IHNlZW1zIGxpa2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBzb21lIGtpbmQgb2YgYWNjZXNzIGNvbnRyb2wgb24gdGhlIHRvcC1sZXZlbCBBU0NFLlxuXG5Ob3csIG15IG5leHQgcXVlc3Rpb24gcmV2b2x2ZXMgYXJvdW5kIHdoYXQgdHJpZ2dlcnMgdGhlIHByb3RlY3Rpb24uIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgYF9fc2V0X2NtbWFfZGlydHlfcHRlYC4gSSBiZXQgdGhpcyBpcyByZWxhdGVkIHRvIGhvdyB0aGUgZGlydHkgYml0IGlzIHNldCwgYW5kIGl0IHByb2JhYmx5IGhhcyB0byBkbyB3aXRoIGhvdyB0aGUgQVNDRSBnZXRzIHVwZGF0ZWQgd2hlbiBhIHBhZ2UgaXMgd3JpdHRlbiB0by4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGlzIGZ1bmN0aW9uIGNhbGwsIGJlY2F1c2UgdGhpcyB3aWxsIHByb2JhYmx5IHByb3ZpZGUgaW5zaWdodCBpbnRvIHRoZSBjb250ZXh0IG9mIHRoZSBwcm90ZWN0aW9uIG9mIHRoZSBhZGRyZXNzIHNwYWNlIHRvcC1sZXZlbCBzdHJ1Y3R1cmVzLCBzbyBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCB3aHkgdGhleSBhcmUgY2FsbGluZyBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MzUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyODo0My40MjMzODI5OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4OTAwMTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc2V0X2NtbWFfZGlydHlfcHRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTA2Mz1pbnQgZ21hcF9wcm90ZWN0X3JtYXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZywgZ2ZuX3QgcF9nZm4sIGdmbl90IHJfZ2ZuLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTEwMC1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMTAxOnN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTEwMi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz0xMTE1PXZvaWQgZ21hcF9zZXRfY21tYV9hbGxfZGlydHkoc3RydWN0IGdtYXAgKmdtYXApXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTExNi17XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTExNzpcXHRjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHsgLnB0ZV9lbnRyeSA9IF9fc2V0X2NtbWFfZGlydHlfcHRlLCB9O1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTExMTgtXFx0Z2ZuX3QgZ2ZuID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjg6NDMuNTMyMjkxMzk4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNzY1NDM0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDTU1BIERpcnR5IFBURSBTZXR0aW5nIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgYF9fc2V0X2NtbWFfZGlydHlfcHRlYCBmdW5jdGlvbiBnZXRzIGNhbGxlZC4gSXQncyB0cmlnZ2VyZWQgZnJvbSBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgLCB3aGljaCBpbW1lZGlhdGVseSBkaXJlY3RzIG15IGF0dGVudGlvbiB0byB0aGUga2V5IGZ1bmN0aW9ucyBpbiB0aGlzIGNvZGUgcGF0aDogYGt2bV9zMzkwX3NldF9tZW1fY29udHJvbGAsIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gLCBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlYCwgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCBpdHNlbGYsIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLCBgaGFuZGxlX3Nza2VgLCBgaGFuZGxlX3BmbWZgLCBgaGFuZGxlX2Vzc2FgLCBhbmQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUgYW5kIHdoZXJlIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgYW55IHBvdGVudGlhbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYENPTkZJR19LVk1gIGlzIHRoZSBwcmltYXJ5IG9uZSwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBIb2xkIG9uLi4uIEkgcmVjYWxsIGBLVk1fUzM5MF9VQ09OVFJPTGAgYXMgYSBzZXBhcmF0ZSwgbWF5YmUgcG90ZW50aWFsbHkgcmVsZXZhbnQsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5MZXQgbWUgdmVyaWZ5OiB0aGUgY29kZSB0aGF0IHVzZXMgYF9fc2V0X2NtbWFfZGlydHlfcHRlYCBhcHBlYXJzIHRvIHJlc2lkZSB3aXRoaW4gYGt2bS1zMzkwLmNgLCBgZ21hcC5jYCwgYGRhdC5jYCwgYW5kIGBwcml2LmNgLiBUaGVzZSBmaWxlcyBhcmUsIGFzIEkgZXhwZWN0ZWQsIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0tWTWAgaXMgZW5hYmxlZC4gSXQncyBhIHN0YW5kYXJkIGRlcGVuZGVuY3kuIExldCdzIGNvbmZpcm0gdGhhdCB3aXRoIGEgcXVpY2sgbG9vayBpbiBgYXJjaC9zMzkwL2t2bS9NYWtlZmlsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE2OjI4OjQ5LjcwODgzODIxN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwODg4ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bS15XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZT04PWNjZmxhZ3MteSA6PSAtSXZpcnQva3ZtIC1JYXJjaC9zMzkwL2t2bVxcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtOS1cXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlOjEwOmt2bS15ICs9IGt2bS1zMzkwLm8gaW50ZXJjZXB0Lm8gaW50ZXJydXB0Lm8gcHJpdi5vIHNpZ3Aub1xcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGU6MTE6a3ZtLXkgKz0gZGlhZy5vIGdhY2Nlc3MubyBndWVzdGRiZy5vIHZzaWUubyBwdi5vXFxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZToxMjprdm0teSArPSBkYXQubyBnbWFwLm8gZmF1bHRpbi5vXFxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZS0xMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjg6NDkuODI5NzM4MzA0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMjYyNTEzMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbk9rYXksIHNvIGl0IHNlZW1zIGxpa2UgYENPTkZJR19LVk1gIGlzIHRoZSBwcmltYXJ5LCBwZXJoYXBzIGV2ZW4gKm9ubHkqLCBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggcmlnaHQgbm93LiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSBwaXZvdGFsIGluIHRoaXMgc3BlY2lmaWMgS1ZNL3MzOTAgY29udGV4dC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjcml0aWNhbCBhcmVhcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0OlxuXG4qICAgYGt2bV9zMzkwX3NldF9tZW1fY29udHJvbGAgLSBJIHJlbWVtYmVyIHRoaXMgZGVhbHMgd2l0aCBtZW1vcnkgY29udHJvbCByZWdpc3RlcnMsIGxldCBtZSByZWZyZXNoIG15IGtub3dsZWRnZSBvZiB0aGUgZXhhY3QgbWFuaXB1bGF0aW9ucyB0aGlzIHBlcmZvcm1zLlxuKiAgIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gIFx1MDAyNiBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gIC0gT2YgY291cnNlLCB0aGUgbWlncmF0aW9uIGZ1bmN0aW9ucywgZXNzZW50aWFsIGZvciBsaXZlIG1pZ3JhdGlvbiBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgdGhlaXIgaW1wbGVtZW50YXRpb24gcmVnYXJkaW5nIHMzOTAgYXJjaGl0ZWN0dXJlLlxuKiAgIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCAtIFJlbGF0ZWQgdG8gQ01NQSAoQ29udHJvbCBNZW1vcnkgTWFuYWdlbWVudCBBcmVhKSwgcHJvYmFibHkgc2V0dGluZyBhbmQgbWFuYWdpbmcgdGhlIENNTUEgYml0cyB0byBkZWZpbmUgd2hpY2ggcGFydCBvZiBtZW1vcnkgY2FuIGJlIGFjY2Vzc2VkIGJ5IHRoZSBndWVzdC5cbiogICBgZGF0X3BlZWtfY21tYWAgXHUwMDI2IGBkYXRfZ2V0X2NtbWFgIC0gRnVuY3Rpb25zIHRvIGludGVyYWN0IHdpdGggdGhlIENNTUEsIHBlZWtpbmcgYW5kIGdldHRpbmcgQ01NQSBkYXRhIGFuZCBhZGRyZXNzLlxuKiAgIGBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlYCwgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCwgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAgLSBUaGVzZSBHTUFQIChHdWVzdCBNZW1vcnkgQWRkcmVzcyBUcmFuc2xhdGlvbikgZnVuY3Rpb25zIGFyZSBpbXBvcnRhbnQuIENsZWFyaW5nIHlvdW5nIGJpdHMsIG1hcmtpbmcgbWVtb3J5IGRpcnR5IGFuZCBwcm90ZWN0aW5nIHRoZSBBU0NFIChBZGRyZXNzIFNwYWNlIENvbnRyb2wgRWxlbWVudCkgdG9wIGxldmVsIGFyZSBjcml0aWNhbCBvcGVyYXRpb25zLlxuKiAgIGBoYW5kbGVfc3NrZWAsIGBoYW5kbGVfcGZtZmAsIGBoYW5kbGVfZXNzYWAgLSBIYW5kbGluZyBvZiBzcGVjaWFsIFMzOTAgaW5zdHJ1Y3Rpb25zIHN1Y2ggYXMgU1NLRSAoU2V0IFN0b3JhZ2UgS2V5IEV4dGVuZGVkKSwgUEZNIChQcm9ncmFtIEZldGNoIE1vZGlmaWNhdGlvbikgYW5kIEVTU0EgKEV4dGVuZGVkIFNlZ21lbnQgYW5kIEFyZWEpLCB0aGVzZSBhcmUgY3J1Y2lhbCBmb3Igc2VjdXJpdHkgYW5kIGFkZHJlc3Mgc3BhY2UgbWFuYWdlbWVudC5cbiogICBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYCAtIFRoZSBQVEUgcmVsYXRlZCBmdW5jdGlvbiwgcmVsYXRlZCB0byBzZXR0aW5nIHBhZ2UgdGFibGUgZW50cmllcyAoUFRFKSBhcyB1bnVzZWQgaW4gZ3Vlc3QgbWVtb3J5LlxuXG5CdXQsIGFyZSB0aGVyZSBhbnkgb3RoZXIgc3VidGxlIGNvbmZpZ3MgbHVya2luZyBpbiB0aGUgc2hhZG93cz8gTGV0J3MgYmUgdGhvcm91Z2guIEknbGwgcXVpY2tseSBjaGVjayB0aGUgYGFyY2gvczM5MC9tbS9NYWtlZmlsZWAgZmlsZSB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSByZWxldmFudCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIG9yIGhpZGRlbiBzZXR0aW5ncyB0aGF0IG1pZ2h0IGJlIHBlcnRpbmVudCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAzMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyOTowMy4wOTIyNTQ4NDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDMwMjQ0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnbWFwX2hlbHBlcnMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvbW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL21tL01ha2VmaWxlPTEzPW9iai0kKENPTkZJR19QRkFVTFQpXFx0XFx0Kz0gcGZhdWx0Lm9cXG5hcmNoL3MzOTAvbW0vTWFrZWZpbGUtMTQtXFxuYXJjaC9zMzkwL21tL01ha2VmaWxlOjE1Om9iai0kKHN1YnN0IG0seSwkKENPTkZJR19LVk0pKVxcdCs9IGdtYXBfaGVscGVycy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE2OjI5OjAzLjIwMjU2MTc5OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQzODk0OTIwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgS1ZNL3MzOTAgRm9jdXMgZm9yIFN5emthbGxlcioqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYGdtYXBfaGVscGVycy5vYCBnZXRzIGJ1aWx0IGV2ZW4gd2hlbiBgQ09ORklHX0tWTWAgaXMgZW5hYmxlZC4gR29vZCB0byBrbm93LiBMZXQncyBzZWUgaWYgd2UgY2FuIHVzZSBgS1ZNYCBhcyBvdXIgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZvY3VzLiBZZXAsIGBLVk1gIGlzIGluZGVlZCB0aGUgbWFpbiBjb25maWcgZm9yIEtWTSBvbiBzMzkwLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biBhIG1vcmUgcmVmaW5lZCBsaXN0IG9mIGZ1bmN0aW9ucyBmb3IgU3l6a2FsbGVyIHRvIHByaW9yaXRpemUuIEkndmUgZ290OiBga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sYCwgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYGRhdF9wZWVrX2NtbWFgLCBgZGF0X2dldF9jbW1hYCwgYGdtYXBfY2xlYXJfeW91bmdfY3JzdGVgLCBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgLCBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYCwgYGhhbmRsZV9zc2tlYCwgYGhhbmRsZV9wZm1mYCwgYGhhbmRsZV9lc3NhYCwgYW5kIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLlxuXG5Ib2xkIG9uLCBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAgaXMgc3RhdGljLi4uIFRoYXQgdGhyb3dzIGEgd3JlbmNoIGluIHRoaW5ncy4gSSBzaG91bGQgY2hlY2sgYGFyY2gvczM5MC9rdm0vZ21hcC5jYCB0byBiZSBzdXJlLiBZZXAsIGl0J3Mgc3RhdGljLiBTeXprYWxsZXIgbWlnaHQgbm90IGJlIGFibGUgdG8gdGFyZ2V0IGl0IGRpcmVjdGx5IGlmIGl0IGdldHMgaW5saW5lZCwgYnV0IGl0J3Mgc3RpbGwgd29ydGggbGlzdGluZyBiZWNhdXNlIGl0IG1pZ2h0IGluZGlyZWN0bHkgbGVhZCB0byBzb21ldGhpbmcgaW50ZXJlc3RpbmcuXG5cbkxldCdzIGFsc28gY2hlY2sgYF9fc2V0X2NtbWFfZGlydHlfcHRlYC4gWXVwLCB0aGF0J3Mgc3RhdGljIHRvby4gU28sIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAgaXMgZXhwb3J0ZWQvZ2xvYmFsLCB0aGF0J3MgZ29vZC4gQW5kIGBkYXRfcGVla19jbW1hYCBhbmQgYGRhdF9nZXRfY21tYWAgYXJlIGdsb2JhbCBhcyB3ZWxsLiBPa2F5LCB0aGF0J3MgaGVscGZ1bC4gYGhhbmRsZV9zc2tlYCwgYGhhbmRsZV9wZm1mYCwgYW5kIGBoYW5kbGVfZXNzYWAgYXJlIHN0YXRpYy4gSSB3aWxsIGxvb2sgaW4gYGFyY2gvczM5MC9rdm0vcHJpdi5jYCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IG90aGVyIGhlbHBmdWwgaW5mby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4OTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjk6MTMuNjQxNTE1NDE0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI5OTk1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX3Nza2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9wcml2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9wcml2LmM9Mjg5PXN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMzIyLSNkZWZpbmUgU1NLRV9NQiAweDFcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzozMjM6c3RhdGljIGludCBoYW5kbGVfc3NrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMzI0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jPTk1OD1pbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk4MC1cXHRjYXNlIDB4MmI6XFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6OTgxOlxcdFxcdHJldHVybiBoYW5kbGVfc3NrZSh2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05ODItXFx0Y2FzZSAweDJjOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyOToxMy43NDQ1MjU0MjFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY3OTY3NDM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIEluc3RydWN0aW9uIEhhbmRsZXIgU3RyYXRlZ3kgZm9yIFN0YXRpYyBBbmFseXNpcyBpbiBTeXprYWxsZXIqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHdlJ3JlIGhhbmRsaW5nIGluc3RydWN0aW9ucywgc3BlY2lmaWNhbGx5IGZyb20gYSBwZXJzcGVjdGl2ZSB3aGVyZSB3ZSdyZSBhaW1pbmcgdG8gbWF4aW1pemUgU3l6a2FsbGVyJ3MgZWZmZWN0aXZlbmVzcyB3aXRoIHN0YXRpYyBhbmFseXNpcy4gVGhlIGNvcmUgaWRlYSBpcyB0aGF0IHRoZXNlIGluc3RydWN0aW9uIGhhbmRsZXJzIGFyZSBlc3NlbnRpYWxseSByZWNpcGVzIGZvciB0aGUgZnV6emVyLiBOb3csIEknbSBub3RpbmcgdGhhdCBpZiB0aGVzZSBoYW5kbGVycyBhcmUgc3RhdGljYWxseSBkZWZpbmVkLCBpdCBwcmVzZW50cyBhIHZlcnkgc3BlY2lmaWMgb3Bwb3J0dW5pdHkuIEl0IG1lYW5zIFN5emthbGxlciBjYW4sIGluIGEgc2Vuc2UsICpmb2N1cyogb24gdGhlbSBtb3JlIGVmZmVjdGl2ZWx5LCBhbG1vc3QgdHJlYXQgdGhlbSBhcyBwcmltYXJ5IHRhcmdldHMgZm9yIGV4cGxvcmF0aW9uLCAqYXMgbG9uZyBhcyogdGhleSdyZSBub3QgaW5saW5lZC4gSW5saW5pbmcgbWVzc2VzIHRoaW5ncyB1cCwgbWFrZXMgdGhlbSBsZXNzIGRpc2NyZXRlIGFuZCBhY2Nlc3NpYmxlLiBUaGF0J3MgYSBrZXkgY29uc2lkZXJhdGlvbi5cblxuU28sIHRoZSBmb2N1cyBzaGlmdHMgdG8gZW5zdXJpbmcgaGFuZGxlcnMgYXJlbid0IGlubGluZWQsIGFzIHdlbGwgYXMgY2hlY2tpbmcgdGhlIGBoYW5kbGVfcGZtZmAgaGFuZGxlciBzcGVjaWZpY2FsbHksIGFzIGFuIGV4YW1wbGUsIHNpbmNlIHRoYXQgaGFuZGxlciBpcyBjcml0aWNhbCBmb3IgcGFnZS1mYXVsdCBtaXRpZ2F0aW9uIGFuZCBoYW5kbGluZy4gSSBuZWVkIHRvIGRpZyBpbnRvIGBoYW5kbGVfcGZtZmAgbm93IHRvIHNlZSB3aGF0IHdlIGNhbiBkby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwOTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyOToxOS40MjQyMDQxMjNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4ODU1Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV9wZm1mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vcHJpdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vcHJpdi5jPTEwMTY9c3RhdGljIGludCBoYW5kbGVfZXBzdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMDQ0LVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEwNDU6c3RhdGljIGludCBoYW5kbGVfcGZtZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTA0Ni17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz0xMjgyPWludCBrdm1fczM5MF9oYW5kbGVfYjkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5My1cXHRjYXNlIDB4YWY6XFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTI5NDpcXHRcXHRyZXR1cm4gaGFuZGxlX3BmbWYodmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5NS1cXHRkZWZhdWx0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyOToxOS41MTMwNjU2NzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5MjI1NDk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgaGFuZGxlX2Vzc2FgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgaW50byBpdC4gTGV0J3Mgc2VlLi4uIHRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgemVyb2luZyBpbiBvbiB0aGlzIGBoYW5kbGVfZXNzYWAgZnVuY3Rpb24gb3IgbW9kdWxlLCB3aGVyZXZlciBpdCByZXNpZGVzIGluIHRoZSBjb2RlYmFzZS4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgaXMgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIHNvbWUgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIHRoaXMgXCJFU1NBXCIgdGhpbmcuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIHNvbWUgaHlwb3RoZXNlcy4gSXMgaXQgYW4gZW5kcG9pbnQgaGFuZGxlcj8gQSBwcm9jZXNzaW5nIHBpcGVsaW5lIGVudHJ5PyBPciBhIGxvd2VyLWxldmVsIHV0aWxpdHk/IEtub3dpbmcgdGhlIG5hbWluZyBjb252ZW50aW9ucyBvZiB0aGlzIHByb2plY3Qgd2lsbCBndWlkZSBteSBpbml0aWFsIGFzc3VtcHRpb25zLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgY29kZSBpbW1lZGlhdGVseSB0byBzZWUgd2hhdCBpdCBpcyBhY3R1YWxseSBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE2OjI5OjI1LjIwNTMyMzYwMloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMDg4NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV9lc3NhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vcHJpdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vcHJpdi5jPTExOTA9c3RhdGljIHZvaWQgX2Vzc2FfY2xlYXJfY2JybChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmNicmwsIGludCBsZW4pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjE1LVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEyMTY6c3RhdGljIGludCBoYW5kbGVfZXNzYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTIxNy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz0xMjgyPWludCBrdm1fczM5MF9oYW5kbGVfYjkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5MS1cXHRjYXNlIDB4YWI6XFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTI5MjpcXHRcXHRyZXR1cm4gaGFuZGxlX2Vzc2EodmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5My1cXHRjYXNlIDB4YWY6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE2OjI5OjI1LjMwNzQxODE2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTQzOTk3NjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqQXNzZXNzbWVudCBvZiBGb2N1cyBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aGVzZSBsb29rIGxpa2UgcHJvbWlzaW5nIGZvY3VzIGZ1bmN0aW9ucy4gU2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0IHRvIG5hcnJvd2luZyBkb3duIHRoZSBhcmVhIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJdCdzIGEgY2xlYW4gd2F5IHRvIGRpcmVjdCB0aGUgZXhhbWluYXRpb24uXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLiBJIHRoaW5rIGEgZ29vZCBuZXh0IHN0ZXAgd291bGQgYmUgdG8gZHJpbGwgZG93biBhbmQgY2hlY2sgb3V0IGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgLiBUaGF0IGZ1bmN0aW9uJ3MgbGlrZWx5IHRvIHJldmVhbCBzb21lIGludGVyZXN0aW5nIGRldGFpbHMgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIHdvdWxkIG9mZmVyIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0b3dhcmQgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTEzNywiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE2OjI5OjM1Ljg1MTQxOTI1MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM1MzgzMTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX3NldF9tZW1fY29udHJvbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTk3ND1zdGF0aWMgaW50IGt2bV9zMzkwX2dldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtOTkyLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo5OTM6c3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy05OTQte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIwMTA9c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjAxNS1cXHRjYXNlIEtWTV9TMzkwX1ZNX01FTV9DVFJMOlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMDE2OlxcdFxcdHJldCA9IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChrdm0sIGF0dHIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDE3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyOTozNi4xODY4MDkzNzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc3OTQ4Mzk1MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0vczM5MCBNaWdyYXRpb24gQ29kZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGNsdWUgaXMgdGhhdCB0aGlzIGNvZGUgaXMgKnN0YXRpYyogYnV0IHNvbWVob3cgYmVpbmcgaW52b2tlZCB2aWEgYGt2bV9zMzkwX3ZtX3NldF9hdHRyYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgc29tZSBzb3J0IG9mIGNvbmZpZ3VyYXRpb24gY2hhbmdlIG9yIGF0dHJpYnV0ZSBzZXR0aW5nIHRoYXQncyB0cmlnZ2VyaW5nIHRoaXMgYmVoYXZpb3IsIHdoaWNoIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kLiBPZnRlbiBzdGF0aWMgZnVuY3Rpb25zIGFyZSBjb250YWluZWQgd2l0aGluIHRoZWlyIGZpbGUgYW5kIHRoaXMgaW1wbGllcyBpdCBpcyBvbmx5IHVzZWQgbG9jYWxseS5cblxuTXkgbmV4dCBsaW5lIG9mIHRob3VnaHQsIGJlaW5nIHRoYXQgdGhpcyBpcyBhYm91dCBtaWdyYXRpb24sIGlzIHRvIHplcm8gaW4gb24gdGhlIHN0YXJ0IGFuZCBzdG9wIHByb2Nlc3Nlcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gIGFuZCBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLiBUaG9zZSB3aWxsIGxpa2VseSBiZSB0aGUgZW50cnkgYW5kIGV4aXQgcG9pbnRzLCBvciBhdCBsZWFzdCB0aGUga2V5IGZ1bmN0aW9ucyBjb29yZGluYXRpbmcgdGhlIHdob2xlIG9wZXJhdGlvbi4gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIGFuZCBob3cgdGhlIHN0YXRpYyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWlncmF0aW9uIGZsb3cg4oCTIGlzIGl0IGEgc2V0dXAgc3RlcCwgYSBjbGVhbnVwIHJvdXRpbmUsIG9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIHRvIHRoZSBtaWdyYXRpb24gcHJvY2VzcyBpdHNlbGY/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0J3MgYWZmZWN0aW5nIGR1cmluZyB0aGUgc3RhcnQgYW5kIGVuZCBvZiBtaWdyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzE0LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjk6NTMuOTgxNjUzMzIxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU3NjEyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTIwOD1zdGF0aWMgdm9pZCBrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KHN0cnVjdCBrdm0gKmt2bSwgaW50IHJlcSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjIwLSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjIxOnN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIyMi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI1MS0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyBhbmRcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTI1MjogKiBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24uXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNTMtICovXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTI2NT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNzItXFx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT05fU1RBUlQ6XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEyNzM6XFx0XFx0cmVzID0ga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKGt2bSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNzQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE2OjI5OjU0LjEwNzQyMDI1OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTMxNjYzMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTWlncmF0aW9uIElzc3VlKipcblxuQWxyaWdodCwgdGhpcyBsb29rcyBsaWtlIGl0J3MgY29taW5nIGZyb20gYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLiBPa2F5LCBzbyBpdCdzIGEgKnN0YXRpYyogY2FsbCwgd2hpY2ggc3VnZ2VzdHMgaXQncyBsaWtlbHkgYSB0YXJnZXRlZCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgZm9yIG1pZ3JhdGlvbiBzZXR1cCBvbiB0aGlzIFMzOTAgYXJjaGl0ZWN0dXJlLiBNYWtlcyBzZW5zZS5cblxuSSBuZWVkIHRvIGRpdmUgZGVlcGVyLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXIgLSBsZXQncyBpbW1lZGlhdGVseSBsb29rIGludG8gYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIGNydWNpYWwgYml0cyByZWxhdGVkIHRvIHRoZSBDaGFubmVsIE1hbmFnZW1lbnQgTWVtb3J5IEFyZWEgKENNTUEpLCB3aGljaCBhcmUgYWJzb2x1dGVseSBmdW5kYW1lbnRhbCBmb3IgYSBzbW9vdGggbWlncmF0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gaGFwcGVucywgd2hlcmUgdGhlIFZNIGlzIGNvbmZpZ3VyZWQgdG8gYmUgbW92ZWQgLSBvciBjb25maWd1cmVkIHRvIGJlIHJlYWR5IHRvIGJlIG1vdmVkLiBJJ20gaG9waW5nIHRoaXMgaXMgd2hlcmUgdGhlIGVycm9yIGxpZXMuIEknbGwgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTQ4LCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6MzA6MDAuMjM5MDg5MzI4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzU0MTI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9zZXRfY21tYV9iaXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjI1Nz1zdGF0aWMgaW50IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIzMTMtICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIzMTQ6c3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjMxNS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBrdm1fczM5MF9jbW1hX2xvZyAqYXJncylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yODkyPWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTg0LVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI5ODU6XFx0XFx0ciA9IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoa3ZtLCBcXHUwMDI2YXJncyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5ODYtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjozMDowMC4zMTI2NDM5NDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIwMzU1NjY3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTS9zMzkwIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBga3ZtX2FyY2hfdm1faW9jdGxgIGZ1bmN0aW9uLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggaW9jdGxzLiBUaGF0IG5hcnJvd3MgdGhlIHNjb3BlIGNvbnNpZGVyYWJseS4gSSdtIHNlZWluZyBjaGFuZ2VzIHJlbGF0ZWQgdG8gQ01NQSwgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIGFuZCBWTSBtaWdyYXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cbkZpcnN0LCBJIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgZGlyZWN0bHkgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMgdG8gbG9vayBhdCBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgLCBidXQgdGhhdCdzIGEgYml0IHRvbyBnZW5lcmljLiBJdCdzIGJldHRlciB0byB6ZXJvIGluIG9uIG1vcmUgdGFyZ2V0ZWQgZW50cnkgcG9pbnRzIGZvciB0aGUgZnV6emVyLiBTbywgSSBsb29rZWQgZm9yIHRoZSBkaXJlY3QgZnVuY3Rpb25zLlxuXG5JIGNhbiBtYWtlIGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgIGEgY2VudHJhbCBzdGFydGluZyBwb2ludCwgZXNwZWNpYWxseSBzaW5jZSBzeXprYWxsZXIgaXMgYmV0dGVyIHdpdGggZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBpbmxpbmVkLCBhbmQgdGhpcyBvbmUgaXMgbGlrZWx5IHRvIGJlIGxhcmdlIGVub3VnaCB0byBhdm9pZCBiZWluZyBpbmxpbmVkLiBJIGFtIGNoZWNraW5nIGlmIGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgIGlzIGlubGluZWQgYXMgaXQgaXMgbW9yZSB0aGFuIDEwMCBsaW5lcy4gU2FtZSB3aXRoIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gIGFuZCBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLlxuXG5UaGUgZnVsbCBsaXN0IEkndmUgY29tZSB1cCB3aXRoIGlzOiBga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sYCwgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYGRhdF9wZWVrX2NtbWFgLCBgZGF0X2dldF9jbW1hYCwgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCwgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAsIGBoYW5kbGVfc3NrZWAsIGBoYW5kbGVfcGZtZmAsIGBoYW5kbGVfZXNzYWAsIGFuZCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYC5cblxuSSdtIG1ha2luZyBzdXJlIHRvIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSW4gdGhpcyBjYXNlLCBgS1ZNYCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWcuXG5cbk15IHJlYXNvbmluZyBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcyBLVk0vczM5MCBpbiBhcmVhcyB0aGF0IGRlYWwgd2l0aCBDTU1BLCBwYWdlIHRhYmxlcywgYW5kIFZNIG1pZ3JhdGlvbi4gVGhlc2UgYXJlIGFsbCBjcml0aWNhbCBhcmVhcy4gV2UgbmVlZCB0byBmdXp6IHRoZXNlIGZ1bmN0aW9ucyB0byBtYWtlIHN1cmUgdGhpbmdzIGFyZSB3b3JraW5nIGNvcnJlY3RseS4gQW55IGZsYXdzIG9yIHJlZ3Jlc3Npb24gdGhhdCBvY2N1ciBoZXJlIGNvdWxkIGNhdXNlIHNldmVyZSBpc3N1ZXMgaW4gdmlydHVhbGl6YXRpb24uIFNvLCBmdXp6aW5nIHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgYmUgaGlnaCBwcmlvcml0eS5cblxuSSBhbHNvIGNvbnNpZGVyZWQgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAsIHdoaWNoICppcyogc3RhdGljLCBidXQgc3l6a2FsbGVyIGhhbmRsZXMgc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGUgc3ltYm9sIHRhYmxlLCBzbyBJJ2xsIGluY2x1ZGUgaXQuXG5cbkkgZGlkIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBtb2RpZmllZCBmaWxlcyBhbmQgZnVuY3Rpb25zLiBJIGFtIHRyeWluZyB0byBmb2N1cyB0aGUgZnV6emluZyBvbiB0aGUgY2hhbmdlZCBmdW5jdGlvbnMsIHdoaWNoIGFyZSBtb3N0IGxpa2VseSB0byBpbnRyb2R1Y2UgYSBidWcgb3IgZXhoaWJpdCByZWdyZXNzaW9uLiBJbiBvcmRlciB0byBhdm9pZCBwb3RlbnRpYWwgZmFsc2UgcG9zaXRpdmVzIGZyb20gdmVyeSBmcmVxdWVudGx5IGFjY2Vzc2VkIGNvZGUsIEkgYW0gc2tpcHBpbmcgYHNldF9wdGVgIGFuZCBgc2V0X3B0ZXNgLlxuSSB3aWxsIGZvY3VzIG9uOiBgZGF0X3BlZWtfY21tYWAsIGBkYXRfZ2V0X2NtbWFgLCBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAsIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLCBga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sYCwgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYGhhbmRsZV9zc2tlYCwgYGhhbmRsZV9wZm1mYCwgYGhhbmRsZV9lc3NhYCwgYW5kIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLlxuXG5JJ20gY29uZmlkZW50IHRoYXQgdGhpcyBjb3ZlcnMgdGhlIG1vc3QgY3JpdGljYWwgcGFydHMgb2YgdGhpcyBwYXRjaCwgc28gSSdsbCBzZXQgdGhlIHJlc3VsdHMgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjA5LCJPdXRwdXRUb2tlbnMiOjI4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6MzA6MjIuMzQ4MjE3MTg5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxODg2NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXRfcGVla19jbW1hXCIsXG4gICAgXCJkYXRfZ2V0X2NtbWFcIixcbiAgICBcImdtYXBfY2xlYXJfeW91bmdfY3JzdGVcIixcbiAgICBcIl9fc2V0X2NtbWFfZGlydHlfcHRlXCIsXG4gICAgXCJnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eVwiLFxuICAgIFwiZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsXCIsXG4gICAgXCJrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xcIixcbiAgICBcImt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvblwiLFxuICAgIFwia3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25cIixcbiAgICBcImt2bV9zMzkwX3NldF9jbW1hX2JpdHNcIixcbiAgICBcImhhbmRsZV9zc2tlXCIsXG4gICAgXCJoYW5kbGVfcGZtZlwiLFxuICAgIFwiaGFuZGxlX2Vzc2FcIixcbiAgICBcImdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgaGFuZGxpbmcgb2YgQ29sbGFib3JhdGl2ZSBNZW1vcnkgTWFuYWdlbWVudCBBc3Npc3QgKENNTUEpLCBwYWdlIHRhYmxlIHVwZGF0ZXMsIGFuZCBWTSBtaWdyYXRpb24uIEl0IGZpeGVzIGJ1Z3MgaW4gQ01NQSBzdGF0ZSBoYW5kbGluZywgZGlydHkgcGFnZSB0cmFja2luZywgYW5kIG1lbW9yeSBjb250cm9sIGlvY3Rscy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIEtWTSBjb3JlIGxvZ2ljIGFuZCBpbnN0cnVjdGlvbiBoYW5kbGVycywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gZmVhdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF0X3BlZWtfY21tYVwiLFxuICAgIFwiZGF0X2dldF9jbW1hXCIsXG4gICAgXCJnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlXCIsXG4gICAgXCJfX3NldF9jbW1hX2RpcnR5X3B0ZVwiLFxuICAgIFwiZ21hcF9zZXRfY21tYV9hbGxfZGlydHlcIixcbiAgICBcImdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbFwiLFxuICAgIFwia3ZtX3MzOTBfc2V0X21lbV9jb250cm9sXCIsXG4gICAgXCJrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25cIixcbiAgICBcImt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uXCIsXG4gICAgXCJrdm1fczM5MF9zZXRfY21tYV9iaXRzXCIsXG4gICAgXCJoYW5kbGVfc3NrZVwiLFxuICAgIFwiaGFuZGxlX3BmbWZcIixcbiAgICBcImhhbmRsZV9lc3NhXCIsXG4gICAgXCJnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIENvbGxhYm9yYXRpdmUgTWVtb3J5IE1hbmFnZW1lbnQgQXNzaXN0IChDTU1BKSwgcGFnZSB0YWJsZSB1cGRhdGVzLCBhbmQgVk0gbWlncmF0aW9uLiBJdCBmaXhlcyBidWdzIGluIENNTUEgc3RhdGUgaGFuZGxpbmcsIGRpcnR5IHBhZ2UgdHJhY2tpbmcsIGFuZCBtZW1vcnkgY29udHJvbCBpb2N0bHMuIFRoZXNlIGFyZSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBLVk0gY29yZSBsb2dpYyBhbmQgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zIGluIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhgbfs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-22 16:20:10 +0000 UTC FinishedAt: 2026-06-22 16:30:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "ef057cbf825e03b63f6edf5980f96abf3c53089d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "ef057cbf825e03b63f6edf5980f96abf3c53089d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "8ffdef2f-676c-46e3-a410-7ce0e857da7c" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "dat_peek_cmma", "dat_get_cmma", "gmap_clear_young_crste", "__set_cmma_dirty_pte", "gmap_set_cmma_all_dirty", "gmap_protect_asce_top_level", "kvm_s390_set_mem_control", "kvm_s390_vm_start_migration", "kvm_s390_vm_stop_migration", "kvm_s390_set_cmma_bits", "handle_sske", "handle_pfmf", "handle_essa", "gmap_helper_try_set_pte_unused" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhdF9wZWVrX2NtbWEmIzM0OywKICAgICYjMzQ7ZGF0X2dldF9jbW1hJiMzNDssCiAgICAmIzM0O2dtYXBfY2xlYXJfeW91bmdfY3JzdGUmIzM0OywKICAgICYjMzQ7X19zZXRfY21tYV9kaXJ0eV9wdGUmIzM0OywKICAgICYjMzQ7Z21hcF9zZXRfY21tYV9hbGxfZGlydHkmIzM0OywKICAgICYjMzQ7Z21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3NldF9tZW1fY29udHJvbCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfc2V0X2NtbWFfYml0cyYjMzQ7LAogICAgJiMzNDtoYW5kbGVfc3NrZSYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcGZtZiYjMzQ7LAogICAgJiMzNDtoYW5kbGVfZXNzYSYjMzQ7LAogICAgJiMzNDtnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgS1ZNIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBDb2xsYWJvcmF0aXZlIE1lbW9yeSBNYW5hZ2VtZW50IEFzc2lzdCAoQ01NQSksIHBhZ2UgdGFibGUgdXBkYXRlcywgYW5kIFZNIG1pZ3JhdGlvbi4gSXQgZml4ZXMgYnVncyBpbiBDTU1BIHN0YXRlIGhhbmRsaW5nLCBkaXJ0eSBwYWdlIHRyYWNraW5nLCBhbmQgbWVtb3J5IGNvbnRyb2wgaW9jdGxzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgS1ZNIGNvcmUgbG9naWMgYW5kIGluc3RydWN0aW9uIGhhbmRsZXJzLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucyBpbiB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAyMzQzOWJkZGFhNDE2MWVhNzcxYzgwNjI2ODY1ZDZlYzljYTRlYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAxNjoyNzo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggMmM2Y2VlODI0MWUwNDQuLjQ3NDBjNzU2NDllYmI1IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTk4MCw2ICYjNDM7OTgwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZClcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuIHtcbiYjNDM7XHRpZiAocHRlX3ByZXNlbnQocHRlKSlcbiYjNDM7XHRcdHB0ZSA9IGNsZWFyX3B0ZV9iaXQocHRlLCBfX3BncHJvdChfUEFHRV9VTlVTRUQpKTtcbiBcdFdSSVRFX09OQ0UoKnB0ZXAsIHB0ZSk7XG4gfVxuIFxuQEAgLTEzMzIsOCAmIzQzOzEzMzQsNiBAQCBwZ3Byb3RfdCBwZ3Byb3Rfd3JpdGVjb21iaW5lKHBncHJvdF90IHByb3QpO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IG5yKVxuIHtcbi1cdGlmIChwdGVfcHJlc2VudChlbnRyeSkpXG4tXHRcdGVudHJ5ID0gY2xlYXJfcHRlX2JpdChlbnRyeSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XG4gXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBlbnRyeSwgbnIpO1xuIFx0Zm9yICg7Oykge1xuIFx0XHRzZXRfcHRlKHB0ZXAsIGVudHJ5KTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuaW5kZXggYTRmZTY2NGY2NWVlMTUuLjVmMTk2MGVjOTgyZDA0IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuQEAgLTEyMDksNyAmIzQzOzEyMDksNyBAQCBpbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKVxuIFx0aW50IHJjO1xuIFxuIFx0cmMgPSBfZGF0X3dhbGtfZ2ZuX3JhbmdlKHN0YXJ0LCBzdGFydCAmIzQzOyAqY291bnQsIGFzY2UsIFx1MDAyNm9wcywgREFUX1dBTEtfREVGQVVMVCwgXHUwMDI2c3RhdGUpO1xuLVx0KmNvdW50ID0gc3RhdGUuZW5kIC0gc3RhcnQ7XG4mIzQzO1x0KmNvdW50ID0gc3RhdGUuZW5kIFx1MDAzZT0gc3RhcnQgPyBzdGF0ZS5lbmQgLSBzdGFydCA6IDA7XG4gXHQvKiBSZXR1cm4gc3VjY2VzcyBpZiBhdCBsZWFzdCBvbmUgdmFsdWUgd2FzIHNhdmVkLCBvdGhlcndpc2UgYW4gZXJyb3IuICovXG4gXHRyZXR1cm4gKHJjID09IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICpjb3VudCBcdTAwM2UgMCkgPyAwIDogcmM7XG4gfVxuQEAgLTEyNTMsNiAmIzQzOzEyNTMsOSBAQCBpbnQgZGF0X2dldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzLFxuIFx0fTtcbiBcbiBcdF9kYXRfd2Fsa19nZm5fcmFuZ2UoKnN0YXJ0LCBhc2NlX2VuZChhc2NlKSwgYXNjZSwgXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsIFx1MDAyNnN0YXRlKTtcbiYjNDM7XHQvKiBJZiBubyBkaXJ0eSBwYWdlcyB3ZXJlIGZvdW5kLCB3cmFwIGFyb3VuZCBhbmQgY29udGludWUgc2VhcmNoaW5nICovXG4mIzQzO1x0aWYgKCpzdGFydCBcdTAwMjZcdTAwMjYgc3RhdGUuc3RhcnQgPT0gLTEpXG4mIzQzO1x0XHRfZGF0X3dhbGtfZ2ZuX3JhbmdlKDAsICpzdGFydCwgYXNjZSwgXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsIFx1MDAyNnN0YXRlKTtcbiBcbiBcdGlmIChzdGF0ZS5zdGFydCA9PSAtMSkge1xuIFx0XHQqY291bnQgPSAwO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZ21hcC5jIGIvYXJjaC9zMzkwL2t2bS9nbWFwLmNcbmluZGV4IDc3ODI5Zjc4N2RjNzgxLi41ZTc1NDg1YjUzZjlmZCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZ21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2dtYXAuY1xuQEAgLTMzMiw3ICYjNDM7MzMyLDcgQEAgc3RhdGljIGxvbmcgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgc3RcbiBcdFx0bmV3LmguaSA9IDE7XG4gXHRcdG5ldy5zLmZjMS55ID0gMDtcbiBcdFx0bmV3LnMuZmMxLnByZWZpeF9ub3RpZiA9IDA7XG4tXHRcdGlmIChuZXcucy5mYzEuZCB8fCAhbmV3LmgucClcbiYjNDM7XHRcdGlmICgobmV3LnMuZmMxLmQgfHwgIW5ldy5oLnApIFx1MDAyNlx1MDAyNiAhbmV3LnMuZmMxLnMpXG4gXHRcdFx0Zm9saW9fc2V0X2RpcnR5KHBoeXNfdG9fZm9saW8oY3JzdGVfb3JpZ2luX2xhcmdlKGNyc3RlKSkpO1xuIFx0XHRuZXcucy5mYzEuZCA9IDA7XG4gXHRcdG5ldy5oLnAgPSAxO1xuQEAgLTExMDAsNyAmIzQzOzExMDAsMTMgQEAgaW50IGdtYXBfcHJvdGVjdF9ybWFwKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqc2csIGdmbl90IHBfZ2ZcbiBcbiBzdGF0aWMgbG9uZyBfX3NldF9jbW1hX2RpcnR5X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuIHtcbi1cdF9fYXRvbWljNjRfb3IoUEdTVEVfQ01NQV9EX0JJVCwgXHUwMDI2cGdzdGVfb2YocHRlcCktXHUwMDNldmFsKTtcbiYjNDM7XHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbiYjNDM7XG4mIzQzO1x0cGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbiYjNDM7XHRwZ3N0ZS5jbW1hX2QgPSAxO1xuJiM0MztcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuJiM0MztcdGF0b21pYzY0X2luYyh3YWxrLVx1MDAzZXByaXYpO1xuJiM0MztcbiBcdGlmIChuZWVkX3Jlc2NoZWQoKSlcbiBcdFx0cmV0dXJuIG5leHQ7XG4gXHRyZXR1cm4gMDtcbkBAIC0xMTE0LDcgJiM0MzsxMTIwLDggQEAgdm9pZCBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShzdHJ1Y3QgZ21hcCAqZ21hcClcbiBcdGRvIHtcbiBcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2Z21hcC1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4gXHRcdFx0Z2ZuID0gX2RhdF93YWxrX2dmbl9yYW5nZShnZm4sIGFzY2VfZW5kKGdtYXAtXHUwMDNlYXNjZSksIGdtYXAtXHUwMDNlYXNjZSwgXHUwMDI2b3BzLFxuLVx0XHRcdFx0XHRcdCAgREFUX1dBTEtfSUdOX0hPTEVTLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICBEQVRfV0FMS19JR05fSE9MRVMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgXHUwMDI2Z21hcC1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTtcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHR9IHdoaWxlIChnZm4pO1xuIH1cbkBAIC0xMjg3LDcgJiM0MzsxMjk0LDcgQEAgc3RhdGljIGludCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFcbiBcdC8qIFBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbiBrdm1fbW11X2ludmFsaWRhdGVfZW5kKCkuICovXG4gXHRzbXBfcm1iKCk7XG4gXG4tXHRyYyA9IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlcyhzZy1cdTAwM2Vrdm0sIGNvbnRleHQuZiwgYXNjZS5yc3RvLCBhc2NlLmR0ICYjNDM7IDEsIGZhbHNlKTtcbiYjNDM7XHRyYyA9IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlcyhzZy1cdTAwM2Vrdm0sIGNvbnRleHQuZiwgYXNjZS5yc3RvLCBhc2NlLnRsICYjNDM7IDEsIGZhbHNlKTtcbiBcdGlmIChyYyBcdTAwM2UgMClcbiBcdFx0cmMgPSAtRUZBVUxUO1xuIFx0aWYgKCFyYylcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IGRjOWM3NDUxZmU5Nzk0Li5iZGQyMjkyY2ZkYzc2OSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtOTk0LDYgJiM0Mzs5OTQsOCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dFxuIHtcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4gXHRzd2l0Y2ggKGF0dHItXHUwMDNlYXR0cikge1xuIFx0Y2FzZSBLVk1fUzM5MF9WTV9NRU1fRU5BQkxFX0NNTUE6XG4gXHRcdHJldCA9IC1FTlhJTztcbkBAIC0xMDAxLDcgJiM0MzsxMDAzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0Vk1fRVZFTlQoa3ZtLCAzLCBcJiMzNDslc1wmIzM0OywgXCYjMzQ7RU5BQkxFOiBDTU1BIHN1cHBvcnRcJiMzNDspO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbiBcdFx0aWYgKGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzKVxuIFx0XHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0ZWxzZSB7XG5AQCAtMTAxMCw3ICYjNDM7MTAxMSw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0XG4gXHRcdFx0a3ZtLVx1MDAzZWFyY2gudXNlX3BmbWZpID0gMDtcbiBcdFx0XHRyZXQgPSAwO1xuIFx0XHR9XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9WTV9NRU1fQ0xSX0NNTUE6IHtcbiBcdFx0Z2ZuX3Qgc3RhcnRfZ2ZuID0gMDtcbkBAIC0xMDI0LDcgJiM0MzsxMDI0LDggQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRcbiBcbiBcdFx0Vk1fRVZFTlQoa3ZtLCAzLCBcJiMzNDslc1wmIzM0OywgXCYjMzQ7UkVTRVQ6IENNTUEgc3RhdGVzXCYjMzQ7KTtcbiBcdFx0ZG8ge1xuLVx0XHRcdHN0YXJ0X2dmbiA9IGRhdF9yZXNldF9jbW1hKGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgc3RhcnRfZ2ZuKTtcbiYjNDM7XHRcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKVxuJiM0MztcdFx0XHRcdHN0YXJ0X2dmbiA9IGRhdF9yZXNldF9jbW1hKGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgc3RhcnRfZ2ZuKTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0fSB3aGlsZSAoc3RhcnRfZ2ZuKTtcbiBcdFx0cmV0ID0gMDtcbkBAIC0xMDQyLDggJiM0MzsxMDQzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRcbiBcdFx0aWYgKGdldF91c2VyKG5ld19saW1pdCwgKHU2NCBfX3VzZXIgKilhdHRyLVx1MDAzZWFkZHIpKVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFxuLVx0XHRndWFyZChtdXRleCkoXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuLVxuIFx0XHRuZXdfbGltaXQgPSBBTElHTihuZXdfbGltaXQsIEhQQUdFX1NJWkUpO1xuIFx0XHRpZiAoa3ZtLVx1MDAzZWFyY2gubWVtX2xpbWl0ICE9IEtWTV9TMzkwX05PX01FTV9MSU1JVCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIG5ld19saW1pdCBcdTAwM2Uga3ZtLVx1MDAzZWFyY2gubWVtX2xpbWl0KVxuQEAgLTEyMjMsNyAmIzQzOzEyMjIsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbXM7XG4gXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcbi1cdHVuc2lnbmVkIGxvbmcgcmFtX3BhZ2VzID0gMDtcbiBcdGludCBia3Q7XG4gXG4gXHQvKiBtaWdyYXRpb24gbW9kZSBhbHJlYWR5IGVuYWJsZWQgKi9cbkBAIC0xMjQwLDEyICYjNDM7MTIzOCwxMSBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4gXHRrdm1fZm9yX2VhY2hfbWVtc2xvdChtcywgYmt0LCBzbG90cykge1xuIFx0XHRpZiAoIW1zLVx1MDAzZWRpcnR5X2JpdG1hcClcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0cmFtX3BhZ2VzICYjNDM7PSBtcy1cdTAwM2VucGFnZXM7XG4gXHR9XG4gXHQvKiBtYXJrIGFsbCB0aGUgcGFnZXMgYXMgZGlydHkgKi9cbiYjNDM7XHRhdG9taWM2NF9zZXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcywgMCk7XG4gXHRnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShrdm0tXHUwMDNlYXJjaC5nbWFwKTtcbi1cdGF0b21pYzY0X3NldChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzLCByYW1fcGFnZXMpO1xuLVx0a3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgPSAxO1xuJiM0MztcdFdSSVRFX09OQ0Uoa3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUsIDEpO1xuIFx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RBUlRfTUlHUkFUSU9OKTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMjU5LDcgJiM0MzsxMjU2LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4gXHQvKiBtaWdyYXRpb24gbW9kZSBhbHJlYWR5IGRpc2FibGVkICovXG4gXHRpZiAoIWt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlKVxuIFx0XHRyZXR1cm4gMDtcbi1cdGt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlID0gMDtcbiYjNDM7XHRXUklURV9PTkNFKGt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlLCAwKTtcbiBcdGlmIChrdm0tXHUwMDNlYXJjaC51c2VfY21tYSlcbiBcdFx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RPUF9NSUdSQVRJT04pO1xuIFx0cmV0dXJuIDA7XG5AQCAtMjMxNyw4ICYjNDM7MjMxNCw4IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXG4gc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGt2bV9zMzkwX2NtbWFfbG9nICphcmdzKVxuIHtcbi1cdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jO1xuLVx0dTggKmJpdHMgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcbiYjNDM7XHR1OCAqYml0cyBfX2ZyZWUoa3ZmcmVlKSA9IE5VTEw7XG4gXHRpbnQgciA9IDA7XG4gXG4gXHRpZiAoIWt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hKVxuQEAgLTIzMzgsMTggJiM0MzsyMzM1LDE2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0Yml0cyA9IHZtYWxsb2MoYXJyYXlfc2l6ZShzaXplb2YoKmJpdHMpLCBhcmdzLVx1MDAzZWNvdW50KSk7XG4gXHRpZiAoIWJpdHMpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRyID0gY29weV9mcm9tX3VzZXIoYml0cywgKHZvaWQgX191c2VyICopYXJncy1cdTAwM2V2YWx1ZXMsIGFyZ3MtXHUwMDNlY291bnQpO1xuLVx0aWYgKHIpIHtcbi1cdFx0ciA9IC1FRkFVTFQ7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuJiM0MztcdGlmIChyKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4gXHRkbyB7XG4gXHRcdHIgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAobWMpO1xuIFx0XHRpZiAocilcbi1cdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0cmV0dXJuIHI7XG4gXHRcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuIFx0XHRcdHIgPSBkYXRfc2V0X2NtbWFfYml0cyhtYywga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBhcmdzLVx1MDAzZXN0YXJ0X2dmbixcbiBcdFx0XHRcdFx0ICAgICAgYXJncy1cdTAwM2Vjb3VudCwgYXJncy1cdTAwM2VtYXNrLCBiaXRzKTtcbkBAIC0yMzU3LDkgJiM0MzsyMzUyLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBcdH0gd2hpbGUgKHIgPT0gLUVOT01FTSk7XG4gXG4gXHRzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2VmbGFncyk7XG4tb3V0OlxuLVx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuLVx0dmZyZWUoYml0cyk7XG4mIzQzO1xuIFx0cmV0dXJuIHI7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbmluZGV4IDQ0N2VjN2VkNDIzZGM0Li5hZDBkZGM0MzNhNzNjMyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHJpdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuQEAgLTM2Niw3ICYjNDM7MzY2LDkgQEAgc3RhdGljIGludCBoYW5kbGVfc3NrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdGlmIChyYyBcdTAwM2UgMSlcbiBcdFx0XHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9BRERSRVNTSU5HKTtcbiBcdFx0aWYgKHJjID09IC1FTk9NRU0pIHtcbi1cdFx0XHRrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cdTAwM2VhcmNoLm1jKTtcbiYjNDM7XHRcdFx0cmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cdTAwM2VhcmNoLm1jKTtcbiYjNDM7XHRcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRcdHJldHVybiByYztcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFx0XHRpZiAocmMgXHUwMDNjIDApXG5AQCAtMTEyMiw3ICYjNDM7MTEyNCw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BmbWYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdGlmIChyYyBcdTAwM2UgMSlcbiBcdFx0XHRcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgcmMpO1xuIFx0XHRcdGlmIChyYyA9PSAtRU5PTUVNKSB7XG4tXHRcdFx0XHRrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cdTAwM2VhcmNoLm1jKTtcbiYjNDM7XHRcdFx0XHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cCh2Y3B1LVx1MDAzZWFyY2gubWMpO1xuJiM0MztcdFx0XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0XHRcdHJldHVybiByYztcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAocmMgXHUwMDNjIDApXG5AQCAtMTIzMiw3ICYjNDM7MTIzNiw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdFx0XHRcdDogRVNTQV9TRVRfU1RBQkxFX0lGX1JFU0lERU5UKSlcbiBcdFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fU1BFQ0lGSUNBVElPTik7XG4gXG4tXHRpZiAoIXZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUpIHtcbiYjNDM7XHRpZiAoIVJFQURfT05DRSh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBDTU1BIGlzIGVuYWJsZWQgaW4gdGhlIEtWTSBzZXR0aW5ncywgYnV0IGlzIGRpc2FibGVkIGluXG4gXHRcdCAqIHRoZSBTSUUgYmxvY2sgYW5kIGluIHRoZSBtbV9jb250ZXh0LCBhbmQgd2UgYXJlIG5vdCBkb2luZ1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYyBiL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY1xuaW5kZXggZWUzZjM3YWY4YWVlNGEuLjRiZjdjOTAxMmZlYjZhIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmNcbkBAIC0xODEsNyAmIzQzOzE4MSw4IEBAIHZvaWQgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHZtYWRkcilcbiBcdGlmIChJU19FUlJfT1JfTlVMTChwdGVwKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0X19hdG9taWM2NF9vcihfUEFHRV9VTlVTRUQsIChsb25nICopcHRlcCk7XG4mIzQzO1x0aWYgKHB0ZV9wcmVzZW50KCpwdGVwKSlcbiYjNDM7XHRcdF9fYXRvbWljNjRfb3IoX1BBR0VfVU5VU0VELCAobG9uZyAqKXB0ZXApO1xuIFx0cHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcbmluZGV4IGUzOWE3MjRmZTg2MGUzLi4xNWQ4MWIyZWQ3YWQzOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xuQEAgLTM0LDE2ICYjNDM7MzQsMjIgQEAgc3RhdGljIGNoYXIgY21tYV92YWx1ZV9idWZbTUFJTl9QQUdFX0NPVU5UICYjNDM7IFRFU1RfREFUQV9QQUdFX0NPVU5UXTtcbiAvKipcbiAgKiBEaXJ0eSBDTU1BIGF0dHJpYnV0ZXMgb2YgZXhhY3RseSBvbmUgcGFnZSBpbiB0aGUgVEVTVF9EQVRBIG1lbXNsb3QsXG4gICogc28gdXNlX2NtbWEgZ29lcyBvbiBhbmQgdGhlIENNTUEgcmVsYXRlZCBpb2N0bHMgZG8gc29tZXRoaW5nLlxuJiM0MzsgKiBUb3VjaCB0aGUgcGFnZSBhdCBvZmZzZXQgMU0gaW5zaWRlIFRFU1RfREFUQSB0byBtYWtlIHN1cmUgaXRzIHBhZ2VcbiYjNDM7ICogdGFibGVzIGFyZSBhbGxvY2F0ZWQgaW4gdGhlIGhvc3QuXG4gICovXG4gc3RhdGljIHZvaWQgZ3Vlc3RfZG9fb25lX2Vzc2Eodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUoXG4gXHRcdC8qIGxvYWQgVEVTVF9EQVRBX1NUQVJUX0dGTiBpbnRvIHIxICovXG4mIzQzO1x0XHRcJiMzNDtcdHhnciAxLDFcXG5cJiMzNDtcbiBcdFx0XCYjMzQ7XHRsbGlsZiAxLCVbc3RhcnRfZ2ZuXVxcblwmIzM0O1xuIFx0XHQvKiBjYWxjdWxhdGUgdGhlIGFkZHJlc3MgZnJvbSB0aGUgZ2ZuICovXG4gXHRcdFwmIzM0O1x0c2xsZyAxLDEsMTIoMClcXG5cJiMzNDtcbiBcdFx0Lyogc2V0IHRoZSBmaXJzdCBwYWdlIGluIFRFU1RfREFUQSBtZW1zbG90IHRvIFNUQUJMRSAqL1xuIFx0XHRcJiMzNDtcdC5pbnNuIHJyZiwweGI5YWIwMDAwLDIsMSwxLDBcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1x0YWdmaSAxLDB4MTAwMDAwXFxuXCYjMzQ7XG4mIzQzO1x0XHQvKiBhbHNvIHRvdWNoIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzZWNvbmQgTUIgb2YgVEVTVF9EQVRBICovXG4mIzQzO1x0XHRcJiMzNDtcdC5pbnNuIHJyZiwweGI5YWIwMDAwLDIsMSwxLDBcXG5cJiMzNDtcbiBcdFx0LyogaHlwZXJjYWxsICovXG4gXHRcdFwmIzM0O1x0ZGlhZyAwLDAsMHg1MDFcXG5cJiMzNDtcbiBcdFx0XCYjMzQ7MDpcdGogMGJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXRfcGVla19jbW1hJiMzNDssCiAgICAmIzM0O2RhdF9nZXRfY21tYSYjMzQ7LAogICAgJiMzNDtnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlJiMzNDssCiAgICAmIzM0O19fc2V0X2NtbWFfZGlydHlfcHRlJiMzNDssCiAgICAmIzM0O2dtYXBfc2V0X2NtbWFfYWxsX2RpcnR5JiMzNDssCiAgICAmIzM0O2dtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2wmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3NldF9jbW1hX2JpdHMmIzM0OywKICAgICYjMzQ7aGFuZGxlX3Nza2UmIzM0OywKICAgICYjMzQ7aGFuZGxlX3BmbWYmIzM0OywKICAgICYjMzQ7aGFuZGxlX2Vzc2EmIzM0OywKICAgICYjMzQ7Z21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgaGFuZGxpbmcgb2YgQ29sbGFib3JhdGl2ZSBNZW1vcnkgTWFuYWdlbWVudCBBc3Npc3QgKENNTUEpLCBwYWdlIHRhYmxlIHVwZGF0ZXMsIGFuZCBWTSBtaWdyYXRpb24uIEl0IGZpeGVzIGJ1Z3MgaW4gQ01NQSBzdGF0ZSBoYW5kbGluZywgZGlydHkgcGFnZSB0cmFja2luZywgYW5kIG1lbW9yeSBjb250cm9sIGlvY3Rscy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIEtWTSBjb3JlIGxvZ2ljIGFuZCBpbnN0cnVjdGlvbiBoYW5kbGVycywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gZmVhdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAyMzQzOWJkZGFhNDE2MWVhNzcxYzgwNjI2ODY1ZDZlYzljYTRlYTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyMiAxNjoyNzo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDJjNmNlZTgyNDFlMDQ0Li40NzQwYzc1NjQ5ZWJiNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC05ODAsNiAmIzQzOzk4MCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG1kKHBtZF90ICpwbWRwLCBwbWRfdCBwbWQpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCiB7CiYjNDM7CWlmIChwdGVfcHJlc2VudChwdGUpKQomIzQzOwkJcHRlID0gY2xlYXJfcHRlX2JpdChwdGUsIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpOwogCVdSSVRFX09OQ0UoKnB0ZXAsIHB0ZSk7CiB9CiAKQEAgLTEzMzIsOCAmIzQzOzEzMzQsNiBAQCBwZ3Byb3RfdCBwZ3Byb3Rfd3JpdGVjb21iaW5lKHBncHJvdF90IHByb3QpOwogc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBucikKIHsKLQlpZiAocHRlX3ByZXNlbnQoZW50cnkpKQotCQllbnRyeSA9IGNsZWFyX3B0ZV9iaXQoZW50cnksIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpOwogCXBhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQobW0sIGFkZHIsIHB0ZXAsIGVudHJ5LCBucik7CiAJZm9yICg7OykgewogCQlzZXRfcHRlKHB0ZXAsIGVudHJ5KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmMgYi9hcmNoL3MzOTAva3ZtL2RhdC5jCmluZGV4IGE0ZmU2NjRmNjVlZTE1Li41ZjE5NjBlYzk4MmQwNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5jCkBAIC0xMjA5LDcgJiM0MzsxMjA5LDcgQEAgaW50IGRhdF9wZWVrX2NtbWEoZ2ZuX3Qgc3RhcnQsIHVuaW9uIGFzY2UgYXNjZSwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcykKIAlpbnQgcmM7CiAKIAlyYyA9IF9kYXRfd2Fsa19nZm5fcmFuZ2Uoc3RhcnQsIHN0YXJ0ICYjNDM7ICpjb3VudCwgYXNjZSwgJmFtcDtvcHMsIERBVF9XQUxLX0RFRkFVTFQsICZhbXA7c3RhdGUpOwotCSpjb3VudCA9IHN0YXRlLmVuZCAtIHN0YXJ0OwomIzQzOwkqY291bnQgPSBzdGF0ZS5lbmQgJmd0Oz0gc3RhcnQgPyBzdGF0ZS5lbmQgLSBzdGFydCA6IDA7CiAJLyogUmV0dXJuIHN1Y2Nlc3MgaWYgYXQgbGVhc3Qgb25lIHZhbHVlIHdhcyBzYXZlZCwgb3RoZXJ3aXNlIGFuIGVycm9yLiAqLwogCXJldHVybiAocmMgPT0gLUVGQVVMVCAmYW1wOyZhbXA7ICpjb3VudCAmZ3Q7IDApID8gMCA6IHJjOwogfQpAQCAtMTI1Myw2ICYjNDM7MTI1Myw5IEBAIGludCBkYXRfZ2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCAqc3RhcnQsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMsCiAJfTsKIAogCV9kYXRfd2Fsa19nZm5fcmFuZ2UoKnN0YXJ0LCBhc2NlX2VuZChhc2NlKSwgYXNjZSwgJmFtcDtvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgJmFtcDtzdGF0ZSk7CiYjNDM7CS8qIElmIG5vIGRpcnR5IHBhZ2VzIHdlcmUgZm91bmQsIHdyYXAgYXJvdW5kIGFuZCBjb250aW51ZSBzZWFyY2hpbmcgKi8KJiM0MzsJaWYgKCpzdGFydCAmYW1wOyZhbXA7IHN0YXRlLnN0YXJ0ID09IC0xKQomIzQzOwkJX2RhdF93YWxrX2dmbl9yYW5nZSgwLCAqc3RhcnQsIGFzY2UsICZhbXA7b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsICZhbXA7c3RhdGUpOwogCiAJaWYgKHN0YXRlLnN0YXJ0ID09IC0xKSB7CiAJCSpjb3VudCA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2dtYXAuYyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jCmluZGV4IDc3ODI5Zjc4N2RjNzgxLi41ZTc1NDg1YjUzZjlmZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9nbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9nbWFwLmMKQEAgLTMzMiw3ICYjNDM7MzMyLDcgQEAgc3RhdGljIGxvbmcgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZSh1bmlvbiBjcnN0ZSAqY3JzdGVwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgc3QKIAkJbmV3LmguaSA9IDE7CiAJCW5ldy5zLmZjMS55ID0gMDsKIAkJbmV3LnMuZmMxLnByZWZpeF9ub3RpZiA9IDA7Ci0JCWlmIChuZXcucy5mYzEuZCB8fCAhbmV3LmgucCkKJiM0MzsJCWlmICgobmV3LnMuZmMxLmQgfHwgIW5ldy5oLnApICZhbXA7JmFtcDsgIW5ldy5zLmZjMS5zKQogCQkJZm9saW9fc2V0X2RpcnR5KHBoeXNfdG9fZm9saW8oY3JzdGVfb3JpZ2luX2xhcmdlKGNyc3RlKSkpOwogCQluZXcucy5mYzEuZCA9IDA7CiAJCW5ldy5oLnAgPSAxOwpAQCAtMTEwMCw3ICYjNDM7MTEwMCwxMyBAQCBpbnQgZ21hcF9wcm90ZWN0X3JtYXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZywgZ2ZuX3QgcF9nZgogCiBzdGF0aWMgbG9uZyBfX3NldF9jbW1hX2RpcnR5X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKQogewotCV9fYXRvbWljNjRfb3IoUEdTVEVfQ01NQV9EX0JJVCwgJmFtcDtwZ3N0ZV9vZihwdGVwKS0mZ3Q7dmFsKTsKJiM0MzsJdW5pb24gcGdzdGUgcGdzdGU7CiYjNDM7CiYjNDM7CXBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7CiYjNDM7CXBnc3RlLmNtbWFfZCA9IDE7CiYjNDM7CXBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpOwomIzQzOwlhdG9taWM2NF9pbmMod2Fsay0mZ3Q7cHJpdik7CiYjNDM7CiAJaWYgKG5lZWRfcmVzY2hlZCgpKQogCQlyZXR1cm4gbmV4dDsKIAlyZXR1cm4gMDsKQEAgLTExMTQsNyAmIzQzOzExMjAsOCBAQCB2b2lkIGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5KHN0cnVjdCBnbWFwICpnbWFwKQogCWRvIHsKIAkJc2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgJmFtcDtnbWFwLSZndDtrdm0tJmd0O21tdV9sb2NrKQogCQkJZ2ZuID0gX2RhdF93YWxrX2dmbl9yYW5nZShnZm4sIGFzY2VfZW5kKGdtYXAtJmd0O2FzY2UpLCBnbWFwLSZndDthc2NlLCAmYW1wO29wcywKLQkJCQkJCSAgREFUX1dBTEtfSUdOX0hPTEVTLCBOVUxMKTsKJiM0MzsJCQkJCQkgIERBVF9XQUxLX0lHTl9IT0xFUywKJiM0MzsJCQkJCQkgICZhbXA7Z21hcC0mZ3Q7a3ZtLSZndDthcmNoLmNtbWFfZGlydHlfcGFnZXMpOwogCQljb25kX3Jlc2NoZWQoKTsKIAl9IHdoaWxlIChnZm4pOwogfQpAQCAtMTI4Nyw3ICYjNDM7MTI5NCw3IEBAIHN0YXRpYyBpbnQgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hCiAJLyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi8KIAlzbXBfcm1iKCk7CiAKLQlyYyA9IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlcyhzZy0mZ3Q7a3ZtLCBjb250ZXh0LmYsIGFzY2UucnN0bywgYXNjZS5kdCAmIzQzOyAxLCBmYWxzZSk7CiYjNDM7CXJjID0ga3ZtX3MzOTBfZ2V0X2d1ZXN0X3BhZ2VzKHNnLSZndDtrdm0sIGNvbnRleHQuZiwgYXNjZS5yc3RvLCBhc2NlLnRsICYjNDM7IDEsIGZhbHNlKTsKIAlpZiAocmMgJmd0OyAwKQogCQlyYyA9IC1FRkFVTFQ7CiAJaWYgKCFyYykKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCBkYzljNzQ1MWZlOTc5NC4uYmRkMjI5MmNmZGM3NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTk5NCw2ICYjNDM7OTk0LDggQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHQKIHsKIAlpbnQgcmV0OwogCiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2t2bS0mZ3Q7bG9jayk7CiYjNDM7CiAJc3dpdGNoIChhdHRyLSZndDthdHRyKSB7CiAJY2FzZSBLVk1fUzM5MF9WTV9NRU1fRU5BQkxFX0NNTUE6CiAJCXJldCA9IC1FTlhJTzsKQEAgLTEwMDEsNyAmIzQzOzEwMDMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dAogCQkJYnJlYWs7CiAKIAkJVk1fRVZFTlQoa3ZtLCAzLCAmIzM0OyVzJiMzNDssICYjMzQ7RU5BQkxFOiBDTU1BIHN1cHBvcnQmIzM0Oyk7Ci0JCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O2xvY2spOwogCQlpZiAoa3ZtLSZndDtjcmVhdGVkX3ZjcHVzKQogCQkJcmV0ID0gLUVCVVNZOwogCQllbHNlIHsKQEAgLTEwMTAsNyAmIzQzOzEwMTEsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dAogCQkJa3ZtLSZndDthcmNoLnVzZV9wZm1maSA9IDA7CiAJCQlyZXQgPSAwOwogCQl9Ci0JCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfVk1fTUVNX0NMUl9DTU1BOiB7CiAJCWdmbl90IHN0YXJ0X2dmbiA9IDA7CkBAIC0xMDI0LDcgJiM0MzsxMDI0LDggQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHQKIAogCQlWTV9FVkVOVChrdm0sIDMsICYjMzQ7JXMmIzM0OywgJiMzNDtSRVNFVDogQ01NQSBzdGF0ZXMmIzM0Oyk7CiAJCWRvIHsKLQkJCXN0YXJ0X2dmbiA9IGRhdF9yZXNldF9jbW1hKGt2bS0mZ3Q7YXJjaC5nbWFwLSZndDthc2NlLCBzdGFydF9nZm4pOwomIzQzOwkJCXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7a3ZtLSZndDttbXVfbG9jaykKJiM0MzsJCQkJc3RhcnRfZ2ZuID0gZGF0X3Jlc2V0X2NtbWEoa3ZtLSZndDthcmNoLmdtYXAtJmd0O2FzY2UsIHN0YXJ0X2dmbik7CiAJCQljb25kX3Jlc2NoZWQoKTsKIAkJfSB3aGlsZSAoc3RhcnRfZ2ZuKTsKIAkJcmV0ID0gMDsKQEAgLTEwNDIsOCAmIzQzOzEwNDMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dAogCQlpZiAoZ2V0X3VzZXIobmV3X2xpbWl0LCAodTY0IF9fdXNlciAqKWF0dHItJmd0O2FkZHIpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJZ3VhcmQobXV0ZXgpKCZhbXA7a3ZtLSZndDtsb2NrKTsKLQogCQluZXdfbGltaXQgPSBBTElHTihuZXdfbGltaXQsIEhQQUdFX1NJWkUpOwogCQlpZiAoa3ZtLSZndDthcmNoLm1lbV9saW1pdCAhPSBLVk1fUzM5MF9OT19NRU1fTElNSVQgJmFtcDsmYW1wOwogCQkgICAgbmV3X2xpbWl0ICZndDsga3ZtLSZndDthcmNoLm1lbV9saW1pdCkKQEAgLTEyMjMsNyAmIzQzOzEyMjIsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbXM7CiAJc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHM7Ci0JdW5zaWduZWQgbG9uZyByYW1fcGFnZXMgPSAwOwogCWludCBia3Q7CiAKIAkvKiBtaWdyYXRpb24gbW9kZSBhbHJlYWR5IGVuYWJsZWQgKi8KQEAgLTEyNDAsMTIgJiM0MzsxMjM4LDExIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSkKIAlrdm1fZm9yX2VhY2hfbWVtc2xvdChtcywgYmt0LCBzbG90cykgewogCQlpZiAoIW1zLSZndDtkaXJ0eV9iaXRtYXApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmFtX3BhZ2VzICYjNDM7PSBtcy0mZ3Q7bnBhZ2VzOwogCX0KIAkvKiBtYXJrIGFsbCB0aGUgcGFnZXMgYXMgZGlydHkgKi8KJiM0MzsJYXRvbWljNjRfc2V0KCZhbXA7a3ZtLSZndDthcmNoLmNtbWFfZGlydHlfcGFnZXMsIDApOwogCWdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5KGt2bS0mZ3Q7YXJjaC5nbWFwKTsKLQlhdG9taWM2NF9zZXQoJmFtcDtrdm0tJmd0O2FyY2guY21tYV9kaXJ0eV9wYWdlcywgcmFtX3BhZ2VzKTsKLQlrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUgPSAxOwomIzQzOwlXUklURV9PTkNFKGt2bS0mZ3Q7YXJjaC5taWdyYXRpb25fbW9kZSwgMSk7CiAJa3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RBUlRfTUlHUkFUSU9OKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEyNTksNyAmIzQzOzEyNTYsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSkKIAkvKiBtaWdyYXRpb24gbW9kZSBhbHJlYWR5IGRpc2FibGVkICovCiAJaWYgKCFrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUpCiAJCXJldHVybiAwOwotCWt2bS0mZ3Q7YXJjaC5taWdyYXRpb25fbW9kZSA9IDA7CiYjNDM7CVdSSVRFX09OQ0Uoa3ZtLSZndDthcmNoLm1pZ3JhdGlvbl9tb2RlLCAwKTsKIAlpZiAoa3ZtLSZndDthcmNoLnVzZV9jbW1hKQogCQlrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KGt2bSwgS1ZNX1JFUV9TVE9QX01JR1JBVElPTik7CiAJcmV0dXJuIDA7CkBAIC0yMzE3LDggJiM0MzsyMzE0LDggQEAgc3RhdGljIGludCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSwKIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJICBjb25zdCBzdHJ1Y3Qga3ZtX3MzOTBfY21tYV9sb2cgKmFyZ3MpCiB7Ci0Jc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWM7Ci0JdTggKmJpdHMgPSBOVUxMOwomIzQzOwlzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7CiYjNDM7CXU4ICpiaXRzIF9fZnJlZShrdmZyZWUpID0gTlVMTDsKIAlpbnQgciA9IDA7CiAKIAlpZiAoIWt2bS0mZ3Q7YXJjaC51c2VfY21tYSkKQEAgLTIzMzgsMTggJiM0MzsyMzM1LDE2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sCiAJCXJldHVybiAtRU5PTUVNOwogCWJpdHMgPSB2bWFsbG9jKGFycmF5X3NpemUoc2l6ZW9mKCpiaXRzKSwgYXJncy0mZ3Q7Y291bnQpKTsKIAlpZiAoIWJpdHMpCi0JCWdvdG8gb3V0OwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiAKIAlyID0gY29weV9mcm9tX3VzZXIoYml0cywgKHZvaWQgX191c2VyICopYXJncy0mZ3Q7dmFsdWVzLCBhcmdzLSZndDtjb3VudCk7Ci0JaWYgKHIpIHsKLQkJciA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0OwotCX0KJiM0MzsJaWYgKHIpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKIAogCWRvIHsKIAkJciA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7CiAJCWlmIChyKQotCQkJYnJlYWs7CiYjNDM7CQkJcmV0dXJuIHI7CiAJCXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7a3ZtLSZndDttbXVfbG9jaykgewogCQkJciA9IGRhdF9zZXRfY21tYV9iaXRzKG1jLCBrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZSwgYXJncy0mZ3Q7c3RhcnRfZ2ZuLAogCQkJCQkgICAgICBhcmdzLSZndDtjb3VudCwgYXJncy0mZ3Q7bWFzaywgYml0cyk7CkBAIC0yMzU3LDkgJiM0MzsyMzUyLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSwKIAl9IHdoaWxlIChyID09IC1FTk9NRU0pOwogCiAJc2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sICZhbXA7a3ZtLSZndDthcmNoLmdtYXAtJmd0O2ZsYWdzKTsKLW91dDoKLQlrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7Ci0JdmZyZWUoYml0cyk7CiYjNDM7CiAJcmV0dXJuIHI7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmMKaW5kZXggNDQ3ZWM3ZWQ0MjNkYzQuLmFkMGRkYzQzM2E3M2MzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwpAQCAtMzY2LDcgJiM0MzszNjYsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9zc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJaWYgKHJjICZndDsgMSkKIAkJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX0FERFJFU1NJTkcpOwogCQlpZiAocmMgPT0gLUVOT01FTSkgewotCQkJa3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtJmd0O2FyY2gubWMpOwomIzQzOwkJCXJjID0ga3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtJmd0O2FyY2gubWMpOwomIzQzOwkJCWlmIChyYykKJiM0MzsJCQkJcmV0dXJuIHJjOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKHJjICZsdDsgMCkKQEAgLTExMjIsNyAmIzQzOzExMjQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9wZm1mKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJCWlmIChyYyAmZ3Q7IDEpCiAJCQkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCByYyk7CiAJCQlpZiAocmMgPT0gLUVOT01FTSkgewotCQkJCWt2bV9zMzkwX21tdV9jYWNoZV90b3B1cCh2Y3B1LSZndDthcmNoLm1jKTsKJiM0MzsJCQkJcmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS0mZ3Q7YXJjaC5tYyk7CiYjNDM7CQkJCWlmIChyYykKJiM0MzsJCQkJCXJldHVybiByYzsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmIChyYyAmbHQ7IDApCkBAIC0xMjMyLDcgJiM0MzsxMjM2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXNzYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCQkJCQk6IEVTU0FfU0VUX1NUQUJMRV9JRl9SRVNJREVOVCkpCiAJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX1NQRUNJRklDQVRJT04pOwogCi0JaWYgKCF2Y3B1LSZndDtrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUpIHsKJiM0MzsJaWYgKCFSRUFEX09OQ0UodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pZ3JhdGlvbl9tb2RlKSkgewogCQkvKgogCQkgKiBDTU1BIGlzIGVuYWJsZWQgaW4gdGhlIEtWTSBzZXR0aW5ncywgYnV0IGlzIGRpc2FibGVkIGluCiAJCSAqIHRoZSBTSUUgYmxvY2sgYW5kIGluIHRoZSBtbV9jb250ZXh0LCBhbmQgd2UgYXJlIG5vdCBkb2luZwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jIGIvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jCmluZGV4IGVlM2YzN2FmOGFlZTRhLi40YmY3YzkwMTJmZWI2YSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYwpAQCAtMTgxLDcgJiM0MzsxODEsOCBAQCB2b2lkIGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpCiAJaWYgKElTX0VSUl9PUl9OVUxMKHB0ZXApKQogCQlyZXR1cm47CiAKLQlfX2F0b21pYzY0X29yKF9QQUdFX1VOVVNFRCwgKGxvbmcgKilwdGVwKTsKJiM0MzsJaWYgKHB0ZV9wcmVzZW50KCpwdGVwKSkKJiM0MzsJCV9fYXRvbWljNjRfb3IoX1BBR0VfVU5VU0VELCAobG9uZyAqKXB0ZXApOwogCXB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jCmluZGV4IGUzOWE3MjRmZTg2MGUzLi4xNWQ4MWIyZWQ3YWQzOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMKQEAgLTM0LDE2ICYjNDM7MzQsMjIgQEAgc3RhdGljIGNoYXIgY21tYV92YWx1ZV9idWZbTUFJTl9QQUdFX0NPVU5UICYjNDM7IFRFU1RfREFUQV9QQUdFX0NPVU5UXTsKIC8qKgogICogRGlydHkgQ01NQSBhdHRyaWJ1dGVzIG9mIGV4YWN0bHkgb25lIHBhZ2UgaW4gdGhlIFRFU1RfREFUQSBtZW1zbG90LAogICogc28gdXNlX2NtbWEgZ29lcyBvbiBhbmQgdGhlIENNTUEgcmVsYXRlZCBpb2N0bHMgZG8gc29tZXRoaW5nLgomIzQzOyAqIFRvdWNoIHRoZSBwYWdlIGF0IG9mZnNldCAxTSBpbnNpZGUgVEVTVF9EQVRBIHRvIG1ha2Ugc3VyZSBpdHMgcGFnZQomIzQzOyAqIHRhYmxlcyBhcmUgYWxsb2NhdGVkIGluIHRoZSBob3N0LgogICovCiBzdGF0aWMgdm9pZCBndWVzdF9kb19vbmVfZXNzYSh2b2lkKQogewogCWFzbSB2b2xhdGlsZSgKIAkJLyogbG9hZCBURVNUX0RBVEFfU1RBUlRfR0ZOIGludG8gcjEgKi8KJiM0MzsJCSYjMzQ7CXhnciAxLDFcbiYjMzQ7CiAJCSYjMzQ7CWxsaWxmIDEsJVtzdGFydF9nZm5dXG4mIzM0OwogCQkvKiBjYWxjdWxhdGUgdGhlIGFkZHJlc3MgZnJvbSB0aGUgZ2ZuICovCiAJCSYjMzQ7CXNsbGcgMSwxLDEyKDApXG4mIzM0OwogCQkvKiBzZXQgdGhlIGZpcnN0IHBhZ2UgaW4gVEVTVF9EQVRBIG1lbXNsb3QgdG8gU1RBQkxFICovCiAJCSYjMzQ7CS5pbnNuIHJyZiwweGI5YWIwMDAwLDIsMSwxLDBcbiYjMzQ7CiYjNDM7CQkmIzM0OwlhZ2ZpIDEsMHgxMDAwMDBcbiYjMzQ7CiYjNDM7CQkvKiBhbHNvIHRvdWNoIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzZWNvbmQgTUIgb2YgVEVTVF9EQVRBICovCiYjNDM7CQkmIzM0OwkuaW5zbiBycmYsMHhiOWFiMDAwMCwyLDEsMSwwXG4mIzM0OwogCQkvKiBoeXBlcmNhbGwgKi8KIAkJJiMzNDsJZGlhZyAwLDAsMHg1MDFcbiYjMzQ7CiAJCSYjMzQ7MDoJaiAwYiYjMzQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2OTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWw6IHMzOTAgS1ZNIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyAqZG9lcyogaW50cm9kdWNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsLCBhbmQgdGhlcmVmb3JlLCBpdCYjMzk7cyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIG1vZGlmaWVkIGZpbGVzIHBvaW50IGRpcmVjdGx5IHRvIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0sIHdoaWNoIGlzIHNpZ25pZmljYW50LiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgbWlub3IgdHdlYWs7IHdlJiMzOTtyZSBsb29raW5nIGF0IGNvZGUgdGhhdCB0b3VjaGVzIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCBDTU1BIChDb2xsYWJvcmF0aXZlIE1lbW9yeSBNYW5hZ2VtZW50IEFzc2lzdCkgZnVuY3Rpb25hbGl0eSwgYW5kIFZNIG1pZ3JhdGlvbiDigJMgYWxsIGNyaXRpY2FsIGFyZWFzIHdpdGhpbiBhIHZpcnR1YWxpemF0aW9uIGNvbnRleHQuCgpNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCBLVk0gb24gczM5MCBpcyBhIHdlbGwtZXN0YWJsaXNoZWQgYW5kIGFjdGl2ZWx5IHVzZWQgcGxhdGZvcm0uIEl0JiMzOTtzIG5vdCBzb21lIG9ic2N1cmUgY29ybmVyIGNhc2UuIFRoaXMgbWVhbnMgYW55IGJ1Z3MgbHVya2luZyB3aXRoaW4gdGhlc2UgY2hhbmdlcyBjb3VsZCBoYXZlIHJlYWwtd29ybGQgaW1wYWN0LiBJbXBvcnRhbnRseSwgSSBrbm93IHRoYXQgU3l6a2FsbGVyIHN1cHBvcnRzIHMzOTB4LCB3aGljaCBpcyBhIG1ham9yIHBvc2l0aXZlIHNpZ24uIElmIHN5emthbGxlciBjYW4gd29yayBvbiB0aGUgcGxhdGZvcm0sIHRoZW4gd2UgaGF2ZSBhIGdvb2Qgb3Bwb3J0dW5pdHkuCgpOb3csIGxldCYjMzk7cyBnZXQgc3BlY2lmaWMuIEkgd2FudCB0byBpZGVudGlmeSB0aGUgKm1vc3QqIGludGVyZXN0aW5nIGZ1bmN0aW9ucyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSSBrbm93IHRoYXQgY2VydGFpbiBmdW5jdGlvbnMgbWlnaHQgYmUgaG90IHBhdGhzLCBhbmQgSSB3YW50IHRvIGV4Y2x1ZGUgdGhvc2UuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgc2V0X3B0ZWAsIGBzZXRfcHRlc2AsIGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlYCwgYF9fc2V0X2NtbWFfZGlydHlfcHRlYCwgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCwgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAsIGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgLCBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCwgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCwgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCBgaGFuZGxlX3Nza2VgLCBgaGFuZGxlX3BmbWZgLCBgaGFuZGxlX2Vzc2FgLCBhbmQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAuICBJIHN1c3BlY3QgYHNldF9wdGVgIGFuZCBgc2V0X3B0ZXNgIGFyZSBwcm9iYWJseSBob3QgcGF0aHMsIHNvIEkmIzM5O2xsIHB1dCB0aG9zZSBhc2lkZSBmb3Igbm93LgoKVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBLY29uZmlnIG9wdGlvbnMuIEkga25vdyB0aGF0IGBDT05GSUdfS1ZNYCB3aWxsIGJlIHJlbGV2YW50LCBhbmQgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMgQ01NQS1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQSBxdWljayBncmVwIGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIHdpbGwgdGVsbCBtZSBpZiB3ZSBuZWVkIHRvIGNvbnNpZGVyIHNwZWNpZmljIGVuYWJsZW1lbnQgZmxhZ3MgZm9yIHRob3JvdWdoIGZ1enppbmcuIFRoaXMgd2lsbCBnaXZlIG1lIGEgbW9yZSBjb25jcmV0ZSBwaWN0dXJlIG9mIHRoZSBleHBvc3VyZSBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXy4qQ01NQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk3NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgaXQgc2VlbXMgbGlrZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBpbW1lZGlhdGVseSBvYnZpb3VzLCBwcmUtY29uZmlndXJlZCBDTU1BIHNldHRpbmdzIEkgY2FuIHJlYWRpbHkgaWRlbnRpZnkuIFRpbWUgdG8gZGlnIGRlZXBlci4gTXkgbmV4dCBtb3ZlIGlzIHRvIGxldmVyYWdlIHRoZSBwb3dlciBvZiBgZ3JlcGAuIEkmIzM5O2xsIGZvY3VzIG15IHNlYXJjaCBvbiB0aGUgYGFyY2gvczM5MC9rdm0vYCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IG1lbnRpb25zIG9mIGBLVk1gLiBUaGlzIHNob3VsZCBoZWxwIG1lIHBpbnBvaW50IGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBjb2RlIHJlbGF0ZWQgdG8gS1ZNIHdpdGhpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIG5leHQgc3RlcCBnaXZlbiB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMjkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBmaWd1cmluZyBvdXQgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBLVk0uIE15IGluc3RpbmN0IHNheXMgdG8gc3RhcnQgd2l0aCBgS1ZNYCBhcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uLCB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1haW4gZGVmaW5pdGlvbnMgYXJlLiBIb3dldmVyLCBJIHdhbnQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBnb2luZyBvbiBoZXJlLiBUaGVyZWZvcmUsIEkgc2hvdWxkIGNoZWNrIHRoZSBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCBmaWxlLiBJdCYjMzk7cyB0aGUgb2J2aW91cyBwbGFjZSB0byBsb29rIGZvciBhbnkgc3BlY2lhbGl6ZWQgY29uZmlndXJhdGlvbnMgb3IgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIEtWTSBvbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgbW9zdCByZWxldmFudCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiBDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz02MDI9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNjA4LVx0Y2FzZSBLVk1fQ0FQX1MzOTBfR01BUDpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo2MDk6I2lmZGVmIENPTkZJR19LVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTYxMC1cdGNhc2UgS1ZNX0NBUF9TMzkwX1VDT05UUk9MOlxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMjI5PWludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjM3LVx0cmMgPSAtRUlOVkFMO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMzg6I2lmZGVmIENPTkZJR19LVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyMzktXHRpZiAodHlwZSBcdTAwMjYgfktWTV9WTV9TMzkwX1VDT05UUk9MKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NDgzPWxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTU1NC1cdH1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NTU1OiNpZmRlZiBDT05GSUdfS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTU2LVx0Y2FzZSBLVk1fUzM5MF9VQ0FTX01BUDoge1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01Njk4PXZtX2ZhdWx0X3Qga3ZtX2FyY2hfdmNwdV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2OTkte1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3MDA6I2lmZGVmIENPTkZJR19LVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MDEtXHRpZiAoKHZtZi1cdTAwM2VwZ29mZiA9PSBLVk1fUzM5MF9TSUVfUEFHRV9PRkZTRVQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIzNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBLVk0gcGF0Y2gsIGFuZCBpbW1lZGlhdGVseSB0aGUgZm9jdXMgaXMgb24gYSBoYW5kZnVsIG9mIGtleSBmdW5jdGlvbnMgdGhhdCBuZWVkIGEgdGhvcm91Z2ggaW5zcGVjdGlvbiwgc3BlY2lmaWNhbGx5IHRob3NlIHJlbGF0ZWQgdG8gS1ZNIG1lbW9yeSBjb250cm9sIG9uIHMzOTAgc3lzdGVtcy4gIEkmIzM5O20gc2VlaW5nIGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgLCBoYW5kbGluZyB0aG9zZSBpb2N0bHMg4oCTIGBLVk1fUzM5MF9WTV9NRU1fRU5BQkxFX0NNTUFgLCBgS1ZNX1MzOTBfVk1fTUVNX0NMUl9DTU1BYCwgYW5kIGBLVk1fUzM5MF9WTV9NRU1fTElNSVRfU0laRWAg4oCTIHRoYXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuICBUaGVuIHdlIGhhdmUgbWlncmF0aW9uLXJlbGF0ZWQgaGFuZGxlcnM6IGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gIGFuZCBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBhbmQgYWxzbyBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AuCgpCZXlvbmQgdGhlIGNvcmUgbWVtb3J5IGNvbnRyb2wsIGl0JiMzOTtzIGNsZWFyIHdlIGhhdmUgdG8gZGlnIGludG8gYWxsIHRoZSBDTU1BIGJpdHMsIHBhZ2luZyBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGhhbmRsaW5nIG9mIHRoZSBnbWFwLiBUaGlzIGluY2x1ZGVzIGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlYCwgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCwgYW5kIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgYW55IHN1YnRsZSBtaXNjb25maWd1cmF0aW9uIG9yIHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aG9zZSBnbWFwIHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzIGNvdWxkIGJlIGRpc2FzdHJvdXMuCgpUaGVuIHRoZSByZWFsIGludGVyZXN0aW5nIHN0dWZmIC0gdGhlIGluc3RydWN0aW9uIGhhbmRsZXJzOiBgaGFuZGxlX3Nza2VgLCBgaGFuZGxlX3BmbWZgLCBhbmQgYGhhbmRsZV9lc3NhYC4gIFRoZXNlIGFyZSBpbiBgYXJjaC9zMzkwL2t2bS9wcml2LmNgLiBUaGF0IG1lYW5zIHRoZXkmIzM5O3JlIGNvcmUgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMgd2l0aGluIHRoZSBLVk0gZ3Vlc3QuICBUaGV5JiMzOTtyZSAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgaGlnaCBvbiB0aGUgZnV6emluZyBsaXN0LiBBIHN1YnRsZSBidWcgdGhlcmUgY291bGQgbGVhZCB0byBzZXJpb3VzIFZNIGVzY2FwZXMuCgpJIHNob3VsZCBhbHNvIGNoZWNrIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgIGluIGBhcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmNgLgoKT2J2aW91c2x5LCBgQ09ORklHX0tWTWAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBjaGVjayBmb3IgdGhlc2UgZmVhdHVyZXMsIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGdvIGRlZXBlciB0byBiZSBzdXJlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgdGhhdCB0aG9zZSBpbnN0cnVjdGlvbiBoYW5kbGVycyBhcmUgaW5kZWVkIGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhbmQgbWFrZSBhIGZ1enppbmcgcGxhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vZ21hcF9oZWxwZXJzLmg9MTM9aW50IGdtYXBfaGVscGVyX2Rpc2FibGVfY293X3NoYXJpbmcodm9pZCk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vZ21hcF9oZWxwZXJzLmg6MTQ6dm9pZCBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdm1hZGRyKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9nbWFwX2hlbHBlcnMuaC0xNS1wdGVfdCAqdHJ5X2dldF9sb2NrZWRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHNwaW5sb2NrX3QgKipwdGwpO1xuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jPTM3Nj1zdGF0aWMgbG9uZyBfZ21hcF91bm1hcF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqdylcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0zODUtXHRcdHZtYWRkciA9IF9fZ2ZuX3RvX2h2YV9tZW1zbG90KHByaXYtXHUwMDNlc2xvdCwgZ2ZuKTtcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjM4NjpcdFx0Z21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKHByaXYtXHUwMDNlZ21hcC1cdTAwM2Vrdm0tXHUwMDNlbW0sIHZtYWRkcik7XG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0zODctXHR9XG4tLVxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jPTE0NT1FWFBPUlRfU1lNQk9MX0dQTChnbWFwX2hlbHBlcl9kaXNjYXJkKTtcbi0tXG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmMtMTQ3LS8qKlxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jOjE0ODogKiBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQoKSAtIG1hcmsgYSBwdGUgZW50cnkgYXMgdW51c2VkXG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmMtMTQ5LSAqIEBtbTogdGhlIG1tXG4tLVxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jLTE2Mi0gKi9cbmFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYzoxNjM6dm9pZCBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdm1hZGRyKVxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jLTE2NC17XG4tLVxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jLTE4Ny19XG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmM6MTg4OkVYUE9SVF9TWU1CT0xfR1BMKGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZCk7XG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmMtMTg5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg0NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gTWVtb3J5IE1hbmFnZW1lbnQgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAuICBUaGF0IGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBfZ21hcF91bm1hcF9wdGVgLiAgUmlnaHQgYXdheSwgbXkgbWluZCBjbGlja3M6IGBfZ21hcF91bm1hcF9wdGVgIGlzIHBhcnQgb2YgS1ZNLiAgVGhhdOKAmXMgd2hlcmUgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBhY3Rpb24gaXMgaGFwcGVuaW5nLCB3aGljaCBoZWxwcyBtZSBwbGFjZSBpdCBpbnRvIGNvbnRleHQuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZSBDTU1BIGZ1bmN0aW9uYWxpdHkuIExldCYjMzk7cyBzZWUgaWYgdGhlIG5leHQgc3RlcHMgd2lsbCBtYWtlIG1vcmUgc2Vuc2UsIGZvY3VzaW5nIG9uIGhvdyBkYXRhIGlzIGJlaW5nIHJlYWQgYW5kIGFjY2Vzc2VkLiAgSSYjMzk7bGwgc3RhcnQgd2l0aCBgZGF0X3BlZWtfY21tYWAgYW5kIGBkYXRfZ2V0X2NtbWFgIC0gdGhvc2UgZnVuY3Rpb25zIHNob3VsZCB0ZWxsIG1lIG1vcmUgYWJvdXQgaG93IHRoZSBDb21tb24gTWVtb3J5IE1hbmFnZW1lbnQgQXJlYSAoQ01NQSkgaXMgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF0X3BlZWtfY21tYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9kYXQuYz0xMTY5PXN0cnVjdCBkYXRfZ2V0X2NtbWFfc3RhdGUge1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE3Ni1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE3NzpzdGF0aWMgbG9uZyBfX2RhdF9wZWVrX2NtbWFfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExNzgte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE4OS1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5MDpzdGF0aWMgbG9uZyBfX2RhdF9wZWVrX2NtbWFfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExOTEte1xuLS1cbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE5OC1cbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5OTppbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKVxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjAwLXtcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwMS1cdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0ge1xuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjAyOlx0XHQucHRlX2VudHJ5ID0gX19kYXRfcGVla19jbW1hX3B0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwMzpcdFx0LnBtZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwNDpcdFx0LnB1ZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwNTpcdFx0LnA0ZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTIwNjpcdFx0LnBnZF9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9jcnN0ZSxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwNy1cdH07XG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuaD01NTI9bG9uZyBkYXRfcmVzZXRfY21tYSh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0X2dmbik7XG5hcmNoL3MzOTAva3ZtL2RhdC5oOjU1MzppbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKTtcbmFyY2gvczM5MC9rdm0vZGF0LmgtNTU0LWludCBkYXRfZ2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCAqc3RhcnQsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMsIGF0b21pYzY0X3QgKnJlbSk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIyNTc9c3RhdGljIGludCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjI4OS1cdFx0aWYgKHBlZWspXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjI5MDpcdFx0XHRyZXQgPSBkYXRfcGVla19jbW1hKGFyZ3MtXHUwMDNlc3RhcnRfZ2ZuLCBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIFx1MDAyNmFyZ3MtXHUwMDNlY291bnQsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjI5MS1cdFx0XHRcdFx0ICAgIHZhbHVlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDI4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDTU1BIEJpdCBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgQ01NQSBiaXRzIGFyZSBtYW5hZ2VkLCBhbmQgaXQgbG9va3MgbGlrZSBgZGF0X3BlZWtfY21tYWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgLiBBbHNvLCBgZGF0X2dldF9jbW1hYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB0aGUgc2FtZSBzcG90LCBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBDTU1BIGJpdCBmdW5jdGlvbmFsaXR5IGFyZSB0aGUgb25lcyBkaXJlY3RseSBsaW5rZWQgdG8gc2V0dGluZywgZ2V0dGluZywgYW5kIG1hbmlwdWxhdGluZyB0aGVzZSBiaXRzLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgZnVuY3Rpb25zIHRvIGdldCBhIGdyYXNwIG9mIHRoZSBvdmVyYWxsIG9wZXJhdGlvbi4KCkJhc2VkIG9uIHRoZSBmdW5jdGlvbiBjYWxscywgSSYjMzk7dmUgZ290IGEgcHJlbGltaW5hcnkgbGlzdCBvZiBjYW5kaWRhdGVzLiBUaGV5IGxvb2sgbGlrZToKCiogICBga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sYAoqICAgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAKKiAgIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAKKiAgIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYAoqICAgYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgCiogICBgZGF0X3BlZWtfY21tYWAKKiAgIGBkYXRfZ2V0X2NtbWFgCiogICBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAKKiAgIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAKKiAgIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgCiogICBgaGFuZGxlX3Nza2VgCiogICBgaGFuZGxlX3BmbWZgCiogICBgaGFuZGxlX2Vzc2FgCiogICBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYAoKTm93LCBJIHRoaW5rIGl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGdtYXBfY2xlYXJfeW91bmdfY3JzdGVgIHRvIHNlZSBob3cgaXQgbWlnaHQgYmUgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3MuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2dtYXAuYz0yODc9c3RhdGljIGxvbmcgZ21hcF9jbGVhcl95b3VuZ19wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IGVuZCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTMxNS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjMxNjpzdGF0aWMgbG9uZyBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlKHVuaW9uIGNyc3RlICpjcnN0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgZW5kLCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0zMTcte1xuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jPTM1ND1ib29sIGdtYXBfYWdlX2dmbihzdHJ1Y3QgZ21hcCAqZ21hcCwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZClcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0zNTctXHRcdC5wdGVfZW50cnkgPSBnbWFwX2NsZWFyX3lvdW5nX3B0ZSxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjM1ODpcdFx0LnBtZF9lbnRyeSA9IGdtYXBfY2xlYXJfeW91bmdfY3JzdGUsXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzozNTk6XHRcdC5wdWRfZW50cnkgPSBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlLFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMzYwLVx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwOTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZ21hcF9hZ2VfZ2ZuYCBDYWxsKioKCk9rYXksIHNvIGBnbWFwX2FnZV9nZm5gIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBrdm1fYWdlX2dmbmAuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBga3ZtX2FnZV9nZm5gIGlzIHR5cGljYWxseSBpbnZvbHZlZCBpbiBhZ2luZyBndWVzdCBwaHlzaWNhbCBwYWdlcywgYW5kIGBnbWFwX2FnZV9nZm5gIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGdsb2JhbCBtZW1vcnkgbWFwLiBUaGlzIGNvdWxkIGJlIGFib3V0IHRyYWNraW5nIHBhZ2UgdXNhZ2UgZnJvbSB0aGUgaG9zdCYjMzk7cyBwZXJzcGVjdGl2ZSwgb3IgbWF5YmUgaXQgaXMgc29tZSBzb3J0IG9mIHNoYXJlZCBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYW5kLCBzcGVjaWZpY2FsbHksIHRoZSBjb250ZXh0IG9mIHRoYXQgY2FsbC4KClRoZSBuZXh0IHRoaW5nIEkgdGhpbmsgdG8gY2hlY2sgaXMgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAuIE15IGluaXRpYWwgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGNhbGwgaXMgZnJvbSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgQWRkcmVzcyBTcGFjZSBDb250cm9sIEVudHJ5IChBU0NFKSB0YWJsZS4gVGhpcyBjb3VsZCBiZSBhIGNyaXRpY2FsIHBhcnQgb2YgZW5zdXJpbmcgcHJvcGVyIHByb3RlY3Rpb24gYW5kIGlzb2xhdGlvbiwgZXNwZWNpYWxseSBkdXJpbmcgcGFnZSBhZ2luZyBvcGVyYXRpb25zLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYCBoYW5kbGVzIGEgbmVjZXNzYXJ5IHByb3RlY3Rpb24gbWVjaGFuaXNtIHdoZW4gbW9kaWZ5aW5nIHRoZSB0b3AtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyaWVzLiBTbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXQmIzM5O3MgbGlrZWx5IGEgY3JpdGljYWwgc2VjdGlvbiBhbmQgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgY2FsbCBpcyBjb3JyZWN0bHkgc3luY2hyb25pemVkIHRvIHByZXZlbnQgYW55IHJhY2UgY29uZGl0aW9ucyBvciBkYXRhIGNvcnJ1cHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9nbWFwLmM9MTIxMj1zdGF0aWMgc3RydWN0IGdtYXAgKmdtYXBfZmluZF9zaGFkb3coc3RydWN0IGdtYXAgKnBhcmVudCwgdW5pb24gYXNjZSBhc2NlLCBpbnQgZWRhdF9sZXZlbClcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjI1LSNkZWZpbmUgQ1JTVF9UQUJMRV9QQUdFUyAoX0NSU1RfVEFCTEVfU0laRSAvIFBBR0VfU0laRSlcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyMjY6c3RydWN0IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbCB7XG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjI3LVx0dW5zaWduZWQgbG9uZyBzZXE7XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTIzMC1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyMzE6c3RhdGljIGlubGluZSBpbnQgX19nbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZyxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyMzI6XHRcdFx0XHRcdFx0c3RydWN0IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbCAqY29udGV4dClcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyMzMte1xuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyNjMtXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjY0OnN0YXRpYyBpbmxpbmUgaW50IF9nbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZyxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyNjU6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsICpjb250ZXh0KVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI2Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI3Ny1cdFx0XHRyZXR1cm4gcmM7XG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjc4Olx0XHRyYyA9IF9fZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsKG1jLCBzZywgY29udGV4dCk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjc5LVx0XHRyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI4NC1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyODU6c3RhdGljIGludCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZylcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyODYte1xuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTI4NzpcdHN0cnVjdCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwgY29udGV4dCA9IHt9O1xuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI4OC1cdHVuaW9uIGFzY2UgYXNjZSA9IHNnLVx1MDAzZWd1ZXN0X2FzY2U7XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTMwMC1cdGlmICghcmMpXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzAxOlx0XHRyYyA9IF9nbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwobWMsIHNnLCBcdTAwMjZjb250ZXh0KTtcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzMDItXHRpZiAocmMpXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTMyNT1zdHJ1Y3QgZ21hcCAqZ21hcF9jcmVhdGVfc2hhZG93KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqcGFyZW50LFxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzNzUtXHQvKiBQcm90ZWN0IHdoaWxlIGluc2VydGluZywgcHJvdGVjdHMgYWdhaW5zdCBpbnZhbGlkYXRpb24gcmFjZXMuICovXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzc2Olx0cmMgPSBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwobWMsIG5ldyk7XG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMzc3LVx0aWYgKHJjKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDM1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbCoqCgpPa2F5LCBzbyBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgZ21hcF9jcmVhdGVfc2hhZG93YC4gVGhhdCYjMzk7cyB0aGUgY29udGV4dC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGludGVyYWN0aW9uLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoaXMgcHJvdGVjdGlvbiBjYWxsLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb25zLCBpdCBzZWVtcyBsaWtlIHdlIGFyZSBkZWFsaW5nIHdpdGggc29tZSBraW5kIG9mIGFjY2VzcyBjb250cm9sIG9uIHRoZSB0b3AtbGV2ZWwgQVNDRS4KCk5vdywgbXkgbmV4dCBxdWVzdGlvbiByZXZvbHZlcyBhcm91bmQgd2hhdCB0cmlnZ2VycyB0aGUgcHJvdGVjdGlvbi4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBgX19zZXRfY21tYV9kaXJ0eV9wdGVgLiBJIGJldCB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBkaXJ0eSBiaXQgaXMgc2V0LCBhbmQgaXQgcHJvYmFibHkgaGFzIHRvIGRvIHdpdGggaG93IHRoZSBBU0NFIGdldHMgdXBkYXRlZCB3aGVuIGEgcGFnZSBpcyB3cml0dGVuIHRvLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGlzIGZ1bmN0aW9uIGNhbGwsIGJlY2F1c2UgdGhpcyB3aWxsIHByb2JhYmx5IHByb3ZpZGUgaW5zaWdodCBpbnRvIHRoZSBjb250ZXh0IG9mIHRoZSBwcm90ZWN0aW9uIG9mIHRoZSBhZGRyZXNzIHNwYWNlIHRvcC1sZXZlbCBzdHJ1Y3R1cmVzLCBzbyBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCB3aHkgdGhleSBhcmUgY2FsbGluZyBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zZXRfY21tYV9kaXJ0eV9wdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vZ21hcC5jPTEwNjM9aW50IGdtYXBfcHJvdGVjdF9ybWFwKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqc2csIGdmbl90IHBfZ2ZuLCBnZm5fdCByX2dmbixcbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMTAwLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTEwMTpzdGF0aWMgbG9uZyBfX3NldF9jbW1hX2RpcnR5X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTEwMi17XG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTExNT12b2lkIGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5KHN0cnVjdCBnbWFwICpnbWFwKVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTExNi17XG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMTE3Olx0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBfX3NldF9jbW1hX2RpcnR5X3B0ZSwgfTtcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTExMTgtXHRnZm5fdCBnZm4gPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA3MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENNTUEgRGlydHkgUFRFIFNldHRpbmcgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuIEl0JiMzOTtzIHRyaWdnZXJlZCBmcm9tIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIHdoaWNoIGltbWVkaWF0ZWx5IGRpcmVjdHMgbXkgYXR0ZW50aW9uIHRvIHRoZSBrZXkgZnVuY3Rpb25zIGluIHRoaXMgY29kZSBwYXRoOiBga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sYCwgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYGRhdF9wZWVrX2NtbWFgLCBgZGF0X2dldF9jbW1hYCwgYGdtYXBfY2xlYXJfeW91bmdfY3JzdGVgLCBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgIGl0c2VsZiwgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAsIGBoYW5kbGVfc3NrZWAsIGBoYW5kbGVfcGZtZmAsIGBoYW5kbGVfZXNzYWAsIGFuZCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSBhbmQgd2hlcmUgYF9fc2V0X2NtbWFfZGlydHlfcHRlYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IGFueSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDT05GSUdfS1ZNYCBpcyB0aGUgcHJpbWFyeSBvbmUsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSG9sZCBvbi4uLiBJIHJlY2FsbCBgS1ZNX1MzOTBfVUNPTlRST0xgIGFzIGEgc2VwYXJhdGUsIG1heWJlIHBvdGVudGlhbGx5IHJlbGV2YW50LCBjb25maWd1cmF0aW9uIG9wdGlvbi4KCkxldCBtZSB2ZXJpZnk6IHRoZSBjb2RlIHRoYXQgdXNlcyBgX19zZXRfY21tYV9kaXJ0eV9wdGVgIGFwcGVhcnMgdG8gcmVzaWRlIHdpdGhpbiBga3ZtLXMzOTAuY2AsIGBnbWFwLmNgLCBgZGF0LmNgLCBhbmQgYHByaXYuY2AuIFRoZXNlIGZpbGVzIGFyZSwgYXMgSSBleHBlY3RlZCwgY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBhIHN0YW5kYXJkIGRlcGVuZGVuY3kuIExldCYjMzk7cyBjb25maXJtIHRoYXQgd2l0aCBhIHF1aWNrIGxvb2sgaW4gYGFyY2gvczM5MC9rdm0vTWFrZWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm0teSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9NYWtlZmlsZT04PWNjZmxhZ3MteSA6PSAtSXZpcnQva3ZtIC1JYXJjaC9zMzkwL2t2bVxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZS05LVxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZToxMDprdm0teSAmIzQzOz0ga3ZtLXMzOTAubyBpbnRlcmNlcHQubyBpbnRlcnJ1cHQubyBwcml2Lm8gc2lncC5vXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlOjExOmt2bS15ICYjNDM7PSBkaWFnLm8gZ2FjY2Vzcy5vIGd1ZXN0ZGJnLm8gdnNpZS5vIHB2Lm9cbmFyY2gvczM5MC9rdm0vTWFrZWZpbGU6MTI6a3ZtLXkgJiM0Mzs9IGRhdC5vIGdtYXAubyBmYXVsdGluLm9cbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtMTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDMwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBDb25maWd1cmF0aW9uIFJldmlldyoqCgpPa2F5LCBzbyBpdCBzZWVtcyBsaWtlIGBDT05GSUdfS1ZNYCBpcyB0aGUgcHJpbWFyeSwgcGVyaGFwcyBldmVuICpvbmx5KiwgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoIHJpZ2h0IG5vdy4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgYXJlIHBpdm90YWwgaW4gdGhpcyBzcGVjaWZpYyBLVk0vczM5MCBjb250ZXh0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIGFyZWFzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgYXQ6CgoqICAgYGt2bV9zMzkwX3NldF9tZW1fY29udHJvbGAgLSBJIHJlbWVtYmVyIHRoaXMgZGVhbHMgd2l0aCBtZW1vcnkgY29udHJvbCByZWdpc3RlcnMsIGxldCBtZSByZWZyZXNoIG15IGtub3dsZWRnZSBvZiB0aGUgZXhhY3QgbWFuaXB1bGF0aW9ucyB0aGlzIHBlcmZvcm1zLgoqICAgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAgJmFtcDsgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCAtIE9mIGNvdXJzZSwgdGhlIG1pZ3JhdGlvbiBmdW5jdGlvbnMsIGVzc2VudGlhbCBmb3IgbGl2ZSBtaWdyYXRpb24gZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHJlLWV2YWx1YXRlIHRoZWlyIGltcGxlbWVudGF0aW9uIHJlZ2FyZGluZyBzMzkwIGFyY2hpdGVjdHVyZS4KKiAgIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCAtIFJlbGF0ZWQgdG8gQ01NQSAoQ29udHJvbCBNZW1vcnkgTWFuYWdlbWVudCBBcmVhKSwgcHJvYmFibHkgc2V0dGluZyBhbmQgbWFuYWdpbmcgdGhlIENNTUEgYml0cyB0byBkZWZpbmUgd2hpY2ggcGFydCBvZiBtZW1vcnkgY2FuIGJlIGFjY2Vzc2VkIGJ5IHRoZSBndWVzdC4KKiAgIGBkYXRfcGVla19jbW1hYCAmYW1wOyBgZGF0X2dldF9jbW1hYCAtIEZ1bmN0aW9ucyB0byBpbnRlcmFjdCB3aXRoIHRoZSBDTU1BLCBwZWVraW5nIGFuZCBnZXR0aW5nIENNTUEgZGF0YSBhbmQgYWRkcmVzcy4KKiAgIGBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlYCwgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCwgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAgLSBUaGVzZSBHTUFQIChHdWVzdCBNZW1vcnkgQWRkcmVzcyBUcmFuc2xhdGlvbikgZnVuY3Rpb25zIGFyZSBpbXBvcnRhbnQuIENsZWFyaW5nIHlvdW5nIGJpdHMsIG1hcmtpbmcgbWVtb3J5IGRpcnR5IGFuZCBwcm90ZWN0aW5nIHRoZSBBU0NFIChBZGRyZXNzIFNwYWNlIENvbnRyb2wgRWxlbWVudCkgdG9wIGxldmVsIGFyZSBjcml0aWNhbCBvcGVyYXRpb25zLgoqICAgYGhhbmRsZV9zc2tlYCwgYGhhbmRsZV9wZm1mYCwgYGhhbmRsZV9lc3NhYCAtIEhhbmRsaW5nIG9mIHNwZWNpYWwgUzM5MCBpbnN0cnVjdGlvbnMgc3VjaCBhcyBTU0tFIChTZXQgU3RvcmFnZSBLZXkgRXh0ZW5kZWQpLCBQRk0gKFByb2dyYW0gRmV0Y2ggTW9kaWZpY2F0aW9uKSBhbmQgRVNTQSAoRXh0ZW5kZWQgU2VnbWVudCBhbmQgQXJlYSksIHRoZXNlIGFyZSBjcnVjaWFsIGZvciBzZWN1cml0eSBhbmQgYWRkcmVzcyBzcGFjZSBtYW5hZ2VtZW50LgoqICAgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAgLSBUaGUgUFRFIHJlbGF0ZWQgZnVuY3Rpb24sIHJlbGF0ZWQgdG8gc2V0dGluZyBwYWdlIHRhYmxlIGVudHJpZXMgKFBURSkgYXMgdW51c2VkIGluIGd1ZXN0IG1lbW9yeS4KCkJ1dCwgYXJlIHRoZXJlIGFueSBvdGhlciBzdWJ0bGUgY29uZmlncyBsdXJraW5nIGluIHRoZSBzaGFkb3dzPyBMZXQmIzM5O3MgYmUgdGhvcm91Z2guIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBhcmNoL3MzOTAvbW0vTWFrZWZpbGVgIGZpbGUgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IHJlbGV2YW50IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgb3IgaGlkZGVuIHNldHRpbmdzIHRoYXQgbWlnaHQgYmUgcGVydGluZW50IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dtYXBfaGVscGVycy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9tbS9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfUEZBVUxUKVx0XHQmIzQzOz0gcGZhdWx0Lm9cbmFyY2gvczM5MC9tbS9NYWtlZmlsZS0xNC1cbmFyY2gvczM5MC9tbS9NYWtlZmlsZToxNTpvYmotJChzdWJzdCBtLHksJChDT05GSUdfS1ZNKSlcdCYjNDM7PSBnbWFwX2hlbHBlcnMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg5NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgS1ZNL3MzOTAgRm9jdXMgZm9yIFN5emthbGxlcioqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBnbWFwX2hlbHBlcnMub2AgZ2V0cyBidWlsdCBldmVuIHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQuIEdvb2QgdG8ga25vdy4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gdXNlIGBLVk1gIGFzIG91ciBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gZm9jdXMuIFllcCwgYEtWTWAgaXMgaW5kZWVkIHRoZSBtYWluIGNvbmZpZyBmb3IgS1ZNIG9uIHMzOTAsIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gYSBtb3JlIHJlZmluZWQgbGlzdCBvZiBmdW5jdGlvbnMgZm9yIFN5emthbGxlciB0byBwcmlvcml0aXplLiBJJiMzOTt2ZSBnb3Q6IGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgLCBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCwgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCwgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCBgZGF0X3BlZWtfY21tYWAsIGBkYXRfZ2V0X2NtbWFgLCBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLCBgaGFuZGxlX3Nza2VgLCBgaGFuZGxlX3BmbWZgLCBgaGFuZGxlX2Vzc2FgLCBhbmQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAuCgpIb2xkIG9uLCBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAgaXMgc3RhdGljLi4uIFRoYXQgdGhyb3dzIGEgd3JlbmNoIGluIHRoaW5ncy4gSSBzaG91bGQgY2hlY2sgYGFyY2gvczM5MC9rdm0vZ21hcC5jYCB0byBiZSBzdXJlLiBZZXAsIGl0JiMzOTtzIHN0YXRpYy4gU3l6a2FsbGVyIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHRhcmdldCBpdCBkaXJlY3RseSBpZiBpdCBnZXRzIGlubGluZWQsIGJ1dCBpdCYjMzk7cyBzdGlsbCB3b3J0aCBsaXN0aW5nIGJlY2F1c2UgaXQgbWlnaHQgaW5kaXJlY3RseSBsZWFkIHRvIHNvbWV0aGluZyBpbnRlcmVzdGluZy4KCkxldCYjMzk7cyBhbHNvIGNoZWNrIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAuIFl1cCwgdGhhdCYjMzk7cyBzdGF0aWMgdG9vLiBTbywgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCBpcyBleHBvcnRlZC9nbG9iYWwsIHRoYXQmIzM5O3MgZ29vZC4gQW5kIGBkYXRfcGVla19jbW1hYCBhbmQgYGRhdF9nZXRfY21tYWAgYXJlIGdsb2JhbCBhcyB3ZWxsLiBPa2F5LCB0aGF0JiMzOTtzIGhlbHBmdWwuIGBoYW5kbGVfc3NrZWAsIGBoYW5kbGVfcGZtZmAsIGFuZCBgaGFuZGxlX2Vzc2FgIGFyZSBzdGF0aWMuIEkgd2lsbCBsb29rIGluIGBhcmNoL3MzOTAva3ZtL3ByaXYuY2AgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBvdGhlciBoZWxwZnVsIGluZm8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV9zc2tlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmM9Mjg5PXN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTMyMi0jZGVmaW5lIFNTS0VfTUIgMHgxXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzozMjM6c3RhdGljIGludCBoYW5kbGVfc3NrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0zMjQte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTk1OD1pbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05ODAtXHRjYXNlIDB4MmI6XG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo5ODE6XHRcdHJldHVybiBoYW5kbGVfc3NrZSh2Y3B1KTtcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk4Mi1cdGNhc2UgMHgyYzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwOTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgSW5zdHJ1Y3Rpb24gSGFuZGxlciBTdHJhdGVneSBmb3IgU3RhdGljIEFuYWx5c2lzIGluIFN5emthbGxlcioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgaW5zdHJ1Y3Rpb25zLCBzcGVjaWZpY2FsbHkgZnJvbSBhIHBlcnNwZWN0aXZlIHdoZXJlIHdlJiMzOTtyZSBhaW1pbmcgdG8gbWF4aW1pemUgU3l6a2FsbGVyJiMzOTtzIGVmZmVjdGl2ZW5lc3Mgd2l0aCBzdGF0aWMgYW5hbHlzaXMuIFRoZSBjb3JlIGlkZWEgaXMgdGhhdCB0aGVzZSBpbnN0cnVjdGlvbiBoYW5kbGVycyBhcmUgZXNzZW50aWFsbHkgcmVjaXBlcyBmb3IgdGhlIGZ1enplci4gTm93LCBJJiMzOTttIG5vdGluZyB0aGF0IGlmIHRoZXNlIGhhbmRsZXJzIGFyZSBzdGF0aWNhbGx5IGRlZmluZWQsIGl0IHByZXNlbnRzIGEgdmVyeSBzcGVjaWZpYyBvcHBvcnR1bml0eS4gSXQgbWVhbnMgU3l6a2FsbGVyIGNhbiwgaW4gYSBzZW5zZSwgKmZvY3VzKiBvbiB0aGVtIG1vcmUgZWZmZWN0aXZlbHksIGFsbW9zdCB0cmVhdCB0aGVtIGFzIHByaW1hcnkgdGFyZ2V0cyBmb3IgZXhwbG9yYXRpb24sICphcyBsb25nIGFzKiB0aGV5JiMzOTtyZSBub3QgaW5saW5lZC4gSW5saW5pbmcgbWVzc2VzIHRoaW5ncyB1cCwgbWFrZXMgdGhlbSBsZXNzIGRpc2NyZXRlIGFuZCBhY2Nlc3NpYmxlLiBUaGF0JiMzOTtzIGEga2V5IGNvbnNpZGVyYXRpb24uCgpTbywgdGhlIGZvY3VzIHNoaWZ0cyB0byBlbnN1cmluZyBoYW5kbGVycyBhcmVuJiMzOTt0IGlubGluZWQsIGFzIHdlbGwgYXMgY2hlY2tpbmcgdGhlIGBoYW5kbGVfcGZtZmAgaGFuZGxlciBzcGVjaWZpY2FsbHksIGFzIGFuIGV4YW1wbGUsIHNpbmNlIHRoYXQgaGFuZGxlciBpcyBjcml0aWNhbCBmb3IgcGFnZS1mYXVsdCBtaXRpZ2F0aW9uIGFuZCBoYW5kbGluZy4gSSBuZWVkIHRvIGRpZyBpbnRvIGBoYW5kbGVfcGZtZmAgbm93IHRvIHNlZSB3aGF0IHdlIGNhbiBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX3BmbWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ByaXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ByaXYuYz0xMDE2PXN0YXRpYyBpbnQgaGFuZGxlX2Vwc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEwNDQtXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMDQ1OnN0YXRpYyBpbnQgaGFuZGxlX3BmbWYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTA0Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTI4Mj1pbnQga3ZtX3MzOTBfaGFuZGxlX2I5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjkzLVx0Y2FzZSAweGFmOlxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTI5NDpcdFx0cmV0dXJuIGhhbmRsZV9wZm1mKHZjcHUpO1xuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5NS1cdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjU3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBoYW5kbGVfZXNzYWAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgaW50byBpdC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyB6ZXJvaW5nIGluIG9uIHRoaXMgYGhhbmRsZV9lc3NhYCBmdW5jdGlvbiBvciBtb2R1bGUsIHdoZXJldmVyIGl0IHJlc2lkZXMgaW4gdGhlIGNvZGViYXNlLiBNeSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBpcyB0aGUgY2VudHJhbCBwb2ludCBmb3Igc29tZSBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gdGhpcyAmIzM0O0VTU0EmIzM0OyB0aGluZy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIHNvbWUgaHlwb3RoZXNlcy4gSXMgaXQgYW4gZW5kcG9pbnQgaGFuZGxlcj8gQSBwcm9jZXNzaW5nIHBpcGVsaW5lIGVudHJ5PyBPciBhIGxvd2VyLWxldmVsIHV0aWxpdHk/IEtub3dpbmcgdGhlIG5hbWluZyBjb252ZW50aW9ucyBvZiB0aGlzIHByb2plY3Qgd2lsbCBndWlkZSBteSBpbml0aWFsIGFzc3VtcHRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGNvZGUgaW1tZWRpYXRlbHkgdG8gc2VlIHdoYXQgaXQgaXMgYWN0dWFsbHkgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV9lc3NhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmM9MTE5MD1zdGF0aWMgdm9pZCBfZXNzYV9jbGVhcl9jYnJsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyAqY2JybCwgaW50IGxlbilcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjE1LVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTIxNjpzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyMTcte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTEyODI9aW50IGt2bV9zMzkwX2hhbmRsZV9iOShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5MS1cdGNhc2UgMHhhYjpcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEyOTI6XHRcdHJldHVybiBoYW5kbGVfZXNzYSh2Y3B1KTtcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTMtXHRjYXNlIDB4YWY6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTM3CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipBc3Nlc3NtZW50IG9mIEZvY3VzIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCB0aGVzZSBsb29rIGxpa2UgcHJvbWlzaW5nIGZvY3VzIGZ1bmN0aW9ucy4gU2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0IHRvIG5hcnJvd2luZyBkb3duIHRoZSBhcmVhIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJdCYjMzk7cyBhIGNsZWFuIHdheSB0byBkaXJlY3QgdGhlIGV4YW1pbmF0aW9uLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLiBJIHRoaW5rIGEgZ29vZCBuZXh0IHN0ZXAgd291bGQgYmUgdG8gZHJpbGwgZG93biBhbmQgY2hlY2sgb3V0IGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgLiBUaGF0IGZ1bmN0aW9uJiMzOTtzIGxpa2VseSB0byByZXZlYWwgc29tZSBpbnRlcmVzdGluZyBkZXRhaWxzIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCB3b3VsZCBvZmZlciB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG93YXJkIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfc2V0X21lbV9jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz05NzQ9c3RhdGljIGludCBrdm1fczM5MF9nZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy05OTItXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6OTkzOnN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy05OTQte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMDEwPXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDE1LVx0Y2FzZSBLVk1fUzM5MF9WTV9NRU1fQ1RSTDpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMDE2Olx0XHRyZXQgPSBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woa3ZtLCBhdHRyKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDE3LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MTQKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNL3MzOTAgTWlncmF0aW9uIENvZGUqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgY2x1ZSBpcyB0aGF0IHRoaXMgY29kZSBpcyAqc3RhdGljKiBidXQgc29tZWhvdyBiZWluZyBpbnZva2VkIHZpYSBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyBzb21lIHNvcnQgb2YgY29uZmlndXJhdGlvbiBjaGFuZ2Ugb3IgYXR0cmlidXRlIHNldHRpbmcgdGhhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoaXMgYmVoYXZpb3IsIHdoaWNoIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kLiBPZnRlbiBzdGF0aWMgZnVuY3Rpb25zIGFyZSBjb250YWluZWQgd2l0aGluIHRoZWlyIGZpbGUgYW5kIHRoaXMgaW1wbGllcyBpdCBpcyBvbmx5IHVzZWQgbG9jYWxseS4KCk15IG5leHQgbGluZSBvZiB0aG91Z2h0LCBiZWluZyB0aGF0IHRoaXMgaXMgYWJvdXQgbWlncmF0aW9uLCBpcyB0byB6ZXJvIGluIG9uIHRoZSBzdGFydCBhbmQgc3RvcCBwcm9jZXNzZXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAgYW5kIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAuIFRob3NlIHdpbGwgbGlrZWx5IGJlIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMsIG9yIGF0IGxlYXN0IHRoZSBrZXkgZnVuY3Rpb25zIGNvb3JkaW5hdGluZyB0aGUgd2hvbGUgb3BlcmF0aW9uLiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIGFuZCBob3cgdGhlIHN0YXRpYyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWlncmF0aW9uIGZsb3cg4oCTIGlzIGl0IGEgc2V0dXAgc3RlcCwgYSBjbGVhbnVwIHJvdXRpbmUsIG9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIHRvIHRoZSBtaWdyYXRpb24gcHJvY2VzcyBpdHNlbGY/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0JiMzOTtzIGFmZmVjdGluZyBkdXJpbmcgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgbWlncmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyMDg9c3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyMjAtICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTIyMTpzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIyMi17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNTEtICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyBhbmRcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjUyOiAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbi5cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjUzLSAqL1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMjY1PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNzItXHRjYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVDpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjczOlx0XHRyZXMgPSBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oa3ZtKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjc0LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NDgKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIE1pZ3JhdGlvbiBJc3N1ZSoqCgpBbHJpZ2h0LCB0aGlzIGxvb2tzIGxpa2UgaXQmIzM5O3MgY29taW5nIGZyb20gYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLiBPa2F5LCBzbyBpdCYjMzk7cyBhICpzdGF0aWMqIGNhbGwsIHdoaWNoIHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBhIHRhcmdldGVkIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBmb3IgbWlncmF0aW9uIHNldHVwIG9uIHRoaXMgUzM5MCBhcmNoaXRlY3R1cmUuIE1ha2VzIHNlbnNlLgoKSSBuZWVkIHRvIGRpdmUgZGVlcGVyLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXIgLSBsZXQmIzM5O3MgaW1tZWRpYXRlbHkgbG9vayBpbnRvIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBjcnVjaWFsIGJpdHMgcmVsYXRlZCB0byB0aGUgQ2hhbm5lbCBNYW5hZ2VtZW50IE1lbW9yeSBBcmVhIChDTU1BKSwgd2hpY2ggYXJlIGFic29sdXRlbHkgZnVuZGFtZW50YWwgZm9yIGEgc21vb3RoIG1pZ3JhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIGhhcHBlbnMsIHdoZXJlIHRoZSBWTSBpcyBjb25maWd1cmVkIHRvIGJlIG1vdmVkIC0gb3IgY29uZmlndXJlZCB0byBiZSByZWFkeSB0byBiZSBtb3ZlZC4gSSYjMzk7bSBob3BpbmcgdGhpcyBpcyB3aGVyZSB0aGUgZXJyb3IgbGllcy4gSSYjMzk7bGwgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3NldF9jbW1hX2JpdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIyNTc9c3RhdGljIGludCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjMxMy0gKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMzE0OnN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjMxNS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGt2bV9zMzkwX2NtbWFfbG9nICphcmdzKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yODkyPWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjk4NC1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mjk4NTpcdFx0ciA9IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTg2LVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIwOQoJCQkJCQkJb3V0cHV0OiAyODcKCQkJCQkJCXRob3VnaHRzOiAxNjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0vczM5MCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBga3ZtX2FyY2hfdm1faW9jdGxgIGZ1bmN0aW9uLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGlvY3Rscy4gVGhhdCBuYXJyb3dzIHRoZSBzY29wZSBjb25zaWRlcmFibHkuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgcmVsYXRlZCB0byBDTU1BLCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiwgYW5kIFZNIG1pZ3JhdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4KCkZpcnN0LCBJIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgZGlyZWN0bHkgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMgdG8gbG9vayBhdCBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgLCBidXQgdGhhdCYjMzk7cyBhIGJpdCB0b28gZ2VuZXJpYy4gSXQmIzM5O3MgYmV0dGVyIHRvIHplcm8gaW4gb24gbW9yZSB0YXJnZXRlZCBlbnRyeSBwb2ludHMgZm9yIHRoZSBmdXp6ZXIuIFNvLCBJIGxvb2tlZCBmb3IgdGhlIGRpcmVjdCBmdW5jdGlvbnMuCgpJIGNhbiBtYWtlIGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgIGEgY2VudHJhbCBzdGFydGluZyBwb2ludCwgZXNwZWNpYWxseSBzaW5jZSBzeXprYWxsZXIgaXMgYmV0dGVyIHdpdGggZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBpbmxpbmVkLCBhbmQgdGhpcyBvbmUgaXMgbGlrZWx5IHRvIGJlIGxhcmdlIGVub3VnaCB0byBhdm9pZCBiZWluZyBpbmxpbmVkLiBJIGFtIGNoZWNraW5nIGlmIGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgIGlzIGlubGluZWQgYXMgaXQgaXMgbW9yZSB0aGFuIDEwMCBsaW5lcy4gU2FtZSB3aXRoIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gIGFuZCBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLgoKVGhlIGZ1bGwgbGlzdCBJJiMzOTt2ZSBjb21lIHVwIHdpdGggaXM6IGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgLCBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCwgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCwgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCBgZGF0X3BlZWtfY21tYWAsIGBkYXRfZ2V0X2NtbWFgLCBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgLCBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYCwgYGhhbmRsZV9zc2tlYCwgYGhhbmRsZV9wZm1mYCwgYGhhbmRsZV9lc3NhYCwgYW5kIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLgoKSSYjMzk7bSBtYWtpbmcgc3VyZSB0byBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEluIHRoaXMgY2FzZSwgYEtWTWAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnLgoKTXkgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzIEtWTS9zMzkwIGluIGFyZWFzIHRoYXQgZGVhbCB3aXRoIENNTUEsIHBhZ2UgdGFibGVzLCBhbmQgVk0gbWlncmF0aW9uLiBUaGVzZSBhcmUgYWxsIGNyaXRpY2FsIGFyZWFzLiBXZSBuZWVkIHRvIGZ1enogdGhlc2UgZnVuY3Rpb25zIHRvIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIHdvcmtpbmcgY29ycmVjdGx5LiBBbnkgZmxhd3Mgb3IgcmVncmVzc2lvbiB0aGF0IG9jY3VyIGhlcmUgY291bGQgY2F1c2Ugc2V2ZXJlIGlzc3VlcyBpbiB2aXJ0dWFsaXphdGlvbi4gU28sIGZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIHNob3VsZCBiZSBoaWdoIHByaW9yaXR5LgoKSSBhbHNvIGNvbnNpZGVyZWQgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAsIHdoaWNoICppcyogc3RhdGljLCBidXQgc3l6a2FsbGVyIGhhbmRsZXMgc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGUgc3ltYm9sIHRhYmxlLCBzbyBJJiMzOTtsbCBpbmNsdWRlIGl0LgoKSSBkaWQgYSBxdWljayByZXZpZXcgb2YgdGhlIG1vZGlmaWVkIGZpbGVzIGFuZCBmdW5jdGlvbnMuIEkgYW0gdHJ5aW5nIHRvIGZvY3VzIHRoZSBmdXp6aW5nIG9uIHRoZSBjaGFuZ2VkIGZ1bmN0aW9ucywgd2hpY2ggYXJlIG1vc3QgbGlrZWx5IHRvIGludHJvZHVjZSBhIGJ1ZyBvciBleGhpYml0IHJlZ3Jlc3Npb24uIEluIG9yZGVyIHRvIGF2b2lkIHBvdGVudGlhbCBmYWxzZSBwb3NpdGl2ZXMgZnJvbSB2ZXJ5IGZyZXF1ZW50bHkgYWNjZXNzZWQgY29kZSwgSSBhbSBza2lwcGluZyBgc2V0X3B0ZWAgYW5kIGBzZXRfcHRlc2AuCkkgd2lsbCBmb2N1cyBvbjogYGRhdF9wZWVrX2NtbWFgLCBgZGF0X2dldF9jbW1hYCwgYGdtYXBfY2xlYXJfeW91bmdfY3JzdGVgLCBgX19zZXRfY21tYV9kaXJ0eV9wdGVgLCBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgLCBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYCwgYGt2bV9zMzkwX3NldF9tZW1fY29udHJvbGAsIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gLCBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIGBoYW5kbGVfc3NrZWAsIGBoYW5kbGVfcGZtZmAsIGBoYW5kbGVfZXNzYWAsIGFuZCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYC4KCkkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBjb3ZlcnMgdGhlIG1vc3QgY3JpdGljYWwgcGFydHMgb2YgdGhpcyBwYXRjaCwgc28gSSYjMzk7bGwgc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxNjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGF0X3BlZWtfY21tYSYjMzQ7LAogICAgJiMzNDtkYXRfZ2V0X2NtbWEmIzM0OywKICAgICYjMzQ7Z21hcF9jbGVhcl95b3VuZ19jcnN0ZSYjMzQ7LAogICAgJiMzNDtfX3NldF9jbW1hX2RpcnR5X3B0ZSYjMzQ7LAogICAgJiMzNDtnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eSYjMzQ7LAogICAgJiMzNDtnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfc2V0X21lbV9jb250cm9sJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9zZXRfY21tYV9iaXRzJiMzNDssCiAgICAmIzM0O2hhbmRsZV9zc2tlJiMzNDssCiAgICAmIzM0O2hhbmRsZV9wZm1mJiMzNDssCiAgICAmIzM0O2hhbmRsZV9lc3NhJiMzNDssCiAgICAmIzM0O2dtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIENvbGxhYm9yYXRpdmUgTWVtb3J5IE1hbmFnZW1lbnQgQXNzaXN0IChDTU1BKSwgcGFnZSB0YWJsZSB1cGRhdGVzLCBhbmQgVk0gbWlncmF0aW9uLiBJdCBmaXhlcyBidWdzIGluIENNTUEgc3RhdGUgaGFuZGxpbmcsIGRpcnR5IHBhZ2UgdHJhY2tpbmcsIGFuZCBtZW1vcnkgY29udHJvbCBpb2N0bHMuIFRoZXNlIGFyZSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBLVk0gY29yZSBsb2dpYyBhbmQgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zIGluIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXRfcGVla19jbW1hJiMzNDssCiAgICAmIzM0O2RhdF9nZXRfY21tYSYjMzQ7LAogICAgJiMzNDtnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlJiMzNDssCiAgICAmIzM0O19fc2V0X2NtbWFfZGlydHlfcHRlJiMzNDssCiAgICAmIzM0O2dtYXBfc2V0X2NtbWFfYWxsX2RpcnR5JiMzNDssCiAgICAmIzM0O2dtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2wmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3NldF9jbW1hX2JpdHMmIzM0OywKICAgICYjMzQ7aGFuZGxlX3Nza2UmIzM0OywKICAgICYjMzQ7aGFuZGxlX3BmbWYmIzM0OywKICAgICYjMzQ7aGFuZGxlX2Vzc2EmIzM0OywKICAgICYjMzQ7Z21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgaGFuZGxpbmcgb2YgQ29sbGFib3JhdGl2ZSBNZW1vcnkgTWFuYWdlbWVudCBBc3Npc3QgKENNTUEpLCBwYWdlIHRhYmxlIHVwZGF0ZXMsIGFuZCBWTSBtaWdyYXRpb24uIEl0IGZpeGVzIGJ1Z3MgaW4gQ01NQSBzdGF0ZSBoYW5kbGluZywgZGlydHkgcGFnZSB0cmFja2luZywgYW5kIG1lbW9yeSBjb250cm9sIGlvY3Rscy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIEtWTSBjb3JlIGxvZ2ljIGFuZCBpbnN0cnVjdGlvbiBoYW5kbGVycywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gZmVhdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyNzo0MS42NjEwMDI2NDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA4MTkxNjg1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF0X3BlZWtfY21tYVwiLFxuICAgIFwiZGF0X2dldF9jbW1hXCIsXG4gICAgXCJnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlXCIsXG4gICAgXCJfX3NldF9jbW1hX2RpcnR5X3B0ZVwiLFxuICAgIFwiZ21hcF9zZXRfY21tYV9hbGxfZGlydHlcIixcbiAgICBcImdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbFwiLFxuICAgIFwia3ZtX3MzOTBfc2V0X21lbV9jb250cm9sXCIsXG4gICAgXCJrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25cIixcbiAgICBcImt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uXCIsXG4gICAgXCJrdm1fczM5MF9zZXRfY21tYV9iaXRzXCIsXG4gICAgXCJoYW5kbGVfc3NrZVwiLFxuICAgIFwiaGFuZGxlX3BmbWZcIixcbiAgICBcImhhbmRsZV9lc3NhXCIsXG4gICAgXCJnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIENvbGxhYm9yYXRpdmUgTWVtb3J5IE1hbmFnZW1lbnQgQXNzaXN0IChDTU1BKSwgcGFnZSB0YWJsZSB1cGRhdGVzLCBhbmQgVk0gbWlncmF0aW9uLiBJdCBmaXhlcyBidWdzIGluIENNTUEgc3RhdGUgaGFuZGxpbmcsIGRpcnR5IHBhZ2UgdHJhY2tpbmcsIGFuZCBtZW1vcnkgY29udHJvbCBpb2N0bHMuIFRoZXNlIGFyZSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBLVk0gY29yZSBsb2dpYyBhbmQgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zIGluIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyNzo0MS42NjEwMDg3MzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTk2NTA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAyMzQzOWJkZGFhNDE2MWVhNzcxYzgwNjI2ODY1ZDZlYzljYTRlYTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjIgMTY6Mjc6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5pbmRleCAyYzZjZWU4MjQxZTA0NC4uNDc0MGM3NTY0OWViYjUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5AQCAtOTgwLDYgKzk4MCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG1kKHBtZF90ICpwbWRwLCBwbWRfdCBwbWQpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxcbiB7XFxuK1xcdGlmIChwdGVfcHJlc2VudChwdGUpKVxcbitcXHRcXHRwdGUgPSBjbGVhcl9wdGVfYml0KHB0ZSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XFxuIFxcdFdSSVRFX09OQ0UoKnB0ZXAsIHB0ZSk7XFxuIH1cXG4gXFxuQEAgLTEzMzIsOCArMTMzNCw2IEBAIHBncHJvdF90IHBncHJvdF93cml0ZWNvbWJpbmUocGdwcm90X3QgcHJvdCk7XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHQgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBucilcXG4ge1xcbi1cXHRpZiAocHRlX3ByZXNlbnQoZW50cnkpKVxcbi1cXHRcXHRlbnRyeSA9IGNsZWFyX3B0ZV9iaXQoZW50cnksIF9fcGdwcm90KF9QQUdFX1VOVVNFRCkpO1xcbiBcXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBlbnRyeSwgbnIpO1xcbiBcXHRmb3IgKDs7KSB7XFxuIFxcdFxcdHNldF9wdGUocHRlcCwgZW50cnkpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xcbmluZGV4IGE0ZmU2NjRmNjVlZTE1Li41ZjE5NjBlYzk4MmQwNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xcbkBAIC0xMjA5LDcgKzEyMDksNyBAQCBpbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKVxcbiBcXHRpbnQgcmM7XFxuIFxcbiBcXHRyYyA9IF9kYXRfd2Fsa19nZm5fcmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgKmNvdW50LCBhc2NlLCBcXHUwMDI2b3BzLCBEQVRfV0FMS19ERUZBVUxULCBcXHUwMDI2c3RhdGUpO1xcbi1cXHQqY291bnQgPSBzdGF0ZS5lbmQgLSBzdGFydDtcXG4rXFx0KmNvdW50ID0gc3RhdGUuZW5kIFxcdTAwM2U9IHN0YXJ0ID8gc3RhdGUuZW5kIC0gc3RhcnQgOiAwO1xcbiBcXHQvKiBSZXR1cm4gc3VjY2VzcyBpZiBhdCBsZWFzdCBvbmUgdmFsdWUgd2FzIHNhdmVkLCBvdGhlcndpc2UgYW4gZXJyb3IuICovXFxuIFxcdHJldHVybiAocmMgPT0gLUVGQVVMVCBcXHUwMDI2XFx1MDAyNiAqY291bnQgXFx1MDAzZSAwKSA/IDAgOiByYztcXG4gfVxcbkBAIC0xMjUzLDYgKzEyNTMsOSBAQCBpbnQgZGF0X2dldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzLFxcbiBcXHR9O1xcbiBcXG4gXFx0X2RhdF93YWxrX2dmbl9yYW5nZSgqc3RhcnQsIGFzY2VfZW5kKGFzY2UpLCBhc2NlLCBcXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsIFxcdTAwMjZzdGF0ZSk7XFxuK1xcdC8qIElmIG5vIGRpcnR5IHBhZ2VzIHdlcmUgZm91bmQsIHdyYXAgYXJvdW5kIGFuZCBjb250aW51ZSBzZWFyY2hpbmcgKi9cXG4rXFx0aWYgKCpzdGFydCBcXHUwMDI2XFx1MDAyNiBzdGF0ZS5zdGFydCA9PSAtMSlcXG4rXFx0XFx0X2RhdF93YWxrX2dmbl9yYW5nZSgwLCAqc3RhcnQsIGFzY2UsIFxcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgXFx1MDAyNnN0YXRlKTtcXG4gXFxuIFxcdGlmIChzdGF0ZS5zdGFydCA9PSAtMSkge1xcbiBcXHRcXHQqY291bnQgPSAwO1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2dtYXAuYyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jXFxuaW5kZXggNzc4MjlmNzg3ZGM3ODEuLjVlNzU0ODViNTNmOWZkIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vZ21hcC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9nbWFwLmNcXG5AQCAtMzMyLDcgKzMzMiw3IEBAIHN0YXRpYyBsb25nIGdtYXBfY2xlYXJfeW91bmdfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBlbmQsIHN0XFxuIFxcdFxcdG5ldy5oLmkgPSAxO1xcbiBcXHRcXHRuZXcucy5mYzEueSA9IDA7XFxuIFxcdFxcdG5ldy5zLmZjMS5wcmVmaXhfbm90aWYgPSAwO1xcbi1cXHRcXHRpZiAobmV3LnMuZmMxLmQgfHwgIW5ldy5oLnApXFxuK1xcdFxcdGlmICgobmV3LnMuZmMxLmQgfHwgIW5ldy5oLnApIFxcdTAwMjZcXHUwMDI2ICFuZXcucy5mYzEucylcXG4gXFx0XFx0XFx0Zm9saW9fc2V0X2RpcnR5KHBoeXNfdG9fZm9saW8oY3JzdGVfb3JpZ2luX2xhcmdlKGNyc3RlKSkpO1xcbiBcXHRcXHRuZXcucy5mYzEuZCA9IDA7XFxuIFxcdFxcdG5ldy5oLnAgPSAxO1xcbkBAIC0xMTAwLDcgKzExMDAsMTMgQEAgaW50IGdtYXBfcHJvdGVjdF9ybWFwKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqc2csIGdmbl90IHBfZ2ZcXG4gXFxuIHN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuIHtcXG4tXFx0X19hdG9taWM2NF9vcihQR1NURV9DTU1BX0RfQklULCBcXHUwMDI2cGdzdGVfb2YocHRlcCktXFx1MDAzZXZhbCk7XFxuK1xcdHVuaW9uIHBnc3RlIHBnc3RlO1xcbitcXG4rXFx0cGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcXG4rXFx0cGdzdGUuY21tYV9kID0gMTtcXG4rXFx0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XFxuK1xcdGF0b21pYzY0X2luYyh3YWxrLVxcdTAwM2Vwcml2KTtcXG4rXFxuIFxcdGlmIChuZWVkX3Jlc2NoZWQoKSlcXG4gXFx0XFx0cmV0dXJuIG5leHQ7XFxuIFxcdHJldHVybiAwO1xcbkBAIC0xMTE0LDcgKzExMjAsOCBAQCB2b2lkIGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5KHN0cnVjdCBnbWFwICpnbWFwKVxcbiBcXHRkbyB7XFxuIFxcdFxcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFxcdTAwMjZnbWFwLVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKVxcbiBcXHRcXHRcXHRnZm4gPSBfZGF0X3dhbGtfZ2ZuX3JhbmdlKGdmbiwgYXNjZV9lbmQoZ21hcC1cXHUwMDNlYXNjZSksIGdtYXAtXFx1MDAzZWFzY2UsIFxcdTAwMjZvcHMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgREFUX1dBTEtfSUdOX0hPTEVTLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBEQVRfV0FMS19JR05fSE9MRVMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmdtYXAtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTtcXG4gXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdH0gd2hpbGUgKGdmbik7XFxuIH1cXG5AQCAtMTI4Nyw3ICsxMjk0LDcgQEAgc3RhdGljIGludCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFcXG4gXFx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi9cXG4gXFx0c21wX3JtYigpO1xcbiBcXG4tXFx0cmMgPSBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZXMoc2ctXFx1MDAzZWt2bSwgY29udGV4dC5mLCBhc2NlLnJzdG8sIGFzY2UuZHQgKyAxLCBmYWxzZSk7XFxuK1xcdHJjID0ga3ZtX3MzOTBfZ2V0X2d1ZXN0X3BhZ2VzKHNnLVxcdTAwM2Vrdm0sIGNvbnRleHQuZiwgYXNjZS5yc3RvLCBhc2NlLnRsICsgMSwgZmFsc2UpO1xcbiBcXHRpZiAocmMgXFx1MDAzZSAwKVxcbiBcXHRcXHRyYyA9IC1FRkFVTFQ7XFxuIFxcdGlmICghcmMpXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbmluZGV4IGRjOWM3NDUxZmU5Nzk0Li5iZGQyMjkyY2ZkYzc2OSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcXG5AQCAtOTk0LDYgKzk5NCw4IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0XFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4rXFxuIFxcdHN3aXRjaCAoYXR0ci1cXHUwMDNlYXR0cikge1xcbiBcXHRjYXNlIEtWTV9TMzkwX1ZNX01FTV9FTkFCTEVfQ01NQTpcXG4gXFx0XFx0cmV0ID0gLUVOWElPO1xcbkBAIC0xMDAxLDcgKzEwMDMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdFZNX0VWRU5UKGt2bSwgMywgXFxcIiVzXFxcIiwgXFxcIkVOQUJMRTogQ01NQSBzdXBwb3J0XFxcIik7XFxuLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdGlmIChrdm0tXFx1MDAzZWNyZWF0ZWRfdmNwdXMpXFxuIFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4gXFx0XFx0ZWxzZSB7XFxuQEAgLTEwMTAsNyArMTAxMSw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0XFxuIFxcdFxcdFxcdGt2bS1cXHUwMDNlYXJjaC51c2VfcGZtZmkgPSAwO1xcbiBcXHRcXHRcXHRyZXQgPSAwO1xcbiBcXHRcXHR9XFxuLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfVk1fTUVNX0NMUl9DTU1BOiB7XFxuIFxcdFxcdGdmbl90IHN0YXJ0X2dmbiA9IDA7XFxuQEAgLTEwMjQsNyArMTAyNCw4IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0XFxuIFxcbiBcXHRcXHRWTV9FVkVOVChrdm0sIDMsIFxcXCIlc1xcXCIsIFxcXCJSRVNFVDogQ01NQSBzdGF0ZXNcXFwiKTtcXG4gXFx0XFx0ZG8ge1xcbi1cXHRcXHRcXHRzdGFydF9nZm4gPSBkYXRfcmVzZXRfY21tYShrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZSwgc3RhcnRfZ2ZuKTtcXG4rXFx0XFx0XFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spXFxuK1xcdFxcdFxcdFxcdHN0YXJ0X2dmbiA9IGRhdF9yZXNldF9jbW1hKGt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBzdGFydF9nZm4pO1xcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0XFx0fSB3aGlsZSAoc3RhcnRfZ2ZuKTtcXG4gXFx0XFx0cmV0ID0gMDtcXG5AQCAtMTA0Miw4ICsxMDQzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRcXG4gXFx0XFx0aWYgKGdldF91c2VyKG5ld19saW1pdCwgKHU2NCBfX3VzZXIgKilhdHRyLVxcdTAwM2VhZGRyKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbi1cXHRcXHRndWFyZChtdXRleCkoXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuLVxcbiBcXHRcXHRuZXdfbGltaXQgPSBBTElHTihuZXdfbGltaXQsIEhQQUdFX1NJWkUpO1xcbiBcXHRcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLm1lbV9saW1pdCAhPSBLVk1fUzM5MF9OT19NRU1fTElNSVQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIG5ld19saW1pdCBcXHUwMDNlIGt2bS1cXHUwMDNlYXJjaC5tZW1fbGltaXQpXFxuQEAgLTEyMjMsNyArMTIyMiw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptcztcXG4gXFx0c3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHM7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcmFtX3BhZ2VzID0gMDtcXG4gXFx0aW50IGJrdDtcXG4gXFxuIFxcdC8qIG1pZ3JhdGlvbiBtb2RlIGFscmVhZHkgZW5hYmxlZCAqL1xcbkBAIC0xMjQwLDEyICsxMjM4LDExIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0a3ZtX2Zvcl9lYWNoX21lbXNsb3QobXMsIGJrdCwgc2xvdHMpIHtcXG4gXFx0XFx0aWYgKCFtcy1cXHUwMDNlZGlydHlfYml0bWFwKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0cmFtX3BhZ2VzICs9IG1zLVxcdTAwM2VucGFnZXM7XFxuIFxcdH1cXG4gXFx0LyogbWFyayBhbGwgdGhlIHBhZ2VzIGFzIGRpcnR5ICovXFxuK1xcdGF0b21pYzY0X3NldChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMsIDApO1xcbiBcXHRnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShrdm0tXFx1MDAzZWFyY2guZ21hcCk7XFxuLVxcdGF0b21pYzY0X3NldChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMsIHJhbV9wYWdlcyk7XFxuLVxcdGt2bS1cXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSA9IDE7XFxuK1xcdFdSSVRFX09OQ0Uoa3ZtLVxcdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlLCAxKTtcXG4gXFx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RBUlRfTUlHUkFUSU9OKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTI1OSw3ICsxMjU2LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdC8qIG1pZ3JhdGlvbiBtb2RlIGFscmVhZHkgZGlzYWJsZWQgKi9cXG4gXFx0aWYgKCFrdm0tXFx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUpXFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXHRrdm0tXFx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgPSAwO1xcbitcXHRXUklURV9PTkNFKGt2bS1cXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSwgMCk7XFxuIFxcdGlmIChrdm0tXFx1MDAzZWFyY2gudXNlX2NtbWEpXFxuIFxcdFxcdGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoa3ZtLCBLVk1fUkVRX1NUT1BfTUlHUkFUSU9OKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTIzMTcsOCArMjMxNCw4IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXFxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGt2bV9zMzkwX2NtbWFfbG9nICphcmdzKVxcbiB7XFxuLVxcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jO1xcbi1cXHR1OCAqYml0cyA9IE5VTEw7XFxuK1xcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcXG4rXFx0dTggKmJpdHMgX19mcmVlKGt2ZnJlZSkgPSBOVUxMO1xcbiBcXHRpbnQgciA9IDA7XFxuIFxcbiBcXHRpZiAoIWt2bS1cXHUwMDNlYXJjaC51c2VfY21tYSlcXG5AQCAtMjMzOCwxOCArMjMzNSwxNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0Yml0cyA9IHZtYWxsb2MoYXJyYXlfc2l6ZShzaXplb2YoKmJpdHMpLCBhcmdzLVxcdTAwM2Vjb3VudCkpO1xcbiBcXHRpZiAoIWJpdHMpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdHIgPSBjb3B5X2Zyb21fdXNlcihiaXRzLCAodm9pZCBfX3VzZXIgKilhcmdzLVxcdTAwM2V2YWx1ZXMsIGFyZ3MtXFx1MDAzZWNvdW50KTtcXG4tXFx0aWYgKHIpIHtcXG4tXFx0XFx0ciA9IC1FRkFVTFQ7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuK1xcdGlmIChyKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuIFxcdGRvIHtcXG4gXFx0XFx0ciA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XFxuIFxcdFxcdGlmIChyKVxcbi1cXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0cmV0dXJuIHI7XFxuIFxcdFxcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKSB7XFxuIFxcdFxcdFxcdHIgPSBkYXRfc2V0X2NtbWFfYml0cyhtYywga3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2UsIGFyZ3MtXFx1MDAzZXN0YXJ0X2dmbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgYXJncy1cXHUwMDNlY291bnQsIGFyZ3MtXFx1MDAzZW1hc2ssIGJpdHMpO1xcbkBAIC0yMzU3LDkgKzIzNTIsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHR9IHdoaWxlIChyID09IC1FTk9NRU0pO1xcbiBcXG4gXFx0c2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlZmxhZ3MpO1xcbi1vdXQ6XFxuLVxcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcXG4tXFx0dmZyZWUoYml0cyk7XFxuK1xcbiBcXHRyZXR1cm4gcjtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbmluZGV4IDQ0N2VjN2VkNDIzZGM0Li5hZDBkZGM0MzNhNzNjMyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXFxuQEAgLTM2Niw3ICszNjYsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9zc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0aWYgKHJjIFxcdTAwM2UgMSlcXG4gXFx0XFx0XFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fQUREUkVTU0lORyk7XFxuIFxcdFxcdGlmIChyYyA9PSAtRU5PTUVNKSB7XFxuLVxcdFxcdFxcdGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cCh2Y3B1LVxcdTAwM2VhcmNoLm1jKTtcXG4rXFx0XFx0XFx0cmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cXHUwMDNlYXJjaC5tYyk7XFxuK1xcdFxcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcbkBAIC0xMTIyLDcgKzExMjQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9wZm1mKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0XFx0aWYgKHJjIFxcdTAwM2UgMSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCByYyk7XFxuIFxcdFxcdFxcdGlmIChyYyA9PSAtRU5PTUVNKSB7XFxuLVxcdFxcdFxcdFxcdGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cCh2Y3B1LVxcdTAwM2VhcmNoLm1jKTtcXG4rXFx0XFx0XFx0XFx0cmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cXHUwMDNlYXJjaC5tYyk7XFxuK1xcdFxcdFxcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcbkBAIC0xMjMyLDcgKzEyMzYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0XFx0XFx0XFx0XFx0OiBFU1NBX1NFVF9TVEFCTEVfSUZfUkVTSURFTlQpKVxcbiBcXHRcXHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9TUEVDSUZJQ0FUSU9OKTtcXG4gXFxuLVxcdGlmICghdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlKSB7XFxuK1xcdGlmICghUkVBRF9PTkNFKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSkpIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogQ01NQSBpcyBlbmFibGVkIGluIHRoZSBLVk0gc2V0dGluZ3MsIGJ1dCBpcyBkaXNhYmxlZCBpblxcbiBcXHRcXHQgKiB0aGUgU0lFIGJsb2NrIGFuZCBpbiB0aGUgbW1fY29udGV4dCwgYW5kIHdlIGFyZSBub3QgZG9pbmdcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jIGIvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jXFxuaW5kZXggZWUzZjM3YWY4YWVlNGEuLjRiZjdjOTAxMmZlYjZhIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY1xcbisrKyBiL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY1xcbkBAIC0xODEsNyArMTgxLDggQEAgdm9pZCBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdm1hZGRyKVxcbiBcXHRpZiAoSVNfRVJSX09SX05VTEwocHRlcCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdF9fYXRvbWljNjRfb3IoX1BBR0VfVU5VU0VELCAobG9uZyAqKXB0ZXApO1xcbitcXHRpZiAocHRlX3ByZXNlbnQoKnB0ZXApKVxcbitcXHRcXHRfX2F0b21pYzY0X29yKF9QQUdFX1VOVVNFRCwgKGxvbmcgKilwdGVwKTtcXG4gXFx0cHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcXG5pbmRleCBlMzlhNzI0ZmU4NjBlMy4uMTVkODFiMmVkN2FkMzkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xcbkBAIC0zNCwxNiArMzQsMjIgQEAgc3RhdGljIGNoYXIgY21tYV92YWx1ZV9idWZbTUFJTl9QQUdFX0NPVU5UICsgVEVTVF9EQVRBX1BBR0VfQ09VTlRdO1xcbiAvKipcXG4gICogRGlydHkgQ01NQSBhdHRyaWJ1dGVzIG9mIGV4YWN0bHkgb25lIHBhZ2UgaW4gdGhlIFRFU1RfREFUQSBtZW1zbG90LFxcbiAgKiBzbyB1c2VfY21tYSBnb2VzIG9uIGFuZCB0aGUgQ01NQSByZWxhdGVkIGlvY3RscyBkbyBzb21ldGhpbmcuXFxuKyAqIFRvdWNoIHRoZSBwYWdlIGF0IG9mZnNldCAxTSBpbnNpZGUgVEVTVF9EQVRBIHRvIG1ha2Ugc3VyZSBpdHMgcGFnZVxcbisgKiB0YWJsZXMgYXJlIGFsbG9jYXRlZCBpbiB0aGUgaG9zdC5cXG4gICovXFxuIHN0YXRpYyB2b2lkIGd1ZXN0X2RvX29uZV9lc3NhKHZvaWQpXFxuIHtcXG4gXFx0YXNtIHZvbGF0aWxlKFxcbiBcXHRcXHQvKiBsb2FkIFRFU1RfREFUQV9TVEFSVF9HRk4gaW50byByMSAqL1xcbitcXHRcXHRcXFwiXFx0eGdyIDEsMVxcXFxuXFxcIlxcbiBcXHRcXHRcXFwiXFx0bGxpbGYgMSwlW3N0YXJ0X2dmbl1cXFxcblxcXCJcXG4gXFx0XFx0LyogY2FsY3VsYXRlIHRoZSBhZGRyZXNzIGZyb20gdGhlIGdmbiAqL1xcbiBcXHRcXHRcXFwiXFx0c2xsZyAxLDEsMTIoMClcXFxcblxcXCJcXG4gXFx0XFx0Lyogc2V0IHRoZSBmaXJzdCBwYWdlIGluIFRFU1RfREFUQSBtZW1zbG90IHRvIFNUQUJMRSAqL1xcbiBcXHRcXHRcXFwiXFx0Lmluc24gcnJmLDB4YjlhYjAwMDAsMiwxLDEsMFxcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFx0YWdmaSAxLDB4MTAwMDAwXFxcXG5cXFwiXFxuK1xcdFxcdC8qIGFsc28gdG91Y2ggdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHNlY29uZCBNQiBvZiBURVNUX0RBVEEgKi9cXG4rXFx0XFx0XFxcIlxcdC5pbnNuIHJyZiwweGI5YWIwMDAwLDIsMSwxLDBcXFxcblxcXCJcXG4gXFx0XFx0LyogaHlwZXJjYWxsICovXFxuIFxcdFxcdFxcXCJcXHRkaWFnIDAsMCwweDUwMVxcXFxuXFxcIlxcbiBcXHRcXHRcXFwiMDpcXHRqIDBiXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyNzo0Mi4xNDc4MzIxNjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MDMzMjI5Mzg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXRfcGVla19jbW1hXCIsXG4gICAgXCJkYXRfZ2V0X2NtbWFcIixcbiAgICBcImdtYXBfY2xlYXJfeW91bmdfY3JzdGVcIixcbiAgICBcIl9fc2V0X2NtbWFfZGlydHlfcHRlXCIsXG4gICAgXCJnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eVwiLFxuICAgIFwiZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsXCIsXG4gICAgXCJrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xcIixcbiAgICBcImt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvblwiLFxuICAgIFwia3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25cIixcbiAgICBcImt2bV9zMzkwX3NldF9jbW1hX2JpdHNcIixcbiAgICBcImhhbmRsZV9zc2tlXCIsXG4gICAgXCJoYW5kbGVfcGZtZlwiLFxuICAgIFwiaGFuZGxlX2Vzc2FcIixcbiAgICBcImdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgaGFuZGxpbmcgb2YgQ29sbGFib3JhdGl2ZSBNZW1vcnkgTWFuYWdlbWVudCBBc3Npc3QgKENNTUEpLCBwYWdlIHRhYmxlIHVwZGF0ZXMsIGFuZCBWTSBtaWdyYXRpb24uIEl0IGZpeGVzIGJ1Z3MgaW4gQ01NQSBzdGF0ZSBoYW5kbGluZywgZGlydHkgcGFnZSB0cmFja2luZywgYW5kIG1lbW9yeSBjb250cm9sIGlvY3Rscy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIEtWTSBjb3JlIGxvZ2ljIGFuZCBpbnN0cnVjdGlvbiBoYW5kbGVycywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gZmVhdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDIzNDM5YmRkYWE0MTYxZWE3NzFjODA2MjY4NjVkNmVjOWNhNGVhNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDIyIDE2OjI3OjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDJjNmNlZTgyNDFlMDQ0Li40NzQwYzc1NjQ5ZWJiNSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC05ODAsNiArOTgwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZClcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKVxuIHtcbitcdGlmIChwdGVfcHJlc2VudChwdGUpKVxuK1x0XHRwdGUgPSBjbGVhcl9wdGVfYml0KHB0ZSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XG4gXHRXUklURV9PTkNFKCpwdGVwLCBwdGUpO1xuIH1cbiBcbkBAIC0xMzMyLDggKzEzMzQsNiBAQCBwZ3Byb3RfdCBwZ3Byb3Rfd3JpdGVjb21iaW5lKHBncHJvdF90IHByb3QpO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IG5yKVxuIHtcbi1cdGlmIChwdGVfcHJlc2VudChlbnRyeSkpXG4tXHRcdGVudHJ5ID0gY2xlYXJfcHRlX2JpdChlbnRyeSwgX19wZ3Byb3QoX1BBR0VfVU5VU0VEKSk7XG4gXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZXNfc2V0KG1tLCBhZGRyLCBwdGVwLCBlbnRyeSwgbnIpO1xuIFx0Zm9yICg7Oykge1xuIFx0XHRzZXRfcHRlKHB0ZXAsIGVudHJ5KTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuaW5kZXggYTRmZTY2NGY2NWVlMTUuLjVmMTk2MGVjOTgyZDA0IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuQEAgLTEyMDksNyArMTIwOSw3IEBAIGludCBkYXRfcGVla19jbW1hKGdmbl90IHN0YXJ0LCB1bmlvbiBhc2NlIGFzY2UsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMpXG4gXHRpbnQgcmM7XG4gXG4gXHRyYyA9IF9kYXRfd2Fsa19nZm5fcmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgKmNvdW50LCBhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0RFRkFVTFQsIFx1MDAyNnN0YXRlKTtcbi1cdCpjb3VudCA9IHN0YXRlLmVuZCAtIHN0YXJ0O1xuK1x0KmNvdW50ID0gc3RhdGUuZW5kIFx1MDAzZT0gc3RhcnQgPyBzdGF0ZS5lbmQgLSBzdGFydCA6IDA7XG4gXHQvKiBSZXR1cm4gc3VjY2VzcyBpZiBhdCBsZWFzdCBvbmUgdmFsdWUgd2FzIHNhdmVkLCBvdGhlcndpc2UgYW4gZXJyb3IuICovXG4gXHRyZXR1cm4gKHJjID09IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICpjb3VudCBcdTAwM2UgMCkgPyAwIDogcmM7XG4gfVxuQEAgLTEyNTMsNiArMTI1Myw5IEBAIGludCBkYXRfZ2V0X2NtbWEodW5pb24gYXNjZSBhc2NlLCBnZm5fdCAqc3RhcnQsIHVuc2lnbmVkIGludCAqY291bnQsIHU4ICp2YWx1ZXMsXG4gXHR9O1xuIFxuIFx0X2RhdF93YWxrX2dmbl9yYW5nZSgqc3RhcnQsIGFzY2VfZW5kKGFzY2UpLCBhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgXHUwMDI2c3RhdGUpO1xuK1x0LyogSWYgbm8gZGlydHkgcGFnZXMgd2VyZSBmb3VuZCwgd3JhcCBhcm91bmQgYW5kIGNvbnRpbnVlIHNlYXJjaGluZyAqL1xuK1x0aWYgKCpzdGFydCBcdTAwMjZcdTAwMjYgc3RhdGUuc3RhcnQgPT0gLTEpXG4rXHRcdF9kYXRfd2Fsa19nZm5fcmFuZ2UoMCwgKnN0YXJ0LCBhc2NlLCBcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywgXHUwMDI2c3RhdGUpO1xuIFxuIFx0aWYgKHN0YXRlLnN0YXJ0ID09IC0xKSB7XG4gXHRcdCpjb3VudCA9IDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9nbWFwLmMgYi9hcmNoL3MzOTAva3ZtL2dtYXAuY1xuaW5kZXggNzc4MjlmNzg3ZGM3ODEuLjVlNzU0ODViNTNmOWZkIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9nbWFwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jXG5AQCAtMzMyLDcgKzMzMiw3IEBAIHN0YXRpYyBsb25nIGdtYXBfY2xlYXJfeW91bmdfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBlbmQsIHN0XG4gXHRcdG5ldy5oLmkgPSAxO1xuIFx0XHRuZXcucy5mYzEueSA9IDA7XG4gXHRcdG5ldy5zLmZjMS5wcmVmaXhfbm90aWYgPSAwO1xuLVx0XHRpZiAobmV3LnMuZmMxLmQgfHwgIW5ldy5oLnApXG4rXHRcdGlmICgobmV3LnMuZmMxLmQgfHwgIW5ldy5oLnApIFx1MDAyNlx1MDAyNiAhbmV3LnMuZmMxLnMpXG4gXHRcdFx0Zm9saW9fc2V0X2RpcnR5KHBoeXNfdG9fZm9saW8oY3JzdGVfb3JpZ2luX2xhcmdlKGNyc3RlKSkpO1xuIFx0XHRuZXcucy5mYzEuZCA9IDA7XG4gXHRcdG5ldy5oLnAgPSAxO1xuQEAgLTExMDAsNyArMTEwMCwxMyBAQCBpbnQgZ21hcF9wcm90ZWN0X3JtYXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZywgZ2ZuX3QgcF9nZlxuIFxuIHN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4ge1xuLVx0X19hdG9taWM2NF9vcihQR1NURV9DTU1BX0RfQklULCBcdTAwMjZwZ3N0ZV9vZihwdGVwKS1cdTAwM2V2YWwpO1xuK1x0dW5pb24gcGdzdGUgcGdzdGU7XG4rXG4rXHRwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xuK1x0cGdzdGUuY21tYV9kID0gMTtcbitcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuK1x0YXRvbWljNjRfaW5jKHdhbGstXHUwMDNlcHJpdik7XG4rXG4gXHRpZiAobmVlZF9yZXNjaGVkKCkpXG4gXHRcdHJldHVybiBuZXh0O1xuIFx0cmV0dXJuIDA7XG5AQCAtMTExNCw3ICsxMTIwLDggQEAgdm9pZCBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShzdHJ1Y3QgZ21hcCAqZ21hcClcbiBcdGRvIHtcbiBcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2Z21hcC1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4gXHRcdFx0Z2ZuID0gX2RhdF93YWxrX2dmbl9yYW5nZShnZm4sIGFzY2VfZW5kKGdtYXAtXHUwMDNlYXNjZSksIGdtYXAtXHUwMDNlYXNjZSwgXHUwMDI2b3BzLFxuLVx0XHRcdFx0XHRcdCAgREFUX1dBTEtfSUdOX0hPTEVTLCBOVUxMKTtcbitcdFx0XHRcdFx0XHQgIERBVF9XQUxLX0lHTl9IT0xFUyxcbitcdFx0XHRcdFx0XHQgIFx1MDAyNmdtYXAtXHUwMDNla3ZtLVx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcyk7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fSB3aGlsZSAoZ2ZuKTtcbiB9XG5AQCAtMTI4Nyw3ICsxMjk0LDcgQEAgc3RhdGljIGludCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFcbiBcdC8qIFBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbiBrdm1fbW11X2ludmFsaWRhdGVfZW5kKCkuICovXG4gXHRzbXBfcm1iKCk7XG4gXG4tXHRyYyA9IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlcyhzZy1cdTAwM2Vrdm0sIGNvbnRleHQuZiwgYXNjZS5yc3RvLCBhc2NlLmR0ICsgMSwgZmFsc2UpO1xuK1x0cmMgPSBrdm1fczM5MF9nZXRfZ3Vlc3RfcGFnZXMoc2ctXHUwMDNla3ZtLCBjb250ZXh0LmYsIGFzY2UucnN0bywgYXNjZS50bCArIDEsIGZhbHNlKTtcbiBcdGlmIChyYyBcdTAwM2UgMClcbiBcdFx0cmMgPSAtRUZBVUxUO1xuIFx0aWYgKCFyYylcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IGRjOWM3NDUxZmU5Nzk0Li5iZGQyMjkyY2ZkYzc2OSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtOTk0LDYgKzk5NCw4IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0XG4ge1xuIFx0aW50IHJldDtcbiBcbitcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4rXG4gXHRzd2l0Y2ggKGF0dHItXHUwMDNlYXR0cikge1xuIFx0Y2FzZSBLVk1fUzM5MF9WTV9NRU1fRU5BQkxFX0NNTUE6XG4gXHRcdHJldCA9IC1FTlhJTztcbkBAIC0xMDAxLDcgKzEwMDMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dFxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRWTV9FVkVOVChrdm0sIDMsIFwiJXNcIiwgXCJFTkFCTEU6IENNTUEgc3VwcG9ydFwiKTtcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXHRcdGlmIChrdm0tXHUwMDNlY3JlYXRlZF92Y3B1cylcbiBcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdGVsc2Uge1xuQEAgLTEwMTAsNyArMTAxMSw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0XG4gXHRcdFx0a3ZtLVx1MDAzZWFyY2gudXNlX3BmbWZpID0gMDtcbiBcdFx0XHRyZXQgPSAwO1xuIFx0XHR9XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9WTV9NRU1fQ0xSX0NNTUE6IHtcbiBcdFx0Z2ZuX3Qgc3RhcnRfZ2ZuID0gMDtcbkBAIC0xMDI0LDcgKzEwMjQsOCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dFxuIFxuIFx0XHRWTV9FVkVOVChrdm0sIDMsIFwiJXNcIiwgXCJSRVNFVDogQ01NQSBzdGF0ZXNcIik7XG4gXHRcdGRvIHtcbi1cdFx0XHRzdGFydF9nZm4gPSBkYXRfcmVzZXRfY21tYShrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIHN0YXJ0X2dmbik7XG4rXHRcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKVxuK1x0XHRcdFx0c3RhcnRfZ2ZuID0gZGF0X3Jlc2V0X2NtbWEoa3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBzdGFydF9nZm4pO1xuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHR9IHdoaWxlIChzdGFydF9nZm4pO1xuIFx0XHRyZXQgPSAwO1xuQEAgLTEwNDIsOCArMTA0Myw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0XG4gXHRcdGlmIChnZXRfdXNlcihuZXdfbGltaXQsICh1NjQgX191c2VyICopYXR0ci1cdTAwM2VhZGRyKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbi1cdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbi1cbiBcdFx0bmV3X2xpbWl0ID0gQUxJR04obmV3X2xpbWl0LCBIUEFHRV9TSVpFKTtcbiBcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLm1lbV9saW1pdCAhPSBLVk1fUzM5MF9OT19NRU1fTElNSVQgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBuZXdfbGltaXQgXHUwMDNlIGt2bS1cdTAwM2VhcmNoLm1lbV9saW1pdClcbkBAIC0xMjIzLDcgKzEyMjIsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbXM7XG4gXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcbi1cdHVuc2lnbmVkIGxvbmcgcmFtX3BhZ2VzID0gMDtcbiBcdGludCBia3Q7XG4gXG4gXHQvKiBtaWdyYXRpb24gbW9kZSBhbHJlYWR5IGVuYWJsZWQgKi9cbkBAIC0xMjQwLDEyICsxMjM4LDExIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbiBcdGt2bV9mb3JfZWFjaF9tZW1zbG90KG1zLCBia3QsIHNsb3RzKSB7XG4gXHRcdGlmICghbXMtXHUwMDNlZGlydHlfYml0bWFwKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRyYW1fcGFnZXMgKz0gbXMtXHUwMDNlbnBhZ2VzO1xuIFx0fVxuIFx0LyogbWFyayBhbGwgdGhlIHBhZ2VzIGFzIGRpcnR5ICovXG4rXHRhdG9taWM2NF9zZXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcywgMCk7XG4gXHRnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eShrdm0tXHUwMDNlYXJjaC5nbWFwKTtcbi1cdGF0b21pYzY0X3NldChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzLCByYW1fcGFnZXMpO1xuLVx0a3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgPSAxO1xuK1x0V1JJVEVfT05DRShrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSwgMSk7XG4gXHRrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KGt2bSwgS1ZNX1JFUV9TVEFSVF9NSUdSQVRJT04pO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTEyNTksNyArMTI1Niw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIFx0LyogbWlncmF0aW9uIG1vZGUgYWxyZWFkeSBkaXNhYmxlZCAqL1xuIFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSA9IDA7XG4rXHRXUklURV9PTkNFKGt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlLCAwKTtcbiBcdGlmIChrdm0tXHUwMDNlYXJjaC51c2VfY21tYSlcbiBcdFx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RPUF9NSUdSQVRJT04pO1xuIFx0cmV0dXJuIDA7XG5AQCAtMjMxNyw4ICsyMzE0LDggQEAgc3RhdGljIGludCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qga3ZtX3MzOTBfY21tYV9sb2cgKmFyZ3MpXG4ge1xuLVx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWM7XG4tXHR1OCAqYml0cyA9IE5VTEw7XG4rXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XG4rXHR1OCAqYml0cyBfX2ZyZWUoa3ZmcmVlKSA9IE5VTEw7XG4gXHRpbnQgciA9IDA7XG4gXG4gXHRpZiAoIWt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hKVxuQEAgLTIzMzgsMTggKzIzMzUsMTYgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRiaXRzID0gdm1hbGxvYyhhcnJheV9zaXplKHNpemVvZigqYml0cyksIGFyZ3MtXHUwMDNlY291bnQpKTtcbiBcdGlmICghYml0cylcbi1cdFx0Z290byBvdXQ7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0ciA9IGNvcHlfZnJvbV91c2VyKGJpdHMsICh2b2lkIF9fdXNlciAqKWFyZ3MtXHUwMDNldmFsdWVzLCBhcmdzLVx1MDAzZWNvdW50KTtcbi1cdGlmIChyKSB7XG4tXHRcdHIgPSAtRUZBVUxUO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbitcdGlmIChyKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiBcdGRvIHtcbiBcdFx0ciA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XG4gXHRcdGlmIChyKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRcdHJldHVybiByO1xuIFx0XHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spIHtcbiBcdFx0XHRyID0gZGF0X3NldF9jbW1hX2JpdHMobWMsIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgYXJncy1cdTAwM2VzdGFydF9nZm4sXG4gXHRcdFx0XHRcdCAgICAgIGFyZ3MtXHUwMDNlY291bnQsIGFyZ3MtXHUwMDNlbWFzaywgYml0cyk7XG5AQCAtMjM1Nyw5ICsyMzUyLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBcdH0gd2hpbGUgKHIgPT0gLUVOT01FTSk7XG4gXG4gXHRzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2VmbGFncyk7XG4tb3V0OlxuLVx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuLVx0dmZyZWUoYml0cyk7XG4rXG4gXHRyZXR1cm4gcjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuaW5kZXggNDQ3ZWM3ZWQ0MjNkYzQuLmFkMGRkYzQzM2E3M2MzIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wcml2LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXG5AQCAtMzY2LDcgKzM2Niw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Nza2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRpZiAocmMgXHUwMDNlIDEpXG4gXHRcdFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCBQR01fQUREUkVTU0lORyk7XG4gXHRcdGlmIChyYyA9PSAtRU5PTUVNKSB7XG4tXHRcdFx0a3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtXHUwMDNlYXJjaC5tYyk7XG4rXHRcdFx0cmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cdTAwM2VhcmNoLm1jKTtcbitcdFx0XHRpZiAocmMpXG4rXHRcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0aWYgKHJjIFx1MDAzYyAwKVxuQEAgLTExMjIsNyArMTEyNCw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BmbWYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdGlmIChyYyBcdTAwM2UgMSlcbiBcdFx0XHRcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgcmMpO1xuIFx0XHRcdGlmIChyYyA9PSAtRU5PTUVNKSB7XG4tXHRcdFx0XHRrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAodmNwdS1cdTAwM2VhcmNoLm1jKTtcbitcdFx0XHRcdHJjID0ga3ZtX3MzOTBfbW11X2NhY2hlX3RvcHVwKHZjcHUtXHUwMDNlYXJjaC5tYyk7XG4rXHRcdFx0XHRpZiAocmMpXG4rXHRcdFx0XHRcdHJldHVybiByYztcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAocmMgXHUwMDNjIDApXG5AQCAtMTIzMiw3ICsxMjM2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXNzYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdFx0XHRcdFx0OiBFU1NBX1NFVF9TVEFCTEVfSUZfUkVTSURFTlQpKVxuIFx0XHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9TUEVDSUZJQ0FUSU9OKTtcbiBcbi1cdGlmICghdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSkge1xuK1x0aWYgKCFSRUFEX09OQ0UodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSkpIHtcbiBcdFx0LypcbiBcdFx0ICogQ01NQSBpcyBlbmFibGVkIGluIHRoZSBLVk0gc2V0dGluZ3MsIGJ1dCBpcyBkaXNhYmxlZCBpblxuIFx0XHQgKiB0aGUgU0lFIGJsb2NrIGFuZCBpbiB0aGUgbW1fY29udGV4dCwgYW5kIHdlIGFyZSBub3QgZG9pbmdcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmMgYi9hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmNcbmluZGV4IGVlM2YzN2FmOGFlZTRhLi40YmY3YzkwMTJmZWI2YSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuY1xuKysrIGIvYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jXG5AQCAtMTgxLDcgKzE4MSw4IEBAIHZvaWQgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHZtYWRkcilcbiBcdGlmIChJU19FUlJfT1JfTlVMTChwdGVwKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0X19hdG9taWM2NF9vcihfUEFHRV9VTlVTRUQsIChsb25nICopcHRlcCk7XG4rXHRpZiAocHRlX3ByZXNlbnQoKnB0ZXApKVxuK1x0XHRfX2F0b21pYzY0X29yKF9QQUdFX1VOVVNFRCwgKGxvbmcgKilwdGVwKTtcbiBcdHB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG5pbmRleCBlMzlhNzI0ZmU4NjBlMy4uMTVkODFiMmVkN2FkMzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcbkBAIC0zNCwxNiArMzQsMjIgQEAgc3RhdGljIGNoYXIgY21tYV92YWx1ZV9idWZbTUFJTl9QQUdFX0NPVU5UICsgVEVTVF9EQVRBX1BBR0VfQ09VTlRdO1xuIC8qKlxuICAqIERpcnR5IENNTUEgYXR0cmlidXRlcyBvZiBleGFjdGx5IG9uZSBwYWdlIGluIHRoZSBURVNUX0RBVEEgbWVtc2xvdCxcbiAgKiBzbyB1c2VfY21tYSBnb2VzIG9uIGFuZCB0aGUgQ01NQSByZWxhdGVkIGlvY3RscyBkbyBzb21ldGhpbmcuXG4rICogVG91Y2ggdGhlIHBhZ2UgYXQgb2Zmc2V0IDFNIGluc2lkZSBURVNUX0RBVEEgdG8gbWFrZSBzdXJlIGl0cyBwYWdlXG4rICogdGFibGVzIGFyZSBhbGxvY2F0ZWQgaW4gdGhlIGhvc3QuXG4gICovXG4gc3RhdGljIHZvaWQgZ3Vlc3RfZG9fb25lX2Vzc2Eodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUoXG4gXHRcdC8qIGxvYWQgVEVTVF9EQVRBX1NUQVJUX0dGTiBpbnRvIHIxICovXG4rXHRcdFwiXHR4Z3IgMSwxXFxuXCJcbiBcdFx0XCJcdGxsaWxmIDEsJVtzdGFydF9nZm5dXFxuXCJcbiBcdFx0LyogY2FsY3VsYXRlIHRoZSBhZGRyZXNzIGZyb20gdGhlIGdmbiAqL1xuIFx0XHRcIlx0c2xsZyAxLDEsMTIoMClcXG5cIlxuIFx0XHQvKiBzZXQgdGhlIGZpcnN0IHBhZ2UgaW4gVEVTVF9EQVRBIG1lbXNsb3QgdG8gU1RBQkxFICovXG4gXHRcdFwiXHQuaW5zbiBycmYsMHhiOWFiMDAwMCwyLDEsMSwwXFxuXCJcbitcdFx0XCJcdGFnZmkgMSwweDEwMDAwMFxcblwiXG4rXHRcdC8qIGFsc28gdG91Y2ggdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHNlY29uZCBNQiBvZiBURVNUX0RBVEEgKi9cbitcdFx0XCJcdC5pbnNuIHJyZiwweGI5YWIwMDAwLDIsMSwxLDBcXG5cIlxuIFx0XHQvKiBoeXBlcmNhbGwgKi9cbiBcdFx0XCJcdGRpYWcgMCwwLDB4NTAxXFxuXCJcbiBcdFx0XCIwOlx0aiAwYlwiXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyNzo0Mi4xNDc4MzM4NDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODY1OTYxODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUG90ZW50aWFsOiBzMzkwIEtWTSBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzICpkb2VzKiBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwsIGFuZCB0aGVyZWZvcmUsIGl0J3MgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBtb2RpZmllZCBmaWxlcyBwb2ludCBkaXJlY3RseSB0byB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLCB3aGljaCBpcyBzaWduaWZpY2FudC4gVGhpcyBpc24ndCBqdXN0IGEgbWlub3IgdHdlYWs7IHdlJ3JlIGxvb2tpbmcgYXQgY29kZSB0aGF0IHRvdWNoZXMgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIENNTUEgKENvbGxhYm9yYXRpdmUgTWVtb3J5IE1hbmFnZW1lbnQgQXNzaXN0KSBmdW5jdGlvbmFsaXR5LCBhbmQgVk0gbWlncmF0aW9uIOKAkyBhbGwgY3JpdGljYWwgYXJlYXMgd2l0aGluIGEgdmlydHVhbGl6YXRpb24gY29udGV4dC5cblxuTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgS1ZNIG9uIHMzOTAgaXMgYSB3ZWxsLWVzdGFibGlzaGVkIGFuZCBhY3RpdmVseSB1c2VkIHBsYXRmb3JtLiBJdCdzIG5vdCBzb21lIG9ic2N1cmUgY29ybmVyIGNhc2UuIFRoaXMgbWVhbnMgYW55IGJ1Z3MgbHVya2luZyB3aXRoaW4gdGhlc2UgY2hhbmdlcyBjb3VsZCBoYXZlIHJlYWwtd29ybGQgaW1wYWN0LiBJbXBvcnRhbnRseSwgSSBrbm93IHRoYXQgU3l6a2FsbGVyIHN1cHBvcnRzIHMzOTB4LCB3aGljaCBpcyBhIG1ham9yIHBvc2l0aXZlIHNpZ24uIElmIHN5emthbGxlciBjYW4gd29yayBvbiB0aGUgcGxhdGZvcm0sIHRoZW4gd2UgaGF2ZSBhIGdvb2Qgb3Bwb3J0dW5pdHkuXG5cbk5vdywgbGV0J3MgZ2V0IHNwZWNpZmljLiBJIHdhbnQgdG8gaWRlbnRpZnkgdGhlICptb3N0KiBpbnRlcmVzdGluZyBmdW5jdGlvbnMgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIEkga25vdyB0aGF0IGNlcnRhaW4gZnVuY3Rpb25zIG1pZ2h0IGJlIGhvdCBwYXRocywgYW5kIEkgd2FudCB0byBleGNsdWRlIHRob3NlLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZTogYHNldF9wdGVgLCBgc2V0X3B0ZXNgLCBgZGF0X3BlZWtfY21tYWAsIGBkYXRfZ2V0X2NtbWFgLCBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAsIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLCBga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sYCwgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYGhhbmRsZV9zc2tlYCwgYGhhbmRsZV9wZm1mYCwgYGhhbmRsZV9lc3NhYCwgYW5kIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLiAgSSBzdXNwZWN0IGBzZXRfcHRlYCBhbmQgYHNldF9wdGVzYCBhcmUgcHJvYmFibHkgaG90IHBhdGhzLCBzbyBJJ2xsIHB1dCB0aG9zZSBhc2lkZSBmb3Igbm93LlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgb3B0aW9ucy4gSSBrbm93IHRoYXQgYENPTkZJR19LVk1gIHdpbGwgYmUgcmVsZXZhbnQsIGFuZCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBDTU1BLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBIHF1aWNrIGdyZXAgaW4gYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2Agd2lsbCB0ZWxsIG1lIGlmIHdlIG5lZWQgdG8gY29uc2lkZXIgc3BlY2lmaWMgZW5hYmxlbWVudCBmbGFncyBmb3IgdGhvcm91Z2ggZnV6emluZy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbmNyZXRlIHBpY3R1cmUgb2YgdGhlIGV4cG9zdXJlIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2OTIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyNzo1Mi4wMTM3OTk3MDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyNDE1NzI5NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHXy4qQ01NQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjc6NTQuNjM3OTcwNzk5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEzMjkyNTY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgaXQgc2VlbXMgbGlrZSB0aGVyZSBhcmVuJ3QgYW55IGltbWVkaWF0ZWx5IG9idmlvdXMsIHByZS1jb25maWd1cmVkIENNTUEgc2V0dGluZ3MgSSBjYW4gcmVhZGlseSBpZGVudGlmeS4gVGltZSB0byBkaWcgZGVlcGVyLiBNeSBuZXh0IG1vdmUgaXMgdG8gbGV2ZXJhZ2UgdGhlIHBvd2VyIG9mIGBncmVwYC4gSSdsbCBmb2N1cyBteSBzZWFyY2ggb24gdGhlIGBhcmNoL3MzOTAva3ZtL2AgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IG1lbnRpb25zIG9mIGBLVk1gLiBUaGlzIHNob3VsZCBoZWxwIG1lIHBpbnBvaW50IGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBjb2RlIHJlbGF0ZWQgdG8gS1ZNIHdpdGhpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIG5leHQgc3RlcCBnaXZlbiB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTc2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjc6NTkuNzcwODk5NjE0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNTc2ODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyNzo1OS44NjE1MDcyMjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc3MTgwMzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgZmlndXJpbmcgb3V0IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gS1ZNLiBNeSBpbnN0aW5jdCBzYXlzIHRvIHN0YXJ0IHdpdGggYEtWTWAgYXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiwgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIG1haW4gZGVmaW5pdGlvbnMgYXJlLiBIb3dldmVyLCBJIHdhbnQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJ3MgYW55dGhpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGdvaW5nIG9uIGhlcmUuIFRoZXJlZm9yZSwgSSBzaG91bGQgY2hlY2sgdGhlIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgIGZpbGUuIEl0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gbG9vayBmb3IgYW55IHNwZWNpYWxpemVkIGNvbmZpZ3VyYXRpb25zIG9yIG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byBLVk0gb24gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIHdoZXJlIEknbGwgZmluZCB0aGUgbW9zdCByZWxldmFudCBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzI5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjg6MDIuOTM4NjkxNzU3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NTU0MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZiBDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NjAyPWludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNjA4LVxcdGNhc2UgS1ZNX0NBUF9TMzkwX0dNQVA6XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjYwOTojaWZkZWYgQ09ORklHX0tWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTYxMC1cXHRjYXNlIEtWTV9DQVBfUzM5MF9VQ09OVFJPTDpcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMjI5PWludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyMzctXFx0cmMgPSAtRUlOVkFMO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjM4OiNpZmRlZiBDT05GSUdfS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzIzOS1cXHRpZiAodHlwZSBcXHUwMDI2IH5LVk1fVk1fUzM5MF9VQ09OVFJPTClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NDgzPWxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTU0LVxcdH1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTU1NTojaWZkZWYgQ09ORklHX0tWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1NTYtXFx0Y2FzZSBLVk1fUzM5MF9VQ0FTX01BUDoge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU2OTg9dm1fZmF1bHRfdCBrdm1fYXJjaF92Y3B1X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2OTkte1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NzAwOiNpZmRlZiBDT05GSUdfS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTcwMS1cXHRpZiAoKHZtZi1cXHUwMDNlcGdvZmYgPT0gS1ZNX1MzOTBfU0lFX1BBR0VfT0ZGU0VUKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyODowMy4wMDUyNTg2NDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODM1MjM3MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBLVk0gcGF0Y2gsIGFuZCBpbW1lZGlhdGVseSB0aGUgZm9jdXMgaXMgb24gYSBoYW5kZnVsIG9mIGtleSBmdW5jdGlvbnMgdGhhdCBuZWVkIGEgdGhvcm91Z2ggaW5zcGVjdGlvbiwgc3BlY2lmaWNhbGx5IHRob3NlIHJlbGF0ZWQgdG8gS1ZNIG1lbW9yeSBjb250cm9sIG9uIHMzOTAgc3lzdGVtcy4gIEknbSBzZWVpbmcgYGt2bV9zMzkwX3NldF9tZW1fY29udHJvbGAsIGhhbmRsaW5nIHRob3NlIGlvY3RscyDigJMgYEtWTV9TMzkwX1ZNX01FTV9FTkFCTEVfQ01NQWAsIGBLVk1fUzM5MF9WTV9NRU1fQ0xSX0NNTUFgLCBhbmQgYEtWTV9TMzkwX1ZNX01FTV9MSU1JVF9TSVpFYCDigJMgdGhhdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiAgVGhlbiB3ZSBoYXZlIG1pZ3JhdGlvbi1yZWxhdGVkIGhhbmRsZXJzOiBga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uYCBhbmQgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCwgYW5kIGFsc28gYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLlxuXG5CZXlvbmQgdGhlIGNvcmUgbWVtb3J5IGNvbnRyb2wsIGl0J3MgY2xlYXIgd2UgaGF2ZSB0byBkaWcgaW50byBhbGwgdGhlIENNTUEgYml0cywgcGFnaW5nIHN0cnVjdHVyZXMsIGFuZCB0aGUgaGFuZGxpbmcgb2YgdGhlIGdtYXAuIFRoaXMgaW5jbHVkZXMgYGRhdF9wZWVrX2NtbWFgLCBgZGF0X2dldF9jbW1hYCwgYGdtYXBfY2xlYXJfeW91bmdfY3JzdGVgLCBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgLCBhbmQgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCBhbnkgc3VidGxlIG1pc2NvbmZpZ3VyYXRpb24gb3IgcmFjZSBjb25kaXRpb24gd2l0aGluIHRob3NlIGdtYXAgcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXMgY291bGQgYmUgZGlzYXN0cm91cy5cblxuVGhlbiB0aGUgcmVhbCBpbnRlcmVzdGluZyBzdHVmZiAtIHRoZSBpbnN0cnVjdGlvbiBoYW5kbGVyczogYGhhbmRsZV9zc2tlYCwgYGhhbmRsZV9wZm1mYCwgYW5kIGBoYW5kbGVfZXNzYWAuICBUaGVzZSBhcmUgaW4gYGFyY2gvczM5MC9rdm0vcHJpdi5jYC4gVGhhdCBtZWFucyB0aGV5J3JlIGNvcmUgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMgd2l0aGluIHRoZSBLVk0gZ3Vlc3QuICBUaGV5J3JlICpkZWZpbml0ZWx5KiByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBoaWdoIG9uIHRoZSBmdXp6aW5nIGxpc3QuIEEgc3VidGxlIGJ1ZyB0aGVyZSBjb3VsZCBsZWFkIHRvIHNlcmlvdXMgVk0gZXNjYXBlcy5cblxuSSBzaG91bGQgYWxzbyBjaGVjayBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYCBpbiBgYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jYC5cblxuT2J2aW91c2x5LCBgQ09ORklHX0tWTWAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBjaGVjayBmb3IgdGhlc2UgZmVhdHVyZXMsIGJ1dCBJJ2xsIG5lZWQgdG8gZ28gZGVlcGVyIHRvIGJlIHN1cmUuIEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoYXQgdGhvc2UgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMgYXJlIGluZGVlZCBlbmFibGVkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gYW5kIG1ha2UgYSBmdXp6aW5nIHBsYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMzYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjg6MTAuODQwNDk5NDc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjYxMDA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vZ21hcF9oZWxwZXJzLmg9MTM9aW50IGdtYXBfaGVscGVyX2Rpc2FibGVfY293X3NoYXJpbmcodm9pZCk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2dtYXBfaGVscGVycy5oOjE0OnZvaWQgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHZtYWRkcik7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2dtYXBfaGVscGVycy5oLTE1LXB0ZV90ICp0cnlfZ2V0X2xvY2tlZF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgc3BpbmxvY2tfdCAqKnB0bCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz0zNzY9c3RhdGljIGxvbmcgX2dtYXBfdW5tYXBfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKncpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0zODUtXFx0XFx0dm1hZGRyID0gX19nZm5fdG9faHZhX21lbXNsb3QocHJpdi1cXHUwMDNlc2xvdCwgZ2ZuKTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzozODY6XFx0XFx0Z21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKHByaXYtXFx1MDAzZWdtYXAtXFx1MDAzZWt2bS1cXHUwMDNlbW0sIHZtYWRkcik7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMzg3LVxcdH1cXG4tLVxcbmFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYz0xNDU9RVhQT1JUX1NZTUJPTF9HUEwoZ21hcF9oZWxwZXJfZGlzY2FyZCk7XFxuLS1cXG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmMtMTQ3LS8qKlxcbmFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYzoxNDg6ICogZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkKCkgLSBtYXJrIGEgcHRlIGVudHJ5IGFzIHVudXNlZFxcbmFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYy0xNDktICogQG1tOiB0aGUgbW1cXG4tLVxcbmFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYy0xNjItICovXFxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jOjE2Mzp2b2lkIGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpXFxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jLTE2NC17XFxuLS1cXG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmMtMTg3LX1cXG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmM6MTg4OkVYUE9SVF9TWU1CT0xfR1BMKGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZCk7XFxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jLTE4OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjg6MTAuOTA3MTE4MjUzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyOTI4NTI1MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0gTWVtb3J5IE1hbmFnZW1lbnQgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLiAgVGhhdCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbSBgX2dtYXBfdW5tYXBfcHRlYC4gIFJpZ2h0IGF3YXksIG15IG1pbmQgY2xpY2tzOiBgX2dtYXBfdW5tYXBfcHRlYCBpcyBwYXJ0IG9mIEtWTS4gIFRoYXTigJlzIHdoZXJlIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgYWN0aW9uIGlzIGhhcHBlbmluZywgd2hpY2ggaGVscHMgbWUgcGxhY2UgaXQgaW50byBjb250ZXh0LiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoZSBDTU1BIGZ1bmN0aW9uYWxpdHkuIExldCdzIHNlZSBpZiB0aGUgbmV4dCBzdGVwcyB3aWxsIG1ha2UgbW9yZSBzZW5zZSwgZm9jdXNpbmcgb24gaG93IGRhdGEgaXMgYmVpbmcgcmVhZCBhbmQgYWNjZXNzZWQuICBJJ2xsIHN0YXJ0IHdpdGggYGRhdF9wZWVrX2NtbWFgIGFuZCBgZGF0X2dldF9jbW1hYCAtIHRob3NlIGZ1bmN0aW9ucyBzaG91bGQgdGVsbCBtZSBtb3JlIGFib3V0IGhvdyB0aGUgQ29tbW9uIE1lbW9yeSBNYW5hZ2VtZW50IEFyZWEgKENNTUEpIGlzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODQ1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjg6MTkuMTk5OTc0ODRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NzU1MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhdF9wZWVrX2NtbWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2RhdC5jPTExNjk9c3RydWN0IGRhdF9nZXRfY21tYV9zdGF0ZSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExNzYtXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMTc3OnN0YXRpYyBsb25nIF9fZGF0X3BlZWtfY21tYV9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTExNzgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTg5LVxcbmFyY2gvczM5MC9rdm0vZGF0LmM6MTE5MDpzdGF0aWMgbG9uZyBfX2RhdF9wZWVrX2NtbWFfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMTkxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTE5OC1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjExOTk6aW50IGRhdF9wZWVrX2NtbWEoZ2ZuX3Qgc3RhcnQsIHVuaW9uIGFzY2UgYXNjZSwgdW5zaWduZWQgaW50ICpjb3VudCwgdTggKnZhbHVlcylcXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTEyMDAte1xcbmFyY2gvczM5MC9rdm0vZGF0LmMtMTIwMS1cXHRjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHtcXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjEyMDI6XFx0XFx0LnB0ZV9lbnRyeSA9IF9fZGF0X3BlZWtfY21tYV9wdGUsXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjAzOlxcdFxcdC5wbWRfZW50cnkgPSBfX2RhdF9wZWVrX2NtbWFfY3JzdGUsXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjA0OlxcdFxcdC5wdWRfZW50cnkgPSBfX2RhdF9wZWVrX2NtbWFfY3JzdGUsXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjA1OlxcdFxcdC5wNGRfZW50cnkgPSBfX2RhdF9wZWVrX2NtbWFfY3JzdGUsXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzoxMjA2OlxcdFxcdC5wZ2RfZW50cnkgPSBfX2RhdF9wZWVrX2NtbWFfY3JzdGUsXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy0xMjA3LVxcdH07XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5oPTU1Mj1sb25nIGRhdF9yZXNldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3Qgc3RhcnRfZ2ZuKTtcXG5hcmNoL3MzOTAva3ZtL2RhdC5oOjU1MzppbnQgZGF0X3BlZWtfY21tYShnZm5fdCBzdGFydCwgdW5pb24gYXNjZSBhc2NlLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzKTtcXG5hcmNoL3MzOTAva3ZtL2RhdC5oLTU1NC1pbnQgZGF0X2dldF9jbW1hKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1OCAqdmFsdWVzLCBhdG9taWM2NF90ICpyZW0pO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIyNTc9c3RhdGljIGludCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMjg5LVxcdFxcdGlmIChwZWVrKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMjkwOlxcdFxcdFxcdHJldCA9IGRhdF9wZWVrX2NtbWEoYXJncy1cXHUwMDNlc3RhcnRfZ2ZuLCBrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZSwgXFx1MDAyNmFyZ3MtXFx1MDAzZWNvdW50LFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMjkxLVxcdFxcdFxcdFxcdFxcdCAgICB2YWx1ZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyODoxOS4yNjc3MzczNzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwMDU2NTU0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENNTUEgQml0IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgQ01NQSBiaXRzIGFyZSBtYW5hZ2VkLCBhbmQgaXQgbG9va3MgbGlrZSBgZGF0X3BlZWtfY21tYWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgLiBBbHNvLCBgZGF0X2dldF9jbW1hYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB0aGUgc2FtZSBzcG90LCBga3ZtX3MzOTBfZ2V0X2NtbWFfYml0c2AuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBDTU1BIGJpdCBmdW5jdGlvbmFsaXR5IGFyZSB0aGUgb25lcyBkaXJlY3RseSBsaW5rZWQgdG8gc2V0dGluZywgZ2V0dGluZywgYW5kIG1hbmlwdWxhdGluZyB0aGVzZSBiaXRzLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgZnVuY3Rpb25zIHRvIGdldCBhIGdyYXNwIG9mIHRoZSBvdmVyYWxsIG9wZXJhdGlvbi5cblxuQmFzZWQgb24gdGhlIGZ1bmN0aW9uIGNhbGxzLCBJJ3ZlIGdvdCBhIHByZWxpbWluYXJ5IGxpc3Qgb2YgY2FuZGlkYXRlcy4gVGhleSBsb29rIGxpa2U6XG5cbiogICBga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sYFxuKiAgIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gXG4qICAgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYFxuKiAgIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYFxuKiAgIGBrdm1fczM5MF9nZXRfY21tYV9iaXRzYFxuKiAgIGBkYXRfcGVla19jbW1hYFxuKiAgIGBkYXRfZ2V0X2NtbWFgXG4qICAgYGdtYXBfY2xlYXJfeW91bmdfY3JzdGVgXG4qICAgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YFxuKiAgIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgXG4qICAgYGhhbmRsZV9zc2tlYFxuKiAgIGBoYW5kbGVfcGZtZmBcbiogICBgaGFuZGxlX2Vzc2FgXG4qICAgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGBcblxuTm93LCBJIHRoaW5rIGl0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAgdG8gc2VlIGhvdyBpdCBtaWdodCBiZSBpbnZvbHZlZCBpbiB0aGUgcHJvY2Vzcy4gSSdsbCBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjg6MjkuMjczMzk3MTY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTIxMDgyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ21hcF9jbGVhcl95b3VuZ19jcnN0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vZ21hcC5jPTI4Nz1zdGF0aWMgbG9uZyBnbWFwX2NsZWFyX3lvdW5nX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgZW5kLCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0zMTUtXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MzE2OnN0YXRpYyBsb25nIGdtYXBfY2xlYXJfeW91bmdfY3JzdGUodW5pb24gY3JzdGUgKmNyc3RlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBlbmQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0zMTcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MzU0PWJvb2wgZ21hcF9hZ2VfZ2ZuKHN0cnVjdCBnbWFwICpnbWFwLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMzU3LVxcdFxcdC5wdGVfZW50cnkgPSBnbWFwX2NsZWFyX3lvdW5nX3B0ZSxcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzozNTg6XFx0XFx0LnBtZF9lbnRyeSA9IGdtYXBfY2xlYXJfeW91bmdfY3JzdGUsXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MzU5OlxcdFxcdC5wdWRfZW50cnkgPSBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlLFxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTM2MC1cXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyODoyOS42MjU1MTE5MzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyMjY0NzQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGdtYXBfYWdlX2dmbmAgQ2FsbCoqXG5cbk9rYXksIHNvIGBnbWFwX2FnZV9nZm5gIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBrdm1fYWdlX2dmbmAuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBga3ZtX2FnZV9nZm5gIGlzIHR5cGljYWxseSBpbnZvbHZlZCBpbiBhZ2luZyBndWVzdCBwaHlzaWNhbCBwYWdlcywgYW5kIGBnbWFwX2FnZV9nZm5gIHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byB0aGUgZ2xvYmFsIG1lbW9yeSBtYXAuIFRoaXMgY291bGQgYmUgYWJvdXQgdHJhY2tpbmcgcGFnZSB1c2FnZSBmcm9tIHRoZSBob3N0J3MgcGVyc3BlY3RpdmUsIG9yIG1heWJlIGl0IGlzIHNvbWUgc29ydCBvZiBzaGFyZWQgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCwgc3BlY2lmaWNhbGx5LCB0aGUgY29udGV4dCBvZiB0aGF0IGNhbGwuXG5cblRoZSBuZXh0IHRoaW5nIEkgdGhpbmsgdG8gY2hlY2sgaXMgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAuIE15IGluaXRpYWwgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGNhbGwgaXMgZnJvbSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgQWRkcmVzcyBTcGFjZSBDb250cm9sIEVudHJ5IChBU0NFKSB0YWJsZS4gVGhpcyBjb3VsZCBiZSBhIGNyaXRpY2FsIHBhcnQgb2YgZW5zdXJpbmcgcHJvcGVyIHByb3RlY3Rpb24gYW5kIGlzb2xhdGlvbiwgZXNwZWNpYWxseSBkdXJpbmcgcGFnZSBhZ2luZyBvcGVyYXRpb25zLiBJdCdzIGxpa2VseSB0aGF0IGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgIGhhbmRsZXMgYSBuZWNlc3NhcnkgcHJvdGVjdGlvbiBtZWNoYW5pc20gd2hlbiBtb2RpZnlpbmcgdGhlIHRvcC1sZXZlbCBwYWdlIHRhYmxlIGVudHJpZXMuIFNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEl0J3MgbGlrZWx5IGEgY3JpdGljYWwgc2VjdGlvbiBhbmQgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgY2FsbCBpcyBjb3JyZWN0bHkgc3luY2hyb25pemVkIHRvIHByZXZlbnQgYW55IHJhY2UgY29uZGl0aW9ucyBvciBkYXRhIGNvcnJ1cHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDkzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjg6MzQuNjQ4MTYzODQ0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjk0Njc1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2dtYXAuYz0xMjEyPXN0YXRpYyBzdHJ1Y3QgZ21hcCAqZ21hcF9maW5kX3NoYWRvdyhzdHJ1Y3QgZ21hcCAqcGFyZW50LCB1bmlvbiBhc2NlIGFzY2UsIGludCBlZGF0X2xldmVsKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTIyNS0jZGVmaW5lIENSU1RfVEFCTEVfUEFHRVMgKF9DUlNUX1RBQkxFX1NJWkUgLyBQQUdFX1NJWkUpXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTIyNjpzdHJ1Y3QgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsIHtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjI3LVxcdHVuc2lnbmVkIGxvbmcgc2VxO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTIzMC1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjMxOnN0YXRpYyBpbmxpbmUgaW50IF9fZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqc2csXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTIzMjpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsICpjb250ZXh0KVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyMzMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI2My1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjY0OnN0YXRpYyBpbmxpbmUgaW50IF9nbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZyxcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjY1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsICpjb250ZXh0KVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyNjYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI3Ny1cXHRcXHRcXHRyZXR1cm4gcmM7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTI3ODpcXHRcXHRyYyA9IF9fZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsKG1jLCBzZywgY29udGV4dCk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTI3OS1cXHRcXHRyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjg0LVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEyODU6c3RhdGljIGludCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZylcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMjg2LXtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMjg3OlxcdHN0cnVjdCBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwgY29udGV4dCA9IHt9O1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEyODgtXFx0dW5pb24gYXNjZSBhc2NlID0gc2ctXFx1MDAzZWd1ZXN0X2FzY2U7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMzAwLVxcdGlmICghcmMpXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTMwMTpcXHRcXHRyYyA9IF9nbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWwobWMsIHNnLCBcXHUwMDI2Y29udGV4dCk7XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTMwMi1cXHRpZiAocmMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz0xMzI1PXN0cnVjdCBnbWFwICpnbWFwX2NyZWF0ZV9zaGFkb3coc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpwYXJlbnQsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMzc1LVxcdC8qIFByb3RlY3Qgd2hpbGUgaW5zZXJ0aW5nLCBwcm90ZWN0cyBhZ2FpbnN0IGludmFsaWRhdGlvbiByYWNlcy4gKi9cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzc2OlxcdHJjID0gZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsKG1jLCBuZXcpO1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzNzctXFx0aWYgKHJjKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE2OjI4OjM0LjczMTExOTY2MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjkyMjU5NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsKipcblxuT2theSwgc28gYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYGdtYXBfY3JlYXRlX3NoYWRvd2AuIFRoYXQncyB0aGUgY29udGV4dC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGludGVyYWN0aW9uLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCdzIHRyaWdnZXJpbmcgdGhpcyBwcm90ZWN0aW9uIGNhbGwuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbnMsIGl0IHNlZW1zIGxpa2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBzb21lIGtpbmQgb2YgYWNjZXNzIGNvbnRyb2wgb24gdGhlIHRvcC1sZXZlbCBBU0NFLlxuXG5Ob3csIG15IG5leHQgcXVlc3Rpb24gcmV2b2x2ZXMgYXJvdW5kIHdoYXQgdHJpZ2dlcnMgdGhlIHByb3RlY3Rpb24uIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgYF9fc2V0X2NtbWFfZGlydHlfcHRlYC4gSSBiZXQgdGhpcyBpcyByZWxhdGVkIHRvIGhvdyB0aGUgZGlydHkgYml0IGlzIHNldCwgYW5kIGl0IHByb2JhYmx5IGhhcyB0byBkbyB3aXRoIGhvdyB0aGUgQVNDRSBnZXRzIHVwZGF0ZWQgd2hlbiBhIHBhZ2UgaXMgd3JpdHRlbiB0by4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGlzIGZ1bmN0aW9uIGNhbGwsIGJlY2F1c2UgdGhpcyB3aWxsIHByb2JhYmx5IHByb3ZpZGUgaW5zaWdodCBpbnRvIHRoZSBjb250ZXh0IG9mIHRoZSBwcm90ZWN0aW9uIG9mIHRoZSBhZGRyZXNzIHNwYWNlIHRvcC1sZXZlbCBzdHJ1Y3R1cmVzLCBzbyBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCB3aHkgdGhleSBhcmUgY2FsbGluZyBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MzUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyODo0My40MjMzODI5OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4OTAwMTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc2V0X2NtbWFfZGlydHlfcHRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTA2Mz1pbnQgZ21hcF9wcm90ZWN0X3JtYXAoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpzZywgZ2ZuX3QgcF9nZm4sIGdmbl90IHJfZ2ZuLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTEwMC1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMTAxOnN0YXRpYyBsb25nIF9fc2V0X2NtbWFfZGlydHlfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTEwMi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYz0xMTE1PXZvaWQgZ21hcF9zZXRfY21tYV9hbGxfZGlydHkoc3RydWN0IGdtYXAgKmdtYXApXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTExNi17XFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTExNzpcXHRjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHsgLnB0ZV9lbnRyeSA9IF9fc2V0X2NtbWFfZGlydHlfcHRlLCB9O1xcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTExMTgtXFx0Z2ZuX3QgZ2ZuID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjg6NDMuNTMyMjkxMzk4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNzY1NDM0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDTU1BIERpcnR5IFBURSBTZXR0aW5nIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgYF9fc2V0X2NtbWFfZGlydHlfcHRlYCBmdW5jdGlvbiBnZXRzIGNhbGxlZC4gSXQncyB0cmlnZ2VyZWQgZnJvbSBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgLCB3aGljaCBpbW1lZGlhdGVseSBkaXJlY3RzIG15IGF0dGVudGlvbiB0byB0aGUga2V5IGZ1bmN0aW9ucyBpbiB0aGlzIGNvZGUgcGF0aDogYGt2bV9zMzkwX3NldF9tZW1fY29udHJvbGAsIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gLCBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIGBkYXRfcGVla19jbW1hYCwgYGRhdF9nZXRfY21tYWAsIGBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlYCwgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCBpdHNlbGYsIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLCBgaGFuZGxlX3Nza2VgLCBgaGFuZGxlX3BmbWZgLCBgaGFuZGxlX2Vzc2FgLCBhbmQgYGdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUgYW5kIHdoZXJlIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgYW55IHBvdGVudGlhbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYENPTkZJR19LVk1gIGlzIHRoZSBwcmltYXJ5IG9uZSwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBIb2xkIG9uLi4uIEkgcmVjYWxsIGBLVk1fUzM5MF9VQ09OVFJPTGAgYXMgYSBzZXBhcmF0ZSwgbWF5YmUgcG90ZW50aWFsbHkgcmVsZXZhbnQsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5MZXQgbWUgdmVyaWZ5OiB0aGUgY29kZSB0aGF0IHVzZXMgYF9fc2V0X2NtbWFfZGlydHlfcHRlYCBhcHBlYXJzIHRvIHJlc2lkZSB3aXRoaW4gYGt2bS1zMzkwLmNgLCBgZ21hcC5jYCwgYGRhdC5jYCwgYW5kIGBwcml2LmNgLiBUaGVzZSBmaWxlcyBhcmUsIGFzIEkgZXhwZWN0ZWQsIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0tWTWAgaXMgZW5hYmxlZC4gSXQncyBhIHN0YW5kYXJkIGRlcGVuZGVuY3kuIExldCdzIGNvbmZpcm0gdGhhdCB3aXRoIGEgcXVpY2sgbG9vayBpbiBgYXJjaC9zMzkwL2t2bS9NYWtlZmlsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE2OjI4OjQ5LjcwODgzODIxN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwODg4ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bS15XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZT04PWNjZmxhZ3MteSA6PSAtSXZpcnQva3ZtIC1JYXJjaC9zMzkwL2t2bVxcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtOS1cXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlOjEwOmt2bS15ICs9IGt2bS1zMzkwLm8gaW50ZXJjZXB0Lm8gaW50ZXJydXB0Lm8gcHJpdi5vIHNpZ3Aub1xcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGU6MTE6a3ZtLXkgKz0gZGlhZy5vIGdhY2Nlc3MubyBndWVzdGRiZy5vIHZzaWUubyBwdi5vXFxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZToxMjprdm0teSArPSBkYXQubyBnbWFwLm8gZmF1bHRpbi5vXFxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZS0xMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjg6NDkuODI5NzM4MzA0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMjYyNTEzMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbk9rYXksIHNvIGl0IHNlZW1zIGxpa2UgYENPTkZJR19LVk1gIGlzIHRoZSBwcmltYXJ5LCBwZXJoYXBzIGV2ZW4gKm9ubHkqLCBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggcmlnaHQgbm93LiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSBwaXZvdGFsIGluIHRoaXMgc3BlY2lmaWMgS1ZNL3MzOTAgY29udGV4dC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjcml0aWNhbCBhcmVhcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0OlxuXG4qICAgYGt2bV9zMzkwX3NldF9tZW1fY29udHJvbGAgLSBJIHJlbWVtYmVyIHRoaXMgZGVhbHMgd2l0aCBtZW1vcnkgY29udHJvbCByZWdpc3RlcnMsIGxldCBtZSByZWZyZXNoIG15IGtub3dsZWRnZSBvZiB0aGUgZXhhY3QgbWFuaXB1bGF0aW9ucyB0aGlzIHBlcmZvcm1zLlxuKiAgIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gIFx1MDAyNiBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gIC0gT2YgY291cnNlLCB0aGUgbWlncmF0aW9uIGZ1bmN0aW9ucywgZXNzZW50aWFsIGZvciBsaXZlIG1pZ3JhdGlvbiBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgdGhlaXIgaW1wbGVtZW50YXRpb24gcmVnYXJkaW5nIHMzOTAgYXJjaGl0ZWN0dXJlLlxuKiAgIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCAtIFJlbGF0ZWQgdG8gQ01NQSAoQ29udHJvbCBNZW1vcnkgTWFuYWdlbWVudCBBcmVhKSwgcHJvYmFibHkgc2V0dGluZyBhbmQgbWFuYWdpbmcgdGhlIENNTUEgYml0cyB0byBkZWZpbmUgd2hpY2ggcGFydCBvZiBtZW1vcnkgY2FuIGJlIGFjY2Vzc2VkIGJ5IHRoZSBndWVzdC5cbiogICBgZGF0X3BlZWtfY21tYWAgXHUwMDI2IGBkYXRfZ2V0X2NtbWFgIC0gRnVuY3Rpb25zIHRvIGludGVyYWN0IHdpdGggdGhlIENNTUEsIHBlZWtpbmcgYW5kIGdldHRpbmcgQ01NQSBkYXRhIGFuZCBhZGRyZXNzLlxuKiAgIGBnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlYCwgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCwgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAgLSBUaGVzZSBHTUFQIChHdWVzdCBNZW1vcnkgQWRkcmVzcyBUcmFuc2xhdGlvbikgZnVuY3Rpb25zIGFyZSBpbXBvcnRhbnQuIENsZWFyaW5nIHlvdW5nIGJpdHMsIG1hcmtpbmcgbWVtb3J5IGRpcnR5IGFuZCBwcm90ZWN0aW5nIHRoZSBBU0NFIChBZGRyZXNzIFNwYWNlIENvbnRyb2wgRWxlbWVudCkgdG9wIGxldmVsIGFyZSBjcml0aWNhbCBvcGVyYXRpb25zLlxuKiAgIGBoYW5kbGVfc3NrZWAsIGBoYW5kbGVfcGZtZmAsIGBoYW5kbGVfZXNzYWAgLSBIYW5kbGluZyBvZiBzcGVjaWFsIFMzOTAgaW5zdHJ1Y3Rpb25zIHN1Y2ggYXMgU1NLRSAoU2V0IFN0b3JhZ2UgS2V5IEV4dGVuZGVkKSwgUEZNIChQcm9ncmFtIEZldGNoIE1vZGlmaWNhdGlvbikgYW5kIEVTU0EgKEV4dGVuZGVkIFNlZ21lbnQgYW5kIEFyZWEpLCB0aGVzZSBhcmUgY3J1Y2lhbCBmb3Igc2VjdXJpdHkgYW5kIGFkZHJlc3Mgc3BhY2UgbWFuYWdlbWVudC5cbiogICBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYCAtIFRoZSBQVEUgcmVsYXRlZCBmdW5jdGlvbiwgcmVsYXRlZCB0byBzZXR0aW5nIHBhZ2UgdGFibGUgZW50cmllcyAoUFRFKSBhcyB1bnVzZWQgaW4gZ3Vlc3QgbWVtb3J5LlxuXG5CdXQsIGFyZSB0aGVyZSBhbnkgb3RoZXIgc3VidGxlIGNvbmZpZ3MgbHVya2luZyBpbiB0aGUgc2hhZG93cz8gTGV0J3MgYmUgdGhvcm91Z2guIEknbGwgcXVpY2tseSBjaGVjayB0aGUgYGFyY2gvczM5MC9tbS9NYWtlZmlsZWAgZmlsZSB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSByZWxldmFudCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIG9yIGhpZGRlbiBzZXR0aW5ncyB0aGF0IG1pZ2h0IGJlIHBlcnRpbmVudCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAzMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyOTowMy4wOTIyNTQ4NDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDMwMjQ0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnbWFwX2hlbHBlcnMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvbW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL21tL01ha2VmaWxlPTEzPW9iai0kKENPTkZJR19QRkFVTFQpXFx0XFx0Kz0gcGZhdWx0Lm9cXG5hcmNoL3MzOTAvbW0vTWFrZWZpbGUtMTQtXFxuYXJjaC9zMzkwL21tL01ha2VmaWxlOjE1Om9iai0kKHN1YnN0IG0seSwkKENPTkZJR19LVk0pKVxcdCs9IGdtYXBfaGVscGVycy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE2OjI5OjAzLjIwMjU2MTc5OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQzODk0OTIwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgS1ZNL3MzOTAgRm9jdXMgZm9yIFN5emthbGxlcioqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYGdtYXBfaGVscGVycy5vYCBnZXRzIGJ1aWx0IGV2ZW4gd2hlbiBgQ09ORklHX0tWTWAgaXMgZW5hYmxlZC4gR29vZCB0byBrbm93LiBMZXQncyBzZWUgaWYgd2UgY2FuIHVzZSBgS1ZNYCBhcyBvdXIgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZvY3VzLiBZZXAsIGBLVk1gIGlzIGluZGVlZCB0aGUgbWFpbiBjb25maWcgZm9yIEtWTSBvbiBzMzkwLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biBhIG1vcmUgcmVmaW5lZCBsaXN0IG9mIGZ1bmN0aW9ucyBmb3IgU3l6a2FsbGVyIHRvIHByaW9yaXRpemUuIEkndmUgZ290OiBga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sYCwgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYGRhdF9wZWVrX2NtbWFgLCBgZGF0X2dldF9jbW1hYCwgYGdtYXBfY2xlYXJfeW91bmdfY3JzdGVgLCBgZ21hcF9zZXRfY21tYV9hbGxfZGlydHlgLCBgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsYCwgYGhhbmRsZV9zc2tlYCwgYGhhbmRsZV9wZm1mYCwgYGhhbmRsZV9lc3NhYCwgYW5kIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLlxuXG5Ib2xkIG9uLCBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAgaXMgc3RhdGljLi4uIFRoYXQgdGhyb3dzIGEgd3JlbmNoIGluIHRoaW5ncy4gSSBzaG91bGQgY2hlY2sgYGFyY2gvczM5MC9rdm0vZ21hcC5jYCB0byBiZSBzdXJlLiBZZXAsIGl0J3Mgc3RhdGljLiBTeXprYWxsZXIgbWlnaHQgbm90IGJlIGFibGUgdG8gdGFyZ2V0IGl0IGRpcmVjdGx5IGlmIGl0IGdldHMgaW5saW5lZCwgYnV0IGl0J3Mgc3RpbGwgd29ydGggbGlzdGluZyBiZWNhdXNlIGl0IG1pZ2h0IGluZGlyZWN0bHkgbGVhZCB0byBzb21ldGhpbmcgaW50ZXJlc3RpbmcuXG5cbkxldCdzIGFsc28gY2hlY2sgYF9fc2V0X2NtbWFfZGlydHlfcHRlYC4gWXVwLCB0aGF0J3Mgc3RhdGljIHRvby4gU28sIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAgaXMgZXhwb3J0ZWQvZ2xvYmFsLCB0aGF0J3MgZ29vZC4gQW5kIGBkYXRfcGVla19jbW1hYCBhbmQgYGRhdF9nZXRfY21tYWAgYXJlIGdsb2JhbCBhcyB3ZWxsLiBPa2F5LCB0aGF0J3MgaGVscGZ1bC4gYGhhbmRsZV9zc2tlYCwgYGhhbmRsZV9wZm1mYCwgYW5kIGBoYW5kbGVfZXNzYWAgYXJlIHN0YXRpYy4gSSB3aWxsIGxvb2sgaW4gYGFyY2gvczM5MC9rdm0vcHJpdi5jYCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IG90aGVyIGhlbHBmdWwgaW5mby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4OTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjk6MTMuNjQxNTE1NDE0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI5OTk1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX3Nza2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9wcml2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9wcml2LmM9Mjg5PXN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMzIyLSNkZWZpbmUgU1NLRV9NQiAweDFcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzozMjM6c3RhdGljIGludCBoYW5kbGVfc3NrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMzI0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jPTk1OD1pbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk4MC1cXHRjYXNlIDB4MmI6XFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6OTgxOlxcdFxcdHJldHVybiBoYW5kbGVfc3NrZSh2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05ODItXFx0Y2FzZSAweDJjOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyOToxMy43NDQ1MjU0MjFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY3OTY3NDM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIEluc3RydWN0aW9uIEhhbmRsZXIgU3RyYXRlZ3kgZm9yIFN0YXRpYyBBbmFseXNpcyBpbiBTeXprYWxsZXIqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHdlJ3JlIGhhbmRsaW5nIGluc3RydWN0aW9ucywgc3BlY2lmaWNhbGx5IGZyb20gYSBwZXJzcGVjdGl2ZSB3aGVyZSB3ZSdyZSBhaW1pbmcgdG8gbWF4aW1pemUgU3l6a2FsbGVyJ3MgZWZmZWN0aXZlbmVzcyB3aXRoIHN0YXRpYyBhbmFseXNpcy4gVGhlIGNvcmUgaWRlYSBpcyB0aGF0IHRoZXNlIGluc3RydWN0aW9uIGhhbmRsZXJzIGFyZSBlc3NlbnRpYWxseSByZWNpcGVzIGZvciB0aGUgZnV6emVyLiBOb3csIEknbSBub3RpbmcgdGhhdCBpZiB0aGVzZSBoYW5kbGVycyBhcmUgc3RhdGljYWxseSBkZWZpbmVkLCBpdCBwcmVzZW50cyBhIHZlcnkgc3BlY2lmaWMgb3Bwb3J0dW5pdHkuIEl0IG1lYW5zIFN5emthbGxlciBjYW4sIGluIGEgc2Vuc2UsICpmb2N1cyogb24gdGhlbSBtb3JlIGVmZmVjdGl2ZWx5LCBhbG1vc3QgdHJlYXQgdGhlbSBhcyBwcmltYXJ5IHRhcmdldHMgZm9yIGV4cGxvcmF0aW9uLCAqYXMgbG9uZyBhcyogdGhleSdyZSBub3QgaW5saW5lZC4gSW5saW5pbmcgbWVzc2VzIHRoaW5ncyB1cCwgbWFrZXMgdGhlbSBsZXNzIGRpc2NyZXRlIGFuZCBhY2Nlc3NpYmxlLiBUaGF0J3MgYSBrZXkgY29uc2lkZXJhdGlvbi5cblxuU28sIHRoZSBmb2N1cyBzaGlmdHMgdG8gZW5zdXJpbmcgaGFuZGxlcnMgYXJlbid0IGlubGluZWQsIGFzIHdlbGwgYXMgY2hlY2tpbmcgdGhlIGBoYW5kbGVfcGZtZmAgaGFuZGxlciBzcGVjaWZpY2FsbHksIGFzIGFuIGV4YW1wbGUsIHNpbmNlIHRoYXQgaGFuZGxlciBpcyBjcml0aWNhbCBmb3IgcGFnZS1mYXVsdCBtaXRpZ2F0aW9uIGFuZCBoYW5kbGluZy4gSSBuZWVkIHRvIGRpZyBpbnRvIGBoYW5kbGVfcGZtZmAgbm93IHRvIHNlZSB3aGF0IHdlIGNhbiBkby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwOTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyOToxOS40MjQyMDQxMjNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4ODU1Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV9wZm1mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vcHJpdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vcHJpdi5jPTEwMTY9c3RhdGljIGludCBoYW5kbGVfZXBzdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMDQ0LVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEwNDU6c3RhdGljIGludCBoYW5kbGVfcGZtZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTA0Ni17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz0xMjgyPWludCBrdm1fczM5MF9oYW5kbGVfYjkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5My1cXHRjYXNlIDB4YWY6XFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTI5NDpcXHRcXHRyZXR1cm4gaGFuZGxlX3BmbWYodmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5NS1cXHRkZWZhdWx0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyOToxOS41MTMwNjU2NzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5MjI1NDk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgaGFuZGxlX2Vzc2FgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgaW50byBpdC4gTGV0J3Mgc2VlLi4uIHRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgemVyb2luZyBpbiBvbiB0aGlzIGBoYW5kbGVfZXNzYWAgZnVuY3Rpb24gb3IgbW9kdWxlLCB3aGVyZXZlciBpdCByZXNpZGVzIGluIHRoZSBjb2RlYmFzZS4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgaXMgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIHNvbWUgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIHRoaXMgXCJFU1NBXCIgdGhpbmcuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIHNvbWUgaHlwb3RoZXNlcy4gSXMgaXQgYW4gZW5kcG9pbnQgaGFuZGxlcj8gQSBwcm9jZXNzaW5nIHBpcGVsaW5lIGVudHJ5PyBPciBhIGxvd2VyLWxldmVsIHV0aWxpdHk/IEtub3dpbmcgdGhlIG5hbWluZyBjb252ZW50aW9ucyBvZiB0aGlzIHByb2plY3Qgd2lsbCBndWlkZSBteSBpbml0aWFsIGFzc3VtcHRpb25zLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgY29kZSBpbW1lZGlhdGVseSB0byBzZWUgd2hhdCBpdCBpcyBhY3R1YWxseSBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE2OjI5OjI1LjIwNTMyMzYwMloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMDg4NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV9lc3NhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vcHJpdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vcHJpdi5jPTExOTA9c3RhdGljIHZvaWQgX2Vzc2FfY2xlYXJfY2JybChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmNicmwsIGludCBsZW4pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjE1LVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEyMTY6c3RhdGljIGludCBoYW5kbGVfZXNzYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTIxNy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz0xMjgyPWludCBrdm1fczM5MF9oYW5kbGVfYjkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5MS1cXHRjYXNlIDB4YWI6XFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTI5MjpcXHRcXHRyZXR1cm4gaGFuZGxlX2Vzc2EodmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5My1cXHRjYXNlIDB4YWY6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE2OjI5OjI1LjMwNzQxODE2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTQzOTk3NjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqQXNzZXNzbWVudCBvZiBGb2N1cyBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aGVzZSBsb29rIGxpa2UgcHJvbWlzaW5nIGZvY3VzIGZ1bmN0aW9ucy4gU2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0IHRvIG5hcnJvd2luZyBkb3duIHRoZSBhcmVhIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJdCdzIGEgY2xlYW4gd2F5IHRvIGRpcmVjdCB0aGUgZXhhbWluYXRpb24uXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLiBJIHRoaW5rIGEgZ29vZCBuZXh0IHN0ZXAgd291bGQgYmUgdG8gZHJpbGwgZG93biBhbmQgY2hlY2sgb3V0IGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgLiBUaGF0IGZ1bmN0aW9uJ3MgbGlrZWx5IHRvIHJldmVhbCBzb21lIGludGVyZXN0aW5nIGRldGFpbHMgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIHdvdWxkIG9mZmVyIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0b3dhcmQgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTEzNywiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE2OjI5OjM1Ljg1MTQxOTI1MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM1MzgzMTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX3NldF9tZW1fY29udHJvbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTk3ND1zdGF0aWMgaW50IGt2bV9zMzkwX2dldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtOTkyLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo5OTM6c3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy05OTQte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIwMTA9c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjAxNS1cXHRjYXNlIEtWTV9TMzkwX1ZNX01FTV9DVFJMOlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMDE2OlxcdFxcdHJldCA9IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChrdm0sIGF0dHIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDE3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjoyOTozNi4xODY4MDkzNzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc3OTQ4Mzk1MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0vczM5MCBNaWdyYXRpb24gQ29kZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGNsdWUgaXMgdGhhdCB0aGlzIGNvZGUgaXMgKnN0YXRpYyogYnV0IHNvbWVob3cgYmVpbmcgaW52b2tlZCB2aWEgYGt2bV9zMzkwX3ZtX3NldF9hdHRyYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgc29tZSBzb3J0IG9mIGNvbmZpZ3VyYXRpb24gY2hhbmdlIG9yIGF0dHJpYnV0ZSBzZXR0aW5nIHRoYXQncyB0cmlnZ2VyaW5nIHRoaXMgYmVoYXZpb3IsIHdoaWNoIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kLiBPZnRlbiBzdGF0aWMgZnVuY3Rpb25zIGFyZSBjb250YWluZWQgd2l0aGluIHRoZWlyIGZpbGUgYW5kIHRoaXMgaW1wbGllcyBpdCBpcyBvbmx5IHVzZWQgbG9jYWxseS5cblxuTXkgbmV4dCBsaW5lIG9mIHRob3VnaHQsIGJlaW5nIHRoYXQgdGhpcyBpcyBhYm91dCBtaWdyYXRpb24sIGlzIHRvIHplcm8gaW4gb24gdGhlIHN0YXJ0IGFuZCBzdG9wIHByb2Nlc3Nlcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gIGFuZCBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLiBUaG9zZSB3aWxsIGxpa2VseSBiZSB0aGUgZW50cnkgYW5kIGV4aXQgcG9pbnRzLCBvciBhdCBsZWFzdCB0aGUga2V5IGZ1bmN0aW9ucyBjb29yZGluYXRpbmcgdGhlIHdob2xlIG9wZXJhdGlvbi4gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIGFuZCBob3cgdGhlIHN0YXRpYyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWlncmF0aW9uIGZsb3cg4oCTIGlzIGl0IGEgc2V0dXAgc3RlcCwgYSBjbGVhbnVwIHJvdXRpbmUsIG9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIHRvIHRoZSBtaWdyYXRpb24gcHJvY2VzcyBpdHNlbGY/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0J3MgYWZmZWN0aW5nIGR1cmluZyB0aGUgc3RhcnQgYW5kIGVuZCBvZiBtaWdyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzE0LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6Mjk6NTMuOTgxNjUzMzIxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU3NjEyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTIwOD1zdGF0aWMgdm9pZCBrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KHN0cnVjdCBrdm0gKmt2bSwgaW50IHJlcSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjIwLSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjIxOnN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIyMi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI1MS0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyBhbmRcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTI1MjogKiBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24uXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNTMtICovXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTI2NT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNzItXFx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT05fU1RBUlQ6XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEyNzM6XFx0XFx0cmVzID0ga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKGt2bSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNzQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE2OjI5OjU0LjEwNzQyMDI1OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTMxNjYzMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTWlncmF0aW9uIElzc3VlKipcblxuQWxyaWdodCwgdGhpcyBsb29rcyBsaWtlIGl0J3MgY29taW5nIGZyb20gYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLiBPa2F5LCBzbyBpdCdzIGEgKnN0YXRpYyogY2FsbCwgd2hpY2ggc3VnZ2VzdHMgaXQncyBsaWtlbHkgYSB0YXJnZXRlZCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgZm9yIG1pZ3JhdGlvbiBzZXR1cCBvbiB0aGlzIFMzOTAgYXJjaGl0ZWN0dXJlLiBNYWtlcyBzZW5zZS5cblxuSSBuZWVkIHRvIGRpdmUgZGVlcGVyLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXIgLSBsZXQncyBpbW1lZGlhdGVseSBsb29rIGludG8gYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIGNydWNpYWwgYml0cyByZWxhdGVkIHRvIHRoZSBDaGFubmVsIE1hbmFnZW1lbnQgTWVtb3J5IEFyZWEgKENNTUEpLCB3aGljaCBhcmUgYWJzb2x1dGVseSBmdW5kYW1lbnRhbCBmb3IgYSBzbW9vdGggbWlncmF0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gaGFwcGVucywgd2hlcmUgdGhlIFZNIGlzIGNvbmZpZ3VyZWQgdG8gYmUgbW92ZWQgLSBvciBjb25maWd1cmVkIHRvIGJlIHJlYWR5IHRvIGJlIG1vdmVkLiBJJ20gaG9waW5nIHRoaXMgaXMgd2hlcmUgdGhlIGVycm9yIGxpZXMuIEknbGwgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTQ4LCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6MzA6MDAuMjM5MDg5MzI4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzU0MTI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9zZXRfY21tYV9iaXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjI1Nz1zdGF0aWMgaW50IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIzMTMtICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIzMTQ6c3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjMxNS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBrdm1fczM5MF9jbW1hX2xvZyAqYXJncylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yODkyPWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTg0LVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI5ODU6XFx0XFx0ciA9IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoa3ZtLCBcXHUwMDI2YXJncyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5ODYtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxNjozMDowMC4zMTI2NDM5NDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIwMzU1NjY3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTS9zMzkwIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBga3ZtX2FyY2hfdm1faW9jdGxgIGZ1bmN0aW9uLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggaW9jdGxzLiBUaGF0IG5hcnJvd3MgdGhlIHNjb3BlIGNvbnNpZGVyYWJseS4gSSdtIHNlZWluZyBjaGFuZ2VzIHJlbGF0ZWQgdG8gQ01NQSwgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIGFuZCBWTSBtaWdyYXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cbkZpcnN0LCBJIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgZGlyZWN0bHkgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMgdG8gbG9vayBhdCBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgLCBidXQgdGhhdCdzIGEgYml0IHRvbyBnZW5lcmljLiBJdCdzIGJldHRlciB0byB6ZXJvIGluIG9uIG1vcmUgdGFyZ2V0ZWQgZW50cnkgcG9pbnRzIGZvciB0aGUgZnV6emVyLiBTbywgSSBsb29rZWQgZm9yIHRoZSBkaXJlY3QgZnVuY3Rpb25zLlxuXG5JIGNhbiBtYWtlIGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgIGEgY2VudHJhbCBzdGFydGluZyBwb2ludCwgZXNwZWNpYWxseSBzaW5jZSBzeXprYWxsZXIgaXMgYmV0dGVyIHdpdGggZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBpbmxpbmVkLCBhbmQgdGhpcyBvbmUgaXMgbGlrZWx5IHRvIGJlIGxhcmdlIGVub3VnaCB0byBhdm9pZCBiZWluZyBpbmxpbmVkLiBJIGFtIGNoZWNraW5nIGlmIGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgIGlzIGlubGluZWQgYXMgaXQgaXMgbW9yZSB0aGFuIDEwMCBsaW5lcy4gU2FtZSB3aXRoIGBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25gIGFuZCBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLlxuXG5UaGUgZnVsbCBsaXN0IEkndmUgY29tZSB1cCB3aXRoIGlzOiBga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sYCwgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYGRhdF9wZWVrX2NtbWFgLCBgZGF0X2dldF9jbW1hYCwgYGdtYXBfc2V0X2NtbWFfYWxsX2RpcnR5YCwgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAsIGBoYW5kbGVfc3NrZWAsIGBoYW5kbGVfcGZtZmAsIGBoYW5kbGVfZXNzYWAsIGFuZCBgZ21hcF9oZWxwZXJfdHJ5X3NldF9wdGVfdW51c2VkYC5cblxuSSdtIG1ha2luZyBzdXJlIHRvIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSW4gdGhpcyBjYXNlLCBgS1ZNYCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWcuXG5cbk15IHJlYXNvbmluZyBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcyBLVk0vczM5MCBpbiBhcmVhcyB0aGF0IGRlYWwgd2l0aCBDTU1BLCBwYWdlIHRhYmxlcywgYW5kIFZNIG1pZ3JhdGlvbi4gVGhlc2UgYXJlIGFsbCBjcml0aWNhbCBhcmVhcy4gV2UgbmVlZCB0byBmdXp6IHRoZXNlIGZ1bmN0aW9ucyB0byBtYWtlIHN1cmUgdGhpbmdzIGFyZSB3b3JraW5nIGNvcnJlY3RseS4gQW55IGZsYXdzIG9yIHJlZ3Jlc3Npb24gdGhhdCBvY2N1ciBoZXJlIGNvdWxkIGNhdXNlIHNldmVyZSBpc3N1ZXMgaW4gdmlydHVhbGl6YXRpb24uIFNvLCBmdXp6aW5nIHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgYmUgaGlnaCBwcmlvcml0eS5cblxuSSBhbHNvIGNvbnNpZGVyZWQgYGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbGAsIHdoaWNoICppcyogc3RhdGljLCBidXQgc3l6a2FsbGVyIGhhbmRsZXMgc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGUgc3ltYm9sIHRhYmxlLCBzbyBJJ2xsIGluY2x1ZGUgaXQuXG5cbkkgZGlkIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBtb2RpZmllZCBmaWxlcyBhbmQgZnVuY3Rpb25zLiBJIGFtIHRyeWluZyB0byBmb2N1cyB0aGUgZnV6emluZyBvbiB0aGUgY2hhbmdlZCBmdW5jdGlvbnMsIHdoaWNoIGFyZSBtb3N0IGxpa2VseSB0byBpbnRyb2R1Y2UgYSBidWcgb3IgZXhoaWJpdCByZWdyZXNzaW9uLiBJbiBvcmRlciB0byBhdm9pZCBwb3RlbnRpYWwgZmFsc2UgcG9zaXRpdmVzIGZyb20gdmVyeSBmcmVxdWVudGx5IGFjY2Vzc2VkIGNvZGUsIEkgYW0gc2tpcHBpbmcgYHNldF9wdGVgIGFuZCBgc2V0X3B0ZXNgLlxuSSB3aWxsIGZvY3VzIG9uOiBgZGF0X3BlZWtfY21tYWAsIGBkYXRfZ2V0X2NtbWFgLCBgZ21hcF9jbGVhcl95b3VuZ19jcnN0ZWAsIGBfX3NldF9jbW1hX2RpcnR5X3B0ZWAsIGBnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eWAsIGBnbWFwX3Byb3RlY3RfYXNjZV90b3BfbGV2ZWxgLCBga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sYCwgYGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbmAsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYGhhbmRsZV9zc2tlYCwgYGhhbmRsZV9wZm1mYCwgYGhhbmRsZV9lc3NhYCwgYW5kIGBnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRgLlxuXG5JJ20gY29uZmlkZW50IHRoYXQgdGhpcyBjb3ZlcnMgdGhlIG1vc3QgY3JpdGljYWwgcGFydHMgb2YgdGhpcyBwYXRjaCwgc28gSSdsbCBzZXQgdGhlIHJlc3VsdHMgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjA5LCJPdXRwdXRUb2tlbnMiOjI4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTY6MzA6MjIuMzQ4MjE3MTg5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxODg2NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXRfcGVla19jbW1hXCIsXG4gICAgXCJkYXRfZ2V0X2NtbWFcIixcbiAgICBcImdtYXBfY2xlYXJfeW91bmdfY3JzdGVcIixcbiAgICBcIl9fc2V0X2NtbWFfZGlydHlfcHRlXCIsXG4gICAgXCJnbWFwX3NldF9jbW1hX2FsbF9kaXJ0eVwiLFxuICAgIFwiZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsXCIsXG4gICAgXCJrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xcIixcbiAgICBcImt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvblwiLFxuICAgIFwia3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25cIixcbiAgICBcImt2bV9zMzkwX3NldF9jbW1hX2JpdHNcIixcbiAgICBcImhhbmRsZV9zc2tlXCIsXG4gICAgXCJoYW5kbGVfcGZtZlwiLFxuICAgIFwiaGFuZGxlX2Vzc2FcIixcbiAgICBcImdtYXBfaGVscGVyX3RyeV9zZXRfcHRlX3VudXNlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgaGFuZGxpbmcgb2YgQ29sbGFib3JhdGl2ZSBNZW1vcnkgTWFuYWdlbWVudCBBc3Npc3QgKENNTUEpLCBwYWdlIHRhYmxlIHVwZGF0ZXMsIGFuZCBWTSBtaWdyYXRpb24uIEl0IGZpeGVzIGJ1Z3MgaW4gQ01NQSBzdGF0ZSBoYW5kbGluZywgZGlydHkgcGFnZSB0cmFja2luZywgYW5kIG1lbW9yeSBjb250cm9sIGlvY3Rscy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIEtWTSBjb3JlIGxvZ2ljIGFuZCBpbnN0cnVjdGlvbiBoYW5kbGVycywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gZmVhdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF0X3BlZWtfY21tYVwiLFxuICAgIFwiZGF0X2dldF9jbW1hXCIsXG4gICAgXCJnbWFwX2NsZWFyX3lvdW5nX2Nyc3RlXCIsXG4gICAgXCJfX3NldF9jbW1hX2RpcnR5X3B0ZVwiLFxuICAgIFwiZ21hcF9zZXRfY21tYV9hbGxfZGlydHlcIixcbiAgICBcImdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbFwiLFxuICAgIFwia3ZtX3MzOTBfc2V0X21lbV9jb250cm9sXCIsXG4gICAgXCJrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb25cIixcbiAgICBcImt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uXCIsXG4gICAgXCJrdm1fczM5MF9zZXRfY21tYV9iaXRzXCIsXG4gICAgXCJoYW5kbGVfc3NrZVwiLFxuICAgIFwiaGFuZGxlX3BmbWZcIixcbiAgICBcImhhbmRsZV9lc3NhXCIsXG4gICAgXCJnbWFwX2hlbHBlcl90cnlfc2V0X3B0ZV91bnVzZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBLVk0gc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIENvbGxhYm9yYXRpdmUgTWVtb3J5IE1hbmFnZW1lbnQgQXNzaXN0IChDTU1BKSwgcGFnZSB0YWJsZSB1cGRhdGVzLCBhbmQgVk0gbWlncmF0aW9uLiBJdCBmaXhlcyBidWdzIGluIENNTUEgc3RhdGUgaGFuZGxpbmcsIGRpcnR5IHBhZ2UgdHJhY2tpbmcsIGFuZCBtZW1vcnkgY29udHJvbCBpb2N0bHMuIFRoZXNlIGFyZSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBLVk0gY29yZSBsb2dpYyBhbmQgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zIGluIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhgbfs[1] Phase: Succeeded StartedAt: 2026-06-22 16:30:34 +0000 UTC FinishedAt: 2026-06-22 16:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-22 16:30:34 +0000 UTC FinishedAt: 2026-06-22 16:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2] Phase: Succeeded StartedAt: 2026-06-22 16:30:34 +0000 UTC FinishedAt: 2026-06-22 17:28:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-22 16:30:34 +0000 UTC FinishedAt: 2026-06-22 17:28:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-22 16:30:34 +0000 UTC FinishedAt: 2026-06-22 16:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-22 16:30:34 +0000 UTC FinishedAt: 2026-06-22 16:30:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-convert-artifact-966575925/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-22 16:30:44 +0000 UTC FinishedAt: 2026-06-22 16:54:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-22 16:30:44 +0000 UTC FinishedAt: 2026-06-22 16:54:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*883dc582-3cdd-42f0-821a-6c60b7067dee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-convert-artifact-966575925/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "6ccfe154-73bb-4611-81cd-3301799867d5", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-build-action-2399830811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-22 16:30:44 +0000 UTC FinishedAt: 2026-06-22 16:54:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*883dc582-3cdd-42f0-821a-6c60b7067dee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-convert-artifact-966575925/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "6ccfe154-73bb-4611-81cd-3301799867d5", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-build-action-2399830811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-22 16:54:58 +0000 UTC FinishedAt: 2026-06-22 16:54:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-22 16:54:58 +0000 UTC FinishedAt: 2026-06-22 16:54:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-22 16:54:58 +0000 UTC FinishedAt: 2026-06-22 16:56:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-22 16:54:58 +0000 UTC FinishedAt: 2026-06-22 16:55:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-convert-artifact-1568715408/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-22 16:56:46 +0000 UTC FinishedAt: 2026-06-22 16:58:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-22 16:56:46 +0000 UTC FinishedAt: 2026-06-22 16:58:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6ccfe154-73bb-4611-81cd-3301799867d5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-build-action-2399830811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-22 16:58:47 +0000 UTC FinishedAt: 2026-06-22 16:58:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-22 16:58:47 +0000 UTC FinishedAt: 2026-06-22 16:58:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-22 16:58:47 +0000 UTC FinishedAt: 2026-06-22 17:22:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-22 16:58:47 +0000 UTC FinishedAt: 2026-06-22 17:22:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*883dc582-3cdd-42f0-821a-6c60b7067dee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-convert-artifact-1568715408/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "dfc70ff6-80b5-40c0-b670-d0db753c0fcf", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-build-action-1879486220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-22 16:58:47 +0000 UTC FinishedAt: 2026-06-22 17:22:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*883dc582-3cdd-42f0-821a-6c60b7067dee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-convert-artifact-1568715408/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "dfc70ff6-80b5-40c0-b670-d0db753c0fcf", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-build-action-1879486220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-22 17:22:31 +0000 UTC FinishedAt: 2026-06-22 17:22:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-22 17:22:31 +0000 UTC FinishedAt: 2026-06-22 17:22:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-22 17:22:31 +0000 UTC FinishedAt: 2026-06-22 17:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-22 17:22:31 +0000 UTC FinishedAt: 2026-06-22 17:24:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dfc70ff6-80b5-40c0-b670-d0db753c0fcf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-build-action-1879486220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-22 17:24:28 +0000 UTC FinishedAt: 2026-06-22 17:28:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-22 17:24:28 +0000 UTC FinishedAt: 2026-06-22 17:28:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*6ccfe154-73bb-4611-81cd-3301799867d5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dfc70ff6-80b5-40c0-b670-d0db753c0fcf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-build-action-2399830811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-build-action-1879486220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-22 17:24:28 +0000 UTC FinishedAt: 2026-06-22 17:25:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-22 17:24:28 +0000 UTC FinishedAt: 2026-06-22 17:25:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-convert-artifact-4218025097/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-22 17:24:28 +0000 UTC FinishedAt: 2026-06-22 17:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-22 17:24:28 +0000 UTC FinishedAt: 2026-06-22 17:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-22 17:24:28 +0000 UTC FinishedAt: 2026-06-22 17:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-22 17:25:52 +0000 UTC FinishedAt: 2026-06-22 17:28:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgbfs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_peek_cmma","dat_get_cmma","gmap_clear_young_crste","__set_cmma_dirty_pte","gmap_set_cmma_all_dirty","gmap_protect_asce_top_level","kvm_s390_set_mem_control","kvm_s390_vm_start_migration","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","handle_sske","handle_pfmf","handle_essa","gmap_helper_try_set_pte_unused"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef057cbf825e03b63f6edf5980f96abf3c53089d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"8ffdef2f-676c-46e3-a410-7ce0e857da7c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-22 17:25:52 +0000 UTC FinishedAt: 2026-06-22 17:28:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6ccfe154-73bb-4611-81cd-3301799867d5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dfc70ff6-80b5-40c0-b670-d0db753c0fcf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-build-action-2399830811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-build-action-1879486220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhgbfs/series-workflowhgbfs-convert-artifact-4218025097/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}